2

上的文档IOCTL_MOUNTDEV_QUERY_UNIQUE_ID有点令人困惑......到底应该在结构中返回什么MOUNTDEV_UNIQUE_ID样的 ID ?

的文档

typedef struct _MOUNTDEV_UNIQUE_ID {
  USHORT  UniqueIdLength;
  UCHAR  UniqueId[1];
} MOUNTDEV_UNIQUE_ID, *PMOUNTDEV_UNIQUE_ID;

说:

UniqueIdLength

  • 包含唯一卷 ID 的长度。

UniqueId

  • 包含唯一的卷 ID。唯一卷名的格式是"\??\Volume{GUID}\",其中 GUID 是标识卷的全局唯一标识符。

但是,这里有些奇怪: 的确切格式应该是什么UniqueId?如果它的意思是采用\??\Volume{GUID}\格式,那么该UniqueIdLength字段的意义何在——它们的大小不都一样吗?否则,设备 ID 需要采用什么格式?

此外,这是设备ID 还是ID?换句话说,这应该是每个介质(例如 CD)还是每个设备(CD 驱动器)都是唯一的?

4

2 回答 2

0

这种结构在 MS API 中很常见——UniqueID[1]变量只是一个占位符,实际上它被用作UniqueId[UniqueIdLength]变量。

每个介质和每个设备的 ID 都是唯一的 - 这取决于您是在与音量驱动程序还是设备类驱动程序通信。该 ID 旨在识别“可以安装的东西”——例如 CD-ROM 设备、固定磁盘分区或未分区的可移动磁盘。安装管理器使用 ID ao 来查找此特定卷之前安装的位置,并在同一点重新安装它。

于 2011-04-06T21:59:24.637 回答
0

来自MSDN

也许对这种结构存在误解。

我调用DeviceIoControl(IOCTL_MOUNTDEV_QUERY_UNIQUE_ID)并得到一个与设备接口路径格式相似的字符串,但它只是前缀4个字符不同,然后它保存在注册表中\HKLM\SYSTEM\MountedDevices

于 2012-03-09T08:18:03.033 回答