新しいフィルター ドライバーの作成
このトピックでは、Visual Studio を使用して新しいフィルター ドライバーの作成を開始する方法について説明します。 フィルター ドライバーは、他のトピックで説明するデバイス機能ドライバー、ソフトウェア ドライバー、およびファイル システム ドライバーとは異なります。 フィルター ドライバーと他の種類のドライバーとの違いについては、次のトピックを参照してください。
まず、どのドライバー モデルがフィルター ドライバーに適しているかを判断します。 どのモデルが最適かを判断するには、「ドライバー モデルの選択」を参照してください。 ハードウェア デバイス用のフィルター ドライバーを作成している場合は、「デバイスとドライバーのテクノロジ」で説明されているテクノロジのリストのどこにデバイスが当てはまるかを判断します。 フィルター ドライバー モデルを選択するためのガイダンスがあるかどうかを確認するには、その特定のテクノロジのドキュメントを参照してください。 推奨されるフィルター ドライバー モデルはテクノロジーによって異なります。 一部のテクノロジについては、ドキュメントではユーザー モード ドライバー フレームワーク (UMDF)、カーネル モード ドライバー フレームワーク (KMDF)、または Windows ドライバー モデル (WDM) の使用を推奨しています。 他のテクノロジについては、ドキュメントでフィルター ドライバーの作成方法について明確に詳細が説明されています。 一部のテクノロジーにはミニ フィルター モデルがあります。 一部のテクノロジーでは、フィルター ドライバー モデルに対する推奨事項がない場合があります。
次に、ドライバー モデルの推奨事項が次のどのケースに該当するかを判断し、次の手順に従います。
ケース 1: テクノロジのドキュメントでは UMDF を推奨しています。
- [ファイル]メニューから [新しいプロジェクト] を選択して、Visual Studio でドライバー パッケージを手動で作成できます。
- [新しいプロジェクト] ダイアログ ボックスの左側のペインで、[Visual C++] | [Visual C++] を見つけて選択します。 Windows ドライバー | WDF。
- 中央のペインで、ユーザー モード ドライバー (UMDF) を選択します。
- [名前] および [場所] ボックスに入力し、[OK] を選びます。 詳細については、「テンプレートに基づいた UMDF ドライバーの作成」を参照してください。 注 新しい UMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。 この長さの制限は wdfglobals.h で定義されています。
- この時点で、ほとんどの UMDF ドライバーに必要な一般的なコードを実装するドライバー プロジェクトが完成しました。 これで、フィルターに固有のコードを指定できるようになりました。
ケース 2: テクノロジのドキュメントでは KMDF を推奨しています。
- [ファイル]メニューから [新しいプロジェクト] を選択して、Visual Studio でドライバー パッケージを手動で作成できます。
- [新しいプロジェクト] ダイアログ ボックスの左側のペインで、WDFを見つけて選択します。
- 中央のペインで、「カーネル モード ドライバー (KMDF)」を選択します。
- [名前] および [場所] ボックスに入力し、[OK] を選びます。 詳細については、「テンプレートに基づいた KMDF ドライバーの作成」を参照してください。 注 新しい KMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。 この長さの制限は wdfglobals.h で定義されています。
- この時点で、ほとんどの KMDF ドライバーに必要な一般的なコードを実装するドライバー プロジェクトが完成しました。 これで、フィルターに固有のコードを指定できるようになりました。
ケース 3: テクノロジーのドキュメントには、特定のフィルターまたはミニ フィルター モデルを説明します。
デバイス テクノロジに特定のフィルターまたはミニフィルター モデルがある場合は、Visual Studio にモデルのテンプレートがあるかどうかを確認してください。
- [ファイル]メニューから [新しいプロジェクト] を選択して、Visual Studio でドライバー パッケージを手動で作成できます。
- [新しいプロジェクト]ダイアログ ボックスの左側のペインで、[テンプレート] | [テンプレート]を選択します。ビジュアルC++ | Windowsドライバー。
- インストールされているテンプレートのリストを参照して、作成する必要があるフィルターのタイプに対応するテンプレートがあるかどうかを確認します。 たとえば、次のようにフィルター ドライバーを選択できます。「ネットワーク」の下の NDIS テンプレート。
- 該当するフィルター ドライバーの種類のテンプレートが [Windows Driver]\(Windows ドライバー\) にない場合は、[Online]\(オンライン\) を選んで、オンラインで利用できるテンプレートを参照します。
- 該当するフィルター ドライバーの種類のテンプレートが見つかった場合は、そのテンプレートを選び、[名前] および [場所] ボックスに入力して、[OK] を選びます。
- この時点で、フィルター ドライバーに必要な一般的なコードを実装するドライバー プロジェクトが完成しました。 これで、フィルターに固有のコードを指定できるようになりました。 実装する必要がある機能については、使用しているテクノロジのドキュメントを参照してください。
デバイス テクノロジに特定のフィルター モデルまたはミニフィルター モデルがあり、使用するタイプのフィルター ドライバーのテンプレートが見つからない場合は、テクノロジ固有のドキュメントを参照して、UMDF、KMDF、または WDM のいずれを使用するかを決定するためのガイダンスを参照してください。
ケース 4: テクノロジーのドキュメントでは WDM を推奨しています。
[ファイル]メニューから [新しいプロジェクト] を選択して、Visual Studio でドライバー パッケージを手動で作成できます。
Visual Studio の [新しいプロジェクト] ダイアログ ボックスの [Windows ドライバー] で [WDM] を選択します。
[名前] および [場所] ボックスに入力し、[OK] を選びます。
この時点で、空の WDM ドライバー プロジェクトが完成しました。 ソリューション エクスプローラー ウィンドウでドライバー プロジェクトを長押し (または右クリック) し、[追加]、[新しい項目] の順に選びます。
[新しい項目の追加] ダイアログ ボックスで [C++ ファイル (.cpp)] を選び、ファイルの名前を入力して [OK] を選びます。
注 .cpp ファイルでなく .c ファイルを作成する場合は、拡張子が .c の名前を入力します。
フィルターに必要な関数を実装します。 関数を実装して整理するときに、.cpp または .c ファイルを追加することもできます。
ケース 5: 使用しているテクノロジのドキュメントには、フィルター ドライバー モデルの推奨事項が記載されていません。
UMDF、KMDF、または WDM がフィルター ドライバーに最適なモデルであるかどうかを判断します。 詳細については、「ドライバー モデルの選択」を参照してください。
[ファイル]メニューから [新しいプロジェクト] を選択して、Visual Studio でドライバー パッケージを手動で作成できます。
Visual Studio の [新しいプロジェクト] ダイアログ ボックスの [Windows ドライバー] で、次のいずれかのテンプレートを選択します。
- WDF | ユーザー モード ドライバー (UMDF)
- WDF | カーネル モード ドライバー (KMDF)
- WDM | 空のカーネル ドライバー
注 新しい KMDF ドライバーか UMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。 この長さの制限は wdfglobals.h で定義されています。
フィルターに必要な関数を実装します。 必要に応じて、新しい .c または .cpp ファイルを作成します。
どのテンプレートを使用すればよいかわからない場合は、Windows ハードウェア WDK およびドライバー開発フォーラムを読むか、フォーラムに投稿することを検討してください。