У меня есть несколько USB-накопителей, подключенных к компьютеру WinXP SP3, и мне нужно программно их различать - Мне нужно найти, какая буква диска соответствует какому устройству (в данном случае одно устройство ~ одно объем). Я могу получить их идентификаторы томов и буквы дисков, используя mountvol
, примерно так:
C:\WINDOWS\> mountvol
\\?\Volume{bdb681b2-1ddf-11dd-bf71-806d6172696f}\
C:\
\\?\Volume{6a8784f8-7406-11dd-a8c3-001e8c829b67}\
A:\
Также, используя devcon или диспетчер устройств, я могу видеть идентификаторы устройств:
C:\WINDOWS\> devcon resources *STOR*
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
Name: Generic volume
STORAGE\VOLUME\1&30A96598&0&SIGNATURED84ED84EOFFSET7E00LENGTH2543150400
Name: Generic volume
USBSTOR\DISK&VEN_KINGSTON&PROD_DATATRAVELER2.0&REV_1.00\0803240752536&0
Name: Kingston DataTraveler2.0 USB Device
Однако я не нашел способа связать идентификатор устройства и идентификатор тома / букву тома, как это делает диалоговое окно «Безопасное удаление оборудования» (поэтому я предполагаю, что это возможно):
(источник: piskvor.org )
Как вы можете видеть, это те же устройства, которые я вижу в devcon, и тот же том, что видит mountvol; но до сих пор я не нашел связи между ними.
Я нашел несколько связанных вопросов , но они, похоже, используют подход «все, что вы сначала найдете, это ваше USB-устройство», что не очень полезно в моем случае, поскольку будет подключено несколько похожих устройств (одного поставщика, часто одного типа).
Редактировать:
@ MSalters 'ответ выглядит многообещающим: в XP HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
имеет REG_BINARY
значений \DosDevices\x:
(где x
- [A-Z]); комментарий (UTF-16) имя правильного устройства (например,
\DosDevices\A:
= "\??\STORAGE#RemovableMedia#7&190c24e5&0&RM#{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}\"
, что соответствует
STORAGE\REMOVABLEMEDIA\7&190C24E5&0&RM
видно выше в списке устройств).
Посмотрим, так ли это.