デバイス インターフェイス クラスの概要
ユーザー モード コードが I/O 要求を送信できる物理、論理、または仮想デバイスのドライバーは、そのユーザー モード クライアントの名前を指定する必要があります。 ユーザー モード アプリケーション (またはその他のシステム コンポーネント) は、名前を使用して、I/O を要求しているデバイスを識別します。
Windows NT 4.0 以前のバージョンの NT ベースのオペレーティング システムでは、ドライバーはデバイス オブジェクトに名前を付け、これらの名前とユーザーに表示される Win32 論理名の間のシンボリック リンクをレジストリに設定します。
Windows 2000 以降では、ドライバーはデバイス オブジェクトに名前を付けません。 代わりに、デバイス インターフェイス クラス別にグループ化されたデバイス インターフェイスを使用します。 デバイス インターフェイス クラスは、デバイスとドライバーの機能を、他のドライバーやユーザー モード アプリケーションを含む他のシステム コンポーネントにエクスポートする方法です。 ドライバーは、ユーザー モードの I/O 要求が送信される可能性がある各デバイス オブジェクトのデバイス インターフェイス クラスのデバイス インターフェイス インスタンスを登録して有効にすることができます。 各 デバイス インターフェイス クラス は、特定の I/O コントラクトなど、そのクラス内の任意 のデバイス インターフェイス がサポートまたは表す必要がある概念的な機能を表す必要があります。
各デバイス インターフェイス クラスは GUID に関連付けられています。 システムは、デバイス固有のヘッダー ファイル内の一般的なデバイス インターフェイス クラスの GUID を定義します。 ベンダーは、追加のデバイス インターフェイス クラスを作成できます。
たとえば、3 種類のマウス デバイスでは、USB ポート、シリアル ポートを介して 2 つ目、赤外線ポートを介して 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 は、カーネル モード ドライバー間でルーチン エントリ ポイントを渡すために使用されます。