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_MOUNT_POINT 结构。 紧跟此结构后,MM 客户端按该顺序加载符号链接名称、唯一 ID 和设备名称。

输入缓冲区长度

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

输出缓冲区

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

输出缓冲区长度

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.OutputBufferLength 指示输出缓冲区的大小(以字节为单位),该大小必须大于或等于 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。

注解

有关详细信息,请参阅 支持存储类驱动程序中的装载管理器请求

要求

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

另请参阅

MOUNTMGR_MOUNT_POINTS