Я использую WMI, чтобы определить, когда подключаются / вставляются различные формы носителей (USB-накопители, компакт-диски и т. Д.). Однако зашифрованные диски, такие как «SanDisk Enterprise FIPS USB», делают что-то странное: похоже, они представляют себя как привод компакт-дисков, с которого можно запустить приложение для разблокировки. Когда утилита разблокировки завершит работу, новый логический USB-диск станет доступен для чтения / записи. Итак, порядок событий, который я вижу в WMI, следующий:
- USB вставлен
- Создается объект Win32_DiskDrive (см. \. \ PHYSICALDRIVE2 ниже)
- Создаются отдельные диски 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";
};