接続されているデバイスを判別するには

[戻る]
ぶーかす 2008/09/07(日) 16:26:06
お力をお貸しください。

PCに接続されているデバイスが何であるかを判別する方法はありますでしょうか?
実際には、FD、CD-ROM、DVD-ROM、USB Memory …など何が接続されているかを知る方法
となります。

開発環境:
 WindowsXP
 VC++ 

宜しくお願いします。

しま 2008/09/08(月) 03:35:29
#コンパイラーのバージョンは忘れずに書いて下さいね

>PCに接続されているデバイスが何であるかを判別する方法
ないわけではありませんがあなたの望むようなものかどうかは判りません

GetDriveType:
http://msdn.microsoft.com/ja-jp/library/cc429310.aspx

だとか、

GetDeviceIoControl:
http://msdn.microsoft.com/ja-jp/library/cc429164.aspx

にある IOCTL_STORAGE_GET_MEDIA_TYPES でもOSが判別している結果は
ある程度取得できるが、100%確実に装置の種別が取得できると期待
してはいけないということがわかった上で使うようにお勧めします

たとえば、USB接続の記憶装置はOS自身(というよりはエクスプローラー)が
USBメモリーをさしても、MOドライブだと誤って表示することがあります
また、CFやSDやのリーダーライターをUSB接続している場合、実際に記憶媒体を
挿さなければUSBメモリーとは違ってディスク容量が得られません
つまり GetDriveType で判断しようとしても媒体が非固定な装置ということ
以上はたぶん判りません(FD,MO との区別もつかないでしょう)

又、USB接続のフロッピー互換(FDの読み書きも可能な)装置の場合、
媒体が入ってなければ装置の能力が判っても使用者がFDを使うか
高密度FD媒体(100M〜120MB)を使うかは予測できませんのでFDなのか
高密度FDなのかは不明ということです

tetrapod 2008/09/08(月) 09:45:15
要するに「デバイスマネージャ」を作りたいということかな?
WMI を調べて味噌。ただサンプルはVBばっかりなんだよなー。

金魚ちゃん 2008/09/08(月) 13:29:43
>FD、CD-ROM、DVD-ROM、USB Memory …など何が接続されているかを知る方法
GetDeviceIoControl()関数で IOCTL_CDROM_DISK_TYPE を取得可能。

IOCTL_CDROM_DISK_TYPE(Discタイプ取得)
CD-ROM、CD-R
DVD-ROM、DVD-R、DVD-RAM、DVR-RW(フォーマット済み)、DVR-RW(シーケンシャル記録)
DVD+R、DVD+RW
などが判別可能らしい。
http://www.h5.dion.ne.jp/~sfsf11/spti.html

これを利用するには DDK が必要だって。
Microsoft社に注文しなければならないようです。
※注文の仕方だれか教えてくれないかな。僕にも。

ぶーかす 2008/09/08(月) 14:15:37
皆様、情報ありがとうございます。

> 要するに「デバイスマネージャ」を作りたいということかな?

はい、そうです。
デバイスの一覧を作成し、その中から自分が必要とする FD、CD-ROM、DVD-ROM、USB 
Memory …を抽出して、最終的にはドライブレターが取得できれば嬉しいです。

頂いた情報 GetDeviceIoControl等ですと、USBで接続されているリムーバブル系デバイス
の見分けが出来ないのかなぁ…という状況です。

現在、SetupDiGetDeviceRegistryProperty などで引き続き挑戦中です。
上手き行きましたら報告させて頂きます。

シャノン 2008/09/08(月) 14:56:50
> これを利用するには DDK が必要だって。
> Microsoft社に注文しなければならないようです。

最新の DDK は無料でダウンロードできます。
https://connect.microsoft.com/site/sitehome.aspx?SiteID=148

tetrapod 2008/09/08(月) 15:03:31
ちょっと情報が古いようですよ>金魚ちゃん
http://www.google.co.jp/search?hl=ja&q=DDK+ダウンロード&lr=&aq=f&oq=

ドライブ名がマウントされていない状態 (=未初期化ハードディスク等) では
\\.\D: は開けないわけで \\.\PhysicalDriveX とかその辺が必要になる。
そこまでやってくなら WMI 推奨

古いスレッドには追加発言できません。