IOCTL_MOUNTMGR_QUERY_POINTS IOCTL (mountmgr.h)
此 IOCTL 返回由卷(即装入点)、卷的唯一 ID 以及卷的非永久设备名称(如“\Device\HarddiskVolume1”)组成的三倍。 此 IOCTL 的输入是包含单个三重的 MOUNTMGR_MOUNT_POINT 结构。
如果输入三重包含唯一 ID 或非永久性设备名称,则请求将检索所有关联的装入点(符号链接),包括卷 GUID 路径名和驱动器号。 但是,如果输入三重具有符号链接,但不指定唯一 ID 或设备名称,则请求仅返回一个包含输入中提供的符号链接以及唯一 ID 和设备名称的三重。 调用方必须提交另一个具有唯一 ID 或设备名称的 IOCTL 才能检索剩余装入点。
如果输入三重为空,装载管理器将返回整个已装载的设备列表。
装载管理器返回与调用方提供的信息一样多的三倍。 如果调用方提交唯一 ID,装载管理器将返回具有该唯一 ID 的所有三重项。 如果调用方将卷路径名或驱动器号输入为符号链接名称,则装载管理器仅返回符号链接的三倍。 每个符号链接有一个条目。 如果调用方输入设备路径名,则装载管理器仅返回该设备路径名的三倍。 如果调用方再次输入唯一 ID 和符号链接,则装载管理器仅返回该符号链接的一个条目。 调用方会执行此作以获取设备路径名称。 如果调用方没有输入设备路径名、唯一 ID 或符号链接,则装载管理器将返回所有条目/三倍。
主要代码
输入缓冲区
装载管理器客户端在 Irp->AssociatedIrp.SystemBuffer的缓冲区开头初始化 MOUNTMGR_MOUNT_POINT 结构。 紧跟此结构后,MM 客户端将按该顺序加载符号链接名称、唯一 ID 和设备名称。
输入缓冲区长度
IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示输入缓冲区的大小(以字节为单位),该缓冲区必须大于或等于 sizeof(MOUNTMGR_MOUNT_POINT)
。
输出缓冲区
装载管理器在 Irp->AssociatedIrp.SystemBuffer的缓冲区开头初始化 MOUNTMGR_MOUNT_POINTS 类型的可变长度结构。 装载管理器将装入点(与指示卷关联的装入点)插入到此结构的 MountPoints[] 成员指向的地址。 每个装入点都由此 IOCTL 的 Input 节中定义的MOUNTMGR_MOUNT_POINT结构表示。
输出缓冲区长度
参数.DeviceIoControl.OutputBufferLength 在 IRP 的 I/O 堆栈位置指示输出缓冲区的大小(以字节为单位),输出缓冲区的大小必须大于或等于 sizeof(MOUNTMGR_MOUNT_POINTS)
。
输入/输出缓冲区
N/A
输入/输出缓冲区长度
N/A
状态块
如果作成功,则 状态 字段设置为STATUS_SUCCESS。
如果在装载的设备列表中未找到唯一 ID 和非持久性设备名称,则 状态 字段设置为STATUS_INVALID_PARAMETER。
如果 InputBufferLength 小于 sizeof(MOUNTMGR_MOUNT_POINT)
,则 状态 字段设置为STATUS_INVALID_PARAMETER。
如果 InputBufferLength 小于三个输入 ID 字符串的总长度,则 状态 字段设置为STATUS_INVALID_PARAMETER。
如果 outputBufferLength 小于 sizeof(MOUNTMGR_MOUNT_POINT)
,则 状态 字段设置为STATUS_INVALID_PARAMETER。
如果 OutputBufferLength 小于 sizeof(MOUNTMGR_MOUNT_POINTS)
加上装入点三倍的大小之和,则 状态 字段设置为STATUS_BUFFER_OVERFLOW。
如果在奇数地址(例如地址 & 01 != 0),则 状态 字段设置为STATUS_INVALID_PARAMETER。
言论
有关详细信息,请参阅 在存储类驱动程序中支持装载管理器请求。
要求
要求 | 价值 |
---|---|
标头 | mountmgr.h (包括 Mountmgr.h) |