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

Confira também

FS_FILTER_CALLBACK_DATA

FsRtlRegisterFileSystemFilterCallbacks