ドライバの更新と削除について
現在、自作PCIボード用のドライバを作成しております。
win2kやwinXP上で動かそうと思っています。
質問1:ドライバの更新について
ドライバの不具合を修正し、
デバイスマネージャからドライバの更新を行おうとすると、
"現在インストールされているソフトウェアよりも
ハードウェアと適合性の高いソフトウェアが見つかりませんでした。"
と表示されます。
この表示は、何を基に判断しているのでしょうか?
sysファイルの日付?
infファイルのバージョン?
(\System32\Driversのsysファイルを上書きしていましたが、
出来れば上記の方法で更新したく思います。)
質問2:ドライバの削除について
自作ドライバをインストールしたPCから削除しようと思います。
なるべくインストール前の状態に戻したいと思います。
質問2-1:
削除する項目は以下でよいのでしょうか?
(DDKサンプルのreadmeには以下の記載がありました。)
1.\Windows\Inf もしくは \Winnt\Inf から、
自作したドライバ情報が記述された infファイル と pnfファイルを削除
2.\System32\Drivers から sysファイルを削除
3.RegEditやRegEdt32を使用して以下を削除
HKEY_LOCAL_MACHINE\SYSTEM\Enum\PCI\VID_****&PID_****
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_****&PID_****
質問2-2:
infファイルを見ると、上記以外のレジストリ下にキーを作成している様です。
これらのキーも削除して良いのでしょうか?
例:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\*****
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\System\*****
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{クラスGUID}
質問2-3:
デバイスマネージャからドライバの削除を行った場合、
削除されるのはOSが管理している内部情報だけなのでしょうか?
質問2-4:
ドライバを削除する場合、
デバイスマネージャからドライバの削除→上記ファイルの削除
の手順が良いのでしょうか?
どなたかご存じの方、
いらっしゃいましたらアドバイス頂けませんでしょうか?
よろしくお願いします。

5つ質問をされてい
5つ質問をされているのですが、これらすべてについて正確に答えるのはなかなか難しいと思います。
とりあえずは、古い記憶を頼りにできる範囲でやってみます。
まずwin2kやwinXP用のドライバを作成されているとのことですが、Windows Vista以降ではドライバのインストールの内部機構と、更新と削除の仕組みが、ややおおげさに言うと「大幅に」変わっているので、まず注意が必要です。
先にご参考までに解説しますと、Windows Vista以降では、以下の点が変わっています。
1.インストールの内部機構が変わったために、System32\Driversのsysファイルを上書きして動作する保障が無くなりました。
2.適合性の高いソフトウェアの判定のロジックが「より厳密に」行われるように、変わりました。
3.古いドライバの「完全な削除手順」が簡単に提供されるようになりました。
さて本題ですがWindows XPにおいて、質問1:ハードウェアと適合性の高いソフトウェアはまず、
Windowsが探し出した新しいハードウェアを識別する情報と、インストール候補のドライバの素性(適合ハードウェア)の度合いで決まります。
ハードウェアを識別する情報とインストール候補のドライバの素性が合致する場合には、Microsoft純正やWindowsロゴ取得ドライバであること、INFファイル記述のバージョン、日付情報が最新であることの順に適合性が評価されます。
ただしWindows XPにおいては、この判定方法は常に正しく動作しているは言えません。INFファイルの不備により、適合ハードウェアとしてインストールの検索時に検知されない場合もあります。
そのためなのか抜け道があります。インストールや更新時のメニューで、「一覧または特定の場所からインストールする」のオプションを選んで選択すると適合性が無いドライバでもインストールが可能になります。
質問2:
心配されているのは、デバイスマネージャからドライバの削除を行ったのにも関わらず、プラグアンドプレイ対応のドライバが復活してしまう事だと思います。復活させないためには、「ドライバの完全な削除」が必要ですが、Windows Vistaではデバイスマネージャから簡単に、「ドライバの完全な削除」ができるようになりました。
ドライバの完全な削除をする場合、2つの状況があります。1つは削除対象のデバイスがホストPCに接続されて稼動している場合、
2番目は、削除対象のドライバがインストールされてはいるが、デバイスがホストPCに接続されてなく、稼動もしていない場合。
> DDKサンプルのreadmeには以下の記載がありました(以下略)
というのは今まで見た記憶が無いのですが、この記述はそのPCIのドライバに対してだけ使えるかも知れない手順であり、他のバスのドライバやレガシィなドライバには適用できません。
削除対象のデバイスがホストPCに接続している場合の正しい(と私が信じている)削除手順は、次の通りです。
1.デバイスマネージャで対象デバイスを選択して、「削除」を行う。
2.Windows\Inf もしくは \Winnt\Inf から、該当のドライバ情報が記述された infファイル と pnfファイルを削除
3.\System32\Drivers から sysファイルを削除
4.もしも、該当のドライバ情報が記述された infファイルによりインストールされているdll等があれば、それらも削除
5.可能であれば、削除対象のデバイスを取り外す。
レジストリの操作をする必要がないのは、「デバイスマネージャ=レジストリのビューア」だからです。即ち、デバイスマネージャの操作はレジストリの操作と同じです。デバイスマネージャでのドライバ削除後は、ドライバの作業領域である質問2-2:のレジストリは無いはずですので、質問2-2:の削除の必要はありません。
削除対象のデバイスがホストPCに接続していない場合には、デバイスマネージャから「非表示のデバイスの表示」を行うことにより、上記とほぼ同じ手順で完全な削除ができます。いずれの手順も、レジストリを直接触るよりは、良いと思います。
--
> 質問2-3:
> デバイスマネージャからドライバの削除を行った場合、
> 削除されるのはOSが管理している内部情報だけなのでしょうか?
デバイスマネージャからドライバの削除==>レジストリ情報の削除になります。
OSが管理している内部情報==>レジストリ情報になります。
即ち、Yesです。
ただし上記削除を行った場合でも、PnPデバイス(PCIもPnPデバイス)ではPnP機構により、
ハードウェアの再接続=>ハードウェアの発見==>デバイスノードのレジストリ登録==>対応ドライバの検索==>ドライバの発見==>ドライバの再登録
の仕組みがあるので、完全削除をしない限り一旦削除したはずのドライバが復活する訳です。