プリンタードライバーの 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 サポートチーム 石沢 望夢