QA@IT
この質問・回答は、@ITの旧掲示板からインポートされたものです。

USBデバイスの再認識について

いつも参考にさせて頂いています。

現在、USBデバイスを安全に取り外し可能な状態にした後で、USBデバイスを取り外してから再接続を行ったりせずに、接続したまま再認識させる方法について調べています。

【環境】
・対象OS:WindowsVista Business
・開発環境:Visual Studio 2005
・開発言語:C++

現状、ツールによってUSBデバイスを正常に切断するところまではできてます。
切断は、WindowsDDKのCM_Request_Device_Eject()を用いて切断しています。

自身はWindowsDDKのことは初心者なので、USBデバイスの再認識が可能か否かも把握出来ていない状況です。

上記の事が可能かどうかや、WindowsDDKやC++以外を用いてUSBデバイスの再認識が可能な方法があれば、
アドバイスして頂けないでしょうか。

よろしくお願いします。

質問者:ブン

回答

こちらでは初めて投稿します。オショウです。

1年以上前の記事なので、どこかで解決策を見つけられているとは
思いますが、今後の為にカキコしました。

USBデバイスを安全な取り外しにした後、物理的に取り外さない状態
での再認識は、USBデバイスの機器仕様に依存する部分もあろうかと
思いますが、手元の機材では動作を確認しできましたので、お試し
下さい。

USBデバイスには親子関係として、その親のハブ、その親のHostControler
があります。そのHostControlerを、一旦無効化した後、有効化すれ
ば、その子としてのUSBデバイスは再認識されます。

手動で確認するならば、デバイスマネージャの当該USBデバイスの
詳細で親のHostControlerを探し、そのHostControlerを無効化。
後に有効化で再認識されます。

手動で行えることは自動で(プログラムで)行えるので、お試し
あれ。

※ 私もデバイスの有効化・無効化やデバイスの取り外し等を
  プログラミングしておりましたので・・・

動作確認環境は
OS:Vista Ultimate SP1
言語:VisualStudio2008(VB/C++) SP1

当然、管理者権限必要です

以上。

投稿者:オショウ

編集 履歴 (0)

基本的には、ターゲットのデバイスだけを再認識する手法は存在しません。

オショウさんの書き込み (2009-04-14 22:51) より:

USBデバイスには親子関係として、その親のハブ、その親のHostControler

があります。そのHostControlerを、一旦無効化した後、有効化すれ

ば、その子としてのUSBデバイスは再認識されます。

これって、対象のデバイス以外(同じコントローラに依存しているデバイス)も一旦切断されたりしませんか?
目的を確かに満たせるかもしれませんが、やり過ぎなところがあるのではないかと懸念しています。

投稿者:Azulean

編集 履歴 (0)

元々、安全な取り外しを行ったにも関わらず引き抜かないで
再認識させる動作自体が、逸脱している行為だと考えますの
で、『やりすぎ』以前だと思いますが。

機能として可能か不可能か?

と言う面を強調したに過ぎません。

尚、1コントローラ1デバイスのはずですので、問題ないと
思ってますが・・・危険行為には違いないので、ことデバイ
ス操作に関しては、自己責任かと。

繋がっている機器(デバイスの素性)によっては、機器側が
応答しなくなると言う現象も確認しています。

※ FAソフト屋なんで、特殊な機器をUSBデバイスに接続
  して稼働させていますので、USBインターフェースのチ
  ップ相性で、どうしてもその機器を接続しないといけない
  場合なんか、最悪他のUSBデバイスすべて使えなくなる
  と言うとんでもない機材があります。
  メーカーに文句言ったら最近USBデバイスのチップを他
  製品に交換したのでその問題は解消したと・・・
  で、問題なら買い替えて・・・と言ってました。

あくまで全てユーザー責任に転嫁されますので、当然このよう
な方法は正常な行為とは思っていませんので。あしからず。

以上。

投稿者:オショウ

編集 履歴 (0)

オショウさんの書き込み (2009-04-15 00:16) より:

機能として可能か不可能か?

と言う面を強調したに過ぎません。

(中略)

あくまで全てユーザー責任に転嫁されますので、当然このよう

な方法は正常な行為とは思っていませんので。あしからず。

できれば、その但し書きを最初に記載して頂ければと思います。
技術的に可能であっても、「こういった理由があるからやるべきではない」、「やっても良いけど自分で責任もってね」と書いておくことで、質問者に再考を促せる可能性があります。

私もよくやってしまうのですが、単純に「技術的に可能」ということだけを示すと、憂慮しているところまで読み取ってもらえず、後々にトラブル(手戻り・発売後の顧客クレーム)を生む要因になるかもしれません。
また、今回の質問者以外の第三者(検索でたどり着いた方等)が鵜呑みにしてしまうリスクも残ります。

特に@ITの現会議室は返信がまもなくできなくなります。
リスクのある情報、誤った情報等に対して指摘、フォローする機会を失うことになりますので、ご留意頂ければと思います。
[ メッセージ編集済み 編集者: Azulean 編集日時 2009-04-15 00:38 ]

投稿者:Azulean

編集 履歴 (0)

留意します。

以上。

投稿者:オショウ

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。