Когда подключен зашифрованный USB-накопитель, как я могу использовать WMI, чтобы найти логический диск «пусковой установки»?

Я использую WMI, чтобы определить, когда подключаются / вставляются различные формы носителей (USB-накопители, компакт-диски и т. Д.). Однако зашифрованные диски, такие как «SanDisk Enterprise FIPS USB», делают что-то странное: похоже, они представляют себя как привод компакт-дисков, с которого можно запустить приложение для разблокировки. Когда утилита разблокировки завершит работу, новый логический USB-диск станет доступен для чтения / записи. Итак, порядок событий, который я вижу в WMI, следующий:

  1. USB вставлен
  2. Создается объект Win32_DiskDrive (см. \. \ PHYSICALDRIVE2 ниже)
  3. Создаются отдельные диски Win32_LogicalDisks, один из которых я скопировал ниже (G :) и содержит средство запуска, а другой (M :, в моем случае) - это диск, который в конечном итоге будет доступен.

НО записи Win32_DiskDriveToDiskPartition не существуют до тех пор, пока не будет запущена утилита, что является обычным способом поиска томов по идентификатору оборудования. После долгих поисков в Google и проб и ошибок я не удалось найти архитектурно обоснованный метод связывания PHYSICALDRIVE2 с G :. Общий консенсус в сети заключается в том, что вы не должны ожидать существования таких сопоставлений, потому что на физических носителях не обязательно должны быть разделы, тома и т. Д., Но в моем случае я в основном знаю, что он существует и выдает ошибку каким-либо значимым образом, если ожидаемое отображение отсутствовало.

На данный момент моя единственная стратегия - перечислить все тома и просто найти соответствующий файл на всех компакт-дисках, возможно, отслеживая любые такие устройства, которые были распознаны после подключения моего зашифрованного USB-накопителя. Очевидно, это уродливый взлом. Предложения?

TargetInstance = 
instance of Win32_LogicalDisk
{
    Caption = "G:";
    CreationClassName = "Win32_LogicalDisk";
    Description = "CD-ROM Disc";
    DeviceID = "G:";
    DriveType = 5;
    MediaType = 11;
    Name = "G:";
    SystemCreationClassName = "Win32_ComputerSystem";
};

instance of Win32_DiskDrive
{
    Caption = "SanDisk Enterprise FIPS USB Device";
    ConfigManagerErrorCode = 0;
    ConfigManagerUserConfig = FALSE;
    CreationClassName = "Win32_DiskDrive";
    Description = "Disk drive";
    DeviceID = "\\\\.\\PHYSICALDRIVE2";
    FirmwareRevision = "6.61";
    Index = 2;
    InterfaceType = "USB";
    Manufacturer = "(Standard disk drives)";
    MediaLoaded = TRUE;
    Model = "SanDisk Enterprise FIPS USB Device";
    Name = "\\\\.\\PHYSICALDRIVE2";
    Partitions = 0;
    SerialNumber = "u";
    Signature = 0;
    Status = "OK";
    SystemCreationClassName = "Win32_ComputerSystem";
};

person Rollie    schedule 29.10.2012    source источник


Ответы (1)


У меня был ключ USB 3G, который работал аналогичным образом.

Он представился компьютеру как два совершенно разных устройства: привод CD-ROM и ключ 3G. В вашем случае это привод CD-ROM и жесткий диск.

Windows считает, что G: на самом деле является физическим приводом компакт-дисков. G: не является разделом PHYSICALDISK2.

Вот почему вы не можете найти прямую связь между G: и PHYSICALDISK2: ее нет.

Если копнуть достаточно глубоко, можно показать, что CD-ROM и диск находятся на одной шине USB. Я не знаю, сможете ли вы убедительно продемонстрировать с помощью программного обеспечения, что это на самом деле одно и то же устройство.

person arx    schedule 29.10.2012
comment
Да, я вроде как проработал большую часть этого. Я чувствую, что должна быть информация, которая связывает PHYSICALDISK2 с окнами дисков, смонтированными в ответ на его подключение, в надежде, что она действительно существует, и кто-то здесь знает об этом :) - person Rollie; 30.10.2012
comment
Но G: не монтируется в ответ на подключение PHYSICALDISK2. G: монтируется в ответ на подключение (воображаемого) CD-ROM. На самом деле соединения нет. - person arx; 30.10.2012
comment
Но есть хранилище на G :; когда я дважды щелкаю по нему в проводнике, мне предоставляется набор файлов, поэтому должна быть связь где-то между PHYSICALDISK2 и G :. - person Rollie; 30.10.2012
comment
Этого не следует. У моего USB-ключа 3G было хранилище (в основном программа установки) на поддельном устройстве CD-ROM. Но файлы явно не хранились на устройстве 3G. Нет необходимого соединения между хранилищем CD-ROM и флэш-хранилищем. Что касается Windows, вы подключили два отдельных устройства хранения. Возможно, внутренне ваш USB-накопитель реализует CD-ROM как раздел флэш-памяти, доступный только для чтения, но этот факт не будет виден Windows. И более вероятно, что реальная реализация - это отдельное фальшивое CD-устройство + флеш-накопитель. - person arx; 30.10.2012
comment
Я думаю, что понимаю то, что вы говорите, так что, возможно, я неправильно понял, что представляет собой PHYSICALDISK. Я мог бы использовать идентифицирующую информацию для USB-порта, к которому подключено устройство, но я не видел, чтобы эта информация была легко доступна через какой-либо из объектов WMI. Также интересно отметить, что когда я запускаю программу запуска на G :, она «знает», что логический диск M: настроен для использования USB-накопителем. Интересно, какой механизм они используют, чтобы найти этот том из лаунчера, если они рассматриваются как 2 несвязанных устройства? - person Rollie; 30.10.2012
comment
Я предполагаю, что программа установки на G: идентифицирует связанный с ней флеш-накопитель, проверяя идентификатор USB-устройства для любых букв дисков, поддерживаемых USB-устройствами. Этот ответ предполагает, что WMI часто бесполезен для связывания букв дисков и USB-устройств. В этой статье объясняется, как получить путь к USB-устройству из буквы диска с помощью API настройки. - person arx; 30.10.2012
comment
Не могу сказать, что мне очень нравится решение последней статьи ... Думаю, я видел первое в своем исследовании. Не похоже, что здесь есть волшебная пуля. - person Rollie; 31.10.2012