estrutura FS_FILTER_CALLBACKS (ntifs.h)
A estrutura FS_FILTER_CALLBACKS contém os pontos de entrada das rotinas de retorno de chamada de notificação fornecidas pelo chamador.
Sintaxe
typedef struct _FS_FILTER_CALLBACKS {
ULONG SizeOfFsFilterCallbacks;
ULONG Reserved;
PFS_FILTER_CALLBACK PreAcquireForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForSectionSynchronization;
PFS_FILTER_CALLBACK PreReleaseForSectionSynchronization;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForSectionSynchronization;
PFS_FILTER_CALLBACK PreAcquireForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForCcFlush;
PFS_FILTER_CALLBACK PreReleaseForCcFlush;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForCcFlush;
PFS_FILTER_CALLBACK PreAcquireForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostAcquireForModifiedPageWriter;
PFS_FILTER_CALLBACK PreReleaseForModifiedPageWriter;
PFS_FILTER_COMPLETION_CALLBACK PostReleaseForModifiedPageWriter;
PFS_FILTER_CALLBACK PreQueryOpen;
PFS_FILTER_COMPLETION_CALLBACK PostQueryOpen;
} FS_FILTER_CALLBACKS, *PFS_FILTER_CALLBACKS;
Membros
SizeOfFsFilterCallbacks
Tamanho dessa estrutura, em bytes. Defina como sizeof(FS_FILTER_CALLBACKS)
. SizeOfFsFilterCallbacks não deve ser definido como zero.
Reserved
Reservado. Não use.
PreAcquireForSectionSynchronization
Ponteiro para um FS_FILTER_CALLBACK rotina PreAcquireForSectionSynchronization .
PostAcquireForSectionSynchronization
Ponteiro para um FS_FILTER_CALLBACK rotina PostAcquireForSectionSynchronization .
PreReleaseForSectionSynchronization
Ponteiro para um FS_FILTER_CALLBACK rotina PreReleaseForSectionSynchronization .
PostReleaseForSectionSynchronization
Ponteiro para um FS_FILTER_CALLBACK rotina PostReleaseForSectionSynchronization .
PreAcquireForCcFlush
Ponteiro para um FS_FILTER_CALLBACK rotina PreAcquireForCcFlush .
PostAcquireForCcFlush
Ponteiro para um FS_FILTER_CALLBACK rotina PostAcquireForCcFlush .
PreReleaseForCcFlush
Ponteiro para um FS_FILTER_CALLBACK rotina PreReleaseForCcFlush .
PostReleaseForCcFlush
Ponteiro para um FS_FILTER_CALLBACK rotina PostReleaseForCcFlush .
PreAcquireForModifiedPageWriter
Ponteiro para um FS_FILTER_CALLBACK rotina PreAcquireForModifiedPageWriter .
PostAcquireForModifiedPageWriter
Ponteiro para um FS_FILTER_CALLBACK rotina PostAcquireForModifiedPageWriter .
PreReleaseForModifiedPageWriter
Ponteiro para um FS_FILTER_CALLBACK rotina PreReleaseForModifiedPageWriter .
PostReleaseForModifiedPageWriter
Ponteiro para um FS_FILTER_CALLBACK a rotina PostReleaseForModifiedPageWriter .
PreQueryOpen
Ponteiro para um FS_FILTER_CALLBACK rotina PreQueryOpen .
PostQueryOpen
Ponteiro para um FS_FILTER_CALLBACK rotina PostQueryOpen .
Comentários
Os drivers de filtro do sistema de arquivos e os sistemas de arquivos chamam a rotina FsRtlRegisterFileSystemFilterCallbacks para registrar rotinas de retorno de chamada de notificação a serem invocadas quando o sistema de arquivos subjacente executa determinadas operações.
Todos os pontos de entrada de retorno de chamada são opcionais e podem ser NULL.
A rotina de retorno de chamada de filtro FS_FILTER_CALLBACK e seus parâmetros são definidos da seguinte maneira:
typedef
NTSTATUS (*PFS_FILTER_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
OUT PVOID *CompletionContext
);
Parâmetro | Significado |
---|---|
Dados | Ponteiro para a estrutura de FS_FILTER_CALLBACK_DATA para essa operação. |
CompletionContext | Informações de contexto a serem passadas para a rotina de retorno de chamada de conclusão do filtro. Defina como NULL se nenhuma informação de contexto deve ser passada ou se não houver uma rotina de retorno de chamada de conclusão de filtro correspondente. |
A rotina de retorno de chamada de conclusão de filtro FS_FILTER_COMPLETION_CALLBACK e seus parâmetros são definidos da seguinte maneira:
typedef
VOID (*PFS_FILTER_COMPLETION_CALLBACK) (
IN PFS_FILTER_CALLBACK_DATA Data,
IN NTSTATUS OperationStatus,
IN PVOID CompletionContext
);
Parâmetro | Significado |
---|---|
Dados | Ponteiro para a estrutura de FS_FILTER_CALLBACK_DATA para essa operação. |
OperationStatus | Status da operação. Se o sistema de arquivos tiver executado a operação com êxito, esse parâmetro será definido como STATUS_SUCCESS. Caso contrário, ele será definido como um erro apropriado status valor. |
CompletionContext | Informações de contexto que foram definidas na rotina de retorno de chamada de filtro. Isso será definido como NULL se nenhuma informação for passada ou se não houver uma rotina de retorno de chamada de filtro correspondente. |
As rotinas de retorno de chamada são definidas para as seguintes operações:
Operação | Rotinas de retorno de chamada de notificação |
---|---|
O gerenciador de memória adquire um arquivo exclusivamente antes de criar uma seção mapeada em memória para uma parte do arquivo. Para essa operação, SyncType é definido como SyncTypeCreateSection. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization |
O gerenciador de memória libera um arquivo depois de criar uma seção mapeada em memória para uma parte do arquivo. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
Um componente de kernel (como o gerenciador de cache) adquire um arquivo exclusivamente antes de desabilitar temporariamente a criação da seção para uma parte do arquivo. Para essa operação, SyncType é definido como SyncTypeOther. | PreAcquireForSectionSynchronization, PostAcquireForSectionSynchronization. PreAcquireForSectionSynchronization sempre deve retornar um código de status de êxito (como STATUS_SUCCESS) para essa operação. |
Um componente de kernel (como o gerenciador de cache) libera um arquivo depois de desabilitar temporariamente a criação da seção para uma parte do arquivo. | PreReleaseForSectionSynchronization, PostReleaseForSectionSynchronization |
O gerenciador de cache adquire um arquivo exclusivamente antes de liberar uma parte do arquivo do cache. | PreAcquireForCcFlush, PostAcquireForCcFlush |
O gerenciador de cache libera um arquivo depois de liberar uma parte do arquivo do cache. | PreReleaseForCcFlush, PostReleaseForCcFlush |
O gravador de página modificado adquire um arquivo exclusivamente antes de gravar uma parte do arquivo no disco. | PreAcquireForModifiedPageWriter, PostAcquireForModifiedPageWriter |
O gravador de página modificado libera um arquivo depois de gravar uma parte do arquivo no disco. | PreReleaseForModifiedPageWriter, PostReleaseForModifiedPageWriter |
Um componente consulta informações de arquivo por nome sem abrir o arquivo. Os redirecionadores nunca serão chamados com essa consulta e, portanto, não precisam implementar retornos de chamada PreQueryOpen ou PostQueryOpen. | PreQueryOpen, PostQueryOpen |
A rotina de retorno de chamada de notificação de filtro é invocada antes que a solicitação de operação seja passada para drivers de filtro de nível inferior e para o sistema de arquivos subjacente. Na rotina de retorno de chamada, o driver de filtro deve executar qualquer processamento necessário e retornar imediatamente STATUS_SUCCESS. Se a rotina de retorno de chamada de um driver de filtro retornar um valor de status diferente de STATUS_SUCCESS, isso fará com que a solicitação de operação falhe. A falha repetida de determinadas solicitações, como solicitações de bloqueio, pode interromper o progresso do sistema. Portanto, os drivers de filtro devem falhar em tal solicitação somente quando absolutamente necessário. Ao falhar nessas solicitações, o driver de filtro deve retornar um erro status valor que descreva o erro da forma mais completa e precisa possível.
Observação
A rotina de retorno de chamada de notificação de um driver de filtro não pode falhar em uma solicitação para liberar um recurso do sistema de arquivos. Se um driver de filtro retornar um valor status diferente de STATUS_SUCCESS de qualquer uma das rotinas de retorno de chamada de notificação a seguir, o valor status será ignorado.
- PreReleaseForSectionSynchronization
- PreReleaseForCcFlush
- PreReleaseForModifiedPageWriter
A rotina de retorno de chamada de conclusão do filtro é invocada depois que a solicitação de operação é passada para drivers de filtro de nível inferior e para o sistema de arquivos subjacente. Na rotina de retorno de chamada de conclusão, o driver de filtro deve executar qualquer processamento necessário e retornar imediatamente.
Requisitos
Requisito | Valor |
---|---|
Cabeçalho | ntifs.h |