Authenticode 署名のドライバインストールのトラブルシューティングの一例

Authenticode 署名のドライバインストールのトラブルシューティングの一例をご紹介します。   特定の環境でのみ、ドライバインストールが失敗する場合、ドライバの署名の検証に失敗しているか確認するため、正常な環境と現象の発生する環境の2 パターンで以下のcertutil の出力結果を比較します。   – 手順   1. ドライバの署名に使用した証明書をご用意ください。    既に.cer 形式の証明書がお手元にございましたら、次のステップへ進んでください。   .cer 形式の証明書がない場合は、署名を行った環境ににてcertmgr.msc を起動していただき、署名に使用した証明書をエクスポートしてください。    エクスポートする際は、「いいえ。秘密鍵はエクスポートしません」を選択し、「DER encoded binary X.509 (.CER)」にてエクスポートしてください。   2. 対象の環境へ証明書をコピーして、コマンドプロンプトより以下のコマンドを実行し、出力結果をテキストに保存してください。   > certutil -verify -urlfetch <証明書のパス>   その結果、「URL の取得エラー: サーバー名またはアドレスは解決されませんでした0x80072ee7 (WinHttp: 12007 ERROR_WINHTTP_NAME_NOT_RESOLVED)」というエラーが出ている場合、ドライバの署名に使用された証明書の正常性を検証するために、認証局のURL へアクセスを試みたところ、名前解決に失敗したことを示しております。この結果、証明書は無効と判定され、ドライバのインストールにも失敗いたします。   上記のようなエラーは、一般的に、インターネットへアクセスできないオフラインの環境で発生いたします。 お手数ですが、異常端末がインターネット(上記エラーに併記されているURL) へアクセス可能な状態にしていただき、ドライバのインストールの成功するかどうかご確認ください。   なお、上記は、あくまでも初期調査の切り分けの一例のため、該当しないパターンも多くあります点は、予めご了承ください。   以上の情報がお役に立てば幸いです。   WDK サポートチー 津田


プリンタードライバーの GPD ファイル記述に関する注意事項

今回は Universal プリンタードライバーにて記述を行う GPD ファイルの記述に関する注意事項を簡単にご紹介させていただきます。 GPD ファイルはテキストベースでプリンターの Charasteristics、Commands、Features 等を記述するものですが、定義されたキーワードが多数あります。GPD ファイルの概要については Introduction to GPD Files をご参照いただくこととして、その事前定義されたキーワードに関しては、大文字小文字が区別されますので注意が必要です。 Standard Features として定義されているものとして ”Orientation”、”InputBin”、”PageSize”、”MediaType” などがありますが、例えば “ORIENTATION” というように、大文字で記述すると、正しく Standard Feature として認識されません。 以下は Windows Driver Sample に含まれている bitmap.gpd ファイルの抜粋ですが、以下の黄色に示した各キーワードはすべて大文字小文字が区別されます (ほぼすべてになりますが…)。 *%****************************************************************************************** *%                                      Paper Size *%****************************************************************************************** *Feature: PaperSize {     *rcNameID: =PAPER_SIZE_DISPLAY     *DefaultOption: LETTER     *Option: LETTER     {         *rcNameID: =RCID_DMPAPER_SYSTEM_NAME         *switch: Orientation         {             *case: PORTRAIT…


Time Travel Debugging (Preview) の Lab

ユーザーモードのプログラムで、クラッシュダンプでは原因がわからない問題を、問題が発生するまでの経緯をさかのぼって調べたいと思ったことはありませんか?それを実現してくれるのがTime Travel Debugging (TTD) です。TTD は、まだプレビューですが、WDK 1803 で TTD の使い方についてのLab が以下のドキュメントとして公開されました。   Time Travel Debugging – Sample App Walkthrough < https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/time-travel-debugging-walkthrough >   そこで、今回は、このLab の手順をご案内します。これにより、読者の方のデバッグの作業効率が上がれば幸いです。   ※ ただし、あくまでもプレビューですので、今後上記ドキュメントの内容は更新される可能性がある点にご注意ください。 ※ メモリダンプがスナップショットであるのに対し、TTD で取得できるトレースログはその連続となるため、必要なメモリやディスクの容量が多くなります。そのため、再現手順が確立していない問題や再現までに時間がかかる問題に対してなど、長期間にわたる実行には向かない点にもご注意ください。   手順の概要   失敗するプログラムのTime Travel Trace をキャプチャします。 dx (Display Debugger Object Model Expression) コマンドを使って、Time Travel Trace に記録された例外イベントを見つけます。 !tt (time travel) コマンドを使って、そのトレースの中の例外イベントの位置まで移動(travel) します。 トレースのその位置から、失敗したコードまでステップ実行でさかのぼります。 失敗したコードで、ローカル変数を確認し、誤った値を含む変数の仮説を立てます。…


Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法

Hyper-V 仮想マシンに仮想 COM ポート経由のカーネルデバッガ接続方法では、レスポンスが遅く感じられたことはありませんか?今回は、Hyper-V 仮想マシンへのネットワーク経由のカーネルデバッガ接続方法をご案内します。これにより、読者の方のデバッグの作業効率が上がれば幸いです。   今回は、例として、WinDbg を動作させるホストPC では Windows 10 1803 x64、カーネルデバッガを接続される仮想マシンではWindows 10 1803 x86 が動作しています。ホストPC 側には、WDK 10 1803 がインストールされているものとします。仮想マシンは、第一世代のものを使用しています。   ホストPC と仮想マシンをネットワーク接続します。   仮想スイッチは、以下の図のように、以下の3点を満たす必要があります。 ・外部ネットワーク ・「管理オペレーティングシステムにこのネットワークアダプターの共有を許可する」にチェック ・VLAN ID を無効     この仮想スイッチ(図の例では、External という名前にしています) を、仮想マシンのネットワークアダプタ―に設定しています。     ホストPC のIP アドレスを確認します。   ホストPC 側でコマンドプロンプトを起動し、ipconfig を実行してIP アドレスを確認します。   >ipconfig   Windows IP 構成     イーサネット アダプター vEthernet (External):…


WDK for Windows 10, version 1803

WDK for Windows 10, version 1803 がリリースされました。 以下のドキュメントの手順に沿って、Windows 10 x64 version 1803 にインストールしてみます。   Download the Windows Driver Kit (WDK) < https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk >   Visual Studio 2017 をインストール   以下の3 つのエディションのいずれかをインストールします。 ·         Download Visual Studio Community 2017 ·         Download Visual Studio Professional 2017 ·         Download Visual Studio Enterprise 2017   インストールする際、[ワークロード] タブで[C++ によるデスクトップ開発] にチェックを入れます。これにより、WDK 1803…


Err.exe でエラーコードの定義を探す

NTSTATUS や、GetLastError() で得た Win32 エラーコードの定義がすぐにわからなくて困ったことはありますか?   今回は、そのような方のために、エラーコードの定義を探すのに便利なErr.exe をご紹介します。   入手手順   Err.exe は、以下のサイトからダウンロードしていただけます。   Microsoft Exchange Server Error Code Look-up < https://www.microsoft.com/en-us/download/details.aspx?id=985 >   ダウンロードしたErr.EXE は自己解凍プログラムのため、実行すると、解凍先フォルダを求められます。 解凍先を指定して解凍すると、以下のファイルが確認できます。このErr.exe が目的のツールです。   2004/04/01  18:18         1,698,816 Err.exe 2004/04/01  18:26           505,344 Error Code Lookup Tool.doc 2004/04/01  17:43            13,372 eula.txt     使い方   使い方は、コマンドプロンプトを起動し、「err.exe< エラーコード>」を実行するだけです。   今回は、例として、0xe000023c というエラーコードで実行してみます。   >…


Minispy File System Minifilter Driver サンプルを動かしてみる

今回は、ファイルシステムミニフィルタ ドライバのサンプル Minispy File System Minifilter Driver をご紹介します。   このサンプルは、システム上の任意の I/O を監視しログに記録する方法を示すサンプルです。   Minispy は、ユーザーモード アプリケーションの minispy.exe とカーネルモード ドライバの minispy.sys で構成されています。Minispy.sys が、様々なI/O に対応するコールバックを、フィルタマネージャに登録します。このコールバックが、システム上の任意のI/O を記録します。ユーザーが、この記録された情報を要求した時に、minispy.sys がminispy.exe にその情報を渡し、minispy.exe が画面上に出力、またはファイルにログしていきます。   あるデバイス上のI/O を監視するためには、minispy.exe を使って、明示的に minispy.sys をそのデバイスにアタッチする必要があります。あるデバイス上の I/O の監視をやめる場合もminispy.exe を使います。   今回は、このサンプルをWindows 10 (1709) x86 にインストールして、C ドライブ上で監視した I/O の情報がコマンドプロンプトやファイル上に出力されるところをお見せしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1709) x64 にVisual Studio 2017 とWDK for Windows…


Process Monitor で OS 起動時のログを採取する手順

今回は、Process Monitor で OS 起動時のログを採取する手順である、Enable Boot Logging オプションを実行する手順をご案内します。   Process Monitor については、以前「Process Monitor」の記事でもご案内しておりますので、ご参考ください。こちらの記事の手順では、OS 起動後にログオンしてからシャットダウンを開始する前までの任意のタイミングをカバーしています。(その間に、Process Monitor を実行し、現象を再現させ、ログを取得することを前提にしています。) 対しまして、今回の手順は、Process Monitor のEnable Boot Logging を設定した後、OS を再起動しますが、その起動中から、明示的にログ採取を完了させるまでログを取得し続けます。そのため、OS 起動中だけでなく、シャットダウン時のログも取得できます。   [手順] 以下のサイトからProcess Monitor をダウンロードします。   Process Monitor v3.50 https://docs.microsoft.com/en-us/sysinternals/downloads/procmon   Download Process Monitor (981 KB)   ダウンロードしたProcessMonitor.zip を問題が発生している環境の任意のフォルダーに置き、unzipします。 Procmon.exe を実行します。 管理者権限が必要であるため、権限が不足している場合は、昇格ダイアログが表示されます。 管理者権限となるよう昇格ダイアログを操作します。(ユーザ名とパスワードの入力や昇格の[はい]・[いいえ]の選択など) Process Monitor の起動後、自動的にファイルシステム、レジストリ、プロセスおよびスレッドの活動の記録を開始し始めます。(起動オプションに/NoConnect を指定すると自動ログ機能は動作しません。) 虫眼鏡のアイコン([Capture] ボタン) をクリックし、記録を停止します。下記の画面の上部の赤い四角で囲った部分が [Capture]…


新しい Windows Driver Kit documentation

新しい Windows Driver Kit documentation が公開されました! 皆様、久方ぶりです。WDK サポートチームの石沢です。 今回は Widows Driver 開発についてのドキュメントが一新されたことについてのお知らせです。 Windows Driver Kit documentation https://docs.microsoft.com/en-us/windows-hardware/drivers/ 各ドキュメントの右上に注目していただきたいのですが、フィードバックがコメントとして投稿できるようになったりと、 インターフェースからかなり変わりましたので、是非一度目を通してみてください。 WDK サポートチーム 石沢 望夢


SimRep File System Minifilter Driver サンプルを動かしてみる

今回は、ファイルシステム ミニフィルタ ドライバのサンプルSimRep File System Minifilter Driver をご紹介します。   このサンプルは、ファイルオープンを他のパスにリダイレクトするリパースポイントの動作をシミュレートする実装を確認できるサンプルです。これをWindows 10 (1709) x86 にインストールして、C:\x\y というフォルダへのアクセスが C:\a\b というフォルダへのアクセスにリダイレクトされるところをお見せしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1709) x64 にVisual Studio 2017 とWDK for Windows 10 Version 1709 がインストールされています。   1. サンプルの入手   SimRep File System Minifilter Driver サンプルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンでWindows-driver-samples-master.zip をダウンロードすると、Windows-driver-samples-master\filesys\miniFilter\simrep のフォルダにあります。   https://github.com/Microsoft/Windows-driver-samples   2. サンプルのビルド…