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á passado 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 for NULL.
A5
Defina como TRUE se todos os subdiretórios desse diretório também devem ser observados. Defina como FALSE se apenas o próprio diretório deve ser observado. Ignorado se NotifyIrp for 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 for 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 possíveis valores de sinalizador são descritos a seguir.
Sinalizador | 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 do último acesso desse 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 for NULL.
A8
Um ponteiro para o IRP a ser concluído ao notificar a alteraçã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 marcar se o observador tem acesso ao 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á ignorado se NotifyIrp for 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 for NULL. Se uma rotina TraverseCallback for fornecida, SubjectContext será passado como o parâmetro SubjectContext para essa rotina.
Retornar valor
Nenhum
Comentários
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 for NULL, FsRtlNotifyFullChangeDirectory verificará se a lista de notificação contém um IRP pendente que se refere a esse objeto de arquivo e, se for o caso, o concluirá com STATUS_DELETE_PENDING.
Se NotifyIrp não for NULL, FsRtlNotifyFullChangeDirectory fará o seguinte:
- Verifica se o objeto de arquivo passou por limpeza. Nesse caso, FsRtlNotifyFullChangeDirectory conclui a notificação do IRP com status STATUS_NOTIFY_CLEANUP.
- Se o objeto de arquivo não tiver passado por limpeza, FsRtlNotifyFullChangeDirectory verificará se a lista de notificação para esse volume já contém uma estrutura de notificação para essa alteração. Nesse caso, FsRtlNotifyFullChangeDirectory conclui 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 |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | rxprocs.h (inclua Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | PASSIVE_LEVEL |
Regras de conformidade da DDI | HwStorPortProhibitedDDIs(storport), PowerIrpDDis(wdm) |