IRP_MJ_QUERY_QUOTA (FS 和筛选器驱动程序)
发送时
I/O 管理器发送IRP_MJ_QUERY_QUOTA请求。 例如,当用户模式应用程序调用 Win32 方法(例如 IDiskQuotaControl::GetQuotaState)时,可以发送此请求。
操作:文件系统驱动程序
如果文件系统支持磁盘配额,则文件系统驱动程序应提取并解码文件对象,以确定它是表示用户打开的文件还是目录。 如果存在,驱动程序应处理查询并完成 IRP。 否则,驱动程序应根据需要完成 IRP 而不处理查询。
操作:旧版文件系统筛选器驱动程序
筛选器驱动程序应将此 IRP 向下传递到堆栈上的下一个较低驱动程序,除非它需要显式重写配额行为。
参数
文件系统或筛选器驱动程序调用给定 IRP 的 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中其自身堆栈位置的指针。 在以下参数中, Irp 指向 IRP , 而 IrpSp 指向 IO_STACK_LOCATION。 驱动程序可以使用 IRP 和 IRP 堆栈位置的以下成员中设置的信息来处理查询配额信息请求:
DeviceObject 是指向目标设备对象的指针。
DeviceObject->标志:DO_BUFFERED_IO和DO_DIRECT_IO标志如下所示用于指定将数据传递到驱动程序的方法:
标志设置 I/O 方法 ~DO_BUFFERED_IO ~DO_DIRECT_IO METHOD_NEITHER ~DO_BUFFERED_IO DO_DIRECT_IO METHOD_DIRECT DO_BUFFERED_IO ~DO_DIRECT_IO METHOD_BUFFERED DO_BUFFERED_IO DO_DIRECT_IO METHOD_BUFFERED Irp->如果 DeviceObject-Flags> 中设置了DO_BUFFERED_IO标志,则 AssociatedIrp.SystemBuffer 指向要用作中间系统缓冲区的系统提供的缓冲区。 否则,此成员将设置为 NULL。
Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。
*Irp->UserBuffer 指向调用方提供的FILE_QUOTA_INFORMATION结构化输出缓冲区,该缓冲区接收卷的配额信息。
IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。
IrpSp-FileObject> 参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_QUERY_QUOTA期间无效,不应使用。
IrpSp->标志 可以是以下一个或多个值:
标志 | 含义 |
---|---|
SL_INDEX_SPECIFIED | 从配额列表中的条目开始扫描,其索引由 IrpSp-Parameters.QueryQuota.StartSid> 提供 |
SL_RESTART_SCAN | 在列表中的第一个条目处开始扫描。 如果未设置此标志,请从以前的IRP_MJ_QUERY_QUOTA请求恢复扫描。 |
SL_RETURN_SINGLE_ENTRY | 仅返回找到的第一个条目。 |
IrpSp->MajorFunction 设置为 IRP_MJ_QUERY_QUOTA。
IrpSp->Parameters.QueryQuota.Length 是 Irp-UserBuffer> 指向的缓冲区的长度(以字节为单位)。
IrpSp->Parameters.QueryQuota.SidList 是指向要返回其配额信息的 SID 列表的可选指针。 列表中的每个条目都是 一个FILE_GET_QUOTA_INFORMATION 结构。 此结构定义如下:
typedef struct _FILE_GET_QUOTA_INFORMATION { ULONG NextEntryOffset; ULONG SidLength; SID Sid; } FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
成员 | 含义 |
---|---|
NextEntryOffset | 如果缓冲区中存在多个条目,则下一个FILE_GET_QUOTA_INFORMATION项的字节偏移量。 如果此成员后面没有其他条目,则此成员为零。 |
SidLength | Sid 成员的长度(以字节为单位)。 |
Sid | 安全标识符 (SID) |
IrpSp->Parameters.QueryQuota.SidListLength 是 SID 列表(如果指定了 SID)的长度(以字节为单位)。
IrpSp->Parameters.QueryQuota.StartSid 是指向 SID 的可选指针,指示返回的信息以第一个以外的条目开头。 如果指定了 SID 列表,则忽略此参数。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈