DPINST.log

久方ぶりです。まさかたです。   さて、今回は、DPINST.log をご紹介してみたいと思います。 DPINST.log とは、その名の通り、Driver Package Installer (DPInst) によってドライバパッケージのインストールを実行した場合の動作を記録するログファイルです。 Driver Package Installer (DPInst) は、非常に便利なインストール ツールのため、ご利用されている方も多くいらっしゃいますが、ご存じない方のために、ざっとご案内しておきますと、.sys/.inf/.cat などドライバのインストールに必要なファイルが入ったフォルダに、<WDK インストールフォルダ>\redist\DIFx\dpinst 以下にある dpinst.exe をコピーするだけで、以下のドキュメントのようにウィザードやコマンドプロンプトからドライバのインストールができるツールです。     DPInst User Experience   http://msdn.microsoft.com/en-us/library/windows/hardware/ff544795(v=vs.85).aspx     DPInst Command-Line Switches   http://msdn.microsoft.com/en-us/library/windows/hardware/ff544775(v=vs.85).aspx   インストールが完了すると、デフォルトでは、[コントロール パネル]の[プログラムと機能]に、パッケージのエントリが表示されます。 以下のドキュメントにも記載がありますように、パッケージを表示させないようにもできますし、パッケージの表示名は INF ファイルの内容から決定されますので、その内容を変更することもできます。 なお、パッケージを表示させるようにした場合、その後デバイス マネージャーで [このデバイスのドライバー ソフトウェアを削除する] のチェックをオンにしてドライバーの削除を行うと、ドライバー パッケージそのものは削除されますが、[プログラムと機能] のリストにはパッケージのエントリが残ったままとなります。この状態で、[プログラムと機能] のリストからパッケージを削除しようとしても、既にパッケージ自体は削除済みであるため、リストからエントリを消すことができなくなりますので、ご注意ください。 そのため、DPINST を使ったインストーラーでドライバーをインストールされる場合には、DPINST を使ったアンインストーラー、もしくは、 [プログラムと機能] のリストからパッケージを削除されるのが良いと思います。 もし、デバイスマネージャーのような、それ以外の手段でドライバーがアンインストールされることが想定される場合には、上記のような…


Windows OS 標準ドライバが強化されたタッチデバイス

こんにちは、なおきお~です。 スマートフォンなどのペリフェラル デバイスは、インプット デバイスとしては、キーボードやマウス デバイスではなく、タッチ デバイスが、必須となってきていますが、寒い日の外出先では反応が悪くなって困っています。 さて、Windows OS でも、Windows標準ドライバとして、USB接続のHIDのタッチ ドライバを提供しており、Windows 7でBluetooth接続のタッチ ドライバを追加し、Windows 8でBluetooth LEやI2Cの接続のタッチ ドライバ追加しています。 このようにWindows標準ドライバを強化することでハードウェアメーカーさんがドライバを開発しなくてもよいシナリオを増やしていっています。 Transport Windows 7 Windows 8 Notes USB Yes Yes Support for USB HID 1.11+ is provided on Windows operating systems dating back to Windows 2000. Bluetooth Yes Yes Support for Bluetooth HID 1.1+ is provided on Windows operating systems…


Windows Driver Kit (WDK) 8.1 がリリースされました

皆様、ご無沙汰しております。なおきお~です。 先日、Windows 8.1のリリースに伴い、Windows Driver Kit for Windows 8.1もリリースされました。 前バージョンであるWindows Driver Kit for Windows 8.0 は、Windows Kits 8.0 の一部として、Visual Studio 2012 にインテグレードしていました。 今回の Windows Driver Kit for Windows 8.1 も Visual Studio にインテグレードするという同じような方式で利用することなりますが、対象となる Visual Studio は、Visual Studio 2013 だけになります。Visual Studio 2012 には、Windows Driver Kit for Windows 8.1 をインテグレードすることができないことをお気を付けください。 さて、今回は、Windows Driver Kit for Windows 8.1 で新たに追加された項目から Windows…


Process Monitor

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、ワニを食べたことがありますか?・・・このお話にご興味のある方は本文の最後の【閑話】までどうぞ。   さて、今回は、Windows Sysinternals ツールの 1 つ、Process Monitor を紹介します。Process Monitor は、プロセスが行った処理 (ファイル システム、レジストリ、プロセスおよびスレッドの活動) をリアルタイムで表示するツールです。このツールは、ドライバーやアプリケーション開発時だけでなく、運用時でも、ファイルやレジストリの操作や、DLLのロード等、様々なシステム上のトラブルシューティングで利用されています。   私たちも、このツールのログの採取方法や調査方法をお客様にご案内することがありますので、その一例の手順をご紹介しようと思います。   ■ ログの採取   (1) 以下のサイトから Process Monitor をダウンロードします。     Process Monitor     http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx (2) ダウンロードした ProcessMonitor.zip を問題が発生している環境の任意のフォルダーに置き、unzipします。     今回は、例として、C:\temp フォルダに置き、解凍し、ProcessMonitor フォルダができたとします。     ProcessMonitor フォルダの中に、以下の通り、Procmon.exe があることが確認できます。   C:\temp\ProcessMonitor>dir ドライブ C のボリューム ラベルは OSDisk です ボリューム シリアル番号は 2460-8F6F…


WDK 8 の Help ドキュメント

久方ぶりです。まさかたです。 今回は、WDK 8 のヘルプドキュメントをローカルで見るために必要な操作について簡単にご紹介したいと思います。 以前の WDK 7.1 では、WDK のインストールにより、スタートメニューから表示可能なヘルプドキュメントがありましたが、WDK 8 からは、Visual Studio に統合されたことから、ヘルプドキュメントの見方が少し変わっておりますので、ご注意ください。 具体的には、まず Visual Studio 2012 の [ヘルプ] メニューより、[ヘルプ コンテンツの追加と削除(C)] を選択します。 すると、「Microsoft ヘルプビューアー 2.0」が表示されるので、「コンテンツの管理」のタブで、”Driver” といったキーワードで検索します。 そして、”Windows Driver Development – 英語” という検索結果が表示されるので、アクションとして、”追加” をクリックし、さらに右下にある [更新] ボタンを押します。 ちなみに、ビューアーの上部には、「コンテンツを追加すると、利用可能な更新で全てのローカルドキュメントが自動的に更新されます。」とありますが、何らかの要因で自動で更新できない場合もあるかと思いますので、右下に表示される更新の状態を定期的にチェックして、必要に応じて手動で最新のコンテンツに更新いただくのがいいかもしれません。 その結果、WDK のヘルプ ドキュメントのコンテンツのダウンロードが開始されます。 コンテンツのダウンロードが完了すると、インストール元をディスクにすると、確かにローカルに”Windows Driver Development – 英語” が保存されていることが確認できます。 そうしたら、左側のコンテンツタブを選ぶと、「ヘルプビューアーホーム」の下に「Windows Driver Development (Windows Drivers) – 英語」のトピックが出てきますので、後はこれまで通り閲覧いただければと思います。 それと、”Windows Debugging” のヘルプドキュメントも有用な情報がたくさんありますので、こちらもダウンロードしておくことをお勧めいたします。…


特別なプール (Special Pool)

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、水陸両用バスに乗ったことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、以前、さなえすさんの記事「ドライバー検証ツール」で、カーネルモードにおけるメモリ破壊 (プール破壊) の調査に、Driver Verifier と Gflags が効果的であるというご紹介をしました。今回は、その記事の補足として、特別なプール (Special Pool) についてお話ししようと思います。   特別なプールとは、上記の記事の「■Driver Verifier の設定」の「(4) チェックを行う項目にチェックボックスを ON にします」の画像(下図)にある通り、Driver Verifier の設定項目です。     この設定により、以下のような典型的なプール破壊を検出できます。 ・解放後のプールにアクセス ・N バイト アロケートしたプールに N+1 バイト以上アクセス   以下の図のように、下方向に向かってアドレスの値が増えていくとしますと、特別なプールがない場合、自分のドライバのバッファ (N バイト) を超えた、アクセスをすることを「バッファオーバーラン」、自分のドライバのバッファより手前の領域にアクセスすることを「バッファアンダーラン」と言います。       バッファオーバーランやバッファアンダーランにより、自分のドライバのバッファに隣接する、自分以外のモジュールの領域に書き込んでしまいますと、自分以外のモジュールのデータが破壊されます。データが破壊されたタイミングでは必ずしも、BSOD になったりするわけではなく、かなり時間がたってからそのデータを使おうとして、挙動がおかしくなったり BSOD が起こったりして初めて気づき、それからダンプファイルを解析しても、誰が破壊したかは、わからないことが多いです。   そこで、特別なプールの出番です。これがあれば、上記のバッファオーバーランやバッファアンダーランを検出したタイミングで BSOD を発生させるので、破壊が発生したタイミングにより近い状態のダンプファイルを入手できます。   それでは、特別なプールの検証動作の詳細について、説明していきます。   特別なプールを有効にすると、通常のカーネルモードメモリプールではなく、検証用の特殊な領域 ( Special Pool…


WDK 8 再頒布可能コンポーネント – Windows Driver Frameworks (WDF) Co-Installer

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、目の前でマジックを見たことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、今回は、WDK 8 で Windows Driver Frameworks (WDF) での開発を行う方は、WDK 8 再頒布可能コンポーネントをダウンロードしましょう、というお話です。   WDK 8 では、WDF co-installer (共同インストーラ) をキット本体とは別に配布しているので、WDF co-installer を WDK とは別にダウンロードする必要があります。WDK 8 のインストール時に、WDF co-installer をインストールしなかった方は、以下のサイトよりインストールしてください。     WDK 8 再頒布可能コンポーネント   http://msdn.microsoft.com/ja-jp/windows/hardware/br259104   もし、こちらをインストールせずに、WDF のドライバーをビルドしますと、パッケージ作成のための inf2cat で失敗します。 例えば、以下のサンプルを、まさかたさんの先日の記事 に従ってビルドします。     Virtual serial driver sample   http://code.msdn.microsoft.com/windowshardware/Virtual-serial-driver-8383ea42   すると、inf2catOutput.log に以下のエラーが出力されます。  …


プリンター用デバイス アプリのサンプルを動かしてみる

久方ぶりです。まさかたです。 前回の記事では、デバイスメタデータパッケージの作成を、ウィザード形式で行うことのできる、デバイスメタデータ作成ウィザードをご紹介しました。 今回は、その続きとして、実際に作成したデバイス メタデータ パッケージで、デバイスとデバイス アプリが連携して動作するところまでを、下記のようにプリンター用のデバイスアプリのサンプルが公開されていますので、これを例にご紹介したいと思います。 Device app for printers SDK sample <http://code.msdn.microsoft.com/windowsapps/Device-app-for-printers-91f363a9> 大まかな手順は、下記のようになります。 ① ダミーの V4 Printer Driver の作成とインストール ② サンプル デバイス アプリのビルドとインストール ③ デバイス メタデータ パッケージの作成とインストール ④ デバイス アプリの動作確認 ① ダミーの V4 Printer Driver の作成とインストール 今回は、Visual Studio 2012 のプロジェクトテンプレートのウィザードを使って、ダミーの V4 プリンター ドライバーを作成してみます。 ウィザードの進め方については、下記ドキュメントがご参考になると思います。 V4 印刷ドライバーの開発 <http://msdn.microsoft.com/ja-jp/library/windows/hardware/br259124.aspx> ※「3. V4 プリンタードライバーの開発 – 3.1 Visual Studio…


ドライバーのデジタル署名の留意点

ご無沙汰しております。なおきお~です。 春になり、花粉症の私には、厳しい季節ですが、花粉を除けば、過ごしやすい温かい日が少しずつ増えてきて、過ごしやすくなってきました。 ただ、温かい日が増えてきたとはいえ、季節の変わり目は、体調を崩しやすいので、皆様もお気を付けください。   さて、Windows XPのサポートの終了も残すところ一年を切ってしまい、Windowsの変わり目も近づいてきています。 Windows 8で今まで動いてきたデバイス ドライバーが動くのか?という互換性が気になるとは思いますが、それと同じくらいドライバー署名は、どうしたらいいのか?ということも気になる方が多いようでお問い合わせをいただきます。 ドライバー署名については、過去に"まさかた"さんや私が、ここやここでご紹介しましたが、今一度、見直してみたいと思います。   まず、Windows 2000やWindows XPでの有効なドライバー署名は、WHQL署名だけなので選択肢はありません。 Windows Server 2003以降は、Authenticode署名がサポートされ、WHQL署名以外の署名が選択肢として加わり、Windows Vista以降からは、テスト署名とテスト署名用のブートオプションも加わりました。 Authenticode署名は、VeriSign社などの証明機関で発行した証明書を利用しますが、テスト署名は、makecert.exeで作成した証明書を使用するため、使用する証明書が異なります。なので、Authenticode署名とテスト署名は、取り違えようがないように思われるかもしれませんが、ちゃんとした証明書を使用しても、署名の要件を満たしていないためにテスト署名として扱われてしまうことがあります。 そこでAuthenticode署名の留意点を紹介したいと思います。   まず、署名が必要なデバイス ドライバーとしては、32ビットも64ビットもカーネル モード ドライバもユーザ モード ドライバも署名することを推奨していますが、32ビットは、必須ではありません。対して、64ビットは、ユーザ モード ドライバも含めて、全て必須となります。 特にWindows 8では、プリンタ ドライバーのようなユーザ モード ドライバもインストールがブロックされるため注意が必要です。 また、詳細な条件は、以下のサイトをご一読いただければ幸いです。   Driver Signing Policy (Windows Vista and Later) http://msdn.microsoft.com/en-us/library/windows/hardware/ff548231   続いて、"まさかた"さんの記事でご紹介した"カーネル モードのコード署名の手順"のドキュメントで比較的 勘違いが多い項目の留意点をご案内します   ①     カタログ ファイルに対象となるOSを指定する Inf2cat.exeの/osオプションで、対象となるOSを指定することができます。このオプションで対象とするOSを漏れなく指定してください。もし、Inf2cat.exeで対象とするOSが指定できない場合は、Inf2cat.exeのバージョンが古いかもしれないのでWDK8.0のInf2cat.exeを使用しているかを確認してください。 ②     クロス証明書を指定する…


デバイスメタデータ作成ウィザード

久方ぶりです。まさかたです。 今回は、WDK 8 から新しく導入された 「Device Metadata Authoring Wizard(デバイスメタデータ作成ウィザード)」 についてご紹介したいと思います。 Using the Device Metadata Authoring Wizard (Windows) http://msdn.microsoft.com/en-us/library/windows/hardware/hh454282(v=vs.85).aspx このツールは、Device Metadata Package を作成するための GUI ツールになりますが、Device Metadata 自体は Windows 7 から存在するもので、「デバイスとプリンター」や「Device Stage」を定義するための情報として利用されており、以前 K 里さんの記事でも紹介されていたかと思います。 Windows 8 では、Device Metadata は上記と同様の機能を持ちつつも、新たにデバイスと Windows ストア デバイス アプリを結び付ける役割が追加されました。 そのため、前述のウィザードでは、従来の「デバイスとプリンター」や「Device Stage」のための情報を追加するのと同時に、デバイスと Windows ストアデバイス アプリとを結びつけるための情報を入力できるようになっています。 また、ウィザード形式となっていますので、順番に必要な情報を設定していけば、簡単に Device Metadata Package を作成することができます。 そこで、以下では、この Device Metadata Authoring Wizard…