Usando ECPs para processar operações de IRP_MJ_CREATE em um driver de filtro do sistema de arquivos

Você pode usar parâmetros de criação extra (ECPs) no driver de filtro do sistema de arquivos para processar operações de IRP_MJ_CREATE . O driver de filtro do sistema de arquivos pode chamar as rotinas nas seções a seguir para recuperar, definir (adicionar), reconhecer e remover ECPs para a operação de IRP_MJ_CREATE . Você também pode determinar o espaço do sistema operacional do qual os ECPs se originaram.

Recuperando ECPs

Para recuperar ECPs para a operação de IRP_MJ_CREATE :

  1. Chame FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) para recuperar um ponteiro para o ECP_LIST associado à operação de criação.

  2. Execute uma das seguintes operações:

Configurando ECPs

Para definir os ECPs para a operação de IRP_MJ_CREATE , o driver de filtro do sistema de arquivos:

  • Defina ECPs em um ECP_LIST existente.

  • Defina ECPs em um ECP_LIST recém-criado.

Configurando ECPs em um ECP_LIST existente

Para definir ECPs em um ECP_LISTexistente associado à operação de criação:

  1. Chame FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) para recuperar um ponteiro para o ECP_LIST associado à operação de criação.

  2. Chame FltAllocateExtraCreateParameter (ou FsRtlAllocateExtraCreateParameter) para alocar o pool de memória paginada para uma estrutura de contexto ECP e gerar um ponteiro para essa estrutura.

  3. Chame FltInsertExtraCreateParameter (ou FsRtlInsertExtraCreateParameter) para inserir estruturas de contexto ECP na estrutura ECP_LIST .

Definindo ECPs em um ECP_LIST recém-criado

Se uma ECP_LIST não estiver associada à operação de criação no momento, você precisará criar uma e, em seguida, definir ECPs nela:

  1. Chame FltAllocateExtraCreateParameterList (ou FsRtlAllocateExtraCreateParameterList) para alocar memória para uma estrutura de ECP_LIST .

  2. Chame FltAllocateExtraCreateParameter (ou FsRtlAllocateExtraCreateParameter) para alocar o pool de memória paginada para uma estrutura de contexto ECP e gerar um ponteiro para essa estrutura.

  3. Chame FltInsertExtraCreateParameter (ou FsRtlInsertExtraCreateParameter) para inserir estruturas de contexto ECP no ECP_LIST.

  4. Chame FltSetEcpListIntoCallbackData (ou FsRtlSetEcpListIntoIrp) para anexar uma lista ECP à operação de criação.

Removendo ECPs

Para remover ECPs para a operação de IRP_MJ_CREATE :

  1. Chame FltRemoveExtraCreateParameter (ou FsRtlRemoveExtraCreateParameter) para pesquisar uma lista ECP para obter uma estrutura de contexto ECP. Se a estrutura de contexto ECP for encontrada, a rotina desanexa a estrutura de contexto ECP da lista ECP.

  2. Para liberar a memória da estrutura de contexto ECP desanexada, chame FltFreeExtraCreateParameter (ou FsRtlFreeExtraCreateParameter). Você pode chamar essas rotinas para liberar memória para a estrutura de contexto ECP se alocar a memória de uma das seguintes maneiras:

Marcando ECPs como reconhecidos ou determinando a confirmação status

Chame as seguintes rotinas para marcar os ECPs como confirmados ou determinar se os ECPs estão marcados como confirmados:

Determinando o modo de origem

Chame FltIsEcpFromUserMode (ou FsRtlIsEcpFromUserMode) para determinar se uma estrutura de contexto ECP se originou do modo de usuário. Um driver de filtro do sistema de arquivos pode se recusar a aceitar uma estrutura de contexto ECP originada do modo de usuário.

Usando listas lookaside para alocar ECPs

Chame as seguintes rotinas para alocar ECPs de listas lookaside e gerenciar as listas lookaside e os ECPs: