DPINST.log

久方ぶりです。まさかたです。

 

さて、今回は、DPINST.log をご紹介してみたいと思います。

DPINST.log とは、その名の通り、Driver Package Installer (DPInst) によってドライバパッケージのインストールを実行した場合の動作を記録するログファイルです。

Driver Package Installer (DPInst) は、非常に便利なインストール ツールのため、ご利用されている方も多くいらっしゃいますが、ご存じない方のために、ざっとご案内しておきますと、.sys/.inf/.cat などドライバのインストールに必要なファイルが入ったフォルダに、<WDK インストールフォルダ>\redist\DIFx\dpinst 以下にある dpinst.exe をコピーするだけで、以下のドキュメントのようにウィザードやコマンドプロンプトからドライバのインストールができるツールです。

 

  DPInst User Experience

  https://msdn.microsoft.com/en-us/library/windows/hardware/ff544795(v=vs.85).aspx

 

  DPInst Command-Line Switches

  https://msdn.microsoft.com/en-us/library/windows/hardware/ff544775(v=vs.85).aspx

 

インストールが完了すると、デフォルトでは、[コントロール パネル]の[プログラムと機能]に、パッケージのエントリが表示されます。

以下のドキュメントにも記載がありますように、パッケージを表示させないようにもできますし、パッケージの表示名は INF ファイルの内容から決定されますので、その内容を変更することもできます。

なお、パッケージを表示させるようにした場合、その後デバイス マネージャーで [このデバイスのドライバー ソフトウェアを削除する] のチェックをオンにしてドライバーの削除を行うと、ドライバー パッケージそのものは削除されますが、[プログラムと機能] のリストにはパッケージのエントリが残ったままとなります。この状態で、[プログラムと機能] のリストからパッケージを削除しようとしても、既にパッケージ自体は削除済みであるため、リストからエントリを消すことができなくなりますので、ご注意ください。

そのため、DPINST を使ったインストーラーでドライバーをインストールされる場合には、DPINST を使ったアンインストーラー、もしくは、 [プログラムと機能] のリストからパッケージを削除されるのが良いと思います。

もし、デバイスマネージャーのような、それ以外の手段でドライバーがアンインストールされることが想定される場合には、上記のような [プログラムと機能] のリストのエントリが残る可能性がありますので、インストールの時点でエントリを追加しないようにされた方が無難です。

 

  Adding a Programs and Features Entry

  https://msdn.microsoft.com/en-us/library/windows/hardware/ff537757(v=vs.85).aspx

 

便利に使うことができるだけに、よくわからないままご利用されて、うまくインストールできなかった場合に、トラブルシューティングの第一歩を踏み出せない状況も時折見かけます。

以前、「ドライバ インストール時のトラブルシューティングの第一歩」の記事で、デバイスマネージャーのエラーコードや、setupapi.log をご案内しましたが、DPINST をお使いの場合は、DPINST.log も確認した方がよいです。

 

DPINST.log は、%SystemRoot%\DPINST.LOG にあります。

 

今回は DPINST.log で表示されるエラーメッセージの例として、以下の 2 つほどご紹介したいと思います。

 

(1) INFO: RETURN: DriverPackagePreinstallW (0xE0000247)

(2) INFO: RETURN: DriverPackagePreinstallW (0xE0000242)

 

(1) INFO: RETURN: DriverPackagePreinstallW (0xE0000247)

これは、DPInst.exe の中で呼び出されている DriverPackagePreinstall 関数がエラーコード 0xE0000247 (ERROR_DRIVER_STORE_ADD_FAILED) で失敗していることを示すログです。これはエラーにある通り、ドライバーストア (%systemroot%\system32\driverstore) にドライバーパッケージを追加するのに失敗しているという意味です。

 

DriverPackagePreinstall function

https://msdn.microsoft.com/en-us/library/windows/hardware/ff544817(v=vs.85).aspx

 

ただ、DPINST.log の内容からでは原因がよく分かりませんので、そんな時には、さらに setupapi.dev.log の内容を確認する必要があります。

今回テスト的に行った例の場合は、以下のようなログが残っていたのですが、これは、ドライバーパッケージのカタログファイルに、何ら署名がされていないことが原因で、ドライバーストアへのインポート自体が失敗している状況でした。

 

■DPINST.log の例

INFO: ****************************************

INFO: 11/28/2013 19:33:54

INFO: Product Version 2.1.0.0.

INFO: Version: 6.0.6000

INFO: Platform ID: 2 (NT)

INFO: Service Pack: 0.0

INFO: Suite: 0x0100, Product Type: 1

INFO: Architecture: X86.

INFO: Interactive Windows Station

INFO: Command Line: '"C:\workspace\dpinst.exe" /q /se /path c:\workspace'

INFO: DPInst is not multi-lingual.

INFO: ****************************************

INFO: Current working directory: 'C:\Workspace'

INFO: Running on path 'c:\workspace'

INFO: No valid 'dpinst.xml' file provided.

INFO: Install option set: Running in quiet mode. Suppressing Wizard and OS popups.

INFO: Install option set: Suppressing EULA.

INFO: Found driver package: 'c:\workspace\toaster.INF'.

INFO: Preinstalling 'c:\workspace\toaster.inf' ...

INFO: ENTER: DriverPackagePreinstallW

INFO: RETURN: DriverPackagePreinstallW (0xE0000247)

INFO: Returning with code 0x80010000

INFO: 11/28/2013 19:33:55

 

 

■setupapi.dev.log の例

>>> [Import Driver Package - c:\workspace\toaster.inf]

>>> Section start 2013/11/28 19:33:54.616

      cmd: "C:\workspace\dpinst.exe" /q /se /path c:\workspace

...

     sto: {DRIVERSTORE_IMPORT_NOTIFY_VALIDATE} 19:33:55.117

     inf: Opened INF: 'C:\Windows\System32\DriverStore\Temp\{031eff32-544e-1ac3-d5ef-66658be2b562}\toaster.inf' ([strings])

     sig: {_VERIFY_FILE_SIGNATURE} 19:33:55.133

     sig: Key = toaster.inf

     sig: FilePath = C:\Windows\System32\DriverStore\Temp\{031eff32-544e-1ac3-d5ef-66658be2b562}\toaster.inf

     sig: Catalog = C:\Windows\System32\DriverStore\Temp\{031eff32-544e-1ac3-d5ef-66658be2b562}\TOASTER.cat

! sig: Verifying file against specific (valid) catalog failed! (0x00000057)

! sig: Error 87: The parameter is incorrect.

     sig: {_VERIFY_FILE_SIGNATURE exit(0x00000057)} 19:33:55.148

     sig: {_VERIFY_FILE_SIGNATURE} 19:33:55.148

     sig: Key = toaster.inf

     sig: FilePath = C:\Windows\System32\DriverStore\Temp\{031eff32-544e-1ac3-d5ef-66658be2b562}\toaster.inf

     sig: Catalog = C:\Windows\System32\DriverStore\Temp\{031eff32-544e-1ac3-d5ef-66658be2b562}\TOASTER.cat

! sig: Verifying file against specific Authenticode(tm) catalog failed! (0x800b0100)

! sig: Error 0x800b0100: No signature was present in the subject.

     sig: {_VERIFY_FILE_SIGNATURE exit(0x800b0100)} 19:33:55.148

!!! sto: Catalog file does not have a signature. No error message will be displayed as client is running in non-interactive mode.

!!! ndv: Driver package failed signature validation. Error = 0xE0000247

     sto: {DRIVERSTORE_IMPORT_NOTIFY_VALIDATE exit(0xe0000247)} 19:33:55.148

!!! sto: Driver package failed signature verification. Error = 0xE0000247

!!! sto: Failed to import driver package into Driver Store. Error = 0xE0000247

     sto: {Stage Driver Package: exit(0xe0000247)} 19:33:55.179

!!! sto: Failed to stage driver package to Driver Store. Error = 0xE0000247, Time = 266 ms

<<< Section end 2013/11/28 19:33:55.148

<<< [Exit status: FAILURE(0xe0000247)]

 

 

 

(2) INFO: RETURN: DriverPackagePreinstallW (0xE0000242)

まず、上記のエラーコード 0xE0000242 を、C:\WinDDK\7600.16385.1\inc\api\setupapi.h から探してみると、該当するエラーは以下になります。

 

#define ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED (APPLICATION_ERROR_MASK|ERROR_SEVERITY_ERROR|0x242)

 

ちなみに、上記 APPLICATION_ERROR_MASK と ERROR_SEVERITY_ERROR はそれぞれ、ntdef.h から以下の値であることがわかりますので、上記全てを OR すると、0xE0000242 の値となります。

 

#define APPLICATION_ERROR_MASK 0x20000000

#define ERROR_SEVERITY_ERROR 0xC0000000

 

さらに、この ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED のエラーは、署名に使われた証明書が Trusted Publisher の証明書ストアにインストールされていないために、発行者の信頼性を確認することができなかったことを示すものであることが分かります。詳細については、以下のドキュメントに記載があります。

 

Using SetupAPI To Verify Driver Authenticode Signatures

https://msdn.microsoft.com/en-us/library/windows/hardware/ff553637(v=vs.85).aspx

 

ERROR_AUTHENTICODE_TRUST_NOT_ESTABLISHED

Indicates that trust cannot be automatically established because the publisher's signing certificate is not installed in the trusted publisher certificates store. However, this does not necessarily indicate an error. Instead it indicates that the caller must apply a caller-specific policy to establish trust in the publisher.

 

というわけで、DPINST.exe でうまくドライバーパッケージのステージングができない場合、一部 SetupAPI Log も併せて見る場合もありますが、少なくとも DPINST.log を足掛かりに、問題点を特定することができる例をご紹介してみました。

 

少しでも皆様のお役に立ちましたら、幸いです。

それでは、また。