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 documentationhttps://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. サンプルのビルド…


INF ファイルが Universal かどうか検証する方法

今回は、INF ファイルが Universal かどうか検証する方法として、InfVerif.exe を使う方法をご案内します。   Universal INF についてご存じない方や具体的な条件について確認したい方は、以下をご参照ください。   Using a Universal INF File https://docs.microsoft.com/en-us/windows-hardware/drivers/install/using-a-universal-inf-file   InfVerif.exe は、WDK 10 がインストールされている環境の c:\Program Files(x86)\Windows Kits\10\tools\<arch> (<arch> は x86 や x64) フォルダにあります。   以下のドキュメントの通り、/u オプションで Universal かどうかを検証できます。実行時には /v オプションも併せてつけることで、エラーや警告がある時の詳細が確認できます。   Running InfVerif from the command line https://docs.microsoft.com/en-us/windows-hardware/drivers/devtest/running-infverif-from-the-command-line   /u        Reports errors if INF is not Universal….


MSDN インシデントで技術サポートにドライバー開発のお問い合わせをする方法

MSDN サブスクリプションの特典として付属している、テクニカル サポートのインシデントを利用して、ドライバー開発に関連したお問い合わせをする方法について、ご案内いたします。   流れとしては、大きく 2 段階あります。   [1] お電話でインシデントをアクティベーションしてアクセス ID と契約 ID を取得 (※初回またはご契約更新後の初回のみ必要) [2] Web から「法人のお客様向け 技術サポート窓口」のページからお問い合わせ   すでに [1] の ID をお持ちの方は、[2] へお進みいただけます。ただ、MSDN サブスクリプションのご契約を更新いただいた場合、改めて [1] が必要になります。   [1] お電話でインシデントをアクティベーションしてアクセス ID と契約 ID を取得   以下のいずれかにお電話をいただき、MSDN サブスクリプションの特典インシデントの有効化(アクティベーション) を行っていただき、アクセス ID と契約 ID を取得します。   カスタマー サービス (0120-750052) サポート契約センター (0120-17-0196)   いずれも営業時間は 9:00-17:30 (土日祝日、弊社指定休業日を除く) です。…


パブリック シンボルとプライベート シンボル

他社でのダンプ解析やライブデバッグのために、自社ドライバのシンボルファイルを提供しないといけないけど、ローカル変数やソースコードの行番号まで出したくないと思ったことはありますか?   内部変数やソースコードの行番号がわかると、リバースエンジニアリングできてしまう可能性が高まったり、API を他社向けに提供している場合に、ローカル変数等がそれをご利用される他社様にわかり、それを前提にコーディングされてしまいますと、API を提供している側としては、その後の実装変更がやりづらくなったり、API を提供されている側としても互換性を保てなくなったりするリスクが高まるかと思います。かといって、それを恐れて、今困っているお客様の現象を調べるために、シンボルファイルを提供しない、というのも、問題の解決が遅れたり、誤った解析結果につながり、お客様の信頼を失うという別のリスクにつながりかねません。   今回は、そのような皆様に、パブリック シンボルとプライベート シンボルのご紹介をしたいと思います。誤解を恐れずにイメージだけを端的に言えば、ローカル変数やソースコードの行番号が含まれる方が「プライベート シンボル」、それらを除いた関数名やグローバル変数が含まれる方が「パブリック シンボル」です。今回の記事では、シンボルについておさらいをした後、パブリックシンボルとプライベートシンボルの違いについてご説明し、最後にその両方をどのように作成するかをご説明します。     シンボルとシンボル ファイル   まず、シンボルとシンボル ファイルについて、おさらいしておきましょう。   シンボル ファイルとは、ドライバ (.sys や.dll) やアプリケーション (.exe) をビルドすると、一緒に作成される、同じ名前の .pdb という拡張子を持つファイルです。   通常、シンボル ファイルは以下のものを含みます。   ・グローバル変数 ・ローカル変数 ・関数名とそのエントリポイントのアドレス ・FPO (Frame Pointer Omission) レコード ・ソースコードの行番号   厳密には、これらのそれぞれを、個別に「シンボル」と呼びます。   ただ、私たちがお客様に「シンボルをください」とお願いする時は、シンボル ファイルそのものを指すことが多いです。   シンボル ファイルが必要な理由は、効率性の面で様々ありますが、それよりも正確性の面で、今見ているコールスタックが間違っていない状態にする必要があるからです。例えば「WARNING: Stack unwind information not available….


Visual Studio 2015 でのテスト署名方法

今回は、Visual Studio 2015 でのテスト署名方法とx64 版のOS でインストールして動作するところまでの手順をご紹介します。   と言っても、WDK で提供されているサンプルはたいてい自動的にテスト署名されることが多いため、テスト署名の方法そのものは、通常はあまり意識する必要がないかもしれません。そのため、テスト署名をされた際に、インストールがうまくいかない場合に、正しい手順との比較がしたい、というような目的としても、今回のブログエントリをご参考にしていただけると幸いです。   今回は、例として、「NDIS Virtual Miniport Driver (netvmini) サンプルをインストールする」でご紹介した、NDIS Virtual Miniport Driver (netvmini) サンプルにテスト署名をし、x64 のOS であるWindows Server 2016 にインストールしたいと思います。サンプルをビルドする、開発側のPC はWindows 10 (1703) x64 にVisual Studio 2015 とWDK 10 がインストールされています。   なお、テスト署名の説明そのものは「ドライバーのデジタル署名の基礎」、Visual Studio を使わずに、コマンドからテスト署名する方法については、以前のブログエントリ「INFファイルを記述する」もしくは、以下のドキュメントをご参照いただければ幸いです。   Test Signing https://docs.microsoft.com/en-us/windows-hardware/drivers/install/test-signing     1. サンプルの入手   NDIS Virtual Miniport Driver (netvmini) サンプルは、以下のサイトの右側の緑色の…


NDIS Connection-less Protocol Driver Sample をインストールする

今回は、NDIS プロトコル ドライバのサンプルNDIS Connection-less Protocol Driver Sample をご紹介します。   このサンプルは、コネクションレス型の、NDIS 6.0 プロトコル ドライバの実装を確認できるサンプルです。プロトコル ドライバについては、さなえすさんの以前の記事「Windows の Network Driver」をご参照ください。Connection-less プロトコルの例としては、UDP があります。これは、トランシーバーの様に明示的な接続をしなくても、通信ができます。そして、Connection-oriented の例としては、TCP があります。こちらは、電話のように相手が着信して初めて接続が確立し、通信ができます。このサンプルは、ユーザーモードからのReadFile/WriteFile で Raw イーサネット フレームを送受信できます。また、イーサネット アダプタへのバインドを確立したり破棄したりできます。   NDIS Connection-less Protocol Driver Sample では、ドライバーに加え、そのドライバーとのやり取りを行うテストアプリケーションがあるので、すぐに検証を行うことができます。   今回は、このサンプル プロトコル ドライバをビルドして、ターゲット側 PC の Windows 10 (1703) x86 にインストールします。そして、本サンプルの test フォルダでビルドする prottest.exe サンプルアプリケーションで、このプロトコル ドライバがバインドされたイーサネット アダプタを列挙し、パケットを送受信するところまでを確認します。サンプルをビルドする、開発側のPC は Windows 10 (1703) x64…