IRP_MJ_DIRECTORY_CONTROL (controladores de filtro y FS)

Cuándo se envió

El Administrador de E/S, otros componentes del sistema operativo y otros controladores en modo kernel envían solicitudes IRP_MJ_DIRECTORY_CONTROL. Se puede enviar, por ejemplo, cuando una aplicación en modo de usuario ha llamado a una función Win32 como ReadDirectoryChangesW o FindNextVolumeMountPoint o cuando un componente en modo kernel ha llamado ZwQueryDirectoryFile o ZwQueryDirectoryFileEx.

Operación: controladores del sistema de archivos

El controlador del sistema de archivos debe comprobar el código de función secundaria para determinar qué operación de control de directorio se solicita. Estos son los códigos de función secundaria válidos:

Código Descripción
IRP_MN_QUERY_DIRECTORY Indica una solicitud de consulta de directorio. Los tipos de información que se pueden consultar dependen del sistema de archivos, pero generalmente incluyen los siguientes valores: FileBothDirectoryInformation, FileDirectoryInformation, FileFullDirectoryInformation, FileIdBothDirectoryInformation, FileIdFullDirectoryInformation, FileNamesInformation, FileObjectIdIdInformation, FileReparsePointInformation.
IRP_MN_NOTIFY_CHANGE_DIRECTORY Indica una solicitud de notificación de cambios en el directorio. Normalmente, en lugar de satisfacer esta solicitud inmediatamente, el controlador del sistema de archivos contiene el IRP en una cola privada. Cuando se produce un cambio en el directorio, el controlador del sistema de archivos realiza la notificación y elimina y completa el IRP. El controlador del sistema de archivos devuelve la información de una estructura FILE_NOTIFY_INFORMATION .
IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX Indica una solicitud de notificación de cambios en el directorio. Normalmente, en lugar de satisfacer esta solicitud inmediatamente, el controlador del sistema de archivos contiene el IRP en una cola privada. Cuando se produce un cambio en el directorio, el controlador del sistema de archivos realiza la notificación y elimina y completa el IRP. El controlador del sistema de archivos devuelve información basada en irpSp-Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass> especificado.

Nota

La clase de información FileQuotaInformation está obsoleta. IRP_MJ_QUERY_QUOTA debe usarse en su lugar.

El controlador del sistema de archivos debe completar el IRP después de realizar la operación solicitada.

Operación: controladores de filtro del sistema de archivos heredados

El controlador de filtro debe pasar este IRP al siguiente controlador inferior de la pila.

Parámetros

Un controlador de filtro o sistema de archivos llama a IoGetCurrentIrpStackLocation para que el IRP especificado obtenga un puntero a su propia ubicación de pila en el IRP. En los parámetros siguientes, Irp apunta a IRP e IrpSp apunta al IO_STACK_LOCATION. El controlador puede usar la información que se establece en los siguientes miembros del IRP y la ubicación de pila de IRP para procesar una solicitud de control de directorio.

  • DeviceObject es un puntero al objeto de dispositivo de destino.

  • Irp->AssociatedIrp.SystemBuffer apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada.

  • Irp->UserBuffer apunta a un búfer de salida proporcionado por el autor de la llamada que recibe la información solicitada sobre el contenido del directorio.

  • IrpSp->FileObject apunta al objeto de archivo asociado a DeviceObject.

    El parámetro IrpSp-FileObject> contiene un puntero al campo RelatedFileObject, que también es una estructura FILE_OBJECT. El campo RelatedFileObject de la estructura FILE_OBJECT no es válido durante el procesamiento de IRP_MJ_DIRECTORY_CONTROL y no se debe usar.

  • IrpSp->Las marcas se pueden establecer en uno o varios de los valores siguientes para IRP_MN_QUERY_DIRECTORY.

Marca Significado
SL_INDEX_SPECIFIED Comience el examen en la entrada en el directorio cuyo índice recibe IrpSp-Parameters.QueryDirectory.FileIndex>.
SL_RESTART_SCAN Comience el examen en la primera entrada del directorio. Si no se establece esta marca, reanude el examen de una solicitud de IRP_MN_QUERY_DIRECTORY anterior.
SL_RETURN_SINGLE_ENTRY Devuelve solo la primera entrada que se encuentra.
SL_RETURN_ON_DISK_ENTRIES_ONLY Indica a los filtros que realizan la virtualización de directorios o la expansión Just-In-Time para pasar simplemente la solicitud al sistema de archivos y devolver entradas que están actualmente en disco.

Se puede establecer la marca siguiente para IRP_MN_NOTIFY_CHANGE_DIRECTORY:

Marca Significado
SL_WATCH_TREE 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í.
  • IrpSp->MajorFunction se establece en IRP_MJ_DIRECTORY_CONTROL.

  • IrpSp->MinorFunction se puede establecer en uno de los valores siguientes.

    • IRP_MN_QUERY_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY
    • IRP_MN_NOTIFY_CHANGE_DIRECTORY_EX
  • IrpSp->Parameters.QueryDirectory.FileIndex es el índice del archivo en el que se va a iniciar el examen del directorio. Este valor se omite si no se establece la marca SL_INDEX_SPECIFIED. Este parámetro no se puede especificar en ninguna rutina de compatibilidad con la función Win32 o el modo kernel. Actualmente solo se usa en la máquina VIRTUAL DOS de NT (NTVDM), que solo existe en plataformas basadas en NT de 32 bits. El índice de archivos no está definido para los sistemas de archivos, como NTFS, en los que la posición de un archivo dentro del directorio primario no es fija y se puede cambiar en cualquier momento para mantener el criterio de ordenación.

  • IrpSp->Parameters.QueryDirectory.FileInformationClass se establece en uno de los valores siguientes.

    Valor Significado
    FileBothDirectoryInformation Devuelve una estructura de FILE_BOTH_DIR_INFORMATION para cada archivo.
    FileDirectoryInformation Devuelve una estructura de FILE_DIRECTORY_INFORMATION para cada archivo.
    FileFullDirectoryInformation Devuelve una estructura FILE_FULL_DIR_INFORMATION" para cada archivo.
    FileIdBothDirectoryInformation Devuelve una estructura FILE_ID_BOTH_DIR_INFORMATION para cada archivo.
    FileIdFullDirectoryInformation Devuelve una estructura de FILE_ID_FULL_DIR_INFORMATION para cada archivo.
    FileNamesInformation Devuelve una estructura de FILE_NAMES_INFORMATION para cada archivo.
    FileObjectIdInformation Devuelve una estructura de FILE_OBJECTID_INFORMATION para cada archivo.
    FileQuotaInformation Obsoleto. Use IRP_MJ_QUERY_QUOTA en su lugar.
    FileReparsePointInformation Devuelve una única estructura de FILE_REPARSE_POINT_INFORMATION para el directorio.
  • IrpSp->Parameters.QueryDirectory.FileName es el nombre opcional de un archivo dentro del directorio especificado.

  • IrpSp->Parameters.QueryDirectory.Length es la longitud en bytes del búfer al que apunta Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.Length es la longitud en bytes del búfer al que apunta Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectory.CompletionFilter: para obtener más información, vea la descripción del parámetro CompletionFilter en FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.Length es la longitud en bytes del búfer al que apunta Irp-UserBuffer>.

  • IrpSp->Parameters.NotifyDirectoryEx.CompletionFilter: para obtener más información, vea la descripción del parámetro CompletionFilter en FsRtlNotifyFullChangeDirectory.

  • IrpSp->Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass es uno de los valores siguientes.

    Valor Significado
    DirectoryNotifyInformation Devuelve una estructura de FILE_NOTIFY_INFORMATION para el cambio de directorio.
    DirectoryNotifyExtendedInformation Devuelve una estructura de FILE_NOTIFY_EXTENDED_INFORMATION para cada cambio de directorio.
    DirectoryNotifyFullInformation Devuelve una estructura de FILE_NOTIFY_FULL_INFORMATION para cada cambio de directorio.

Consulte también

FILE_BOTH_DIR_INFORMATION

FILE_DIRECTORY_INFORMATION

FILE_FULL_DIR_INFORMATION

FILE_ID_BOTH_DIR_INFORMATION

FILE_ID_FULL_DIR_INFORMATION

FILE_NAMES_INFORMATION

FILE_OBJECTID_INFORMATION

FILE_REPARSE_POINT_INFORMATION

FsRtlNotifyFullChangeDirectory

FILE_NOTIFY_INFORMATION

FILE_NOTIFY_EXTENDED_INFORMATION

FILE_NOTIFY_FULL_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_QUOTA

ZwQueryDirectoryFile

ZwQueryDirectoryFileEx