デバイス インターフェイス クラスの概要

ユーザー モード コードが I/O 要求を送信できる物理、論理、または仮想デバイスのドライバーは、そのユーザー モード クライアントの名前を指定する必要があります。 ユーザー モード アプリケーション (またはその他のシステム コンポーネント) は、名前を使用して、I/O を要求しているデバイスを識別します。

WINDOWS NT 4.0 以前のバージョンの NT ベースのオペレーティング システムでは、ドライバーはデバイス オブジェクトに名前を付け、これらの名前とユーザーが表示する Win32 論理名の間のシンボリック リンクをレジストリに設定します。

Windows 2000 以降では、ドライバーはデバイス オブジェクトに名前を付けません。 代わりに、 デバイス インターフェイス クラス別にグループ化された デバイス インターフェイスを使用します。 デバイス インターフェイス クラスは、デバイスとドライバーの機能を、他のドライバーやユーザー モード アプリケーションを含む他のシステム コンポーネントにエクスポートする方法です。 ドライバーは、ユーザー モードの I/O 要求が送信される可能性があるデバイス オブジェクトごとに、デバイス インターフェイス クラスのデバイス インターフェイス インスタンスを登録して有効にすることができます。 各 デバイス インターフェイス クラス は、特定の I/O コントラクトなど、そのクラス内のすべての デバイス インターフェイス でサポートまたは表す必要がある概念機能を表す必要があります。

各デバイス インターフェイス クラスは GUID に関連付けられています。 システムは、デバイス固有のヘッダー ファイル内の一般的なデバイス インターフェイス クラスの GUID を定義します。 ベンダーは、追加のデバイス インターフェイス クラスを作成できます。

たとえば、3 種類のマウス デバイスは、USB ポートを介して接続する場合でも、1 つはシリアル ポートを介して、3 つ目は赤外線ポートを介して接続する場合でも、同じデバイス インターフェイス クラスのメンバーである デバイス インターフェイス を登録できます。 各ドライバーは、そのデバイスをインターフェイス クラス GUID_DEVINTERFACE_MOUSEのメンバーとして登録します。 この GUID は、ヘッダー ファイル Ntddmou.h で定義されています。

ドライバーは、 デバイス とドライバーが機能をサポートするデバイス インターフェイス クラス の数を制御するデバイスのデバイス インターフェイスを登録して有効にすることができます。 たとえば、マウントできるディスクのドライバーは、そのディスク インターフェイス クラス (GUID_DEVINTERFACE_DISK) とマウント可能なデバイス クラス (MOUNTDEV_MOUNTED_DEVICE_GUID) の両方に登録する必要があります。

ドライバーがデバイス インターフェイス クラスデバイス インターフェイス インスタンスを登録すると、I/O マネージャーは、デバイスとデバイス インターフェイス クラス GUID をシンボリック リンク名に関連付けます。 ドライバーは、そのシンボリック リンクがドライバーまたはアプリケーションが I/O を送信するために使用できるようにするために、デバイス インターフェイス有効にする必要があります。 リンク名の登録はシステムの起動時に保持されますが、デバイスの列挙ごとにドライバーによって デバイス インターフェイス を有効にする必要があります。 特定の デバイス インターフェイス クラス を使用するアプリケーションは、そのクラス内の デバイス インターフェイス のインスタンスを照会し、インターフェイスをサポートするデバイスを表すシンボリック リンク名の一覧を受け取ることができます。 アプリケーションは、I/O 要求のターゲットとしてシンボリック リンク名を使用できます。

IRP_MN_QUERY_INTERFACE 要求に 応答してドライバーがエクスポートできるインターフェイスとデバイス インターフェイスを混同しないでください。 その IRP は、カーネル モード ドライバー間でルーチン エントリ ポイントを渡すために使用されます。