Compartir a través de


Función FltNotifyFilterChangeDirectory (fltkernel.h)

La rutina FltNotifyFilterChangeDirector y crea una estructura de notificación para una operación de IRP_MN_NOTIFY_CHANGE_DIRECTORY y la agrega a la lista de notificaciones especificada.

Sintaxis

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

Puntero a un objeto de sincronización opaco para la lista de notificaciones del directorio de cambios a la que apunta el parámetro NotifyList.

[in, out] NotifyList

Puntero al encabezado de la lista de notificaciones del directorio de cambios para el volumen actual. Cada elemento de la lista es una estructura de notificación opaca.

[in] FsContext

Puntero a un valor único asignado por el autor de la llamada para identificar la estructura de notificación que se va a crear. Si se proporciona una rutina de devolución de llamada en el parámetro de TraverseCallback, FsContext se pasa como parámetro NotifyContext a esa rutina.

[in] FullDirectoryName

Puntero a una cadena ANSI o Unicode que contiene el nombre completo del directorio asociado a esta estructura de notificación.

[in] WatchTree

Establézcalo en TRUE si también se deben observar todos los subdirectorios del directorio especificado por el parámetro FullDirectoryName. Establézcalo en FALSE si solo se va a ver el directorio.

[in] IgnoreBuffer

Establézcalo en TRUE para omitir los búferes de usuario y forzar a que el directorio se vuelva a enumerar. Esta acción acelera la operación.

[in] CompletionFilter

Máscara de bits de marcas que especifican los tipos de cambios en archivos o directorios que deben hacer que se completen las estructuras de datos de devolución de llamada de la lista de notificaciones. Los posibles valores de marca se describen en la tabla siguiente.

Bandera Significado
FILE_NOTIFY_CHANGE_FILE_NAME Se ha agregado, eliminado o cambiado el nombre de un archivo en este directorio.
FILE_NOTIFY_CHANGE_DIR_NAME Se ha creado, quitado o cambiado el nombre de un subdirectorio.
FILE_NOTIFY_CHANGE_NAME El nombre de este directorio ha cambiado.
FILE_NOTIFY_CHANGE_ATTRIBUTES El valor de un atributo de este archivo, como la hora de último acceso, ha cambiado.
FILE_NOTIFY_CHANGE_SIZE El tamaño de este archivo ha cambiado.
FILE_NOTIFY_CHANGE_LAST_WRITE La hora de última modificación de este archivo ha cambiado.
FILE_NOTIFY_CHANGE_LAST_ACCESS La última hora de acceso de este archivo ha cambiado.
FILE_NOTIFY_CHANGE_CREATION El tiempo de creación de este archivo ha cambiado.
FILE_NOTIFY_CHANGE_EA Se han modificado los atributos extendidos de este archivo.
FILE_NOTIFY_CHANGE_SECURITY La información de seguridad de este archivo ha cambiado.
FILE_NOTIFY_CHANGE_STREAM_NAME Se ha agregado, eliminado o cambiado el nombre de una secuencia de archivos en este directorio.
FILE_NOTIFY_CHANGE_STREAM_SIZE El tamaño de esta secuencia de archivos ha cambiado.
FILE_NOTIFY_CHANGE_STREAM_WRITE Los datos de esta secuencia de archivos han cambiado.

[in] NotifyCallbackData

Puntero a la estructura de datos de devolución de llamada para que la operación se agregue a la lista de notificaciones. Este parámetro es necesario y no se puede null.

[in, optional] TraverseCallback

Puntero opcional a una rutina de devolución de llamada que se va a invocar cuando se produce un cambio en un subdirectorio que se está viendo en un árbol de directorios. Este puntero permite al sistema de archivos comprobar si el monitor ha recorrido el acceso a ese directorio. Esta rutina proporcionada por el autor de la llamada se declara de la siguiente manera:

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

Para obtener más información sobre el parámetro TargetContext, consulte el parámetro TargetContext de la rutina FsRtlNotifyFullReportChange.

[in, optional] SubjectContext

Puntero a una estructura de contexto que se va a pasar a TraverseCallback. FltNotifyFilterChangeDirectory libera el contexto y libera la estructura después de usarla. Si se proporciona una rutina de TraverseCallback, SubjectContext se pasa como parámetro SubjectContext a esa rutina.

[in, optional] FilterCallback

Puntero opcional a una rutina de devolución de llamada que se va a invocar cuando se produce un cambio en el directorio. Si esta rutina de devolución de llamada devuelve TRUE, FsRtlNotifyFilterReportChange completa las operaciones de IRP_MN_NOTIFY_CHANGE_DIRECTORY pendientes en la lista de notificaciones; de lo contrario, no lo hace. Esta rutina proporcionada por el autor de la llamada se declara de la siguiente manera:

BOOLEAN
(*PFILTER_REPORT_CHANGE) (
    IN PVOID NotifyContext,                     // FsContext
    IN PVOID FilterContext                      // Context pointer
    );

Valor devuelto

Ninguno

Observaciones

Un controlador de minifiltro puede llamar a FltNotifyFilterChangeDirectory desde la rutina de devolución de llamada de preoperación (PFLT_PRE_OPERATION_CALLBACK) que registró para procesar las operaciones de notificación al directorio de cambios. Estas operaciones tienen un código de función principal de IRP_MJ_DIRECTORY_CONTROL y un código de función secundaria de IRP_MN_NOTIFY_CHANGE_DIRECTORY.

El controlador de minifiltro llama a FltNotifyFilterChangeDirectory para crear una estructura de notificación que contenga la estructura de datos de devolución de llamada para la operación y agregue la estructura de notificación a la lista de notificaciones para el volumen actual.

FltNotifyFilterChangeDirectory hace lo siguiente:

  • Comprueba si el objeto de archivo de la operación se ha limpiado. Si es así, FltNotifyFilterChangeDirectory completa la operación con el estado STATUS_NOTIFY_CLEANUP y no la agrega a la lista de notificaciones.
  • Si no se ha limpiado el objeto de archivo de la operación, FltNotifyFilterChangeDirectory comprueba si la lista de notificaciones ya contiene una estructura de notificación para el valor de FsContext especificado. Si se encuentra dicha estructura de notificación y hay cambios pendientes en el informe, FltNotifyFilterChangeDirectory completa la estructura de datos de devolución de llamada a la que apunta el parámetro NotifyCallbackData. Si se encuentra una estructura de notificación, pero no hay cambios pendientes en el informe, FltNotifyFilterChangeDirectory agrega la operación a la estructura de notificación. Si no se encuentra ninguna estructura de notificación de este tipo, FltNotifyFilterChangeDirectory crea una estructura de notificación para la operación e la inserta en la lista.
Cuando se produce un cambio en el directorio, el sistema de archivos llama a FsRtlNotifyFilterReportChange para completar las operaciones de IRP_MN_NOTIFY_CHANGE_DIRECTORY pendientes en la lista de notificaciones.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de fltkernel.h (incluya Fltkernel.h)
biblioteca de FltMgr.lib
DLL de Fltmgr.sys
irQL <= APC_LEVEL

Consulte también

FsRtlNotifyFilterReportChange

IRP_MJ_DIRECTORY_CONTROL

PFLT_PRE_OPERATION_CALLBACK