新しいソフトウェア ドライバーの作成
このトピックでは、Visual Studio を使って新しいソフトウェア ドライバーの作成を始める方法について説明します。ソフトウェア ドライバーは、デバイス ファンクション ドライバー、フィルター ドライバー、ファイル システム ドライバーとは異なります。それらのドライバーについては、別のトピックで説明しています。ソフトウェア ドライバーと、他の種類のドライバーとの違いについて詳しくは、「ドライバーとは」と「ドライバー モデルの選択」をご覧ください。
まず、どのドライバー モデルがソフトウェア ドライバーに適しているかを判断します。選択肢は、カーネル モード ドライバー フレームワーク (KMDF)、従来の NT ドライバー モデル、Windows Driver Model (WDM) の 3 つです。どのモデルが最適かの判断については、「ドライバー モデルの選択」をご覧ください。
ケース 1: KMDF を使う
- Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
- [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、[WDF] を探してクリックします。
- 中央のウィンドウで、[Kernel Mode Driver (KMDF)] (カーネル モード ドライバー (KMDF)) をクリックします。
- [名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。詳しくは、「テンプレートを使った KMDF ドライバーの作成」をご覧ください。注 新しい KMDF ドライバーを作成する場合、32 文字以下のドライバー名を選ぶ必要があります。この長さの制限は、wdfglobals.h で定義されています。
- この時点で、ほとんどの KMDF ドライバーに必要な一般的なコードを実装したドライバー プロジェクトができています。これで、ソフトウェア ドライバー固有のコードを追加できるようになりました。
ケース 2: 従来の NT モデルを使う
Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
Visual Studio の [新しいプロジェクト] ダイアログ ボックスで、[Windows Driver] (Windows ドライバー) の [WDM]、[Empty WDM Driver] (空の WDM ドライバー) をクリックします。
注 作成するのは WDM ドライバーではありませんが、[Empty WDM Driver] (空の WDM ドライバー) テンプレートが必要です。
[名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。
この時点で、空の WDM ドライバー プロジェクトができます。ソリューション エクスプローラー ウィンドウでドライバー プロジェクトを右クリックし、[追加]、[新しい項目] の順にクリックします。
[新しい項目の追加] ダイアログ ボックスで [C++ ファイル (.cpp)] を選び、ファイルの名前を入力して [OK] をクリックします。
注 .cpp ファイルでなく .c ファイルを作成する場合は、拡張子が .c の名前を入力します。
ntddk.h をインクルードします。
ソフトウェア ドライバーに必要な関数を実装します。関数の実装と整理が進むにつれて、ヘッダー ファイル、.cpp または .c ファイルの追加が必要になる場合があります。
ケース 3: WDM を使う
ソフトウェア ドライバーに WDM を使うことはほとんどありません。しかし、使う場合は、次の手順に従います。
Visual Studio の [ファイル] メニューで、[新規作成]、[プロジェクト] の順にクリックします。
Visual Studio の [新しいプロジェクト] ダイアログ ボックスで、[Windows Driver] (Windows ドライバー) の [WDM] をクリックします。
[名前] ボックスと [場所] ボックスに入力し、[OK] をクリックします。
この時点で、空の WDM ドライバー プロジェクトができます。ソリューション エクスプローラー ウィンドウでドライバー プロジェクトを右クリックし、[追加]、[新しい項目] の順にクリックします。
[新しい項目の追加] ダイアログ ボックスで [C++ ファイル (.cpp)] を選び、ファイルの名前を入力して [OK] をクリックします。
注 .cpp ファイルでなく .c ファイルを作成する場合は、拡張子が .c の名前を入力します。
wdm.h をインクルードします。
ソフトウェア ドライバーに必要な関数を実装します。関数の実装と整理が進むにつれて、ヘッダー ファイル、.cpp または .c ファイルの追加が必要になる場合があります。