WDM デバイス オブジェクトの例
次の図では、前にキーボードとマウスのハードウェア構成の図で示したキーボードとマウス デバイスをデバイス オブジェクトとして表しています。 キーボードとマウスのドライバー レイヤーを描いた図に示されているキーボードとマウス ドライバーは、I/O サポート ルーチン (IoCreateDevice) を呼び出してこれらのデバイス オブジェクトを作成します。
キーボード デバイスとマウス デバイスでは、それぞれのポート ドライバーとクラス ドライバーの両方でデバイス オブジェクトが作成されます。 ポート ドライバーは、物理ポートを表す物理デバイス オブジェクト (PDO) を作成します。 各クラス ドライバーは、キーボードまたはマウス デバイスを I/O 要求のターゲットとして表す独自の機能デバイス オブジェクト (FDO) を作成します。
各クラス ドライバーは、I/O サポート ルーチンを呼び出して、次の下位レベルのドライバーのデバイス オブジェクトへのポインターを取得します。これにより、クラス ドライバーはそのドライバー (ポート ドライバー) の上にチェーン接続します。 その後、クラス ドライバーは、物理デバイスを表すターゲット PDO のポート ドライバーに I/O 要求を送信できます。
構成に追加されたオプションのフィルター ドライバーは、フィルター デバイス オブジェクト (filter DO) を作成します。 クラス ドライバーと同様に、オプションのフィルター ドライバーは、デバイス スタック内の次の下位ドライバーに自身をチェーンし、ターゲット PDO の I/O 要求を次の下位ドライバーに送信します。
前にキーボードとマウスのドライバー レイヤーの図に示したように、各ポート ドライバーはバス (最下位レベル) ドライバーであるため、割り込みを生成するデバイスのすべてのポート ドライバーで割り込みオブジェクトを設定し、ISR を登録する必要があります。
キーボードとマウスのハードウェア構成の図に示されているデュアル デバイス ポート ドライバー (キーボードと補助デバイス コントローラー対応の i8042 ドライバーのようなドライバー) は、各デバイスが異なる割り込みベクトルを使用する場合、デバイス固有の割り込みオブジェクトを設定する必要があります。 このようなドライバーを記述するときは、デバイスごとに個別の ISR を実装するか、両方のデバイスに 1 つの ISR を実装できます。