2009-11-25 26 views
7

Windows(XP-7)では、C++でUSBフロッピードライブとUSBフラッシュドライブをプログラム的に区別する確実な方法はありますか?WindowsでUSBフロッピードライブとUSBフラッシュドライブをプログラムで区別する

現時点では、新しいWin32_LogicalDiskインスタンスが検出されたときにWMIを使用して、LogicalDiskオブジェクトのDriveType属性を使用して基本タイプを把握しています。フロッピードライブとUSBフラッシュドライブの両方がDriveType DRIVE_REMOVABLEであることを除けば、これはかなりうまくいきます(フロッピーとフラッシュを区別するために、私はIOCTL_STORAGE_GET_HOTPLUG_INFOインターフェイスを使ってデバイスがホットプラグ可能かどうかを調べています)プリンシパルでは、フラッシュドライブではなくフロッピーであることを意味していました。ここでも、内部フロッピードライブの場合、これはかなりうまくいくと思います(情報を取得するためにWDK APIとWMIの両方を使用すると少し効率が悪いと思いますが)。残念ながらUSBフロッピードライブも多くの時間ホットプラグ可能です。私が見ることができるフラッシュとUSBフロッピードライブを区別する明確な方法はありません。私は、かもしれないというプロパティがあることを知っています。予約されたドライブA:またはBにマッピングされているかどうかをチェックするのと同じですか(編集:フロッピードライブが確実にあれば--参照)もう少し信頼できるものが本当に好きです。

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

+1

A:とB:は、floppies_の_reservedですか?ソース? – MSalters

+1

私はこれを[MS-KB:Windows XPでドライブ文字の割り当てを変更する方法](http://support.microsoft.com/kb/307844)から入手しました。マシンにフロッピードライブがない場合は、他のドライブに使用されている可能性があります。間違いなく、誤った名称でドライブがフロッピードライブであるかどうかを示すものではありません。私は質問を少し明瞭にするために言い直します。 – user82116

+0

これは、ドライブレターを手動で変更しているユーザーの視点からのものです。その後、OSの観点から考えていました。 – MSalters

答えて

5

Win32_LogicalDisk.MediaTypeを試しましたか?それはフロッピーディスクのための特定の列挙を持っています。ドライブにディスクがないときに試してみてください。

+0

誰かがこれを必要とする場合、私のテストでは、メディアが存在しないときに、おおよそのメディアタイプ(確かにUSBフロッピーとフラッシュドライブで十分です)を正しく返すことがわかりましたが、[docs] (http://msdn.microsoft.com/en-us/library/aa394173%28VS.85%29.aspx): "Win32_LogicalDisk.Media Type:論理ドライブに現在存在するメディアの種類。この値は、次のいずれかになります。 Winioctl.hで定義されているMEDIA_TYPE列挙体の値。ドライブにメディアがない場合、リムーバブルドライブの値が正確でないことがあります。 – user82116

+0

もちろん、「ドライブにメディアがない」という状況は、メディアをロードするドライブであることを意味し、したがってUSBフラッシュドライブではありません。 – MSalters

+0

下の返信をご覧ください。 また、多くのUSBフラッシュディスクは「リムーバブルメディア」として宣言し、「ドライブにメディアなし」で始まります(コマンドを受け入れる準備ができたらメディアに信号を送ります) – Boris

4

サイズ属性(USB> 1.4MB)を使うことができます。すぐにいつでも1.4MBのフラッシュドライブを満たす可能性はありません。

+0

フロッピーフォーマットは日本国外では珍しいと思いますが、2.88MB以上にしてください。 – MSalters

+0

すべてのZipドライブ(最大750MBをサポート)がフロッピーであるとは思われません。 –

5

USBレベルでは、従来のDisk on KeyとUSB-Floppyを区別する方法はありません。つまり、ウィンドウそのものは、何が何であるかを確実に伝えることはできません。

収集できるヒントはいくつかあります。 フロッピーは: a。大量記憶プロトコルCBI/CB b。 SCSI UFI

しかし、USBデバイスの世界では、誰もが何でもしています。唯一のテストは「Windows上で動作しますか?」です。そして、Windowsは、リムーバブルメディアがセットされ、従来のフロッピーサイズのUSBデバイスであれば、フロッピーであると見なします。

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

3

確認する明白なプロパティはIOCTL_DISK_GET_DRIVE_GEOMETRYです。これにより、(とりわけ)MEDIA_TYPEが得られます。 RemovableMediaFixedMedia以外のものはフロッピーです。

関連する問題