IRP_MJ_SET_VOLUME_INFORMATION (FS 和筛选器驱动程序)

发送时

I/O 管理器发送IRP_MJ_SET_VOLUME_INFORMATION请求。 例如,当用户模式应用程序调用 Win32 函数(如 SetVolumeLabel)时,可以发送它。

操作:文件系统驱动程序

文件系统驱动程序应提取和解码文件对象,以确定它是否表示打开的用户卷。 如果存在,则文件系统驱动程序应设置适当的卷信息并完成 IRP。 否则,文件系统应根据需要完成 IRP,而无需设置卷信息。

可设置的卷信息类型依赖于文件系统,但通常包含以下一个或多个值:

  • FileFsControlInformation
  • FileFsLabelInformation
  • FileFsObjectIdInformation

有关所有可能的信息类型的列表,请参阅 ntifs.h 中的 FS_INFORMATION_CLASS 枚举。

操作:旧版文件系统筛选器驱动程序

筛选器驱动程序应将此 IRP 向下传递到堆栈上的下一个较低驱动程序。

参数

文件系统或筛选器驱动程序调用给定 IRP 的 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中其自身堆栈位置的指针。 在以下参数中, Irp 指向 IRP而 IrpSp 指向 IO_STACK_LOCATION。 驱动程序可以使用 IRP 的以下成员和 IRP 堆栈位置中设置的信息来处理设置的卷信息请求:

  • DeviceObject 是指向目标设备对象的指针。

  • Irp->AssociatedIrp.SystemBuffer 指向包含要设置的卷信息值的输入缓冲区。 此信息存储在以下结构之一中:

    • FILE_FS_CONTROL_INFORMATION
    • FILE_FS_LABEL_INFORMATION
    • FILE_FS_OBJECTID_INFORMATION
  • Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。

  • IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。

    IrpSp-FileObject> 参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_SET_VOLUME_INFORMATION期间无效,不应使用。

  • IrpSp->MajorFunction 设置为 IRP_MJ_SET_VOLUME_INFORMATION。

  • IrpSp->Parameters.SetVolume.FsInformationClass 是要为卷设置的信息类型,可以是下列信息之一:

    含义
    FileFsControlInformation 设置卷 FILE_FS_CONTROL_INFORMATION
    FileFsLabelInformation 设置卷的 FILE_FS_LABEL_INFORMATION
    FileFsObjectIdInformation 设置 卷FILE_FS_OBJECTID_INFORMATION
  • IrpSp->Parameters.SetVolume.LengthIrp-AssociatedIrp.SystemBuffer> 指向的缓冲区的长度(以字节为单位)。

另请参阅

FILE_FS_CONTROL_INFORMATION

FILE_FS_LABEL_INFORMATION

FILE_FS_OBJECTID_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_QUERY_VOLUME_INFORMATION

ZwQueryVolumeInformationFile

ZwSetVolumeInformationFile