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

发送时

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

操作:文件系统驱动程序

文件系统驱动程序应提取和解码文件对象,以确定目标设备对象是否为文件系统的控制设备对象。 如果是,并且请求已在卷打开 (的句柄上发出,或者已打开卷) 上的对象,则文件系统驱动程序应处理请求并完成 IRP。

否则,文件系统驱动程序应使查询失败并完成 IRP。

可查询的卷信息类型依赖于文件系统,但通常包括以下值:

  • FileFsAttributeInformation
  • FileFsDeviceInformation
  • FileFsSizeInformation
  • FileFsVolumeInformation

有关所有可能的信息类型的列表,请参阅 IrpSp-Parameters.QueryVolume.FsInformationClass>

操作:网络重定向驱动程序

接收 FileFsDeviceInformation 请求的网络重定向程序必须包含FILE_REMOTE_DEVICE作为返回的 FILE_FS_DEVICE_INFORMATION 结构的 DeviceCharacteristics 成员的选项之一。

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

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

参数

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

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

  • Irp->AssociatedIrp.SystemBuffer 指向要返回卷信息的系统提供的输出缓冲区。 此信息存储在以下结构之一中:

    • FILE_FS_ATTRIBUTE_INFORMATION
    • FILE_FS_CONTROL_INFORMATION
    • FILE_FS_DEVICE_INFORMATION
    • FILE_FS_DRIVER_PATH_INFORMATION
    • FILE_FS_FULL_SIZE_INFORMATION
    • FILE_FS_OBJECTID_INFORMATION
    • FILE_FS_SIZE_INFORMATION
    • FILE_FS_VOLUME_FLAGS_INFORMATION
    • FILE_FS_VOLUME_INFORMATION
    • FILE_FS_SECTOR_SIZE_INFORMATION

    FileFsVolumeFlagsInformation 类和关联的 FILE_FS_VOLUME_INFORMATION 结构在 Windows Vista 及更高版本上可用。

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

  • Irp->UserBuffer 是指向调用方提供的输出缓冲区的可选指针,Irp-AssociatedIrp.SystemBuffer> 的内容在 I/O 完成期间由 I/O 管理器复制到该缓冲区中。 驱动程序不使用此缓冲区返回请求的任何数据。

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

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

  • IrpSp->MajorFunction 设置为 IRP_MJ_QUERY_VOLUME_INFORMATION

  • IrpSp->Parameters.QueryVolume.FsInformationClass 是文件系统要返回的卷信息的类型。 此成员可以是以下值之一。

含义
FileFsAttributeInformation 返回一个 FILE_FS_ATTRIBUTE_INFORMATION 结构,其中包含有关负责卷的文件系统的属性信息。
FileFsControlInformation 返回一个 FILE_FS_CONTROL_INFORMATION 结构,该结构包含有关卷的文件系统控制信息。
FileFsDeviceInformation 返回包含卷的设备信息的 FILE_FS_DEVICE_INFORMATION 结构。
FileFsDriverPathInformation 返回一个 FILE_FS_DRIVER_PATH_INFORMATION 结构,其中包含有关指定的驱动程序是否在卷的 I/O 路径中的信息。 IRP_MJ_QUERY_VOLUME_INFORMATION请求的发起者必须将驱动程序的名称存储在FILE_FS_DRIVER_PATH_INFORMATION结构中,然后才能将 IRP 发送到文件系统卷设备堆栈。
FileFsFullSizeInformation 返回一个 FILE_FS_FULL_SIZE_INFORMATION 结构,其中包含有关卷上可用总空间量的信息。
FileFsObjectIdInformation 返回一个 FILE_FS_OBJECTID_INFORMATION 结构,其中包含卷的特定于文件系统的对象 ID 信息。 此对象 ID 信息与操作系统分配的基于 guid () 唯一卷名称不同。
FileFsSizeInformation 返回一个 FILE_FS_SIZE_INFORMATION 结构,其中包含有关卷上与发起IRP_MJ_QUERY_VOLUME_INFORMATION请求的线程关联的用户可用的 空间 量的信息。
FileFsVolumeInformation 返回包含卷相关信息(例如卷标签、序列号和创建时间)的 FILE_FS_VOLUME_INFORMATION
FileFsSectorSizeInformation 返回 一个FILE_FS_SECTOR_SIZE_INFORMATION 结构,其中包含有关卷的物理扇区大小和逻辑扇区大小的信息。
  • IrpSp->Parameters.QueryVolume.LengthIrp-UserBuffer> 指向的缓冲区的长度(以字节为单位)。 返回时,此变量接收写入缓冲区的字节数。

另请参阅

FILE_FS_ATTRIBUTE_INFORMATION

FILE_FS_CONTROL_INFORMATION

FILE_FS_DEVICE_INFORMATION

FILE_FS_DRIVER_PATH_INFORMATION

FILE_FS_FULL_SIZE_INFORMATION

FILE_FS_OBJECTID_INFORMATION

FILE_FS_SECTOR_SIZE_INFORMATION

FILE_FS_SIZE_INFORMATION

FILE_FS_VOLUME_INFORMATION

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_SET_VOLUME_INFORMATION

ZwQueryVolumeInformationFile

ZwSetVolumeInformationFile