IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
上的文档有点令人困惑... <{1>}结构中应该返回哪种类型的ID?
的文档
MOUNTDEV_UNIQUE_ID
表示:
typedef struct _MOUNTDEV_UNIQUE_ID { USHORT UniqueIdLength; UCHAR UniqueId[1]; } MOUNTDEV_UNIQUE_ID, *PMOUNTDEV_UNIQUE_ID;
- 包含唯一卷ID的长度。
UniqueIdLength
- 包含唯一的卷ID。唯一卷名称的格式为
UniqueId
,其中GUID是标识卷的全局唯一标识符。
然而,这里有一些奇怪的地方:"\??\Volume{GUID}\"
的确切格式应该是什么?如果它是UniqueId
格式,那么\??\Volume{GUID}\
字段的重点是什么?它们的大小不一样吗?否则,设备ID需要采用什么格式?
此外,这是设备 ID还是卷 ID?换句话说,这应该是每个 medium (例如CD)还是每个设备(CD驱动器)都是唯一的?
答案 0 :(得分:0)
这种结构在MS API中很常见 - UniqueID[1]
变量只是一个占位符,实际上它被用作UniqueId[UniqueIdLength]
变量。
每个媒体和每个设备的ID都是唯一的 - 这取决于您是在与卷驱动程序还是设备类驱动程序进行通信。该ID旨在识别“可以安装的东西” - 例如, CD-ROM设备,固定磁盘分区或未分区的可移动磁盘。安装管理器使用ID a.o.查找之前安装此特定卷的位置,并在同一点重新安装。
答案 1 :(得分:0)
来自MSDN
也许对这种结构存在误解。
我调用了DeviceIoControl(IOCTL_MOUNTDEV_QUERY_UNIQUE_ID)
并获得了与设备接口路径类似的格式的字符串,但它只是前缀4个字符的不同,然后保存在注册表\HKLM\SYSTEM\MountedDevices
中。