新しいフィルター ドライバーの作成

このトピックでは、Visual Studio を使って新しいフィルター ドライバーの作成を始める方法について説明します。フィルター ドライバーは、デバイス ファンクション ドライバー、ソフトウェア ドライバー、ファイル システム ドライバーとは異なります。それらのドライバーについては、別のトピックで説明しています。フィルター ドライバーと、他の種類のドライバーとの違いについて詳しくは、以下のトピックをご覧ください。

まず、どのドライバー モデルがフィルター ドライバーに適しているかを判断します。どのモデルが最適かの判断については、「ドライバー モデルの選択」をご覧ください。ハードウェア デバイスのフィルター ドライバーを作成する場合は、「デバイスとドライバーのテクノロジ」にあるテクノロジの一覧で、デバイスがどれに適合するかを特定します。特定したテクノロジのドキュメントに、フィルター ドライバー モデルの選択に関するガイダンスがあるかどうかを確認します。適切なフィルター ドライバー モデルは、テクノロジごとに異なります。一部のテクノロジのドキュメントでは、ユーザー モード ドライバー フレームワーク (UMDF)、カーネル モード ドライバー フレームワーク (KMDF)、または Windows Driver Model (WDM) を使うことを勧めています。 他のテクノロジのドキュメントでは、フィルター ドライバーの作成方法について、具体的に詳しく説明しています。一部のテクノロジには、ミニフィルター モデルがあります。テクノロジによっては、フィルター ドライバー モデルについて何も推奨されていない場合もあります。

次に、勧められているドライバー モデルが以下のどのケースと一致しているかを判断し、その手順に従います。

ケース 1: テクノロジのドキュメントが UMDF を勧めている

  1. Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
  2. [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、[Visual C++]、[Windows Driver] (Windows ドライバー)、[WDF] を探してクリックします。
  3. 中央のウィンドウで、[User Mode Driver (UMDF)] (ユーザー モード ドライバー (UMDF)) をクリックします。
  4. [名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。詳しくは、「テンプレートを使った UMDF ドライバーの作成」をご覧ください。  新しい UMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。この長さの制限は、wdfglobals.h で定義されています。  
  5. この時点で、ほとんどの UMDF ドライバーに必要な一般的なコードを実装したドライバー プロジェクトができています。これで、フィルター固有のコードを追加できるようになりました。

ケース 2: テクノロジのドキュメントが KMDF を勧めている

  1. Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
  2. [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、[WDF] を探してクリックします。
  3. 中央のウィンドウで、[Kernel Mode Driver (KMDF)] (カーネル モード ドライバー (KMDF)) をクリックします。
  4. [名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。詳しくは、「テンプレートを使った KMDF ドライバーの作成」をご覧ください。  新しい KMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。この長さの制限は、wdfglobals.h で定義されています。  
  5. この時点で、ほとんどの KMDF ドライバーに必要な一般的なコードを実装したドライバー プロジェクトができています。これで、フィルター固有のコードを追加できるようになりました。

ケース 3: テクノロジのドキュメントが特定のフィルターまたはミニフィルター モデルについて説明している

デバイス テクノロジに特定のフィルターまたはミニフィルター モデルがある場合は、Visual Studio にそのモデル用のテンプレートがあるかどうかを確認します。

  1. Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
  2. [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、[テンプレート]、[Visual C++]、[Windows Driver] (Windows ドライバー) を探してクリックします。
  3. インストールされているテンプレートの一覧で、作成するフィルターの種類のテンプレートを探します。たとえば、[Networking] (ネットワーキング) の [Filter Driver: NDIS] (フィルター ドライバー: NDIS) テンプレートを選びます。
  4. 該当するフィルター ドライバーの種類のテンプレートが [Windows Driver] (Windows ドライバー) にない場合は、[Online] (オンライン) をクリックして、オンラインで利用できるテンプレートを参照します。
  5. 該当するフィルター ドライバーの種類のテンプレートが見つかった場合は、そのテンプレートを選び、[名前] ボックスと [場所] ボックスに入力して、[OK] をクリックします。
  6. この時点で、フィルター ドライバーに必要な一般的なコードを実装したドライバー プロジェクトができています。これで、フィルター固有のコードを追加できるようになりました。実装する必要がある関数について詳しくは、テクノロジのドキュメントをご覧ください。

デバイス テクノロジに特定のフィルター モデルまたはミニフィルター モデルがあり、そのフィルター ドライバーの種類のテンプレートが見つからない場合は、テクノロジ固有のドキュメントで、UMDF、KMDF、WDM のどれを使うかを判断するためのガイダンスをご覧ください。

ケース 4: テクノロジのドキュメントが WDM を勧めている

  1. Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。

  2. Visual Studio の [新しいプロジェクト] ダイアログ ボックスで、[Windows Driver] (Windows ドライバー) の [WDM] をクリックします。

  3. [名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。

  4. この時点で、空の WDM ドライバー プロジェクトができます。ソリューション エクスプローラー ウィンドウでドライバー プロジェクトを右クリックし、[追加]、[新しい項目] の順にクリックします。

  5. [新しい項目の追加] ダイアログ ボックスで [C++ ファイル (.cpp)] を選び、ファイルの名前を入力して [OK] をクリックします。

      .cpp ファイルでなく .c ファイルを作成する場合は、拡張子が .c の名前を入力します。

     

  6. フィルターに必要な関数を実装します。関数の実装と整理が進むにつれて、.cpp または .c ファイルの追加が必要になる場合があります。

ケース 5: テクノロジのドキュメントにフィルター ドライバー モデルについての推奨がない

  1. フィルター ドライバーに最適なモデルが UMDF、KMDF、WDM のどれであるかを判断します。ヘルプについては、「ドライバー モデルの選択」をご覧ください。

  2. Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。

  3. Visual Studio の [新しいプロジェクト] ダイアログ ボックスの [Windows Driver] (Windows ドライバー) で、以下のいずれかのテンプレートを選びます。

    • WDF | ユーザー モード ドライバー (UMDF)
    • WDF | カーネル モード ドライバー (KMDF)
    • WDF | 空のカーネル ドライバー

      新しい KMDF ドライバーか UMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。この長さの制限は、wdfglobals.h で定義されています。

     

  4. フィルターに必要な関数を実装します。必要に応じて、新しい .c または .cpp ファイルを作成します。

使用するテンプレートが不明な場合は、Windows ハードウェア WDK とドライバー開発のフォーラムで、記事を読んだり、投稿したりすることを検討します。