ドライバが消せないときの最終手段
半年以上前にメモしたものを公開
注意
このページではレジストリを操作します。レジストリの操作は、ひとつ間違えるとPCが起動しなくなる恐れがあり大変危険です。当サイトでは責任を持てませんので、自己責任のうえで慎重に操作してください。
問題: ドライバが本当に消せなくなった
少し昔のカードリーダー、SCR3310-NTTComの古いドライバが原因で、Windowsセキュリティの機能「コア分離」が使えなかった。
コア分離ができない原因は互換性のないデバイスドライバ。設定で、原因となるドライバを一覧表示できる
本来は、ここに記載されているinfファイルのドライバを、デバイスマネージャーでアンインストールすればよいのだが。
今回なぜかカードリーダーのデバイスが2つ登録されてしまっている。oem109.infの方は普通にアンインストールができたのだが、oem114.infの方がデバイスマネージャから何故かアンインストールできない。 (「ファイルが見つからない」と言われるので、恐らくドライバ本体がoem109.infと共に消されている)
C:\Windows\INF\に保存される。今回で言えばnsr33.infがoem114.infにリネームされている。ちなみにこの画面はデバイスマネージャーで「表示->デバイス(ドライバー別)」をクリックすると表示できる
.infファイルはあくまで設定ファイルだから、じゃあレジストリだけ消せば良いやと思い、レジストリのキーおよびエントリを「NSR33x64.sys」で検索し、出てきたものを全て削除、あるいは記述の消去をした
これが間違いだった。
試したこと
autoruns
autorunsはMicrosoft製の設定変更ツール。これでドライバを検索したが、該当のドライバは検出されず。
pnputil
ドライバを操作するコマンドラインツール。デバイスマネージャより高度な操作ができるが、しかし今回はNSR33x64.sys(公開名oem114.inf)は存在しないことになっていた
解決法: 回復環境でレジストリを操作
infファイルの元の名前(NSR33)で再度レジストリ内を検索したところ、HKLM\DRIVERS\DriverDatabase\DriverPackagesの中のキー名がヒットした。キー内のエントリにinfファイルの記述があった。しかし削除しようとするとエラーが発生する。またアクセス許可を弄っても削除できるようにならなかった。恐らくOSの起動中はロックされているのだろう。
そこで、Windows RE (回復環境)またはWindows PE(Windowsのインストーラー)でレジストリエディタを起動し、OSのレジストリを読み込んで操作をする。私は回復環境を使用した。回復環境は、起動時にF8を連打すると起動できる。そのあと、トラブルシューティング->コマンドプロンプト に進み、regeditと入力しEnter、これでレジストリエディタが開く。
参考: 回復環境でのレジストリ編集方法 | Microsoft Japan Windows Technology Support Blog
レジストリエディタでは、まずHKLM( HKEY_LOCAL_MACHINE )をクリックする。
次に「ファイル」->「ハイブの読み込み」で、C:\Windows\system32\config\DRIVERSを読み込む。
その後、読み込んだハイブから目当てのキー(今回であれば"NSR33\_なんちゃらかんちゃら")を削除。
ハイブをアンロードしたら再起動。
私はこれでコア分離を有効化することができた。
当然だがドライバのファイルの実体はまだ残っているので、C:\Windows\System32\DriverStore\FileRepository\から該当のファイルを削除する。レジストリのキー名と同じ名前のフォルダがあるはず。
(今回であれば"NSR33\_なんちゃらかんちゃら")
結論
ドライバが本当に消せなくなったときの最終手段として、WinREまたはWinPEのregeditでHKLM\DRIVERS\DriverDatabase\DriverPackagesの中のキーを削除することでドライバを消せる。ドライバのファイルの実体の削除も忘れずに。