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_MJ_DEVICE_CONTROL

输入缓冲区

装载管理器客户端初始化在 Irp-AssociatedIrp.SystemBuffer> 缓冲区开头的 Mountmgr.h 中定义的 MOUNTMGR_MOUNT_POINT 结构。 紧跟在此结构之后,MM 客户端将按此顺序加载符号链接名称、唯一 ID 和设备名称。

输入缓冲区长度

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示输入缓冲区的大小(以字节为单位),该大小必须大于或等于 size of (MOUNTMGR_MOUNT_POINT) 。

输出缓冲区

装载管理器初始化在 Irp-AssociatedIrp.SystemBuffer> 缓冲区开头的 Mountmgr.h 中定义的 MOUNTMGR_MOUNT_POINTS 类型的可变长度结构。 装载管理器将此结构的 MountPoints[] 成员指向的地址处插入与指示的卷关联的装入点。 每个装入点由此 IOCTL 的 “输入 ”部分中定义的MOUNTMGR_MOUNT_POINT结构表示。

状态块

如果操作成功,“ 状态” 字段将设置为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。

要求

要求
Header mountmgr.h (包括 Mountmgr.h)

另请参阅

MOUNTMGR_MOUNT_POINTS