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

ユーザー モード コードが 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 は、カーネル モード ドライバー間でルーチン エントリ ポイントを渡すために使用されます。