Função FltAllocateExtraCreateParameter (fltkernel.h)

A rotina FltAllocateExtraCreateParameter aloca o pool de memória paginada para uma estrutura de contexto ECP (parâmetro de criação extra) definida pelo usuário e gera um ponteiro para essa estrutura.

Sintaxe

NTSTATUS FLTAPI FltAllocateExtraCreateParameter(
  [in]           PFLT_FILTER                                    Filter,
  [in]           LPCGUID                                        EcpType,
  [in]           ULONG                                          SizeOfContext,
  [in]           FSRTL_ALLOCATE_ECP_FLAGS                       Flags,
  [in, optional] PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK CleanupCallback,
  [in]           ULONG                                          PoolTag,
  [out]          PVOID                                          *EcpContext
);

Parâmetros

[in] Filter

Ponteiro de filtro opaco para o driver de minifiltro. Esse ponteiro identifica exclusivamente o driver de minifiltro e permanece constante desde que o driver de minifiltro seja carregado.

[in] EcpType

Ponteiro para um GUID definido pelo usuário que indica o tipo da estrutura de contexto ECP. Consulte Usando GUIDs em drivers para obter mais informações.

[in] SizeOfContext

O tamanho, em bytes, da estrutura de contexto definida pelo usuário.

[in] Flags

Define as opções de alocação do pool. O seguinte descreve como o pool será alocado quando um ou mais dos valores de sinalizador listados forem combinados com o parâmetro Flags usando uma operação OR bit a bit:

  • FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL – o pool não paginado será alocado. Se esse valor de sinalizador não for usado, o pool paginado será alocado.

  • FSRTL_ALLOCATE_ECPLIST_FLAG_CHARGE_QUOTA - Todo o pool alocado por essa rotina será cobrado em relação à cota de memória do processo atual.

Se mais de um sinalizador for usado, todos os efeitos associados aos valores de sinalizador utilizados ocorrerão.

[in, optional] CleanupCallback

Ponteiro opcional para uma rotina de retorno de chamada de limpeza definida por minifiltro do tipo PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK. A rotina de retorno de chamada de limpeza é chamada quando a estrutura ECP (criada pela rotina FltAllocateExtraCreateParameter ) é excluída. Defina esse parâmetro como NULL se uma rotina de retorno de chamada de limpeza não for aplicável.

[in] PoolTag

Especifica a marca de pool para a memória alocada. Para obter mais informações, consulte o parâmetro Tag de ExAllocatePoolWithTag.

[out] EcpContext

Recebe um ponteiro para a estrutura de contexto ECP alocada. Se a rotina não conseguir alocar pool suficiente, *EcpContext será NULL e a rotina retornará status código STATUS_INSUFFICIENT_RESOURCES.

Retornar valor

FltAllocateExtraCreateParameter pode retornar um dos seguintes valores:

Código de retorno Descrição
STATUS_INSUFFICIENT_RESOURCES FltAllocateExtraCreateParameter não pôde alocar memória suficiente para uma estrutura ECP. Nesse caso, EcpContext será NULL.
STATUS_SUCCESS A estrutura ECP foi alocada com êxito. Nesse caso, um ponteiro para a estrutura alocada é retornado no parâmetro EcpContext .

Comentários

Por padrão, a rotina FltAllocateExtraCreateParameter aloca o pool de memória paginada para uma estrutura de contexto ECP definida pelo usuário. Se o FSRTL_ALLOCATE_ECP_FLAG_NONPAGED_POOL bitmask for usado conforme descrito acima, um pool de memória não paginado será alocado. Depois que esse pool tiver sido alocado e a estrutura de contexto ECP tiver sido inicializada, a rotina FltInsertExtraCreateParameter será usada para inserir a estrutura de contexto ECP (elemento de lista ECP) em uma estrutura de lista ECP (lista ECP).

O pool de memória alocado pela rotina FltAllocateExtraCreateParameter não é liberado automaticamente pelo sistema operacional. Esse pool de memória deve eventualmente ser liberado usando um dos seguintes métodos:

  • Chame a rotina FltRemoveExtraCreateParameter para remover a estrutura de contexto ECP da lista ECP e, em seguida, chame a rotina FltFreeExtraCreateParameter para liberar a própria estrutura de contexto ECP. A lista ECP permanece existente.

  • Chame a rotina FltFreeExtraCreateParameterList – isso libera a lista ECP, incluindo quaisquer elementos de lista (estruturas de contexto ECP). A lista de ECP é destruída.

    No entanto, se um sistema de arquivos ou driver de filtro do sistema de arquivos anexar um ECP a um ECP_LIST existente ou recém-criado durante o processamento de uma solicitação de IRP_MJ_CREATE, esse ECP será limpo automaticamente quando o IRP for concluído. Como resultado, um driver de filtro não precisa limpo ECPs adicionados dinamicamente. Isso permite que o ECP de um driver de filtro seja propagado corretamente entre os pontos de nova análise – um processo que pode exigir que várias solicitações de IRP_MJ_CREATE sejam geradas.

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
IRQL <= APC_LEVEL

Confira também

ECP_LIST

FltAllocateExtraCreateParameterFromLookasideList

FltAllocateExtraCreateParameterList

FltCreateFileEx2

FltFreeExtraCreateParameter

FltFreeExtraCreateParameterList

FltGetEcpListFromCallbackData

FltInsertExtraCreateParameter

FltRemoveExtraCreateParameter

FltSetEcpListIntoCallbackData

IoCreateFileEx

PFSRTL_EXTRA_CREATE_PARAMETER_CLEANUP_CALLBACK