量産メモ帳

忘れっぽいのでメモを残しています。浅く適当に書きます。

VAIO の NVIDIA ドライバーの更新を試みた(でも失敗)

ドライバに関する知識が乏しいせいか、結局は更新に失敗したけど、素人なりに試みた中で色々と勉強になったので、メモを残しておく。
ただし、だいぶ前に試みたことなので記憶が曖昧で、所々、記述が間違っているかもしれない。


自分が使っている VAIO は VGN-Z91JS で、SPEED モード時のグラフィックスドライバは NVIDIA GeForce 9300M GS なんだけど、OS を Windows 8.1 にアップグレードしたら、付属のインストーラで再インストールしてもデバイスを認識できなくなってしまった。
ドライバのバージョンが古いのかなと思い、NVIDIA の公式サイトから最新のインストーラをダウンロードしてインストールを試みたら、こんなエラーダイアログが表示されてインストールできなかった。

NVIDIA インストーラーを続行できません
このグラフィックスドライバーと互換性のあるグラフィックスハードウェアが見つかりませんでした。



これって、もしかしたらドライバの設定ファイルを書き換えればインストールできるのでは?と思い、試行錯誤の末、以下のページのコメント欄にあった手順を参考にインストールを試みた。

  1. Create catalog file using Inf2cat.exe for win8
  2. Created test certificate using makecert.exe. http://msdn.microsoft.com/en-us/library/windows/hardware/ff540213(v=vs.85).aspx
  3. Signed cat file using Signtool.exe with above certificate
  4. Install the certificate on the destination machine with bcdedit.exe testsiginingon.
  5. Install the driver.



自分がやった手順はこちら。

  1. ドライバーの設定ファイルを編集する。(後日、詳細を記述予定)
  2. Inf2Cat.exe を使ってドライバのカタログ(*.cat)ファイルを作成する。
  3. makecert.exe を使って自己署名証明書(*.cer)ファイルを作成する。
  4. signtool.exe を使ってドライバのカタログ(*.cat)ファイルに署名する。
  5. bcdedit.exe を使ってドライバーの署名制限を無効化する。
  6. インストールする。(後日、詳細を記述予定)



関連資料:


makecert.exe を使って自己署名証明書(*.cer)ファイルを作成する。

makecert.exe は Windows SDK をインストールすると付いて来る。
自分は Windows SDK for Windows 8.1 をインストールしたので、こんな感じで自己署名証明書ファイルを作成した。

cd "C:\Program Files (x86)\Windows Kits\8.1\bin\x64"
makecert.exe -r -pe -ss MY -n CN=MyPrivateCert C:\Temp\MyPrivate.cer



オプションの意味は以下の通り。

  • -r ⇒ 自己署名証明書を作成する。
  • -pe ⇒ 生成された秘密鍵をエクスポート可能と見なす。
  • -ss ⇒ 出力された証明書を格納する、サブジェクト*1の証明書ストア名を指定する。
  • -n ⇒ 証明書のサブジェクト名を指定する。この名前は X.500 標準*2に準拠する必要がある。



参考資料:


*1:証明書に関連する秘密鍵の保持者

*2:例: CN=Fred Dews

signtool.exe を使ってドライバのカタログ(*.cat)ファイルに署名する。

signtool.exe も Windows SDK に付いている。
自分はこんな感じで実行した。

cd "C:\Program Files (x86)\Windows Kits\8.1\bin\x86"
signtool.exe sign /a /v /s MY /n MyPrivateCert /t http://timestamp.verisign.com/scripts/timstamp.dll "C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\nv_disp.cat"



正常終了した時の実行結果はこうなった。


The following certificates have been found to be suitable for signing:
Issued to: MyPrivateCert
Issued by: MyPrivateCert
Expires: (略)
SHA1 hash: (略)

The following certificate was selected:
Issued to: MyPrivateCert
Issued by: MyPrivateCert
Expires: (略)
SHA1 hash: (略)

Done Adding Additional Store
Successfully signed: C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\nv_disp.cat

Number of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0



参考資料:


bcdedit.exe を使ってドライバーの署名制限を無効化する。

この辺から怪しくなってくるけど、bcdedit.exe というツールを使って、ドライバーの署名制限を無効化することにした。
理由は、自己署名の証明書をドライバーのカタログファイルに添付してもインストールできなかったため。
コマンドプロンプトを管理者モードで起動して、以下のコマンドを実行すれば良い。(再起動が必要だったかも。)

cd C:\WINDOWS\system32
bcdedit.exe /set testsigning on



ドライバーの署名制限を無効化するのはセキュリティが弱くなるので、あまり推奨したくない。
もし元に戻したければ、以下のコマンドを実行すれば良い。

cd C:\WINDOWS\system32
bcdedit.exe /set testsigning off



参考資料:


Inf2Cat.exe を使ってドライバのカタログ(*.cat)ファイルを作成する。

NVIDIAインストーラを実行すると、以下の様な形式のフォルダにディスプレイドライバ関連のファイルが解凍される。

C:\NVIDIA\DisplayDriver\{Driver Version}\{OS Name}\International\Display.Driver



自分がインストールしたバージョンは 332.21 だったので、こんなフォルダができた。

C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver



このフォルダの中には、元々、nv_disp.cat という名前のカタログファイルがある(はず)。


しかし、ドライバの設定ファイルを書き換えてからインストールしたい場合、このカタログファイルを作り直さなければならない。


ドライバのカタログファイルは Windows Driver Kit (WDK) にある Inf2Cat.exe というツールを使って作成できる。



WDK は、自分の環境だと以下のフォルダにインストールされた。

C:\Program Files (x86)\Windows Kits\8.1\bin\x86



よって、Inf2Cat.exe はコマンドプロンプトから以下のように実行した。

cd "C:\Program Files (x86)\Windows Kits\8.1\bin\x86"
Inf2Cat.exe /driver:"C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver" /os:8_X64 /v



以下、実行時のコンソールログの一部:


Processing directory (C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\) file (dbinstaller.exe)
 :
Parsing INF: C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\nvaan.inf
 :
Finished parsing INFs
Processing INF: C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\nvaan.inf
 :
Finished processing INFs
Testing driver package...
 :
Signability test complete.

Errors:
None

Warnings:
None

Catalog generation complete.
C:\NVIDIA\DisplayDriver\332.21\Win8_WinVista_Win7_64\International\Display.Driver\nv_disp.cat



自分のPCだと、コマンドの実行が完了するのに6分ぐらいかかった。