Windows (XP-7) で、C++ で USB フロッピー ドライブと USB フラッシュ ドライブをプログラムで区別する信頼できる方法はありますか?
現時点では、WMI を使用して新しいWin32_LogicalDisk
インスタンスが検出されたときに更新を取得し、LogicalDisk オブジェクトの DriveType 属性を使用して基本的な種類を特定しています。フロッピー ドライブと USB フラッシュ ドライブが両方とも DriveType であることを除いて、これは非常にうまく機能しますDRIVE_REMOVABLE
。そのため、これら (フロッピーとフラッシュ) を区別するために、IOCTL_STORAGE_GET_HOTPLUG_INFO
デバイスがホットプラグ可能かどうかを判断するためのインターフェースであり、フロッピーではなくフラッシュドライブであることを意味するプリンシパルに取り組んでいました。繰り返しますが、内部フロッピー ドライブの場合、これは非常にうまく機能すると思います (少し効率が悪い場合は、WDK API と WMI の両方を使用して情報を取得します)。私が見る限り、フラッシュ ドライブと USB フロッピー ドライブを区別する明確な方法はありません。予約済みドライブ A: または B にマップされているかどうかを確認するなど、機能するプロパティがあることは知っています (編集: マシンにフロッピー ドライブが確実にある場合にのみ関連します - MS-KB を参照してください: Windows XP でドライブ文字の割り当てを変更する方法)、または説明を見ると、もう少し信頼できるものが欲しいです。
説明が長くなって申し訳ありませんが、明確にしたかっただけです!ありがとう