USB Descriptorの情報取得 – プログラミング – Home

通知
すべてクリア

USB Descriptorの情報取得


もも
 もも
(@もも)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

VC++6.0 Win2k/XP

USB Descriptor(Device,Config,Interface,Endpoint,String)の情報を
取得して、表示するアプリケーションを作成したいのですが、
どうやって情報を取得すればよいのか分かりません。

本や、ホームページ等でもかまいませんので、何かヒントになりそうな
ものをご存知の方がいましたら、ぜひ教えてください。

よろしくお願いします。


引用解決済
トピックタグ
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

Google で検索してみました
http://www.google.com/search?q=%22usb+descriptor%22+DDK&ie=UTF-8&oe=UTF-
8&hl=ja&lr=
その結果幾つか見つかりましたが
http://msdn.microsoft.com/library/default.asp?url=/library/en-
us/still/hh/still/stifnc_6p7t.asp
http://www.microsoft.com/hwdev/archive/BUSBIOS/usbpnp.asp
などは如何(いかが)でしょうか。参考になりましたか?


返信引用
もも
 もも
(@もも)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

島さん、どうもありがとうございます。
とても参考になりました。

DeviceIoControl()のCodeに「IOCTL_GET_USB_DESCRIPTOR」を
指定することで情報が取得できそうです。

「できました!」と報告がしたくてがんばってみたのですが、
現状は、関数は失敗してERROR_NOT_SUPPORTEDというエラーと
なります。パラメータの値等、もうちょっと見直してみますね。

どうもありがとうございました。


返信引用
もも
 もも
(@もも)
ゲスト
結合: 23年前
投稿: 36
Topic starter  

いろいろ試してみましたが、どうしても解決できませんでした。
(ERROR_NOT_SUPPORTEDというエラーが出てしまいます。)

海外の記事なども検索してみましたが、そこでも同様の状況で
困ってる人がいました・・・
そこでは、「IOCTL_GET_USB_DESCRIPTOR」のコマンドは、全てのデバイスが
対応しているわけではなく、実際ほとんどのものが対応していないと
いうような意見を発言されている方がいらっしゃいました。

これは本当なのでしょうか?
本当なのであれば、他の方法でUSB Descriptorの情報を取得しなければ
ならないことになるのですが、何かご存知の方がいらっしゃいましたら
アドバイスいただけないでしょうか?

よろしくお願いいたします。


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
 

>ももさん

わたしも、現在USBHDDのドライブ情報を取得できないか色々と探しています。

私の場合、戻り値に
 ERROR_NOT_SUPPORTED
が戻ってきません。

値の設定が間違っているのでしょうか?

------------------------------------------------------------

char bufa[2048];
USB_DEVICE_DESCRIPTOR* udd = (USB_DEVICE_DESCRIPTOR*)bufa;

USBSCAN_GET_DESCRIPTOR lpInBuffer = {USB_DEVICE_DESCRIPTOR_TYPE, 0, 0};

ZeroMemory( udd, sizeof (bufa) );
flg = DeviceIoControl(
hDevice,// USBドライブのハンドル(取得は確認済み)
IOCTL_GET_USB_DESCRIPTOR,
&lpInBuffer,
sizeof (lpInBuffer),
udd,
sizeof( bufa ),
&dwRet,
NULL);

------------------------------------------------------------

宜しくお願いします。


返信引用
R7038XX
 R7038XX
(@R7038XX)
ゲスト
結合: 22年前
投稿: 22
 

もう少し別な手段を取り、「IoCallDriver」を使用したUSBの詳細情報の取得を行うとしていま
す。

手順としては
1・「URB」構造体の領域確保
2・「USB_DEVICE_DESCRIPTOR」構造体の領域確保
3・「UsbBuildGetDescriptorRequest」を使用して「URB」構造体にセット
4・「IRP」構造体へポインタを指定する為「IoBuildDeviceIoControlRequest」を使用
5・「IoCallDriver」を使用して詳細を取得
以上です。

しかし、USB制御に関しては殆ど素人のため、4番目の「IRP」に代入する手順の部分で、
「IoBuildDeviceIoControlRequest」の第2引数である「DEVICE_OBJECT」構造体の
値の指定方法が分かりません。

「DEVICE_OBJECT」構造体へ値をセットするための関数はあるのでしょうか?


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました