UMDF 1.x ドライバーでの USB インターフェイスの操作
警告
UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 には新機能が追加されておらず、Windows 10 の新しいバージョンでは UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。
アーカイブされた UMDF 1 サンプルは、「Windows 11, バージョン 22H2 - 2022 年 5 月 ドライバーサンプルの更新」でご確認いただけます。
詳しくは、「UMDF の概要」をご覧ください。
フレームワークは、各 USB インターフェイスをフレームワーク USB インターフェイス オブジェクトとして表します。 UMDF ドライバーは、フレームワーク USB デバイス オブジェクトを作成するときに、フレームワークは、デバイスがサポートする各 USB インターフェイスのフレームワーク USB インターフェイス オブジェクトを作成します。
ほとんどの USB デバイスにはインターフェイスが 1 つだけあり、インターフェイスの代替設定は 1 つだけです。 このようなデバイスのドライバーは、通常、フレームワークの USB インターフェイス オブジェクトが定義するオブジェクト メソッドを使用する必要はありません。
UMDF ドライバーは、複数のインターフェイスまたは代替設定を提供する USB デバイスをサポートしている場合、インターフェイス オブジェクト メソッドは、ドライバーを有効にします。
UMDF-USB インターフェイス情報の取得
UMDF ドライバーが IWDFUsbTargetFactory::CreateUsbTargetDevice メソッドを呼び出して UMDF-USB ターゲット デバイス オブジェクトを作成した後、ドライバーは IWDFUsbTargetDevice::GetNumInterfaces メソッドを呼び出して、デバイスがサポートする USB インターフェイスの数を取得できます。 次に、ドライバーは IWDFUsbTargetDevice::RetrieveUsbInterface メソッドを呼び出して、デバイスがサポートする USB インターフェイスを公開する IWDFUsbInterface インターフェイスへのポインターを取得できます。 その後、ドライバーは、各 USB インターフェイス オブジェクトが USB インターフェイスに関する情報を取得するために定義する次のメソッドを呼び出すことができます。
IWDFUsbInterface::GetInterfaceNumber
USB インターフェイス オブジェクトに関連付けられている USB インターフェイス番号を取得します。
IWDFUsbInterface::GetInterfaceDescriptor
USB インターフェイスの代替設定のいずれかに関連付けられている USB インターフェイス記述子を取得します。
IWDFUsbInterface::GetNumEndPoints
USB インターフェイスの代替設定のいずれかに関連付けられているエンドポイント (パイプとも呼ばれます) の数を取得します。
IWDFUsbInterface::GetConfiguredSettingIndex
USB インターフェイス用に現在選択されている代替設定を識別するインデックス値を取得します。
IWDFUsbInterface::RetrieveUsbPipeObject
指定した USB デバイス インターフェイスとパイプ インデックスに関連付けられているフレームワーク パイプ オブジェクトを公開する IWDFUsbTargetPipe インターフェイスへのポインターを取得します。
IWDFUsbInterface::GetWinUsbHandle
USB インターフェイスに関連付けられている WinUsb インターフェイス ハンドルを取得します。
UMDF-USB インターフェイスの代替設定を選択します。
UMDF ドライバーは、IWDFUsbInterface::SelectSetting メソッドを呼び出して、デバイスでサポートされているいずれかの USB インターフェイスの代替設定を選択できます。
デバイスの代替設定には、0 から始まる連続した番号を付ける必要があります。
重要 設定を選択すると、インターフェイスとエンドポイントに関する情報が無効になります。 したがって、ドライバーは、この情報を再度取得する必要があります。 また、ドライバーはカード以前に取得したすべての USB パイプ オブジェクトを削除して再作成する必要があります。