Método IWDFUsbTargetFactory::CreateUsbTargetDevice (wudfusb.h)

[Aviso: UMDF 2 é a versão mais recente do UMDF e substitui UMDF 1. Todos os novos drivers UMDF devem ser gravados usando UMDF 2. Nenhum novo recurso está sendo adicionado ao UMDF 1 e há suporte limitado para UMDF 1 em versões mais recentes do Windows 10. Drivers universais do Windows devem usar UMDF 2. Para obter mais informações, consulte Introdução com UMDF.]

O método CreateUsbTargetDevice cria um objeto de dispositivo USB que também é um destino de E/S.

Sintaxe

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

Parâmetros

[out] ppDevice

Um ponteiro para um buffer que recebe um ponteiro para a interface IWDFUsbTargetDevice para o objeto de dispositivo de destino USB.

Retornar valor

CreateUsbTargetDevice retorna um dos seguintes valores:

Código de retorno Descrição
S_OK

CreateUsbTargetDevice criou com êxito um objeto de dispositivo USB que também é um destino de E/S.

E_OUTOFMEMORY

CreateUsbTargetDevice encontrou uma falha de alocação.

Um código de erro definido em Winerror.h
Esse valor corresponde ao código de erro retornado pela função WinUsb_Initialize .

Comentários

Um driver UMDF deve liberar o ponteiro da interface IWDFUsbTargetDevice que o método CreateUsbTargetDevice retorna no parâmetro ppDevice quando o driver é feito com a interface .

Se o objeto de arquivo associado ao objeto de destino de E/S criado for necessário, o driver deverá chamar o método IWDFIoTarget::GetTargetFile . Para obter mais informações sobre esse objeto de arquivo, consulte Criação de arquivo por um destino de E/S USB.

ObservaçãoCreateUsbTargetDevice herda todos os métodos da interface IWDFIoTarget .
 
Para usar o objeto de destino de E/S USB recém-criado em uma pilha de dispositivos, o arquivo INF que instala o driver UMDF deve conter a diretiva UmdfDispatcher e definir UmdfDispatcher como WinUsb (UmdfDispatcher=WinUsb) na seção DDInstall.WDF . UmdfDispatcher é necessário para informar à plataforma UMDF que ela pode permitir o acesso ao destino de E/S USB. Para obter mais informações sobre UmdfDispatcher, consulte Especificando diretivas do WDF.

Exemplos

O exemplo de código a seguir mostra como criar e usar um objeto de dispositivo USB em uma implementação do método IPnpCallbackHardware::OnPrepareHardware do driver UMDF.

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;
}

Requisitos

Requisito Valor
Fim do suporte Indisponível no UMDF 2.0 e posterior.
Plataforma de Destino Área de Trabalho
Versão mínima do UMDF 1.5
Cabeçalho wudfusb.h (include Wudfusb.h)
DLL WUDFx.dll

Confira também

IWDFIoTarget

IWDFIoTarget::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize