IOCTL_MOUNTDEV_QUERY_UNIQUE_ID的唯一性

时间:2011-04-06 21:41:54

标签: winapi ioctl mount-point

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驱动器)都是唯一的?

2 个答案:

答案 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中。