デバイス インターフェイスの使用

"デバイス インターフェイス" は、アプリケーションがデバイスにアクセスする際に使用できるプラグ アンド プレイ (PnP) デバイスへのシンボリック リンクです。**ユーザー モード アプリケーションは、インターフェイスのシンボリック リンク名を API 要素 (Microsoft Win32 の CreateFile 関数など) に渡すことができます。デバイス インターフェイスのシンボリック リンク名を取得するために、ユーザー モード アプリケーションは SetupDi 関数を呼び出すことができます。SetupDi 関数の詳細については、「デバイス インターフェイス関数の使用」(英語の可能性あり) を参照してください。

各デバイス インターフェイスは、"デバイス インターフェイス クラス" に属しています。**たとえば、CD-ROM デバイスのドライバー スタックは、GUID_DEVINTERFACE_CDROM クラスに属するインターフェイスを提供できます。CD-ROM デバイスのドライバーの 1 つが、GUID_DEVINTERFACE_CDROM クラスのインスタンスを登録し、システムおよびアプリケーションに CD-ROM デバイスが使用可能であることを通知します。デバイス インターフェイス クラスの詳細については、「デバイス インターフェイスの概要」(英語の可能性あり) を参照してください。

デバイス インターフェイスの登録

デバイス インターフェイス クラスのインスタンスを登録するために、フレームワークベース ドライバーは WdfDeviceCreateDeviceInterfaceEvtDriverDeviceAdd コールバック関数から呼び出すことができます。ドライバーがインターフェイスの複数のインスタンスをサポートしている場合、各インスタンスに一意の参照文字列を割り当てることができます。

ドライバーはデバイス インターフェイスを登録した後、WdfDeviceRetrieveDeviceInterfaceString を呼び出して、システムがデバイス インターフェイスに割り当てたシンボリック リンク名を取得できます。

ドライバーがデバイス インターフェイスを登録できるその他の方法の詳細については、「デバイス インターフェイス クラスの登録」(英語の可能性あり) を参照してください。

デバイス インターフェイスの有効化および無効化

ドライバーが WdfDeviceCreateDeviceInterface を呼び出した後、デバイスが作業状態に移行すると、フレームワークはすべてのデバイス インターフェイスを自動的に有効にします。デバイスが作業状態から別の状態に移行すると、フレームワークはインターフェイスを無効にします。ドライバーが WdfDeviceCreateDeviceInterface を呼び出すときに物理デバイス オブジェクト (PDO) を指定した場合、無効なデバイスが再び有効になると、フレームワークはデバイスのインターフェイスを再び有効にします。

ドライバーは、必要に応じてデバイス インターフェイスを無効にして再び有効にできます。たとえば、デバイスが応答を停止しているとドライバーが判断した場合、ドライバーは WdfDeviceSetDeviceInterfaceState を呼び出して、デバイスのインターフェイスを無効にし、アプリケーションがインターフェイスへの新しいハンドルを取得できないようにすることができます (インターフェイスへの既存のハンドルには影響しません)。後でデバイスが使用可能になったら、ドライバーは WdfDeviceSetDeviceInterfaceState を再び呼び出して、インターフェイスを再び有効にすることができます。

デバイス インターフェイスへのアクセス要求の受信

アプリケーションまたはカーネル モード コンポーネントがドライバーのデバイス インターフェイスへのアクセスを要求すると、フレームワークはドライバーの EvtDeviceFileCreate コールバック関数を呼び出します。ドライバーは WdfFileObjectGetFileName を呼び出して、アプリケーションまたはカーネル モード コンポーネントがアクセスしているデバイスまたはファイルの名前を取得できます。ドライバーがデバイス インターフェイスを登録するときに参照文字列を指定した場合、オペレーティング システムには WdfFileObjectGetFileName が返すファイル名またはデバイス名の参照文字列が含まれています。

他のドライバーがドライバーのデバイス インターフェイスにアクセスする方法の詳細については、「デバイス インターフェイスの使用」(英語の可能性あり) を参照してください。