Função FltNotifyFilterChangeDirectory (fltkernel.h)
A rotina FltNotifyFilterChangeDirectory cria uma estrutura de notificação para uma operação de IRP_MN_NOTIFY_CHANGE_DIRECTORY e a adiciona à lista de notificação especificada.
Sintaxe
VOID FLTAPI FltNotifyFilterChangeDirectory(
[in, out] PNOTIFY_SYNC NotifySync,
[in, out] PLIST_ENTRY NotifyList,
[in] PVOID FsContext,
[in] PSTRING FullDirectoryName,
[in] BOOLEAN WatchTree,
[in] BOOLEAN IgnoreBuffer,
[in] ULONG CompletionFilter,
[in] PFLT_CALLBACK_DATA NotifyCallbackData,
[in, optional] PCHECK_FOR_TRAVERSE_ACCESS TraverseCallback,
[in, optional] PSECURITY_SUBJECT_CONTEXT SubjectContext,
[in, optional] PFILTER_REPORT_CHANGE FilterCallback
);
Parâmetros
[in, out] NotifySync
Ponteiro para um objeto de sincronização opaco para a lista de notificação do diretório de alterações para a qual o parâmetro NotifyList aponta.
[in, out] 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 chamador para identificar a estrutura de notificação a ser criada. Se uma rotina de retorno de chamada for fornecida no parâmetro TraverseCallback , 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.
[in] WatchTree
Defina como TRUE se todos os subdiretórios do diretório especificados pelo parâmetro FullDirectoryName também deverão ser observados. Defina como FALSE se apenas o próprio diretório deve ser observado.
[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.
[in] CompletionFilter
Bitmask de sinalizadores que especificam os tipos de alterações em arquivos ou diretórios que devem fazer com que as estruturas de dados de retorno de chamada na lista de notificação sejam concluídas. Os valores de sinalizador possíveis são descritos na tabela 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. |
[in] NotifyCallbackData
Ponteiro para a estrutura de dados de retorno de chamada para a operação a ser adicionada à lista de notificação. Esse parâmetro é necessário e não pode ser NULL.
[in, optional] TraverseCallback
Ponteiro opcional para uma rotina de retorno de chamada a ser invocada quando ocorre uma alteração em um subdiretório que está sendo observado em uma árvore de diretório. Esse ponteiro 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 da rotina FsRtlNotifyFullReportChange .
[in, optional] SubjectContext
Ponteiro para uma estrutura de contexto a ser passada para TraverseCallback. FltNotifyFilterChangeDirectory libera o contexto e libera a estrutura depois de usá-la. 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 ocorrer uma alteração no diretório. Se essa rotina de retorno de chamada retornar TRUE, FsRtlNotifyFilterReportChange concluirá as operaçõ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
Um driver de minifiltro pode chamar FltNotifyFilterChangeDirectory da rotina de retorno de chamada de pré-operação (PFLT_PRE_OPERATION_CALLBACK) que ele registrou para processar operações de notificação de alteração de diretório. Essas operações têm um código de função principal de IRP_MJ_DIRECTORY_CONTROL e um código de função secundária de IRP_MN_NOTIFY_CHANGE_DIRECTORY.
O driver de minifiltro chama FltNotifyFilterChangeDirectory para criar uma estrutura de notificação para manter a estrutura de dados de retorno de chamada para a operação e adicionar a estrutura de notificação à lista de notificação para o volume atual.
FltNotifyFilterChangeDirectory faz o seguinte:
- Verifica se o objeto de arquivo da operação foi limpo. Nesse caso, FltNotifyFilterChangeDirectory conclui a operação com status STATUS_NOTIFY_CLEANUP e não a adiciona à lista de notificação.
- Se o objeto de arquivo da operação não tiver sido limpo, FltNotifyFilterChangeDirectory 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, FltNotifyFilterChangeDirectory concluirá a estrutura de dados de retorno de chamada apontada pelo parâmetro NotifyCallbackData . Se uma estrutura de notificação for encontrada, mas não houver alterações pendentes no relatório, FltNotifyFilterChangeDirectory adicionará a operação à estrutura de notificação. Se nenhuma estrutura de notificação for encontrada, FltNotifyFilterChangeDirectory criará uma estrutura de notificação para a operação e a inserirá na lista.
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Universal |
Cabeçalho | fltkernel.h (inclua Fltkernel.h) |
Biblioteca | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | <= APC_LEVEL |