IRP_MJ_QUERY_INFORMATION (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_QUERY_INFORMATION. Esta solicitud se puede enviar, por ejemplo, cuando una aplicación en modo de usuario ha llamado a una función Win32 como GetFileInformationByHandle o cuando un componente en modo kernel ha llamado ZwQueryInformationFile.

Operación: controladores del sistema de archivos

El controlador del sistema de archivos debe extraer y descodificar el objeto de archivo para determinar si representa un usuario abierto de un archivo o directorio. Si es así, el controlador debe procesar la consulta y completar el IRP. De lo contrario, el controlador debe completar el IRP según corresponda sin procesar la consulta.

Los tipos de información de archivo y directorio que se pueden consultar son dependientes del sistema de archivos, pero generalmente incluyen los siguientes valores:

  • FileAllInformation
  • FileAlternateNameInformation
  • FileAttributeTagInformation
  • FileBasicInformation
  • FileCompressionInformation
  • FileEaInformation
  • FileInternalInformation
  • FileNameInformation
  • FileNetworkOpenInformation
  • FilePositionInformation
  • FileStandardInformation
  • FileStreamInformation
  • FileHardLinkInformation

Aunque los tipos de información FileAccessInformation, FileAlignmentInformation y FileModeInformation también se pueden pasar como parámetros a ZwQueryInformationFile, esta información es independiente del sistema de archivos. Por lo tanto ZwQueryInformationFile proporciona esta información directamente, sin enviar una solicitud de IRP_MJ_QUERY_INFORMATION al sistema de archivos.

Para obtener una lista de todos los tipos de información posibles, vea la enumeración FILE_INFORMATION_CLASS en ntifs.h.

Operación: controladores de redirector de red

Un controlador de redirector de red no basado en RDBSS que recibe una solicitud de IRP_MJ_QUERY_INFORMATION para FileAllInformation o FileNameInformation debe responder con la ruta de acceso completa "\server\share\file" para el nombre de archivo con una sola barra diagonal inversa inicial antes del nombre del servidor. Este formato para la información de nombre debe devolverse para un archivo al que se tiene acceso como nombre de convención de nomenclatura universal (UNC) (\\server\share\folder\filename.txt, por ejemplo) o un archivo ubicado en una unidad asignada (x:\folder\filename.txt, por ejemplo).

Para un controlador minidirector de red (un controlador que se vincula dinámicamente con rdbss.sys o que se vincula estáticamente con rdbsslib.lib), RDBSS controla una solicitud de IRP_MJ_QUERY_INFORMATION para FileNameInformation y devuelve la información de nombre correcta. Para un controlador minidirector de red, RDBSS controla una solicitud de IRP_MJ_QUERY_INFORMATION para FileAllInformation para la parte de información de nombre de la solicitud. Las demás partes de la solicitud FileAllInformation se envían como solicitudes independientes al controlador minidirector de red para resolver.

Un redirector de red que recibe una solicitud de IRP_MJ_QUERY_INFORMATION para FileAlternateNameInformation debe responder con el nombre corto (8.3 caracteres) del archivo sin información de ruta de acceso, si existe un nombre corto para el archivo.

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 la pila irP para procesar una solicitud de información del archivo de consulta:

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

  • Irp->AssociatedIrp.SystemBuffer apunta al búfer de salida donde se devolverá la información del archivo o directorio. Esta información se almacena en una de las estructuras siguientes:

  • FILE_ALL_INFORMATION

  • FILE_ATTRIBUTE_TAG_INFORMATION

  • FILE_BASIC_INFORMATION

  • FILE_COMPRESSION_INFORMATION

  • FILE_EA_INFORMATION

  • FILE_INTERNAL_INFORMATION

  • FILE_NAME_INFORMATION

  • FILE_NETWORK_OPEN_INFORMATION

  • FILE_POSITION_INFORMATION

  • FILE_STANDARD_INFORMATION

  • FILE_STREAM_INFORMATION

  • FILE_LINKS_INFORMATION

  • Irp->IoStatus apunta a una estructura de IO_STATUS_BLOCK que recibe el estado de finalización final e información sobre la operación solicitada. Para obtener más información, vea la descripción del parámetro IoStatusBlock en ZwQueryInformationFile. Rutina.

  • Irp->UserBuffer es un puntero opcional a un búfer de salida proporcionado por el autor de la llamada en el que el administrador de E/S copia el contenido de Irp-AssociatedIrp.SystemBuffer>. Los controladores no usan este búfer para devolver ningún dato de la solicitud.

  • 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_QUERY_INFORMATION y no se debe usar.

  • IrpSp->MajorFunction se establece en IRP_MJ_QUERY_INFORMATION.

  • IrpSp->Parameters.QueryFile.FileInformationClass es el tipo de información de archivo que se va a consultar. Este miembro puede ser uno de los valores siguientes.

    Valor Significado
    FileAllInformation Devuelve una estructura FILE_ALL_INFORMATION para el archivo.
    FileAttributeTagInformation Devuelve una estructura de FILE_ATTRIBUTE_TAG_INFORMATION para el archivo.
    FileBasicInformation Devuelve una estructura de FILE_BASIC_INFORMATION para el archivo.
    FileCompressionInformation Devuelve una estructura de FILE_COMPRESSION_INFORMATION para el archivo.
    FileEaInformation Devuelve una estructura de FILE_EA_INFORMATION para el archivo.
    FileInternalInformation Devuelve una estructura de FILE_INTERNAL_INFORMATION para el archivo.
    FileNameInformation Devuelve una estructura de FILE_NAME_INFORMATION para el archivo.
    FileNetworkOpenInformation Devuelve una única estructura de FILE_NETWORK_OPEN_INFORMATION para el archivo.
    FilePositionInformation Devuelve una única estructura de FILE_POSITION_INFORMATION para el archivo.
    FileStandardInformation Devuelve una única estructura de FILE_STANDARD_INFORMATION para el archivo.
    FileStreamInformation Devuelve una única estructura de FILE_STREAM_INFORMATION para el archivo.
    FileHardLinkInformation Devuelve una estructura de FILE_LINKS_INFORMATION para el archivo.
  • IrpSp->Parameters.QueryFile.Length es la longitud, en bytes, del búfer al que apunta Irp-AssociatedIrp.SystemBuffer>.

Comentarios

El administrador de E/S siempre almacena en búfer la operación de IRP_MJ_QUERY_INFORMATION. El Administrador de E/S asigna desde la memoria del grupo no paginado la interfaz Irp-AssociatedIrp.SystemBuffer> que se usa para devolver la información de directorio o archivo solicitada. Como resultado, Irp-AssociatedIrp.SystemBuffer> devuelto por el sistema operativo siempre es una dirección válida para la longitud especificada en IrpSp-Parameters.QueryFile.Length>.

El administrador de E/S usa internamente Irp-AssociatedIrp.UserBuffer> y no debe ser utilizado por los controladores de filtro del sistema de archivos o del sistema de archivos.

Consulte también

FILE_ALIGNMENT_INFORMATION

FILE_ATTRIBUTE_TAG_INFORMATION

FILE_BASIC_INFORMATION

FILE_INTERNAL_INFORMATION

FILE_NAME_INFORMATION

FILE_NETWORK_OPEN_INFORMATION

FILE_POSITION_INFORMATION

FILE_STANDARD_INFORMATION

FILE_STREAM_INFORMATION

FILE_LINKS_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCheckEaBufferValidity

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_INFORMATION

ZwQueryInformationFile