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 というエラーコードで実行してみます。   >…


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]…


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….


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

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


Microsoft ASL Compiler (asl.exe) を使ってみる

今回は、Microsoft ASL Compiler (asl.exe) を使って、BIOS の ACPI テーブルを編集する手順をご紹介したいと思います。   Microsoft ASL Compiler (asl.exe) は、システム上の種々の ACPI テーブルの逆アセンブリ、ACPI Source Language (ASL) ファイルのコンパイル等の機能が含まれています。   Microsoft ASL compiler https://msdn.microsoft.com/windows/hardware/drivers/bringup/microsoft-asl-compiler (日本語訳 : https://msdn.microsoft.com/ja-jp/library/windows/hardware/dn551195(v=vs.85).aspx)   これと、以下のサイトの GpioSampleKMDF.asl のサンプルを使います。   https://github.com/Microsoft/Windows-driver-samples/blob/master/gpio/samples/simdevice/kmdf/GpioSampleKMDF.asl   実際のファイルは、以下のサイトの右側の緑色の [Clone or Download] ボタンを押すと表示される [Download ZIP] ボタンで Windows-driver-samples-master.zipをダウンロードすると、Windows-driver-samples\gpio\samples\SimDevice\kmdf フォルダにあります。   https://github.com/Microsoft/Windows-driver-samples   今回は、例として、ターゲット PC としてWindows 10 (1607) x86の仮想マシンの BIOS…


マイクロソフト ランゲージ ポータル

皆さん、はじめまして。祝田です。   今回は、ある問題が発生した時に皆さんが、まず、するであろう情報収集や事例の検索などの手助けとなるサイト マイクロソフト ランゲージ ポータル を紹介したいと思います。 マイクロソフト ランゲージ ポータル 多くの場合、日本語を主言語としている方であれば特別な理由や、こだわりがない限り、基本的には日本語版の OS をご利用いただいているかと思います。そのため、問題が発生したときに表示されるエラーメッセージや、問題が発生しているユーザーインターフェースの表記についても日本語で表示されている場合がほとんどです(一部英語のままの場合もありますが・・・)。 問題が発生した時に表示されるエラーメッセージ、例えば、次のようなイベントログが出力されていた場合 そのエラーに関する情報を収集するために、まずは Web 上でこのエラーメッセージやエラーコードをキーワードで検索するのではないかと思います(すくなくとも私はします)。ごく一般的な機能や、メジャーなエラーコードなどであれば、多数の情報がヒットして、その時点で目的の情報にたどりつけるかもしれません。 しかし、自分の担当している機能や、開発しようとしているものが必ずしも日本において一般的であるとは限りません。その場合、英語のエラーメッセージで検索することで、より多くの情報にたどりつける ”可能性“ は高くなると思います。 と、少々前置きが長くなりましたが、そのような場合、冒頭に記載したランゲージ ポータルを利用して、日本語表記されている内容が英語版の OS (あるいは他の言語の OS) では、どのように表示されているのか取得できます。つまり、表記を確認するだけであれば、OS の言語の切り替えや、複数言語の OS を基本的には準備しなくていいのです。 では、簡単に使い方を紹介します。 1.       まず、以下の用語検索の URL へアクセスします。 https://www.microsoft.com/Language/ja-jp/Search.aspx 2.       上の画像のイベントログに記載されている、エラーの内容の一部、たとえば [デバイス設定をこれらの構成に設定しています] をコピーします。 3.       [検索文字列] のテキストボックスに、コピーしたテキストを貼り付けます。 4.       以下のように [検索対象言語] から、”日本語” を選び検索ボタンをクリックします。 5.       マイクロソフトの製品群で、検索文字列のメッセージを持っている各製品一覧と、その英語表記が表示されます。以下の表はその結果の一例です。 英語 訳 製品 Failed to upgrade…


Windows 10 Driver Verifier の「コードの整合性チェック」フラグについて

こんにちは、JS です。今回は、ドライバー検証用ツール Driver Verifier にて Windows 10 で新しく追加された機能について、紹介していきたいと思います。   Driver Verifier は、OS に標準で含まれているドライバー検証用のツールで、さなえすさんの記事「ドライバー検証ツール」でも使い方などが紹介されています。 この Driver Verifier ですが、Windows 10 では新しいフラグが追加されました。「コードの整合性チェック」と呼ばれるものです。 「コードの整合性チェック」フラグが何を検証するか、そしてフラグをどのように設定するのかをについて、以下に記載しましたので、ご参照いただけたらと思います。   「コードの整合性チェック」フラグは、どの動作をチェックするのか? 「コードの整合性チェック」フラグは、対象ドライバーに対し、カーネル メモリ内に「書き込み可能」と同時に「実行可能」なコードがあるかどうかを確認します。前述のようなコードが見つかった場合、Bug Check が作動し、BSoD と共にダンプ ファイルが作成されます。 ダンプ ファイルを WinDbg で開き、!analyze -v を行うと以下の記述が確認できます。   0: kd> !analyze -v ******************************************************************************* *                                                                             * *                        Bugcheck Analysis                                    * *                                                                             * *******************************************************************************   DRIVER_VERIFIER_DETECTED_VIOLATION (c4) A device driver…


新しくなった Windows Performance Analyzer

こんにちは、JS です。今回は、新しくなった Windows Performance Analyzer (WPA) についてお話をしたいと思います。   WPA は以前、K 里さんのエントリ「WPA とか Xperf とか」にて紹介されていましたが、Windows 8 用としてツールが新しくなりましたので、改めて紹介します。   WPA は、Windows Performance Toolkit (WPT)というツールキットの中に含まれるプログラムで、名前に Performance とある通り、PC のシステム全体のパフォーマンスを測定します。   WPT の概要については、K 里さんの記事にも書かれていますが、ここでも改めて説明します。 最新の WPT は、主に以下の 2 つのコンポーネントで成り立っています: 1.    Windows Performance Recorder (WPR) – トレースデータを採取するコンポーネント 2.    Windows Performance Analyzer (WPA) – トレースデータを GUI で表すコンポーネント この 2 つに加えて、xperf 等といった、以前のバージョンからあるレガシー プログラムの殆どが揃っています。…


Debug Diagnostic Tool

皆様、天候が優れない日が多い今日この頃ですが、いかがお過ごしでしょうか。 またしても WDK サポートチームのI沢(アイザワ)でございます。そろそろ私に飽きてきた方もいらっしゃいますでしょうか。今月もお付き合いいただけますと幸いです。 今回は、「Debug Diagnostic Tool」というツールをご紹介したいと思います。 こちらのツールは、ユーザーモードプロセスのデバッグを補助してくれるツールなのですが、私が今までご紹介させていただいたものと比べると、かなり多機能なツールとなっております。 そこで、今回は本ツールの 1 機能である「自動的にクラッシュダンプを集める機能」についてご紹介したいと思います。 やはり時代はなんでも自動化です。いつでも手動で対応できるなんて考えは甘えです!クラッシュダンプの収集も自動化して楽してしまいましょう!では早速その方法について、ご紹介していきたいと思います。   ■ インストール 1. まず最初にツールを取得しましょう!以下のサイトからツールをダウンロードします。ツールは x86 版と x64 版がございますので、ご使用環境に応じたインストーラーを選択してください。     Debug Diagnostic Tool v2 Update 1     http://www.microsoft.com/en-us/download/details.aspx?id=42933 2. 次にダウンロードした DebugDiagx86.msi または DebugDiagx64.msi を実行しましょう。実行すると以下のようなウィンドウが表示されるので、[Next] をクリックしてインストールを進めましょう。 3. インストールにつきましては、表示されている内容をご確認いただきながら進めていただければ問題ございませんが、インストールするフィーチャーの選択画面では、少なくとも "Dump Collection" をインストールするように選択してください。また、インストールフォルダにつきましては、デフォルト設定の "C:\Program Files\DebugDiag\" に設定されたものとして今後の説明をさせていただきます。 4. 次のようなウィンドウが表示されればインストール完了です!   ■ ダンプコレクション 1. それではツールを実行してみましょう。インストールフォルダにある "C:\Program Files\DebugDiag\DebugDiag.Collection.exe" をダブルクリックしましょう! 2….


VMMap

皆様、お元気でしたでしょうか!WDK サポートチームのI沢(アイザワ)でございます。 なんと前回に続いて連投させていただきます!このままこのブログを乗っ取るぐらいの勢いで行きたいと思いますので、どうぞよろしくお願いいたします。   2 回目の投稿内容としましては、前回の記事でご紹介した「RAMMap」と同様に「メモリに関する問題のデバッグ方法」の 1つとして「VMMap」というツールをご紹介したいと思います。 「RAMMap」と「VMMap」で名前が似ておりますが、機能も近いところがありまして、2 つのツールを合わせてご使用いただくことで、お手軽にデバッグの幅を広げられるのでお勧めです!   ちなみに、前回記事「RAMMap」につきましてはこちらをご参照ください。 http://blogs.msdn.com/b/jpwdkblog/archive/2014/04/22/rammap.aspx   ■VMMap とは? VMMap は Windows Sysinternals ツールの 1 つで、"プロセス" の仮想メモリと物理メモリの割り当て状況を分析し、グラフィカルに表示してくれるツールです。 RAMMap は、メモリ全体の割り当て状況を表示してくれたのに対して、こちらは "プロセス" にフォーカスを合わせたツールとなっております。 つまり、この 2 つのツールを組み合わせて使用することで、まずはメモリ全体の使用状況を RAMMap で把握して、怪しいと思うプロセスを特定したら VMMap で詳細を見ていくというデバッグが可能となります! また、複数形式でのデータのエクスポート機能が備わっていたり、コマンドラインから実行可能であったりと、その手軽さとは裏腹に非常に機能が充実しておりますので、これを機に活用していただけると幸いです!   ■なにはともあれ実行してみよう! 1. まずはいつも通りツールを取得しましょう!以下のサイトから VMMap をダウンロードします。     VMMap     http://technet.microsoft.com/ja-jp/sysinternals/dd535533.aspx 2. 次にダウンロードした VMMap.zip を解凍しましょう。解凍すると vmmap.exe が格納されておりますので、この exe ファイルをメモリ状態を取得したいプロセスが動作している Windows PC…