雑記帳

電子計算機の"明後日"から、他愛もない話まで。

「同じinfでバイナリだけ異なるドライバ」に更新できないとき

こんなことで嵌まるのはドライバ開発中だけかとは思いますが、Windos7や8.1で試験中のドライバを入れようとしたら、同じinfで最初にインストールしたときのバイナリがロードされる…という現象が起きました(しかも、そいつが青画面級のバグの持ち主で、直したつもりがまた青画面のループに…)。

 

Windows2000の頃とは勝手が違って余計な時間を食ったので、箇条書きなぐり書きのメモを残しておきます。

  • infのキャッシュは古来より%windir%\infにある。
  • 最近のWindowsでは、さらにinfファイルと紐付くドライバファイルのキャッシュを持っているらしい(%windir%\System32\DriverStore)
  • 全く同じinfファイルからデバドラをインストールしようとすると、自動的にキャッシュからインストールされる
    • 「ディスク使用」からインストールを試みても、全く同じinfがキャッシュにあればそちらを使う模様
    • Windows2000の頃は「ディスク使用」であれば、無条件にインストール元からバイナリをコピーし直してくれてた
  • キャッシュからインストールしにくる場合、未署名ドライバであっても「未署名のドライバを入れようとしている」旨の警告ダイアログが出ず、恙なくインストールが終わる。
  • 1バイトでもinfファイルを改変しておくと、新規のときと同じ扱いでインストールできる。

で、最初は「inf」の対象ファイルと「DriverStore」の対象ファイルを直接消せば良いんじゃないの? とやってみたのですが、今度は「必要なファイルが見つからない」とエラーが出るようにorz。しかも、「ディスク使用」からインストールを仕掛けても同じエラーが出る始末…(infを1バイトでも書き換えれば通る。…ハッシュでも作ってんのか)。

レジストリを漁ったら「PnPLockdownFiles」というキー以下に、それらしい情報が居たので消そうとしたもののエラーが出て消せず…。余計な情報がいつまでも残ることになってしまいました…。

 

…という修羅の道を歩むことになるので、ちゃんとした手順を踏むことをお勧めします。

具体的には、一度置き換え元のドライバをアンインストール(外す・他のドライバに差し替える等)しておき、管理者権限のコンソールで以下を実行することで、全て綺麗さっぱり消すことができます。

pnputil -d (消したいデバドラのinf…%windir%\inf\oem**.inf)