ハードウェア通知クライアント ドライバーの作成
このセクションでは、Microsoft が提供する KMDF クラス拡張機能を利用するハードウェア通知クライアント ドライバーの開発に関する一般的なガイダンスを提供します。
Mshwnclxstub.lib にリンクし、ヘッダー hwn.h と hwnclx.h をインクルードするクライアント ドライバー実装用のファイルを作成します。
必要な KMDF およびハードウェア通知クラス拡張機能コールバック関数のインスタンスを定義します。 具体的には、次のコード例に示すコールバック関数を実装して登録する必要があります。
DRIVER_INITIALIZE DriverEntry; EVT_WDF_DRIVER_DEVICE_ADD HwnClientEvtDeviceAdd; HWN_CLIENT_INITIALIZE_DEVICE HwnClientInitializeDevice; HWN_CLIENT_UNINITIALIZE_DEVICE HwnClientUnInitializeDevice; HWN_CLIENT_QUERY_DEVICE_INFORMATION HwnClientQueryDeviceInformation; HWN_CLIENT_START_DEVICE HwnClientStartDevice; HWN_CLIENT_STOP_DEVICE HwnClientStopDevice; HWN_CLIENT_SET_STATE HwnClientSetState; HWN_CLIENT_GET_STATE HwnClientGetState;
DriverEntry ルーチンを実装します。これは、クライアント ドライバーのエントリ ポイントであり、初期化を担当します。 ハードウェア通知クライアント ドライバーの場合、この関数は次の処理を行う必要があります。
WDF_DRIVER_CONFIG_INIT を呼び出して、ドライバーの WDF_DRIVER_CONFIG 構造体を初期化します。
WdfDriverCreate を呼び出して、クライアント ドライバーのフレームワーク ドライバー オブジェクトを作成します。
クラス拡張機能で使用するコールバック関数ポインターを含む、HWN_CLIENT_REGISTRATION_PACKET の内容を定義します。 必要なコールバック関数の詳細については、「ハードウェア通知のリファレンス」を参照してください。
HwNRegisterClient を呼び出して、クライアント ドライバーをクラス拡張機能に登録します。
EVT_WDF_DRIVER_DEVICE_ADD 関数を実装します。この関数は、PnP マネージャーがデバイスの存在を報告するときにデバイスの初期化操作を実行する役割を担います。 ハードウェア通知クライアント ドライバーの場合、この関数は次の処理を行う必要があります。
HwNProcessAddDevicePreDeviceCreate を呼び出します。これは、KMDF がデバイスを別の状態に移行するために必要なデバイスの準備/リリース コールバックと開始/終了コールバックを提供します。
WdfDeviceCreate を呼び出してフレームワーク デバイス オブジェクトを作成します。
HwNProcessAddDevicePostDeviceCreate を呼び出して I/O キューを作成します。
定義済みの HWN_CLIENT_INITIALIZE_DEVICE 関数を実装します。この関数は、使用するハードウェア通知コントローラーを準備するためにクラス拡張機能によって呼び出されます。
定義済みの HWN_CLIENT_UNINITIALIZE_DEVICE 関数を実装します。この関数は、使用するハードウェア通知コントローラーを初期化するためにクラス拡張機能によって呼び出されます。
定義済みの HWN_CLIENT_QUERY_DEVICE_INFORMATION 関数を実装します。この関数は、クラス拡張機能によって呼び出されます。 この関数は、ハードウェア通知コンポーネントの属性を取得する役割を担います。
定義済みの HWN_CLIENT_START_DEVICE 関数を実装します。この関数は、クラス拡張機能によって呼び出されます。 この関数は、ハードウェア通知コントローラーを起動し、クライアント ドライバーの ACPI リソースを割り当てる役割を担います。
定義済みの HWN_CLIENT_STOP_DEVICE 関数を実装します。この関数は、クラス拡張機能によって呼び出されます。 この関数は、ハードウェア通知コントローラーを停止し、クライアント ドライバーが使用する ACPI リソースを解放する役割を担います。
定義済みの HWN_CLIENT_SET_STATE を実装します。この関数は、クラス拡張機能によって呼び出されます。 この関数は、ハードウェア通知コンポーネントの状態を設定する役割を担います。
定義済みの HWN_CLIENT_GET_STATE を実装します。この関数は、クラス拡張機能によって呼び出されます。 この関数は、ハードウェア通知コンポーネントの現在の値を取得する役割を担います。 入力バッファーが NULL の場合、つまりユーザーが特定のハードウェア通知状態を指定しなかった場合、この関数はすべてのハードウェア通知コンポーネントの状態情報を返します。