Я использую WMI, чтобы определить, когда подключены / вставлены различные типы носителей (USB-накопители, компакт-диски и т. Д.). Тем не менее, зашифрованные диски, такие как «SanDisk Enterprise FIPS USB», делают что-то забавное: похоже, они представляют собой CD-дисковод, с которого можно запустить приложение для разблокировки. Когда утилита разблокировки завершится, новый логический диск USB станет доступным для чтения / записи. Так что порядок событий, как я их вижу из WMI:
НО, нет записей Win32_DiskDriveToDiskPartition до тех пор, пока утилита не запустится, что является обычным способом определения томов по идентификатору оборудования. После долгих поисков и некоторые проб и ошибок, Я не смог найти архитектурно обоснованный метод связывания PHYSICALDRIVE2 с G :. Общепринятое мнение о том, что такие отображения не должны существовать, потому что физическим носителям не нужно иметь разделы или тома и т. Д., Но в моем случае я в основном знаю это делает существует, и будет иметь ошибку в некотором значительном смысле, если ожидаемое отображение отсутствует.
На данный момент моей единственной стратегией является перечисление всех томов и просто поиск соответствующего файла на всех дисководах CD, возможно, отслеживание любых таких устройств, которые были распознаны после подключения моего зашифрованного 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";
};
У меня был USB 3G ключ, который работал аналогичным образом.
Он представлял себя компьютеру как два совершенно разных устройства: привод CD-ROM и ключ 3G. В вашем случае это привод CD-ROM и жесткий диск.
Windows думает G:
на самом деле физический привод CD-ROM. G:
не раздел PHYSICALDISK2
,
Вот почему вы не можете найти прямую связь между G:
а также PHYSICALDISK2
: нет ни одного.
Если вы копаете достаточно глубоко, вы можете показать, что CD-ROM и диск находятся на одной шине USB. Я не знаю, если бы вы могли убедительно продемонстрировать с помощью программного обеспечения, что они на самом деле одно и то же устройство.
Других решений пока нет …