WMIを使用して、さまざまな形式のメディア(USBドライブ、CDなど)がいつ接続/挿入されるかを判断しています。ただし、「SanDisk Enterprise FIPS USB」などの暗号化されたドライブは、ファンキーな機能を果たします。ロック解除アプリケーションを起動できるCDドライブとして表されているように見えます。ロック解除ユーティリティが終了すると、新しいUSB論理ディスクが読み取り/書き込みに使用できるようになります。したがって、WMIから見たイベントの順序は次のとおりです。
- USBが挿入されています
- Win32_DiskDriveオブジェクトが作成されます(以下の\。\ PHYSICALDRIVE2を参照)
- 個別のWin32_LogicalDiskが作成されます。1つは以下にコピーし(G :)、ランチャーを保持し、もう1つ(私の場合はM:)は最終的にアクセス可能なドライブです。
ただし、ユーティリティが実行されるまで、 Win32_DiskDriveToDiskPartitionエントリは存在しません。これは、ハードウェアIDからボリュームを見つける通常の方法です。多くのグーグルといくつかの試行錯誤の結果、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";
};