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 :
Chame FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) para recuperar um ponteiro para o ECP_LIST associado à operação de criação.
Execute uma das seguintes operações:
- Chame FltGetNextExtraCreateParameter (ou FsRtlGetNextExtraCreateParameter) para recuperar um ponteiro para a próxima (ou primeira) estrutura de contexto ECP na lista ECP.
- Chame FltFindExtraCreateParameter (ou FsRtlFindExtraCreateParameter) para pesquisar na lista ECP uma estrutura de contexto ECP de um determinado tipo. Qualquer rotina retorna um ponteiro para a estrutura de contexto ECP se a estrutura for encontrada.
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:
Chame FltGetEcpListFromCallbackData (ou FsRtlGetEcpListFromIrp) para recuperar um ponteiro para o ECP_LIST associado à operação de criação.
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.
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:
Chame FltAllocateExtraCreateParameterList (ou FsRtlAllocateExtraCreateParameterList) para alocar memória para uma estrutura de ECP_LIST .
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.
Chame FltInsertExtraCreateParameter (ou FsRtlInsertExtraCreateParameter) para inserir estruturas de contexto ECP no ECP_LIST.
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 :
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.
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:
- Você chamou FltAllocateExtraCreateParameter (ou FsRtlAllocateExtraCreateParameter) para alocar o pool de memória paginada
- Você chamou FltAllocateExtraCreateParameterFromLookasideList (ou FsRtlAllocateExtraCreateParameterFromLookasideList) para alocar o pool de memória de uma lista lookaside
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:
Chame FltAcknowledgeEcp (ou FsRtlAcknowledgeEcp) para marcar uma estrutura de contexto ECP conforme confirmado. O ECP pode ser marcado como examinado, usado, processado ou qualquer outra condição do ECP.
Chame FltIsEcpAcknowledged (ou FsRtlIsEcpAcknowledged) para determinar se uma estrutura de contexto ECP está marcada como confirmada.
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:
Chame FltInitExtraCreateParameterLookasideList (ou FsRtlInitExtraCreateParameterLookasideList) para inicializar uma lista lookaside de pool paginada ou não paga usada para a alocação de uma ou mais estruturas de contexto ECP de tamanho fixo.
Chame FltDeleteExtraCreateParameterLookasideList (ou FsRtlDeleteExtraCreateParameterLookasideList) para liberar a lista lookaside.
Chame FltAllocateExtraCreateParameterFromLookasideList (ou FsRtlAllocateExtraCreateParameterFromLookasideList) para alocar o pool de memória da lista lookaside para uma estrutura de contexto ECP e gerar um ponteiro para essa estrutura.
Chame FltFreeExtraCreateParameter (ou FsRtlFreeExtraCreateParameter) para liberar a memória das estruturas de contexto ECP.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de