IRP_MJ_SET_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 la solicitud de IRP_MJ_SET_INFORMATION. Se puede enviar, por ejemplo, cuando una aplicación en modo de usuario ha llamado a una función Win32 como SetEndOfFile o cuando un componente en modo kernel ha llamado ZwSetInformationFile.

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 archivo de usuario o un directorio abiertos. Si es así, el controlador del sistema de archivos debe procesar la solicitud según corresponda y completar el IRP.

Los siguientes tipos de información se pueden establecer en archivos y directorios:

  • FileBasicInformation
  • FileDispositionInformation
  • FileLinkInformation (para sistemas de archivos que permiten crear ciclos en la jerarquía de directorios)
  • FilePositionInformation
  • FileRenameInformation

Los siguientes tipos de información solo se pueden establecer en archivos:

  • FileAllocationInformation
  • FileEndOfFileInformation
  • FileLinkInformation: para sistemas de archivos (por ejemplo, NTFS) que no permiten crear ciclos en la jerarquía de directorios
  • FileValidDataLengthInformation

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

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

Parámetros

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

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

  • Irp->AssociatedIrp.SystemBuffer apunta a un búfer de entrada que contiene la información de archivo o directorio que se va a establecer. Esta información se almacena en una de las siguientes estructuras:

  • 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 ZwSetInformationFile.

  • IrpSp->FileObject apunta al objeto de archivo asociado a DeviceObject. Este parámetro contiene un puntero al campo RelatedFileObject , que también es una estructura de FILE_OBJECT. El campo RelatedFileObject de la estructura FILE_OBJECT no es válido durante el procesamiento de IRP_MJ_SET_INFORMATION y no se debe usar.

  • IrpSp->MajorFunction* se establece en IRP_MJ_SET_INFORMATION.

  • IrpSp->MinorFunction* puede ser IRP_MN_KERNEL_CALL cuando Irp-Parameters.SetFile.FileInformationClass> es FileValidDataLengthInformation. Este código indica que el origen de la solicitud es un componente de kernel de confianza, lo que permite a los controladores omitir las comprobaciones de seguridad.

  • IrpSp->Parameters.SetFile.AdvanceOnly es una marca para las operaciones de fin de archivo. Esta marca determina el uso del miembro EndOfFileFILE_END_OF_FILE_INFORMATION estructura cuando FileInformationClass es FileEndOfFileInformation. Si es TRUE, una nueva longitud de datos válida para el archivo se establece desde EndOfFile solo si aumenta la longitud de datos válida actual. Si es FALSE, se establece un nuevo tamaño de archivo desde EndOfFile.

  • IrpSp->Parameters.SetFile.ClusterCount está reservado para uso del sistema.

  • IrpSp->Parameters.SetFile.DeleteHandle está reservado para uso del sistema.

  • IrpSp->Parameters.SetFile.FileInformationClass indica el tipo de información que se va a establecer para el archivo y puede ser uno de los siguientes valores.

    Valor Significado
    FileAllocationInformation Establezca FILE_ALLOCATION_INFORMATION para el archivo.
    FileBasicInformation Establezca FILE_BASIC_INFORMATION para el archivo.
    FileDispositionInformation Establezca FILE_DISPOSITION_INFORMATION para el archivo.
    FileEndOfFileInformation Establezca FILE_END_OF_FILE_INFORMATION para el archivo.
    FileLinkInformation Establezca FILE_LINK_INFORMATION para el archivo.
    FilePositionInformation Establezca FILE_POSITION_INFORMATION para el archivo.
    FileRenameInformation Establezca FILE_RENAME_INFORMATION para el archivo.
    FileValidDataLengthInformation Establezca FILE_VALID_DATA_LENGTH_INFORMATION para el archivo. Para obtener más información, vea Irp-MinorFunction>.
  • IrpSp->Parameters.SetFile.FileObject es para las operaciones de cambio de nombre o vínculo. Si Irp-AssociatedIrp.SystemBuffer-FileName>> contiene un nombre de archivo completo o si Irp-AssociatedIrp.SystemBuffer-RootDirectory>> no es NULL, este miembro es un puntero de objeto de archivo para el directorio primario del archivo que es el destino de la operación. De lo contrario, es NULL.

  • IrpSp->Parameters.SetFile.Length es la longitud, en bytes, del búfer al que apunta Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.SetFile.ReplaceIfExists se establece en TRUE para especificar que si ya existe un archivo con el mismo nombre, se debe reemplazar por el archivo especificado. Establézcalo en FALSE si la operación de cambio de nombre debe producir un error si ya existe un archivo con el nombre especificado.

Comentarios

El administrador de caché establece el miembro AdvanceOnly en TRUE para notificar al sistema de archivos que avance la longitud de datos válida actual en el disco a la nueva longitud de datos válida en EndOfFile. Si AdvanceOnly es FALSE, se establece un nuevo tamaño de archivo, en el miembro EndOfFile , que puede ser mayor o menor que el tamaño de archivo actual.

Consulte también

FILE_ALLOCATION_INFORMATION

FILE_BASIC_INFORMATION

FILE_DISPOSITION_INFORMATION

FILE_END_OF_FILE_INFORMATION

FILE_LINK_INFORMATION

FILE_POSITION_INFORMATION

FILE_RENAME_INFORMATION

FILE_VALID_DATA_LENGTH_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_INFORMATION

ZwSetInformationFile