トップ回答者
Win7でUSBドライバーがインストールできません

質問
-
はじめまして。
WinXP時代に、USBドライバー生成ツール(既にサポート終了品)が
自動生成したUSBドライバーを、そのままWin7にインストールしようとしたのですが、
エラーが発生してインストール出来ませんでした。
setupapi.dev.log を見ると、下記の様なエラーが発生していました。(抜粋)
! dvi: Selecting driver failed(0xe0000228)
! dvi: Error 0xe0000228: There are no compatible drivers for this device.
! ndv: Queueing up error report since device installation failed...
ndv: Device install status=0xe0000203ネット検索で、「WDKの chkINF というツールを使えば、手掛かりが得られそう」
ということまではわかったのですが、ここで躓いてしまい、先に進めない状況です。
どなかた、アドバイスをいただきたく、よろしくお願い致します。
- 編集済み takabisha 2011年12月3日 4:30
- 移動 Mike Wang (MSCS) 2012年10月2日 12:58 (移動元:Windows デバイスドライバー開発)
回答
-
chkinfとて完璧なツールとは言えません。
chkinfを通した後のインストール時に何が起きているのかの情報が全く無いので、何ともコメントできません。
なぜ失敗だと判断しているか、i386,amd64の使い分けとか、64bit KMCSに引っかかっているのでは?とか、inf2catでカタログが作成できるかとか、気になる点はまだまだあります。
ところで9604のドライバは、Windows 2000時代のものをちょい替えでWindows 7にインストールできるようになりましたし、またKMDFで書き直したものも製品に組み込まれて問題なく動作しています。先日偶然にも某番組で取り上げられているのを見て、ドキドキしてしまいました。
- 回答としてマーク Atomu Hidaka-MVP, Moderator 2012年7月7日 14:14
すべての返信
-
自己レスです。
ようやく chkINF を入手し、エラーを回避しました。
しかし、依然としてUSBドライバーのインストールが失敗します。
具体的には、.sys および、上記の .inf ファイルのある場所を指定しても、
「適合するドライバーが見つからない」旨のメッセージが現れます。
USBデバイスは、USBN9604 というナショナルセミコンダクター社製の
チップに自作のファームウェアを実装したものです。
もしかすると、USBデバイス側の問題でしょうか?
ご助言をお待ちしております。
-
chkinfとて完璧なツールとは言えません。
chkinfを通した後のインストール時に何が起きているのかの情報が全く無いので、何ともコメントできません。
なぜ失敗だと判断しているか、i386,amd64の使い分けとか、64bit KMCSに引っかかっているのでは?とか、inf2catでカタログが作成できるかとか、気になる点はまだまだあります。
ところで9604のドライバは、Windows 2000時代のものをちょい替えでWindows 7にインストールできるようになりましたし、またKMDFで書き直したものも製品に組み込まれて問題なく動作しています。先日偶然にも某番組で取り上げられているのを見て、ドキドキしてしまいました。
- 回答としてマーク Atomu Hidaka-MVP, Moderator 2012年7月7日 14:14
-
Mristさま、Atomu Hidaka-さま、アドバイスをありがとうございました。
単純に、生成されたデバドラが32bit版なので64bit版OSでは動かないだけ、
という模様です。
大昔によく言われていたことなのに、全く思い出せず、大変お騒がせしました。以下、詳細状況です。
32bit版のWin7 PCにデバイスを繋ぐと、
「新しいデバイスが見つかった」と表示され、ドライバの場所さえ尋ねられずに
「デバドラは正しくインストールされなかった」と表示されます。(何故でしょうか?)
続いて、デバイスマネージャから該当デバイスの「ドライバの更新」を実行し、
.sysファイルおよび修正した.infファイルを指定すると、デバドラが正常に
インストールされ、期待通りに動作する事を確認しました! 3台の異なるPCで同じ結果でした。
⇒未確認ですが、32bitのWin7ならば、.infファイルが未修正のままでも
動くのかもしれませんね。。。Mristさま>以上より、VIDとPIDの整合性は問題ないはずです。が、両IDは
[Manufacturer]セクションに記載されています。
(Modelsセクションというものは、現状存在していません。)しかし、64bit版のWin7 PCの場合、上記と同じ手順を実施しても、
「インストールできませんでした。」と表示されます。4台の異なるPCで同じ結果でした。Atomu Hidaka-さま>ご指摘のKernel Mode Driver Framework、Kernel Mode
Code Signing、ともに次元が高すぎて理解出来ていませんが、少なくとも、
認証に関する申請は未実施です。(許されるなら、申請の手間は惜しみたいです。)
なお、Vistaへのインストールは、無修正の.infのままで問題ありませんでした。当時使用したデバドラ生成ツールのマニュアルに、"64bit生成オプション"なるものを
見つけたので、環境を再構築して試すつもりです。先走った話ですが、仮に64bit版生成がうまく行ったとしても、単純に考えると、
デバドラの配布は32bitOS版と64bitOS版の二本立てになるかと思うのですが、
OSに自動切替させて一本化する手法はあるのでしょうか?よろしくお願いいたします。
- 編集済み takabisha 2012年1月17日 1:12
-
> 単純に考えると、
> デバドラの配布は32bitOS版と64bitOS版の二本立てになるかと思うのですが、
> OSに自動切替させて一本化する手法はあるのでしょうか?はいその通りです。いくつかの手段が提供されています。
まず(敷居は少し高いものの)Windows Updateで配布すれば、ドライバ・パッケージを2種類作ることにはなりますが、まさしくそれに近い事ができます。
次にローカルでインストールする場合です。OSは実は、自動切り替えや自動判定の機能をインストール・パッケージやアプリケーションに対しては提供してくれません。
なぜならば64bit OS環境は、32bit版のアプリケーションやインストール・パッケージに対して全く32bit OSの環境と同様に振る舞うからです。
つまり32bit用のアプリケーションやインストーラは、それがいつの時代に作られたものであっても、64bit版OSのWow64(64bit版OSが32bitアプリケーションに提供する32bit OS互換環境)上に動作しているか、32bit版 OSで動作しているかを、通常知ることはありません。それではどうするかというと、setup.exe等の名前でWindowsが提供しているWow64か実際のx86かを見分ける機能を持つ32bit版アプリケーションを開発して、それを最初に起動させて(起動して)、そのsetup.exeが環境に適合したドライバ・インストール・パッケージを起動するという手法を取ります。これを具体的に実現するには、いくつかの方法(コード)がありますが、通常配布されている32/64両用ドライバのインストール・パッケージは皆、このようなことをやっているようです。
ところで、USBN9604のUSBドライバを署名を付けずに(即ち証明書を購入せずに)64bit環境で正当に動作させる方法は、次の2種類がありますので検討してみてください。USB Device Resetの機能が不要であれば、容易に開発可能です。こうして開発したドライバも、32bitOS版と64bitOS版の二本立てになるので、インストール・パッケージには前述のような仕組みが必要になります。
1. WinUSBを使用する
2. UMDFを使用する。