IRP_MJ_QUERY_EA (FS 和筛选器驱动程序)
发送时间
当用户模式应用程序请求有关文件扩展属性的信息时,I/O 管理器、其他操作系统组件和其他内核模式驱动程序发送IRP_MJ_QUERY_EA请求。
操作:文件系统驱动程序
如果文件系统支持扩展属性,则文件系统驱动程序应处理查询并完成 IRP。 否则,它应返回STATUS_EAS_NOT_SUPPORTED。
操作:旧版文件系统筛选器驱动程序
筛选器驱动程序应将此 IRP 向下传递到堆栈上下一个较低的驱动程序。
参数
文件系统或筛选器驱动程序调用给定 IRP 的 IoGetCurrentIrpStackLocation ,以获取指向 IRP 中其自身堆栈位置的指针。 在以下参数中, Irp 指向 IRP , 而 IrpSp 指向 IO_STACK_LOCATION。 驱动程序可以使用 IRP 的以下成员和 IRP 堆栈位置中设置的信息来处理IRP_MJ_QUERY_EA请求:
DeviceObject 是指向目标设备对象的指针。
Irp->AssociatedIrp.SystemBuffer 指向要用作中间系统缓冲区的系统提供的输出缓冲区。 用于METHOD_BUFFERED I/O。
Irp->IoStatus 指向一个 IO_STATUS_BLOCK 结构,该结构接收最终完成状态和有关所请求操作的信息。
Irp->MdlAddress 是内存描述符列表的地址, (MDL) 描述接收扩展属性信息的输出缓冲区。 用于METHOD_DIRECT I/O。
Irp->UserBuffer 指向调用方提供的 FILE_FULL_EA_INFORMATION结构化输出缓冲区,该缓冲区接收扩展属性信息。 用于METHOD_NEITHER I/O。
IrpSp->FileObject 指向与 DeviceObject 关联的文件对象。
IrpSp-FileObject> 参数包含指向 RelatedFileObject 字段的指针,该字段也是FILE_OBJECT结构。 FILE_OBJECT 结构的 RelatedFileObject 字段在处理IRP_MJ_QUERY_EA期间无效,不应使用。
IrpSp->标志 可以是以下一个或多个值。
标志 | 含义 |
---|---|
SL_INDEX_SPECIFIED | 从扩展属性列表中的条目开始扫描,其索引由 IrpSp-Parameters.QueryEa.EaIndex> 提供。 |
SL_RESTART_SCAN | 从列表中的第一个条目开始扫描。 如果未设置此标志,请从以前的IRP_MJ_QUERY_EA请求恢复扫描。 |
SL_RETURN_SINGLE_ENTRY | 仅返回找到的第一个条目。 |
IrpSp->MajorFunction 设置为IRP_MJ_QUERY_EA。
IrpSp->Parameters.QueryEa.EaIndex 是开始扫描扩展属性列表的条目的索引。 如果未设置SL_INDEX_SPECIFIED标志或 IrpSp-Parameters.QueryEa.EaList> 指向非空列表,则忽略此参数。
IrpSp->Parameters.QueryEa.EaList 指向调用方提供的 FILE_GET_EA_INFORMATION结构化输入缓冲区,该缓冲区指定要查询的扩展属性。
IrpSp->Parameters.QueryEa.EaListLength 是 IrpSp-Parameters.QueryEa.EaList> 指向的缓冲区的长度(以字节为单位)。
IrpSp->Parameters.QueryEa.Length 是输出缓冲区的长度(以字节为单位)。
注解
当提供短缓冲区并返回STATUS_BUFFER_OVERFLOW时,NTFS 将返回适合的最后一个完整FILE_FULL_EA_INFORMATION条目。 提供短缓冲区并返回STATUS_BUFFER_TOO_SMALL时,NTFS 无法容纳任何FILE_FULL_EA_INFORMATION条目。
在 Windows Vista 及更高版本上,FAT16 不再支持扩展属性。
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈