Windows Filtering Platform Sample をインストールする

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、約 2 時間川下りしたことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話】までどうぞ。   さて、今回は、Windows Filtering Platform Sample を Windows 10 にインストールしてみたいと思います。 具体的な手順として、以下の流れで進めます。   (1) サンプルの入手 (2) Visual Studio 2015 でソリューションファイルを開く (3) 構成とプラットフォームを編集 (4) ユーザーモードアプリケーション、ライブラリ、サービスのランタイムライブラリを設定 (5) サンプルインストールスクリプトの再起動の設定を編集 (6) ソリューションのビルド (7) ビルドで生成されたモジュールの確認とテスト署名 (8) ターゲット PC の準備 (9) ドライバとサービスのインストール (10) ユーザーモードアプリケーションの実行 (11) TraceView でのログ採取   それでは、以下、各手順の詳細を説明していきます。 前提として、開発用 PC として Windows 10 x64 (build 10586)、テスト用ターゲット PC…


ドライバー インストール時のセキュリティ ダイアログにまつわるお話

(更新 2016/09/12) – Windows 7 で見られるダイアログ表示に関連した問題について追記しました。本文をお読みの上 ご確認ください。 こんにちは。JS です。 今回は、ドライバーのインストール時における証明書の認証について、お話をします。   ~~~   多くのユーザーは、ドライバーをインストールする時に、以下の様なダイアログを見たことがあるかと思います。     ただ、どのドライバーも必ず上記のようなダイアログが表示されるというわけではなく、表示されないままインストールの処理が行われるものもあります。その理由は、署名にあります。   署名されているドライバーには、通常、以下 2 種類のうちいずれかの署名が付与されています。 1.    マイクロソフトより付与された、WHQL 署名 2.    ドライバー開発者自身で付与された、Authenticode 署名 (自己署名とも呼びます)   このうち、2 の Authenticode 署名がされたドライバーをインストールする場合、インストール時にダイアログが表示されます。   最近では、このダイアログについて、どういった理由によって発生しているのかお問い合わせをいただいています。なので、その疑問を解消するために、今回は、このダイアログ周りについて解説したいと思います。   なぜダイアログが発生するのか? ダイアログを見ると、「<開発元名> からのソフトウェアを常に信頼する」と記述されているチェックボックスがあります。また、ダイアログ下部においても、「信頼する発行元からのドライバーソフトウェアのみをインストールしてください。」といった文言があります。   上記 2 点の記述は、いいかえますと、インストールしようとしているドライバーの署名に使った証明書は、ユーザーにとってまだ信頼されたものとして判断されていないことを意味しています。   ダイアログが表示される理由は、マイクロソフトがセキュリティ上の措置として、信頼されたものとして判断されていない発行元からの証明書については、一度ユーザーの確認を取る為に行っているためです。 このような証明書を利用した場合でも、OS は証明書の発行者を辿り、クロス証明書により、最終的にはマイクロソフトが信頼している証明機関が発行したものと確認できる為、ドライバーのインストールが可能になります。ただ、実際にインストール時の検証で確認される発行先は、認証機関ではなく、ドライバーの開発元となるため、OS は、その開発元を信頼されたものとして、自動的には判断することができません。したがって、ダイアログが表示されます。 なお、チェックボックスを有効にした状態で [インストール]ボタンを押すと、今後 同じ発行元からの証明書を利用して署名したドライバーをインストールする際は、ダイアログは表示されず、自動的にインストールの処理が行われます。   では次に、OS がどのように証明書が信頼できると判断するかについて説明します。  …


Windows 8.1 のプリンター用デバイス アプリについて

こんにちは。JS です。   以前、まさかたさんが「プリンター用デバイスアプリのサンプルを動かしてみる」で Windows 8 におけるプリンター用のデバイスアプリについて紹介しておりました。Windows 8.1 になって、サンプルの動かし方が少々変わりましたので、改めてご紹介したいと思います。   手順は、前回と同じく、以下の 4 つに分けられています。 ① ダミーの V4 Printer Driver の作成とインストール ② サンプル デバイス アプリのビルドとインストール ③ デバイス メタデータ パッケージの作成とインストール ④ デバイス アプリの動作確認   ①v4 Printer Driver 作成とインストール まず、Visual Studio 2013 のプロジェクトテンプレートのウィザードを使って、ダミー用の v4 Printer Driver を作成します。基本的な v4 Printer Driver の基本的な作成方法は、以下の MSDN ドキュメントでも公開されておりますが、本記事で改めてご案内したいと思います。   Building a Basic v4 Printer…


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…


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 を使ったアンインストーラー、もしくは、 [プログラムと機能] のリストからパッケージを削除されるのが良いと思います。 もし、デバイスマネージャーのような、それ以外の手段でドライバーがアンインストールされることが想定される場合には、上記のような…


INFファイルの構文チェック ~ chkinf の使い方 ~

皆さん、こんにちは。A寿です。   突然ですが、皆さんは、大使館に行ったことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、今回は INF ファイルの構文チェックを行う、 chkinf というツールをご紹介しようと思います。以前、「ドライバ インストール時のトラブルシューティングの第一歩」という記事を書きました。ここに書いた以外のトラブルシューティング初期の切り分け方法として、 chkinf ツールで INF ファイルの構文チェックを行い、出力結果のエラーや警告をもとに正しい構文になるよう修正し、問題が解決するかどうか確認する、という方法もあります。今回は、 chkinf の使い方だけではなく、実際に、WDK サンプルの INF ファイルを変更しながら、どのようなエラーや警告が出るかをお見せしていこうと思います。この情報により、皆さんのトラブルシューティングの一助となれば幸いです。   まず、chkinf ツールは、以下のフォルダにあります。     \WinDDK\{バージョン}\tools\Chkinf   このフォルダ内の chkinf.bat というバッチファイルで Perl のスクリプトを実行しています。このフォルダ内には、 chkinf.pm を初めとして、多くの .pm ファイルがあります。これらが INF ファイルの構文チェックをする実体です。 chkinf.bat は、これら .pm ファイルを実行する役割を持ちます。このフォルダの詳細については、下記ドキュメントをご参照ください。     ChkINF Components   http://msdn.microsoft.com/en-us/library/ff543464(VS.85).aspx   続いて、手順の概要は以下の通りです。   1. コマンドプロンプトを起動します。    管理者権限は必要ありません。 2….


ドライバーのデジタル署名の基礎

  久方ぶりです。まさかたです。 さて、今回は、ドライバーのデジタル署名のお話をしたいと思います。   始めに、ドライバーのデジタル署名についてあまりご存知ない方に、簡単にデジタル署名とは何か?なぜドライバーに署名が必要なのか?ということについてお話ししたいと思います。 まず 「署名」 という言葉の意味について辞書を見てみますと、例えば「本人が自分の名を書類などに書くこと。また、その書かれたもの。」と書かれております。 これは、ドライバーにおける署名も同様で、ドライバーの場合は、書類にではなくドライバーパッケージもしくはドライバーのバイナリそのものに対して、作成者本人が誰であるかを示す名前を記すことになります。 それでは、なぜドライバーに対して、作成者が誰であるのかを示す必要があるのでしょうか? これは言うまでもないことかもしれませんが、作成者の分からないドライバーをご自身の PC にインストールすることは、決して安全とは言えないからです。 というのも、現在は UMDF やプリンタードライバーのように、一部のドライバーはユーザーモード空間で動作するものがありますが、多くのドライバーはカーネルモード空間で動作しています。 カーネルモード空間は、その名の通り、OS の主要な機能を管理するモジュールを始めとして、その他のドライバーも動作するようなメモリ空間です。 そのため、カーネルモードで動くドライバーは、うっかりにせよ意図的にせよ、そのような OS やドライバーが管理するメモリを触ることができてしまうわけです。 ただ、実際には、そのようなメモリをあっさりと書き換えることができ、さらにそのまま動作してしまっては、意図しない動作をしてしまったり、大切なデータが破壊されたり、さらにはデバイスが誤動作、故障することもあり得ます。 そこで OS は、カーネルモード空間上で、このような不正な操作を検出した場合には、このまま動作を継続させてさらに深刻な事態に陥ることを回避するために、その動作を停止させます。 この動作の停止が、一般的にブルースクリーンですとか、BSOD (Blue Screen of Dead) と呼ばれる形で表面に出てくることがあります。 話が逸れましたが、ご自身の PC にドライバーをインストールする場合、それが誰によって作成されたのか、信頼できるものであるかを確認することは大切なことです。 そして、それを確認するための手段のひとつとして、デジタル署名というものがあるわけです。 なお、Windows Vista や Windows 7 では、署名のされていないドライバーや、署名の発行元の信頼性を確認できないドライバーをインストールしようとした場合、以下のような警告が表示されます。 図1. ドライバーソフトウェアの発行元を検証できません 32bit OS では、上記の警告が出た場合でも、「このドライバーソフトウェアをインストールします」を選択してインストールすれば、動作させることができますが、64bit OS では署名は必須となっており、署名がない場合は、ドライバーをインストールしたとしても動作させることができませんのでご注意ください。   さて、具体的にドライバーに対して、どのようにして署名を行うかについてですが、署名そのものについての技術的なお話は、暗号化などさらに深い話が待っていますので、ここでは割愛させていただきます。 ただ、Windows OS のドライバーで利用可能な署名の方法にはいくつか種類があり、一般的には INF ファイルや…


デバイス ドライバーの選ばれ方

 久方ぶりです。まさかたです。  今回は、Windows がどのようにインストールするドライバーを選んでいるのかについて、特に Windows 7 で変わった点にフォーカスして、お話したいと思います。 まず、PC に新しいデバイスが接続されると、PnP が発生してドライバーのインストールが行われるわけですが、その背後で Windows はさまざまな場所からドライバーを検索して、できるだけ最適なドライバーをインストールしようとします。 この時のドライバーを探してくる場所とその優先順位や、その中からどのドライバーが最適であるかを判断する基準となる ”ランキング” の決め方などは、Windows のバージョンアップとともに少しずつ改善が加えられてきました。 例えば、ドライバーを検索してくる場所と優先順位という点では、Windows 7 と Windows Vista を比較すると、以下のような違いがあります。   ²  Windows Vista の場合 1.    Driver Store 2.    Device Path 3.    Windows Update 4.    Prompt for Media   ²  Windows 7 の場合 1.    Windows Update 2.    Device Path 3.    Driver Store   -     …


ClasFiltサンプルINFにアンインストール処理を追加する

皆さん、こんにちは。A寿です。   突然ですが、皆さんは乗った船の船頭さんに船から引きずり落とされそうになったことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、前回の私の記事では、ClasFiltサンプルINFファイルをご紹介しました。このINFファイルには、お気づきの方もいらっしゃるかと思いますが、INFそのものにはアンインストールの方法は記述されておりません。そこで、今回は、ClasFiltサンプルINFファイルにアンインストール処理を追加する方法をご紹介しようと思います。   追加の手順の概要は以下の通りです。 (1) INFファイルに[DefaultUninstall]セクションを追加     (1-1) DelFilesディレクティブを追加     (1-2) DelRegディレクティブを追加 (2) INFファイルに[DefaultUninstall.Services]セクションを追加   それでは、それぞれの手順についてご説明します。   (1) INFファイルに[DefaultUninstall]セクションを追加 [DefaultUninstall]セクションは、アンインストール時の起点となるセクションです。ここには、[DefaultInstall]セクションの内容を削除する処理を記述します。前回の私の記事のClasFilt.inf(cdrupper.inf)の[DefaultInstall.NT]セクションは、以下のようになっています。   31 [DefaultInstall.NT] 32 ; 33 ; DefaultInstall section is used to install the class filter driver. Use .NT platform extension so this 34 ; section won’t be executed on Windows 9x/ME….


ClasFiltサンプルINFファイル

皆さん、こんにちは。A寿です。   突然ですが、皆さんは演出家からダメ出しを受けたことはありますか?・・・このお話にご興味のある方は本文の最後の【閑話休題】までどうぞ。   さて、今回は、ClasFiltサンプルINFファイルをご紹介したいと思います。これはクラスドライバの上位または下位にフィルタドライバを挿入(インストール)するためのサンプルINFファイルです。 ClasFiltサンプルINFファイルは、     \WinDDK\{バージョン番号}\src\setup\infs\clasfilt   のフォルダにあります。このフォルダには、以下のように、ClasFiltサンプルINFファイルであるClasFilt.infと、使い方などのヘルプが載っているClasFilt.htmの2つのファイルがあります。   C:\WinDDK\7600.16385.0\src\setup\infs\clasfilt>dir  ドライブ C のボリューム ラベルがありません。  ボリューム シリアル番号は 0836-2E4B です    C:\WinDDK\7600.16385.0\src\setup\infs\clasfilt のディレクトリ   2009/08/07  11:07    <DIR>          . 2009/08/07  11:07    <DIR>          .. 2009/06/10  14:03             6,106 ClasFilt.htm 2009/06/10  14:03             2,481 ClasFilt.inf                2 個のファイル               8,587 バイト                2 個のディレクトリ  46,665,232,384 バイトの空き領域   使い方は、ClasFilt.htmや下記ドキュメントを見ていただければ、非常に簡単であることがわかっていただけると思います。    …