Función FsRtlNotifyFilterChangeDirectory (ntifs.h)
FsRtlNotifyFilterChangeDirectory crea una estructura de notificación para una solicitud de IRP_MN_NOTIFY_CHANGE_DIRECTORY y la agrega a la lista de notificaciones especificada.
Sintaxis
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
Puntero a un objeto de sincronización opaco para la lista de notificación del directorio de cambios a la que apunta el parámetro NotifyList .
[in] 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 sistema de archivos para identificar la estructura de notificación que se va a crear como perteneciente a un objeto de archivo determinado. Si se proporciona una rutina 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. Se omite si NotifyIrp es NULL.
[in] WatchTree
Establezca en TRUE si también se deben observar todos los subdirectorios de este directorio. Establezca en FALSE si solo se va a ver el directorio en sí. Se omite si NotifyIrp es NULL.
[in] IgnoreBuffer
Establézcalo en TRUE para omitir los búferes de usuario y forzar la reenumeración del directorio. Esta acción acelera la operación. Se omite si NotifyIrp es NULL.
[in] CompletionFilter
Máscara de bits de marcas que especifican los tipos de cambios en archivos o directorios que deben hacer que se completen los IRP de la lista de notificaciones. En la tabla siguiente se describen los posibles valores de marca.
Marca | Significado |
---|---|
FILE_NOTIFY_CHANGE_FILE_NAME (0x0001) | Se ha agregado, eliminado o cambiado el nombre de un archivo en este directorio. |
FILE_NOTIFY_CHANGE_DIR_NAME (0x0002) | Se ha creado, quitado o cambiado el nombre de un subdirectorio. |
FILE_NOTIFY_CHANGE_NAME (0x0003) | El nombre de este directorio ha cambiado. |
FILE_NOTIFY_CHANGE_ATTRIBUTES (0x0004) | El valor de un atributo de este archivo, como la hora de último acceso, ha cambiado. |
FILE_NOTIFY_CHANGE_SIZE (0x0008) | El tamaño de este archivo ha cambiado. |
FILE_NOTIFY_CHANGE_LAST_WRITE (0x0010) | La hora de la última modificación de este archivo ha cambiado. |
FILE_NOTIFY_CHANGE_LAST_ACCESS (0x0020) | La hora de último acceso de este archivo ha cambiado. |
FILE_NOTIFY_CHANGE_CREATION (0x0040) | La hora de creación de este archivo ha cambiado. |
FILE_NOTIFY_CHANGE_EA (0x0080) | Se han modificado los atributos extendidos de este archivo. |
FILE_NOTIFY_CHANGE_SECURITY (0x0100) | La información de seguridad de este archivo ha cambiado. |
FILE_NOTIFY_CHANGE_STREAM_NAME (0x0200) | Se ha agregado, eliminado o cambiado el nombre de una secuencia de archivos en este directorio. |
FILE_NOTIFY_CHANGE_STREAM_SIZE (0x0400) | El tamaño de esta secuencia de archivos ha cambiado. |
FILE_NOTIFY_CHANGE_STREAM_WRITE (0x0800) | Los datos de esta secuencia de archivos han cambiado. |
CompletionFilter se omite si NotifyIrp es NULL.
[in, optional] NotifyIrp
Puntero al IRP que se va a agregar a la lista de notificaciones. Si NotifyIrp es NULL, esto significa que se está eliminando la secuencia de archivos representada por el objeto de archivo (identificado por el parámetro FsContext ).
[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. Esto 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 , vea el parámetro TargetContext de FsRtlNotifyFullReportChange. TraverseCallback se omite si NotifyIrp es NULL.
[in, optional] SubjectContext
Puntero a una estructura de SECURITY_SUBJECT_CONTEXT que se va a pasar a TraverseCallback. FsRtlNotifyFilterChangeDirectory libera el contexto y libera la estructura después de usarla. Este parámetro se omite si NotifyIrp es NULL. Si se proporciona una rutina 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 solicitudes 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
None
Observaciones
Un sistema de archivos llama a FsRtlNotifyFilterChangeDirectory que ha recibido un IRP con código de función principal IRP_MJ_DIRECTORY_CONTROL, código de función secundaria IRP_MN_NOTIFY_CHANGE_DIRECTORY.
El sistema de archivos llama a FsRtlNotifyFilterChangeDirectory para crear una estructura de notificación que contenga el IRP y agregue la estructura de notificación a la lista de notificaciones para el volumen actual.
Si NotifyIrp es NULL, FsRtlNotifyFilterChangeDirectory comprueba si la lista de notificaciones ya contiene los IRP pendientes cuyos objetos de archivo coinciden con el valor FsContext especificado y, si es así, completa los IRP con STATUS_DELETE_PENDING.
Si NotifyIrp no es NULL, FsRtlNotifyFilterChangeDirectory hace lo siguiente:
Comprueba si el objeto de archivo del IRP se ha limpiado. Si es así, FsRtlNotifyFilterChangeDirectory completa el IRP con el estado STATUS_NOTIFY_CLEANUP y no lo agrega a la lista de notificaciones.
Si el objeto de archivo del IRP no se ha limpiado, FsRtlNotifyFilterChangeDirectory comprueba si la lista de notificaciones ya contiene una estructura de notificación para el valor FsContext especificado. Si se encuentra dicha estructura de notificación y hay cambios pendientes en el informe, FsRtlNotifyFilterChangeDirectory completa NotifyIrp. Si se encuentra una estructura de notificación, pero no hay cambios pendientes en el informe, FsRtlNotifyFilterChangeDirectory marca el IRP al que apunta NotifyIrp como pendiente e lo inserta en la lista de IRP de notificación en la estructura de notificación. Si no se encuentra ninguna estructura de notificación, FsRtlNotifyFilterChangeDirectory marca el IRP al que apunta NotifyIrp como pendiente, crea una estructura de notificación e la inserta en la lista de notificación.
Cuando se produce un cambio en el directorio, el sistema de archivos llama a FsRtlNotifyFilterReportChange para completar las solicitudes de IRP_MN_NOTIFY_CHANGE_DIRECTORY pendientes en la lista de notificaciones.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Paquete acumulativo de actualizaciones de Windows 2000 SP4; Windows XP |
Plataforma de destino | Universal |
Encabezado | ntifs.h (incluya Ntifs.h) |
Library | NtosKrnl.lib |
Archivo DLL | NtosKrnl.exe |
IRQL | < APC_LEVEL |
Reglas de cumplimiento de DDI | HwStorPortProhibitedDIs(storport), PowerIrpDDis(wdm) |
Consulte también
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de