Vista64でバルク転送でエラー発生
投稿者: vritra13_krishna13 投稿日時: 土, 2008/09/27 - 18:24
WINUSBを使用して、VISTA64で動作させるプログラムを作成しています。
ところがWinUsb_WritePipeやWinUsb_readPipeを実行中に
USBメモリーやUSBハブを抜き差しすると、これらの関数が
エラー(::GetLastError=31)となってしまいます。
このプログラムをXPSP2やVISTAの32ビットで同じようなことを行ってもエラーは発生しません。
何か情報をお持ちの方がいましたらお教えいただければ幸いです。

Vista64bit版でだけの不
Vista64bit版でだけの不具合という事だと、バグ臭いですね。
VistaはSP1で、UMDFは1.7でしょうか?
一応、確認をお願いします。
hidaka
ご回答ありがとうご
ご回答ありがとうございます。
>VistaはSP1で、UMDFは1.7でしょうか?
そうです。
調査を進めていく中で、VISTA64ビットだけの問題でないことが、
昨日わかりました。
XPSP2、VISTA32ビット、VISTA64ビットでも問題は発生します。
複数のPCでテストを行うと、1台だけエラーが発生しないPCを見つけました。
そこで、エラーになるPCと何が違うのか調べてみたところ、
デバイスマネージャーのUSBコントローラのホストコントローラーが違いました。
エラーが出るのは、インテルのホストコントローラーを使用しています。
エラーが出ないのは、標準ホストコントローラーを使用しています。
残念ながら、ホストコントローラーの違いで何故エラー発生するのはわかっていません。
まず、インテルのホ
まず、インテルのホストコントローラでだけエラーが出るというような、
ホストコントローラーの違いでエラーが発生するということは、
ひょっとしてUSB1.1のターゲットでしょうか?
USB1.1では、OHCI/UHCIのHostインタフェースの仕様に違いがあり、
Host側ドライバもそれぞれ別になるので、片方でだけ問題が発生するということは、
USB1.1の時代には、たまに聞きました。
あまりお役には立てない話ですが、もしもそれが原因だとすると
WinUSBとHostコントローラの相性という話になり、手が出せないので、
現時点ではWinUSBの使用はあきらめた方がいいかも知れません。
そもそもUMDFでのUSB Reset Pipeは、現在できないので、
それに関連するようなエラーが出る場合には、要注意です。
hidaka
ご返信ありがとうご
ご返信ありがとうございます。
1)ターゲットデバイスはUSB2.0です。
M$に問い合わせをしてみましたが、事例もなく結局わからないとの回答でした。
2)情報ですが、
WINUSBではなく、私がXP32ビット用に作成した
カーネルモードのUSBドライバを使用して、同じターゲットデバイスと接続して
同じ現象が発生するか確認してみたところ、バルク転送中に他のターゲットデバイスを
着脱すると同じエラーが発生しました。
残念ながら、調査時間が取れなくなってしまいました。
また何かわかりましたら、情報をアップさせていただきたいと思います。
ありがとうございました。
今さらですが 私もそ
今さらですが
私もそうでしたが、ドライバ開発を始めるころによく出会うことですが、
USB, PnP, Power Managemntなどは、あらゆるPCや周辺機器との組み合わせで
常に正常に動作するわけではありません。
正しく動作する環境(PC, 周辺機器・デバイス, ドライバ)の組み合わせでだけ、
正常に動作する訳です。Windowsロゴはひとつの目安ですが、それより
さらに安定した環境で評価する必要があります。
世の中には特定の相性問題において、しばしば救いようが無い環境(PC, 周辺機器・デバイス, ドライバ)
があります。そのような環境での動作は、時と場合によっては、ある程度あきらめる必要があります。
hidaka