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 |
---|---|
|
CreateUsbTargetDevice criou com êxito um objeto de dispositivo USB que também é um destino de E/S. |
|
CreateUsbTargetDevice encontrou uma falha de alocação. |
|
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.
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 |