IRP_MJ_QUERY_VOLUME_INFORMATION (FS 和筛选器驱动程序)
发送时
I/O 管理器发送 IRP_MJ_QUERY_VOLUME_INFORMATION 请求。 例如,当用户模式应用程序调用 Win32 函数(如 GetDiskFreeSpace 或 GetFileType)时,可以发送该函数。
操作:文件系统驱动程序
文件系统驱动程序应提取和解码文件对象,以确定目标设备对象是否为文件系统的控制设备对象。 如果是,并且请求已在卷打开 (的句柄上发出,或者已打开卷) 上的对象,则文件系统驱动程序应处理请求并完成 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.Length 是 Irp-UserBuffer> 指向的缓冲区的长度(以字节为单位)。 返回时,此变量接收写入缓冲区的字节数。
另请参阅
FILE_FS_DRIVER_PATH_INFORMATION
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈