Compartilhar via


Macro FsRtlNotifyFullChangeDirectory (rxprocs.h)

A rotina FsRtlNotifyFullChangeDirectory cria uma estrutura de notificação para uma solicitação de notificação e a adiciona à lista de notificação especificada.

Sintaxe

void FsRtlNotifyFullChangeDirectory(
   A1,
   A2,
   A3,
   A4,
   A5,
   A6,
   A7,
   A8,
   A9,
   A10
);

Parâmetros

A1

Um ponteiro para um objeto de sincronização opaco para a lista de notificação do volume atual.

A2

Um ponteiro para o cabeçalho de uma lista de notificação. Cada elemento na lista é uma estrutura de notificação opaca.

A3

Um ponteiro para um valor exclusivo atribuído pelo sistema de arquivos para identificar a estrutura de notificação a ser criada como pertencente a um objeto de arquivo específico. Se uma rotina TraverseCallback for fornecida, FsContext será passada como o parâmetro NotifyContext para essa rotina.

A4

Um ponteiro para uma cadeia de caracteres ANSI ou Unicode que contém o nome completo do diretório associado a essa estrutura de notificação. Ignorado se notifyIrp estiver NULL.

A5

Defina como VERDADEIRO se todos os subdiretórios desse diretório também devem ser observados. Defina como FALSE se apenas o próprio diretório for observado. Ignorado se notifyIrp estiver NULL.

A6

Defina como TRUE para ignorar os buffers de usuário e forçar o diretório a ser reenumerado. Essa ação acelera a operação. Ignorado se notifyIrp estiver NULL.

A7

Máscara de bits de sinalizadores que especificam os tipos de alterações em arquivos ou subdiretórios que devem fazer com que a fila de IRPs de notificação pendente seja concluída. Os valores de sinalizador possíveis são descritos a seguir.

Bandeira Significado

FILE_NOTIFY_CHANGE_FILE_NAME

Um arquivo foi adicionado, excluído ou renomeado neste diretório.

FILE_NOTIFY_CHANGE_DIR_NAME

Um subdiretório foi criado, removido ou renomeado.

FILE_NOTIFY_CHANGE_NAME

O nome desse diretório foi alterado.

FILE_NOTIFY_CHANGE_ATTRIBUTES

O valor de um atributo desse arquivo, como a hora do último acesso, foi alterado.

FILE_NOTIFY_CHANGE_SIZE

O tamanho desse arquivo foi alterado.

FILE_NOTIFY_CHANGE_LAST_WRITE

A hora da última modificação desse arquivo foi alterada.

FILE_NOTIFY_CHANGE_LAST_ACCESS

A hora de acesso do último arquivo foi alterada.

FILE_NOTIFY_CHANGE_CREATION

O tempo de criação desse arquivo foi alterado.

FILE_NOTIFY_CHANGE_EA

Os atributos estendidos desse arquivo foram modificados.

FILE_NOTIFY_CHANGE_SECURITY

As informações de segurança desse arquivo foram alteradas.

FILE_NOTIFY_CHANGE_STREAM_NAME

Um fluxo de arquivos foi adicionado, excluído ou renomeado neste diretório.

FILE_NOTIFY_CHANGE_STREAM_SIZE

O tamanho desse fluxo de arquivos foi alterado.

FILE_NOTIFY_CHANGE_STREAM_WRITE

Os dados desse fluxo de arquivos foram alterados.

 

CompletionFilter será ignorado se NotifyIrp estiver NULL.

A8

Um ponteiro para o IRP a ser concluído na alteração de notificação. Se NotifyIrp for NULL, isso significa que o fluxo de arquivos representado por esse objeto de arquivo está sendo excluído.

A9

Ponteiro opcional para uma rotina de retorno de chamada a ser invocada quando ocorre uma alteração em um subdiretório sendo observado em uma árvore de diretório. Isso permite que o sistema de arquivos verifique se o observador atravessou o acesso a esse diretório. Essa rotina fornecida pelo chamador é declarada da seguinte maneira:

NTSTATUS
(*PCHECK_FOR_TRAVERSE_ACCESS) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID TargetContext,                     // Context pointer
    IN PSECURITY_SUBJECT_CONTEXT SubjectContext // SubjectContext
    );

Para obter mais informações sobre o parâmetro TargetContext, consulte o parâmetro TargetContext de FsRtlNotifyFullReportChange. TraverseCallback será ignorada se NotifyIrp estiver NULL.

A10

Um ponteiro para uma estrutura de contexto a ser passada para TraverseCallback. FsRtlNotifyFullChangeDirectory libera o contexto e libera a estrutura depois de usá-la. Ignorado se notifyIrp estiver NULL. Se uma rotina TraverseCallback for fornecida, SubjectContext será passado como o parâmetro SubjectContext para essa rotina.

Valor de retorno

Nenhum

Observações

FsRtlNotifyFullChangeDirectory é chamado por um sistema de arquivos que recebeu uma solicitação de alteração de notificação. Essa solicitação é recebida como um IRP com IRP_MJ_DIRECTORY_CONTROL de código de função principal, IRP_MN_NOTIFY_CHANGE_DIRECTORY de código de função secundária.

Se NotifyIrp estiver NULL, FsRtlNotifyFullChangeDirectory verificará se a lista de notificação contém um IRP pendente que se refere a esse objeto de arquivo e, nesse caso, o concluirá com STATUS_DELETE_PENDING.

Se NotifyIrp não estiver NULL, FsRtlNotifyFullChangeDirectory fará o seguinte:

  • Verifica se o objeto de arquivo passou por limpeza. Nesse caso, FsRtlNotifyFullChangeDirectory conclui o IRP de notificação com STATUS_NOTIFY_CLEANUP de status.
  • Se o objeto de arquivo não tiver passado por limpeza, FsRtlNotifyFullChangeDirectory verificar se a lista de notificação desse volume já contém uma estrutura de notificação para essa alteração. Nesse caso, FsRtlNotifyFullChangeDirectory concluirá todos os IRPs pendentes. Caso contrário, FsRtlNotifyFullChangeDirectory marca o IRP de notificação como pendente, cria uma estrutura de notificação e a insere na lista.

Requisitos

Requisito Valor
da Plataforma de Destino Universal
cabeçalho rxprocs.h (inclua Ntifs.h)
biblioteca NtosKrnl.lib
de DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
regras de conformidade de DDI HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm)

Consulte também

FsRtlNotifyFullReportChange

IRP_MJ_DIRECTORY_CONTROL

SECURITY_SUBJECT_CONTEXT