デバイス インターフェイスは、カーネル モード コンポーネントとユーザー モード アプリケーションの両方で使用できます。 ユーザー モード コードでは、 CfgMgr32 関数 ( CM_Get_Device_Interface_List など) または SetupDiXxx 関数 ( SetupDi デバイス インターフェイス関数を参照) を使用して、登録済みの有効なデバイス インターフェイスを確認できます。 その後、ユーザー モード アプリケーションは 、CreateFile などの I/O API を使用して、デバイスに I/O を送信するためにデバイスへのハンドルを取得できます。 デバイス インターフェイスの有効化と無効化、およびそれらのアクションへの対処方法について通知を受けるには、デバイス インターフェイスの到着およびデバイスの削除の通知を登録するを参照してください。
カーネル モードのコンポーネントは、特定のデバイスまたはファイル オブジェクトを使用する前に、次のことを行う必要があります。
必要なデバイス インターフェイス クラスが登録され、有効になっているかどうかを確認します。
ドライバーは、デバイス インターフェイスのインスタンスが有効または無効になったときに通知を受けるよう、PnP マネージャーに登録できます。 登録するには、IoRegisterPlugPlayNotification を呼び出します。 このルーチンは、ドライバーが指定したコールバックのアドレスを格納します。このコールバックは、指定したデバイス クラスのデバイス インターフェイスのインスタンスが有効または無効になるたびに呼び出されます。 コールバック ルーチンは、インターフェイス インスタンスのシンボリック リンクを表す Unicode 文字列を含む DEVICE_INTERFACE_CHANGE_NOTIFICATION 構造体を受け取ります。 詳細については、 PnP デバイス インターフェイス変更通知の使用 を参照してください。
ドライバーまたはその他のカーネル モード コンポーネントは、 IoGetDeviceInterfaces を呼び出して、特定のデバイス インターフェイス クラスに対して登録されているすべての有効なデバイス インターフェイス インスタンスの一覧を取得することもできます。 返されるリストには、デバイス インターフェイス インスタンスを識別する Unicode シンボリック リンク文字列へのポインターが含まれています。
インターフェイスのインスタンスに対応するデバイスまたはファイル オブジェクトへのポインターを取得します。
特定のデバイス オブジェクトにアクセスするには、ドライバーは IoGetDeviceObjectPointer を呼び出して、ObjectName パラメーターに必要なインターフェイスの Unicode 文字列を渡す必要があります。 ファイル オブジェクトにアクセスするには、ドライバーは InitializeObjectAttributes を呼び出し、 ObjectName パラメーターに Unicode 文字列を渡し、 ZwCreateFile の呼び出しで正常に初期化された属性構造体を渡す必要があります。