第 9 章 実行に当たっての問題
11.6 Kernel PlugIn の仕組み
11.6.4 Kernel PlugIn のサンプル コードと生成されたコードのディレクトリ構造
11.6.4.1 pci_diag および kp_pci のサンプル ディレクトリ
kp_pci.c ファイルで、Kernel PlugIn のサンプル コード (KP_PCI) を実装してます。このサンプル ドライバ は、WinDriver PCI 診断プログラムのサンプル (pci_diag) の一部で、KP_PCI ドライバに加え、ドライバ (pci_diag) と通信を行うユーザーモード アプリケーション、およびそのユーザーモード アプリケーションと Kernel PlugIn ドライバの両方で使用できる API を含む共有ライブラリが含まれます。C 言語でこのサンプル
以下、WinDriver/pci_diag/ ディレクトリ以下のファイルの概要です。
z
kp_pci/ - 以下の KP_PCI Kernel PlugIn ドライバファイルを含みます。○ kp_pci.c: KP_PCIドライバのソースコード
○ Kernel PlugIn のビルド用の Project および/または make ファイルと関連ファイル。Windows プ ロジェクトファイルは、x86\ (32 ビット) および amd64\ (64 ビット) ディレクトリ以下のターゲッ ト IDE のサブディレクトリ(msdev2005 / msdev2003 / msdev_6) にあります。Solaris の makefile は SOLARIS/ にあります。
○ ターゲット OS 用の KP_PCI Kernel PlugIn ドライバのプリコンパイル済みバージョン:
− WINNT.i386\kp_pci.sys: WinNT DDK でビルドした Windows x86 32 ビット用ドラ イバ
− WINNT.x86_64\kp_pci.sys: Windows Server 2003 DDK でビルドした Windows x64 (64 ビット) 用ドライバ
− SOLARIS/kp_pci: Solaris 用
− Linux: Linux カーネル モジュールは、ターゲットにインストールされているカーネル バー
ジョンのヘッダー ファイルでコンパイルする必要があるため、プリコンパイル済みバー ジョンはありません (セクション 14.4 を参照してください)。
z pci_lib.c: WinDriver の WDC API を使用して PCI デバイスにアクセスするライブラリの実装。
ライブラリの API をユーザーモードアプリケーション (pci_diag.c) と Kernel PlugIn ドライバ (kp_pci.c) の両方で使用します。
z pci_lib.h: pci_lib ライブラリのインターフェイスを提供するヘッダーファイル
z pci_diag.c: サンプルの診断ユーザーモード コンソール (CUI) アプリケーションの実装で、
pci_lib と WDC ライブラリを使用して PCI デバイスとの通信を行います。
このサンプルでは、ユーザーモードの WinDriver アプリケーションから Kernel PlugIn ドライバへの アクセスを行います。デフォルトでは、KP_PCI Kernel PlugIn ドライバへのハンドルで、選択した PCI デバイスを開きます。成功した場合、セクション [11.6.3] の説明のとおり、Kernel PlugIn ドライ バと通信を行います。Kernel PlugIn へのハンドルを開くのに失敗した場合、デバイスとのすべての 通信をユーザーモードから実行します。
z pci.inf (Windows): Windows 98 / Me / 2000 / XP / Server 2003 / Vista 用のサンプル WinDriver PCI INF ファイル。注意: このファイルを使用するには、ファイル内の Vendor および Device ID を 対象のデバイスの Vendor および Device ID に変更してください。
z pci_diag: pci_diag ユーザーモードアプリケーションのビルド用の Project および/または
make ファイル。
Windows プロジェクトファイルは、x86\ (32 ビット) および amd64\ (64 ビット) ディレクトリ以下の ターゲット IDE のサブディレクトリ(msdev2005 / msdev2003 / msdev_6 / cbuilder4 / cbuilder3) にあります。
MSDEV ディレクトリには、Kernel PlugIn ドライバおよびユーザーモードアプリケーションのプロ
ジェクト用のワークスペース/ソリューションファイルも含まれています。
Linux および Solaris の makefile は、それぞれ LINUX/ および SOLARIS/ にあります。
z 対象の OS 用のユーザーモードアプリケーション (pci_diag) のプリコンパイル済みバージョン
○ Windows: WIN32\pci_diag.exe
○ Linux: LINUX/pci_diag
○ Solaris: SOLARIS/pci_diag
z files.txt: サンプル pci_diag ファイルの一覧
z readme.txt: サンプル Kernel PlugIn ドライバ、ユーザーモード アプリケーション、ビルド手順お よびコードのテスト手順の概要
11.6.4.2 DriverWizard で生成された Kernel PlugIn ディレクトリ
対象のデバイス用に DriverWizard で生成された Kernel PlugIn のコードには、カーネルモードの Kernel
PlugIn のプロジェクトと通信を行うユーザーモードアプリケーションが含まれます。汎用的な KP_PCI と
pci_diag サンプルとは対照的に、Wizard で生成されたコードは、対象のデバイス用に検出または定義し たリソース情報を使用します。同様に、コードを生成する前に Wizard で定義したデバイス独自の情報も使 用します。
セクション [11.6.3] の説明のとおり、PCI または PCMCIA の割り込みを処理するドライバを使用する際には、
Wizard で生成された割り込み処理のコードで、定義したハードウェア独自の情報を使用できるようにするた めには、コードを生成する前に、DriverWizard で割り込みを検知するのに読み書きするレジスタを定義し、
これらのレジスタから読み込む、またはレジスタへ書き込むコマンドを設定することを強く推奨します。
以下、DriverWizard で Kernel PlugIn のコードを生成した場合の、生成されたファイルの概要です (xxx は、
コードを生成する際に指定したドライバの名前を表します。また、kp_xxx は、コードを保存先として指定し たディレクトリを表します)。注意: 以下の概要は、生成される C コードについて示しています。Windows で は、C Kernel PlugIn ドライバ (C# ではカーネル モード ドライバを実装できないため)、.NET C# ライブラリ、
Kernel PlugIn ドライバと通信する C# ユーザー モード アプリケーションを含む、類似の C# コードを生成する こともできます。
z kermode/ - 以下の KP_XXX Kernel PlugIn ドライバファイルを含みます。
○ kp_xxx.c: KP_XXX ドライバのソースコード
○ Kernel PlugIn ドライバのビルド用の Project および/または make ファイルと関連ファイル。 Windows プロジェクトファイルは、x86\ (32 ビット) および amd64\ (64 ビット) ディレクトリ以 下のターゲット IDE のサブディレクトリ(msdev2005 / msdev2003 / msdev_6) にあります。
Linux および Solaris の makefile は、それぞれ LINUX/ および SOLARIS/ にあります。
z xxx_lib.c: WinDriver の WDC API を使用して、対象のデバイスへアクセスするライブラリの実 装。このライブラリの API をユーザーモード アプリケーション (xxx_diag) と Kernel PlugIn ドライ
バ (KP_XXX) の両方で使用します。
z xxx_lib.h: xxx_lib ライブラリのインターフェイスを提供するヘッダーファイル
z xxx_diag.c: サンプルの診断ユーザーモードコンソール (CUI) アプリケーションの実装で、
xxx_lib と WDC ライブラリを使用して PCI デバイスとの通信を行います。
このサンプルでは、ユーザーモードの WinDriver アプリケーションから Kernel PlugIn ドライバへの アクセスを行います。デフォルトでは、KP_XXX Kernel PlugIn ドライバへのハンドルで、選択した PCI デバイスを開きます。成功した場合、セクション [11.6.3] の説明のとおり、Kernel PlugIn ドライ バと通信を行います。Kernel PlugIn へのハンドルを開くのに失敗した場合、デバイスとのすべての 通信をユーザーモードから実行します。
z xxx_diag: xxx_diag ユーザーモードアプリケーションのビルド用の Project および/または
make ファイル。
Windows プロジェクト ファイルは、x86\ (32 ビット) および amd64\ (64 ビット) ディレクトリ以下の ターゲット IDE のサブディレクトリ(msdev2005 / msdev2003 / msdev_6 / cbuilder4 / cbuilder3) にあります。
MSDEV ディレクトリには、Kernel PlugIn ドライバおよびユーザーモードアプリケーションのプロ
ジェクト用のワークスペース/ソリューションファイルも含まれています。
Linux および Solaris の makefile は、それぞれ linux/ および solaris/ にあります。
z xxx_files.txt: 生成されたファイルの一覧と生成されたコードのビルド手順
z xxx.inf: 対象のデバイスの WinDriver INF ファイル (Windows 98 / Me / 2000 / XP / Server 2003 / Vista で、PCI または PCMCIA などの Plug and Play デバイスの場合のみ)