7

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 でドライブ文字の割り当てを変更する方法)、または説明を見ると、もう少し信頼できるものが欲しいです。

説明が長くなって申し訳ありませんが、明確にしたかっただけです!ありがとう

4

4 に答える 4

5

USBレベルでは、従来のDiskonKeyとUSB-Floppyを区別する方法はありません。つまり、ウィンドウ自体は、何が何であるかを確実に判断することはできません。

収集できるヒントがいくつかあります。フロッピーは次のことを行う必要があります。大容量記憶プロトコルCBI/CBを持っているb。SCSI UFI

しかし、USBデバイスの世界では、誰もがやりたいことを何でもします。唯一のテストは、「Windowsで動作しますか」です。また、Windowsはサイズをチェックするだけで、リムーバブルメディアセットと従来のフロッピーサイズを備えたUSBデバイスの場合、フロッピーと見なされます。

「本物の」フロッピーについては言えませんが、USBが接続されているため、明確な方法はありません。

于 2009-11-26T08:49:12.063 に答える
5

Win32_LogicalDisk.MediaType を試しましたか? フロッピー ディスクに固有の列挙があります。ドライブにディスクがない場合は、必ず試してください。

于 2009-11-25T15:44:49.410 に答える
4

チェックする明らかなプロパティはですIOCTL_DISK_GET_DRIVE_GEOMETRY。これは(とりわけ)あなたを取得しますMEDIA_TYPERemovableMediaと以外は何でもFixedMediaフロッピーです。

于 2009-11-26T10:07:55.463 に答える
4

サイズ属性 (USB > 1.4MB) を使用できますが、すぐに 1.4MB フラッシュ ドライブに遭遇する可能性はありません。

于 2009-11-25T14:47:13.413 に答える