Função FsRtlNotifyFilterChangeDirectory (ntifs.h)
FsRtlNotifyFilterChangeDirectory cria uma estrutura de notificação para uma solicitação de IRP_MN_NOTIFY_CHANGE_DIRECTORY e a adiciona à lista de notificação especificada.
Sintaxe
void FsRtlNotifyFilterChangeDirectory(
[in] PNOTIFY_SYNC NotifySync,
[in] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in, optional] PIRP NotifyIrp,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
Parâmetros
[in] NotifySync
Ponteiro para um objeto de sincronização opaco para a lista de notificação do diretório de alterações apontada pelo parâmetro NotifyList .
[in] NotifyList
Ponteiro para o cabeçalho da lista de notificação do diretório de alterações para o volume atual. Cada elemento na lista é uma estrutura de notificação opaca.
[in] FsContext
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.
[in] FullDirectoryName
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.
[in] WatchTree
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 for observado. Ignorado se NotifyIrp for NULL.
[in] IgnoreBuffer
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.
[in] CompletionFilter
Máscara de bits de sinalizadores que especificam os tipos de alterações em arquivos ou diretórios que devem fazer com que os IRPs na lista de notificação sejam concluídos. A tabela a seguir descreve os valores de sinalizador possíveis.
Sinalizador | Significado |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | Um arquivo foi adicionado, excluído ou renomeado neste diretório. |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | Um subdiretório foi criado, removido ou renomeado. |
FILE_NOTIFY_CHANGE_NAME (0x0003) | O nome desse diretório foi alterado. |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | O valor de um atributo desse arquivo, como a hora do último acesso, foi alterado. |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | O tamanho desse arquivo foi alterado. |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | O último tempo de modificação desse arquivo foi alterado. |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | A hora de acesso do último arquivo foi alterada. |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | O tempo de criação desse arquivo foi alterado. |
FILE_NOTIFY_CHANGE_EA (0x0080) | Os atributos estendidos desse arquivo foram modificados. |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | As informações de segurança desse arquivo foram alteradas. |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | Um fluxo de arquivos foi adicionado, excluído ou renomeado neste diretório. |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | O tamanho desse fluxo de arquivos foi alterado. |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | Os dados desse fluxo de arquivos foram alterados. |
CompletionFilter será ignorado se NotifyIrp for NULL.
[in, optional] NotifyIrp
Ponteiro para o IRP a ser adicionado à lista de notificação. Se NotifyIrp for NULL, isso significa que o fluxo de arquivos representado pelo objeto de arquivo (identificado pelo parâmetro FsContext ) está sendo excluído.
[in, optional] TraverseCallback
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 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á ignorado se NotifyIrp for NULL.
[in, optional] SubjectContext
Ponteiro para uma estrutura SECURITY_SUBJECT_CONTEXT a ser passada para TraverseCallback. FsRtlNotifyFilterChangeDirectory libera o contexto e libera a estrutura depois de usá-la. Esse parâmetro será ignorado se NotifyIrp for NULL. Se uma rotina TraverseCallback for fornecida, SubjectContext será passado como o parâmetro SubjectContext para essa rotina.
[in, optional] FilterCallback
Ponteiro opcional para uma rotina de retorno de chamada a ser invocada quando ocorre uma alteração no diretório. Se essa rotina de retorno de chamada retornar TRUE, FsRtlNotifyFilterReportChange concluirá as solicitações de IRP_MN_NOTIFY_CHANGE_DIRECTORY pendentes na lista de notificação; caso contrário, não. Essa rotina fornecida pelo chamador é declarada da seguinte maneira:
BOOLEAN
(*PFILTER_REPORT_CHANGE) (
IN PVOID NotifyContext, // FsContext
IN PVOID FilterContext // Context pointer
);
Retornar valor
Nenhum
Comentários
FsRtlNotifyFilterChangeDirectory é chamado por um sistema de arquivos que recebeu um IRP com código de função principal IRP_MJ_DIRECTORY_CONTROL, código de função secundária IRP_MN_NOTIFY_CHANGE_DIRECTORY.
O sistema de arquivos chama FsRtlNotifyFilterChangeDirectory para criar uma estrutura de notificação para manter o IRP e adicionar a estrutura de notificação à lista de notificação do volume atual.
Se NotifyIrp for NULL, FsRtlNotifyFilterChangeDirectory verificará se a lista de notificação já contém algum IRPs pendente cujos objetos de arquivo correspondem ao valor de FsContext fornecido e, nesse caso, conclui os IRPs com STATUS_DELETE_PENDING.
Se NotifyIrp não for NULL, FsRtlNotifyFilterChangeDirectory fará o seguinte:
Verifica se o objeto de arquivo do IRP passou por limpeza. Nesse caso, FsRtlNotifyFilterChangeDirectory conclui o IRP com status STATUS_NOTIFY_CLEANUP e não o adiciona à lista de notificação.
Se o objeto de arquivo do IRP não tiver passado por limpeza, FsRtlNotifyFilterChangeDirectory verificará se a lista de notificação já contém uma estrutura de notificação para o valor de FsContext fornecido. Se essa estrutura de notificação for encontrada e houver alterações pendentes no relatório, FsRtlNotifyFilterChangeDirectory concluirá NotifyIrp. Se uma estrutura de notificação for encontrada, mas não houver alterações pendentes no relatório, FsRtlNotifyFilterChangeDirectory marcará o IRP apontado por NotifyIrp como pendente e o inserirá na lista de IRPs de notificação na estrutura de notificação. Se essa estrutura de notificação não for encontrada, FsRtlNotifyFilterChangeDirectory marcará o IRP apontado por NotifyIrp como pendente, criará uma estrutura de notificação e a inserirá na lista de notificação.
Quando ocorre uma alteração no diretório, o sistema de arquivos chama FsRtlNotifyFilterReportChange para concluir as solicitações de IRP_MN_NOTIFY_CHANGE_DIRECTORY pendentes na lista de notificação.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Pacote cumulativo de atualizações do Windows 2000 SP4; Windows XP |
Plataforma de Destino | Universal |
Cabeçalho | ntifs.h (inclua Ntifs.h) |
Biblioteca | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | < APC_LEVEL |
Regras de conformidade de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Confira também
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