Bitmap レンダリングプラグイン

皆様、お久しぶりです!   WDK サポートチームのI沢(アイザワ)でございます。 2014 年ももうすぐ終わろうとしておりますが、皆様いかがお過ごしでしょうか。   年末と言えば年賀状。年賀状と言えばプリンタ。プリンタと言えばドライバですね! 今回は、そんなプリンタドライバに関するお話でございます。   以前、A 尾さんのエントリ 「プリンタ ドライバ、スプーラ コンポーネントの WDK サンプル」 にて "bitmap レンダリングプラグイン" をご紹介されておりましたが、なんとこちらのプラグインを使用することでプリンタが無くても、印刷結果を紙の代わりに画像ファイルとして出力することができます! 本プラグインは UNIDRV のプラグインとなっておりますので、開発している UNIDRV のプラグインの参考として利用できます。 また、印刷結果が意図しない結果となった場合などに、自身が作成したドライバーに依存した問題か、それとも他のドライバーでも現象が再現するものかなど、原因の切り分けにも活用できるので、私共も非常によく使用するサンプルでございます。   今回はそんな便利なプラグインのビルド方法から、印刷結果を確認するところまでご案内いたしますのでお付き合いいただけますと幸いです。     サンプルのビルド まずはサンプルのダウンロードからビルドまで手順をご説明いたします。 ビルドはインストール先のターゲットマシンを 32bit 版 Windows 8.1 と想定してビルドします。   1. サンプルをダウンロード 以下の URL からサンプルをダウンロードして適当な場所に解凍します。ここでは、"C:\OEM Printer Customization Plug-in Samples" に解凍したものとして進めます。   OEM Printer Customization Plug-in…


新しくなった 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 等といった、以前のバージョンからあるレガシー プログラムの殆どが揃っています。…


KMDF Toaster で I/O Control を受け取る

こんにちは。JS です。今回は、KMDF でどの様に I/O Control が処理されているのかを、Toaster サンプルを使ってお見せしたいと思います。   Toaster サンプルはこちらからダウンロードできます。 Toaster Sample Driver http://code.msdn.microsoft.com/windowshardware/Toaster-7d256224   ダウンロードした ZIP ファイルを展開すると、Toaster Sample Driver フォルダが作られます。そこから C++ フォルダにある toaster.sln を Visual Studio で開きましょう。 ちなみに、この記事で私は Visual Studio 2013 と WDK 8.1 を使用しています。 (私の場合、フォルダは C:\ に置き、C:\Toaster Sample Driver フォルダとなるようにしています) プロジェクトが 16 個もありますが、今回主に使うのは以下の 4 つです: 1. dynambus (バスドライバ) 2. wdffeatured (ファンクションドライバ) 3. toastercls…


Visual Studioを使ったネットワークカーネルデバッグの方法

こんにちは、JS です。     今回は、Visual Studio を使ったネットワーク接続でのカーネルデバッグについて、設定の手順を紹介したいと思います。     最近、シリアルポートがない PC が多いため、手軽に利用できるネットワークケーブルでのカーネルデバッグの接続方法に関するお問い合わせが増えております。WinDbg を使った方法は、すでに K 里さんが「ネットワークケーブルを用いたカーネルデバッグ接続の設定手順」で書かれているので、今回は Visual Studio で接続する方法をご案内したいと思います。MSDN ドキュメントにも、「Setting Up Kernel-Mode Debugging over a Network Cable in Visual Studio」の記事が用意されているので、併せてご確認いただければ幸いです。     主な手順は以下の 3 つになります。 1.環境の用意 2.Visual Studio 上での設定 3.デバッガーの動作確認     1.環境の用意 カーネルデバッグを行うためには、ホスト PC とターゲット PC の、2 台の PC が必要となります。参考として、私が使った環境を紹介したいと思います。   今回使用している OS は、ホスト・ターゲット共に Windows…


KMDF のディスパッチルーチンについて

皆さん、はじめまして。WDK サポートチームの JS と申します。I 沢さんに続いて新しくチームに加入いたしましたので、これからよろしくお願いします。 今回は、WDM と KMDF のディスパッチルーチンの登録方法の違いについてご紹介したいと思います。   WDFの概要 さて、いきなり出てきた KMDF という単語ですが、これは Kernel Mode Driver Framework の略語で、WDF (Windows Driver Foundation) というドライバモデルに分類されます。 WDF や KMDF についてもうご存知でいらっしゃる方が多いと思いますが、このブログではあまり触れられていません。なので、本題に入る前に、まずはその概要をご紹介したいと思います。   なおきお~さんの記事「日本語の資料はあるの?」でも書かれていますが、WDF には二種類のドライバーがあります: ・KMDF (Kernel Mode Driver Framework) ・UMDF (User Mode Driver Framework) WDFの前に開発されたWDM (Windows Driver Model) というモデルがありますが、後者の方はカーネルモードのドライバしか作成できません。また、ユーザーモードドライバ開発用フレームワークは、WDFの誕生と同時に提供されました。一方、カーネルモードドライバは KMDF と WDM の二種類のモデルができました。   上記のように、KMDF は WDM を基にした新しいドライバーモデルであり、デザインに大きな違いがあります。どういう違いがあるのか、挙げたらきりがありませんので、まずは代表的な変更点である「ディスパッチルーチン (Dispatch…


Keyboard Filter Driver

皆様、楽しいデバッグライフをお送りしておりますでしょうか! WDK サポートチームのI沢でございます。   今月も私がお送りしたいと思いますが、これまでのようなツール紹介ではございません! 今回は、キーボードフィルタドライバにつきまして、ご紹介したいと思います。   私はキーボードフィルタドライバと聞くだけで、馬鹿なことをやったな…と思いだすことがあります。 当時、まだ若かった私はキーボードフィルタドライバを実装していたのですが、手軽にいろいろできたので、"Ctrl + Alt + Del" の同時押しを抑制して強制終了できなくしてみたらどうなるだろう…?と対象のキーを抑制したドライバを検証用の PC ではなく作業用の PC にインストールしてしまいました。 オチは想像できるかと思いますが、それはもう見事に Windows にログインできなくなりました! それを機に、絶対にドライバ開発は検証用の環境で行おう…と心に誓いました。みなさまもお気を付けくださいね! ちなみにそのときは、別の PC に対象のストレージを接続して、ドライバのバイナリファイルを削除することで復旧いたしました。   ■キーボードフィルタドライバについて キーボードフィルタドライバは、簡単に説明するとキーボードの入力をフィルタリングして、入力を無効にしたり、別のキーに置き換えたり、キー入力を追加したりといったことが可能になります。 フィルタリングはカーネルモードで行われるため、ユーザーモードではフィルタリングされたキー入力結果があたかも実際にそのような入力があったかのように見えます。 実際どのような場面で使用されるかというと、例えばショートカットキーによる強制終了等の特定の処理を抑制したり、キーの連射機能を実現したりと、キー入力に関わることであれば大抵のことが可能です。 ただ、よくお聞きするのがフィルタドライバの実装は難しそう…といったご意見です。しかし、キーボードフィルタについてはその限りではありません。 優秀なサンプルプログラムがございますので、たった 1 つの関数を変更するだけでキー入力のフィルタリングを行うドライバが実装できるのです。   ■ KeyboardClassServiceCallback ルーチンについて さて、早速キーボードフィルタドライバのサンプルプログラムを見ていきましょう。 サンプルプログラムは以下のサイトからダウンロード可能です。ダウンロードした zip ファイルは適当な場所に展開しましょう。   Keyboard Input WDF Filter Driver (Kbfiltr) <http://code.msdn.microsoft.com/windowshardware/Kbfiltr-WDF-Version-685ff5c4>   展開したら、ソースコードを確認してみましょう。 "<展開したフォルダ>\C++\sys\kbfiltr.c" の 766…


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…


RAMMap

  皆様、はじめまして! WDK サポートチームのI沢(アイザワ)と申します。 今月からこのブログに参加させていただきますので、どうぞよろしくお願いいたします。 初投稿の内容としまして、「メモリに関する問題のデバッグ方法」をご紹介したいと思います。デバッグ方法と言いましても、たくさんの方法がございますので、今回はその一例として「RAMMap」というツールをご紹介いたします。他の方法につきましては、次回以降の機会に取り上げたいと思いますのでご期待ください! ちなみに、今後取り上げたいツール候補は下記のような感じで考えております。  ・Kernel Memory Space Analyzer    http://www.microsoft.com/en-us/download/details.aspx?id=15877 ・Debug Diagnostic Tool    http://www.microsoft.com/en-us/download/details.aspx?id=26798 ・Desktop Heap Monitor    http://www.microsoft.com/en-us/download/details.aspx?id=17782   ■RAMMap とは? RAMMap は Windows Sysinternals ツールの 1 つです。 現在、メモリがどのように割り当てられているのか、割り当てられたそれぞれの領域はどういう状況なのか…さらには特定の物理アドレスのメモリ使用状況まで表示してくれます。RAMMap の優れている点は、それらを非常に簡単に行えるというところです。基本的には実行ファイルをダブルクリックするだけで情報が表示されます。さらにメモリのスナップショットも保存可能で、コマンドラインからの実行も可能とその手軽さから初期解析にはうってつけのツールではないでしょうか。 ■スナップショットの取得 1. まずはツールを取得しましょう!以下のサイトから RAMMap をダウンロードします。     RAMMap     http://technet.microsoft.com/ja-jp/sysinternals/ff700229.aspx 2. 次にダウンロードした RAMMap.zip を解凍しましょう。解凍すると中に RAMMap.exe が格納されています。この exe ファイルをメモリ状態を取得したい Windows PC の適当な場所に格納します。ただし、動作環境として…


ネットワーク経由でのリモート ユーザーモード デバッグ

久方ぶりです。まさかたです。 ドライバー開発にデバッグはつきものだと思いますが、Windows 8 からは、デバイス アプリというドライバーに密接に関連したストア アプリも登場し、またプリンタードライバーや UMDF ドライバーのようにユーザーモードで動作するドライバーもありますので、ドライバーのデバッグを行う場合、必ずしもカーネルデバッグだけではなく、ユーザーモードデバッグも必要となる場面もあるかと思います。 また、実際にデバッグを行う場合、開発環境と同じ環境上でテストしてデバッグも可能な場合もあるかもしれませんが、開発環境とテスト環境が分かれる場合も多くあると思います。そんなリモートにあるターゲット環境に対してカーネルデバッグを行う方法については、以前 K里さんから「ネットワークケーブルを用いたカーネルデバッグ接続の設定手順」という記事で紹介されておりました。 そこで今回は、ユーザーモードのデバッグを、リモートからネットワーク経由で行う方法として、Visual Studio 2013 と windbg を使った例をご紹介したいと思います。 (1) Visual Studio Remote Debugging Monitor を使ったデバッグ (2) Windbg.exe と Dbgsrv.exe を使ったデバッグ なお、これらの方法は、ターゲットPC上にデバッグのための小規模なモジュールのインストールが必要になりますが、Visual Studio そのものや Debugging Tools for Windows 一式をターゲットPC上にインストールする必要がなく、また、シンボルやソースコードは、ホストPC側にだけ置いておけばいいので、ターゲットPC側の準備が比較的 楽というのもメリットだと思います。そういう点でもご活用いただけたら幸いです。 (1) Visual Studio Remote Debugging Monitor を使ったデバッグ (1-1) ターゲット PC 側の準備 Visual Studio を使ったリモートデバッグには、ターゲットPC上に Visual Studio の Remote…