다음을 통해 공유


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 대상별 파일 만들기를 참조하세요.

참고CreateUsbTargetDeviceIWDFIoTarget 인터페이스의 모든 메서드를 상속합니다.
 
디바이스 스택에서 새로 만든 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
머리글 wudfusb.h(Wudfusb.h 포함)
DLL WUDFx.dll

추가 정보

IWDFIoTarget

IWDFIoTarget::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize