Windows7 64ビット版で、32ビットアプリケーション
はじめまして、えふまると申します。
現在、とあるUSB接続機器を制御するアプリケーションを表題のような環境で作成しています。
これまではサンプルドライバーのbulkusbをほとんどそのまま使用してWindows2000/XP/Vista/7と
32ビット版は使用してきました。
ちなみに2000/XPとVista/7はそれぞれの環境用にsysファイルは用意しました。
このほど64ビット版OS用にドライバの作成に迫られまして、試行錯誤している段階です。
ドライバ作成は未経験者に等しいです。
現状ですが、以下のようになっています。
・bulkusbではインストールに頻繁に失敗し、通信エラーや無反応になるなど安定しない。
・最新のWDKからusbsampのドライバをほとんどそのまま使用する。
・usbsamp版はインストールも安定しますが、通信エラーがbulkusbほどではないにしろ、
皆無ではありません。
・このusbsamp版の32ビット版は安定しています。ぜんぜん問題ありません。
・上記のことから32ビットアプリケーションからのWriteFile/ReadFileによる64ビット
ドライバ使用は問題があるのではないか。
・そこで、usbsamp版に付属のサンプルプログラムを改造し、64ビットコンパイルし、
パイプで通信を肩代わりさせると結構安定して通信できますが、オーバーヘッドが大きく、
通信に影響はありませんが、機器の動作が遅くなり、好ましくありません。
bulkusb版のようにWDM ですとIOCTLを注意しなければならないなど検索するとヒットしますが、
usbsamp版のWDFではそのような注意事項をどうすればいいか皆目見当もつきません。
どうすればいいかなど、アドバイス、参考文献などありましたら、
お教え願えれば幸いです。
よろしくお願いいたします。

> bulkusb版のようにWDM
> bulkusb版のようにWDM ですとIOCTLを注意しなければならないなど検索するとヒットしますが、
> usbsamp版のWDFではそのような注意事項をどうすればいいか皆目見当もつきません。
usbsamp版のWDFでも基本は同じです。IOCTLに注意して良くデバッグしてみて下さい。
64bitのドライバは同じコードで、32bitのアプリケーションと64bitのアプリケーションとで、2回テスト(デバッグ)する必要があります。
hidakaさま、返信あり
hidakaさま、返信ありがとうございます。
前回の書き込みの後、他のPCで試してみました。
最新のノートPCと4年前のPentiumDのデスクトップ。
どちらも環境はWindows7 x64です。
どちらも問題なく動作しました。
WriteFile/ReadFileでのやり取りなのですが、エラーも皆無。
以前は”システムに接続されたデバイスが機能していません。”がでたり、
ReadFileで帰ってこなくなったりしてました。
どうやら最初に開発とデバッグしていたPCのUSBホストコントローラに
不具合か相性問題でも発生していたような感じです。
他のたとえば、FlashメモリとかUSB無線LAN 子機とかは動いていたのですが。
ちなみにターゲットデバイスはUSBN9604を使用しています。
また、問題でまくりのPCのUSBコントローラはOHCIでした。
問題なかったノートPCとデスクトップPCはUHCIでした。
ただ、この他にOHCIのノートPCがあり、それはWindowsXP x86なのですが、
こちらは問題出ませんでした。
なので、現在はドライバに問題なしの方向で動作検証中です。
(別途VMWareを使用したカーネルモードデバッグも並行してます)
OHCIとかの問題はこれまでの実績で圧倒的少数だったのではないかと推測
されるので今後の課題になるのではないかと思ってます。