IWDFUsbTargetFactory::CreateUsbTargetDevice メソッド (wudfusb.h)

[警告: UMDF 2 は UMDF の最新バージョンであり、UMDF 1 よりも優先されます。 すべての新しい UMDF ドライバーは、UMDF 2 を使用して記述する必要があります。 UMDF 1 に新機能は追加されておらず、新しいバージョンの Windows 10 では UMDF 1 のサポートが制限されています。 ユニバーサル Windows ドライバーでは、UMDF 2 を使用する必要があります。 詳細については、「UMDF を使用したはじめに」を参照してください。

CreateUsbTargetDevice メソッドは、I/O ターゲットでもある USB デバイス オブジェクトを作成します。

構文

HRESULT CreateUsbTargetDevice(
  [out] IWDFUsbTargetDevice **ppDevice
);

パラメーター

[out] ppDevice

USB ターゲット デバイス オブジェクトの IWDFUsbTargetDevice インターフェイスへのポインターを受け取るバッファーへのポインター。

戻り値

CreateUsbTargetDevice は 、次のいずれかの値を返します。

リターン コード 説明
S_ok

CreateUsbTargetDevice は、I/O ターゲットでもある USB デバイス オブジェクトを正常に作成しました。

E_OUTOFMEMORY

CreateUsbTargetDevice で割り当てエラーが発生しました。

Winerror.h で定義されているエラー コード
この値は、 WinUsb_Initialize 関数から返されたエラー コードに対応します。

解説

UMDF ドライバーは、ドライバーがインターフェイスで完了したときに、CreateUsbTargetDevice メソッドが ppDevice パラメーターで返す IWDFUsbTargetDevice インターフェイス ポインターを解放する必要があります。

作成された I/O ターゲット オブジェクトに関連付けられているファイル オブジェクトが必要な場合、ドライバーは IWDFIoTarget::GetTargetFile メソッドを呼び出す必要があります。 このファイル オブジェクトの詳細については、「 USB I/O ターゲットによるファイルの作成」を参照してください。

: CreateUsbTargetDevice、IWDFIoTarget インターフェイスのすべてのメソッドを継承します。
 
デバイス スタックで新しく作成された USB I/O ターゲット オブジェクトを使用するには、UMDF ドライバーをインストールする INF ファイルに UmdfDispatcher ディレクティブが含まれており、DDInstall.WDF セクションで UmdfDispatcherWinUsb (UmdfDispatcher=WinUsb) に設定する必要があります。 UmdfDispatcher は、USB I/O ターゲットへのアクセスを許可できることを UMDF プラットフォームに通知するために必要です。 UmdfDispatcher の詳細については、「WDF ディレクティブの指定」を参照してください。

次のコード例は、UMDF ドライバーの IPnpCallbackHardware::OnPrepareHardware メソッドの実装で USB デバイス オブジェクトを作成して使用する方法を示しています。

HRESULT
CUmdfHidDevice::OnPrepareHardware(
    __in IWDFDevice* WdfDevice
    )
{
    CComPtr<IWDFUsbTargetFactory> factory;
    USB_INTERFACE_DESCRIPTOR interfaceDescriptor;
    bool hidInterfaceFound = false;
    PUSB_HID_DESCRIPTOR hidDescriptor;
    NTSTATUS status;
    HRESULT hr = S_OK;
    //
    // Get the USB I/O target factory interface.
    //
    hr = WdfDevice->QueryInterface(IID_PPV_ARGS(&factory));
    //
    // Create the USB I/O target.
    //
    hr = factory->CreateUsbTargetDevice(&m_UsbTargetDevice);
    //
    // Get the configuration descriptor for the target device.
    //
    if (SUCCEEDED(hr))
    {
        hr = RetrieveConfigDescriptor(&m_ConfigDescriptor, 
                                      &m_ConfigDescriptorCb);
    }
    //
    // Iterate through the interfaces on the device and find the HID interface.
    //
    if (SUCCEEDED(hr))
    {
        CComPtr<IWDFUsbInterface> usbInterface;
        UCHAR index;
        bool found = true;
        for (index = 0; index < m_ConfigDescriptor->bNumInterfaces; index += 1)
        {
            hr = m_UsbTargetDevice->RetrieveUsbInterface(index, &usbInterface);
            if (SUCCEEDED(hr))
            {
                usbInterface->GetInterfaceDescriptor(&interfaceDescriptor);
                if (interfaceDescriptor.bInterfaceClass == 0x3)
                {
                    hidInterfaceFound = true;
                    break;
                }
            }
            else
            {
                break;
            }
        }
        if (SUCCEEDED(hr) && (hidInterfaceFound == false))
        {
            hr = E_FAIL;
        }
    }
    //
    // Get the HID descriptor associated with this interface.
    //
    if (SUCCEEDED(hr))
    {
        hr = ParseHidDescriptor(
                                m_ConfigDescriptor,
                                m_ConfigDescriptorCb,
                                interfaceDescriptor.bInterfaceNumber
                                );
    }
    //
    // Process the HID information from the device and setup 
    // the collection data structures.
    //
    if (SUCCEEDED(hr))
    {
        hr = SetupCollections();
    }
    return hr;
}

必要条件

   
サポート終了 UMDF 2.0 以降では使用できません。
対象プラットフォーム デスクトップ
最小 UMDF バージョン 1.5
Header wudfusb.h (Wudfusb.h を含む)
[DLL] WUDFx.dll

関連項目

IWDFIoTarget

IWDFIoTarget::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize