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 I/O ターゲットのフレームワークのサポートにアクセスする前に、フレームワーク USB デバイス オブジェクトを作成する必要があります。 UMDF には、UMDF ドライバーを有効にする USB デバイス オブジェクト メソッドが用意されています。

UMDF-USB デバイス オブジェクトの作成

フレームワークの USB I/O ターゲット機能を使用するには、UMDF ドライバーは最初に IWDFUsbTargetFactory インターフェイスへのポインターを取得する必要があります。 ポインターを取得するには、ドライバーは、デバイスの IWDFDevice インターフェースの QueryInterface メソッドを呼び出す必要があります。 次のコード例は、QueryInterface を呼び出してポインターを取得する方法を示しています。

hr = pdevice->QueryInterface(IID_IWDFUsbTargetFactory, (LPVOID*)&ppUsbTargetFactory);

ドライバーは次に IWDFUsbTargetFactory::CreateUsbTargetDevice メソッドを呼び出して、デバイスの USB I/O ターゲット オブジェクトを作成する必要があります。 ドライバーが USB I/O ターゲットを作成した後、ドライバーは I/O ターゲットに要求を送信できます。 通常、ドライバーは IPnpCallbackHardware::OnPrepareHardware コールバック関数内から IWDFUsbTargetFactory::CreateUsbTargetDevice を呼び出します。

ドライバーが IWDFUsbTargetFactory::CreateUsbTargetDevice を呼び出した後、ドライバーは USB デバイス情報を取得できます (デバイス、USB インターフェイス、インターフェイス エンドポイントの USB 記述子など) 。 USB 記述子については、USB 仕様で説明されています。

UMDF-USB デバイス情報の取得

UMDF ドライバーは、IWDFUsbTargetFactory::CreateUsbTargetDevice メソッドを呼び出して UMDF USB ターゲット デバイス オブジェクトを作成した後、USB デバイスに関する情報を取得するために USB ターゲット デバイス オブジェクトが定義する次のメソッドを呼び出すことができます。

IWDFUsbTargetDevice::RetrieveDescriptor
デバイスの USB デバイス記述子を取得します。

IWDFUsbTargetDevice::GetNumInterfaces
デバイスがサポートする USB インターフェイスの数を取得します。

IWDFUsbTargetDevice::RetrieveUsbInterface
デバイスがサポートする USB インターフェイスのいずれかを公開する IWDFUsbInterface インターフェイスへのポインターを取得します。

IWDFUsbTargetDevice::RetrieveDeviceInformation
USB デバイスに関連付けられている機能情報を取得します。

IWDFUsbTargetDevice::RetrievePowerPolicy
WinUsb 電源ポリシーを取得します。

IWDFUsbTargetDevice::GetWinUsbHandle
I/O ターゲット デバイス オブジェクトに関連付けられている WinUsb インターフェイス ハンドルを取得します。

UMDF USB デバイス オブジェクトへのコントロール転送の送信

UMDF ドライバーは、IWDFUsbTargetDevice::FormatRequestForControlTransfer メソッドを呼び出して、標準、デバイス クラス固有、またはベンダー固有の USB コントロール転送を記述する I/O 要求を書式設定できます。 その後、ドライバーは IWDFIoRequest::Send メソッドを呼び出して、要求を同期的または非同期的に送信できます。

UMDF-USB デバイスの電源ポリシーの設定

UMDF ドライバーは、IWDFUsbTargetDevice::SetPowerPolicy メソッドを呼び出して、USB デバイスの WinUsb で使用される電源ポリシーを設定できます。 USB デバイスの電源ポリシーによって、デバイスの電源管理状態が変わります。