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

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

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

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

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

たとえば、3 種類の異なるマウス デバイスは、1 つ目が 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 は、カーネル モード ドライバー間でルーチン エントリ ポイントを渡すために使用されます。