Уникальность IOCTL_MOUNTDEV_QUERY_UNIQUE_ID - PullRequest
2 голосов
/ 07 апреля 2011

Документация по IOCTL_MOUNTDEV_QUERY_UNIQUE_ID немного сбивает с толку ... точно какой тип идентификатора должен быть возвращен в структуре MOUNTDEV_UNIQUE_ID?

Документация для

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

гласит:

UniqueIdLength

  • Содержит длину уникального идентификатора тома.

UniqueId

  • Содержит уникальный идентификатор тома.Формат уникальных имен томов "\??\Volume{GUID}\", где GUID - это глобально уникальный идентификатор, который идентифицирует том.

Однако здесь есть что-то странное: каким должен быть точный формат UniqueId?Если он должен быть в формате \??\Volume{GUID}\, то какой смысл в поле UniqueIdLength - они все одного размера?В противном случае, в каком формате должен быть указан идентификатор устройства?

Кроме того, это идентификатор устройства или том идентификатор?Другими словами, должен ли он быть уникальным для среднего (например, CD) или для устройства (CD-привода)?

Ответы [ 2 ]

0 голосов
/ 09 марта 2012

С MSDN

Может быть, есть недоразумение относительно этой структуры.

Я позвонил DeviceIoControl(IOCTL_MOUNTDEV_QUERY_UNIQUE_ID) и получил строку в формате, аналогичном формату Device Interface Path, но он просто отличается от префикса 4 символов, а затем он сохранен в реестре \HKLM\SYSTEM\MountedDevices.

0 голосов
/ 07 апреля 2011

Этот тип структуры довольно распространен в MS API - переменная UniqueID[1] является просто заполнителем, в действительности она используется как переменная UniqueId[UniqueIdLength].

Идентификатор уникален как для среды, так и для каждого устройства - это зависит от того, говорите ли вы с драйвером тома или драйвером класса устройства. Идентификатор предназначен для идентификации «чего-то, что может быть смонтировано» - например, устройство CD-ROM, фиксированный раздел диска или неразмеченный съемный диск. Менеджер монтирования использует идентификатор a.o. чтобы найти, где этот конкретный том был смонтирован ранее, и перемонтировать его в ту же точку.

...