Vista64でバルク転送でエラー発生

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