Méthode IWDFUsbTargetFactory ::CreateUsbTargetDevice (wudfusb.h)
[Avertissement : UMDF 2 est la dernière version d’UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide d’UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et la prise en charge d’UMDF 1 est limitée sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Prise en main avec UMDF.]
La méthode CreateUsbTargetDevice crée un objet de périphérique USB qui est également une cible d’E/S.
Syntaxe
HRESULT CreateUsbTargetDevice(
[out] IWDFUsbTargetDevice **ppDevice
);
Paramètres
[out] ppDevice
Pointeur vers une mémoire tampon qui reçoit un pointeur vers l’interface IWDFUsbTargetDevice pour l’objet périphérique cible USB.
Valeur retournée
CreateUsbTargetDevice retourne l’une des valeurs suivantes :
Code de retour | Description |
---|---|
|
CreateUsbTargetDevice a correctement créé un objet de périphérique USB qui est également une cible d’E/S. |
|
CreateUsbTargetDevice a rencontré un échec d’allocation. |
|
Cette valeur correspond au code d’erreur retourné par la fonction WinUsb_Initialize . |
Remarques
Un pilote UMDF doit libérer le pointeur d’interface IWDFUsbTargetDevice que la méthode CreateUsbTargetDevice retourne dans le paramètre ppDevice lorsque le pilote est terminé avec l’interface.
Si l’objet file associé à l’objet cible d’E/S créé est requis, le pilote doit appeler la méthode IWDFIoTarget ::GetTargetFile . Pour plus d’informations sur cet objet de fichier, consultez Création de fichiers par une cible d’E/S USB.
UmdfDispatcher=WinUsb
) dans la section DDInstall.WDF . UmdfDispatcher est nécessaire pour informer la plateforme UMDF qu’elle peut autoriser l’accès à la cible d’E/S USB. Pour plus d’informations sur UmdfDispatcher, consultez Spécification de directives WDF.
Exemples
L’exemple de code suivant montre comment créer et utiliser un objet de périphérique USB dans une implémentation de la méthode IPnpCallbackHardware ::OnPrepareHardware du pilote 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;
}
Configuration requise
Condition requise | Valeur |
---|---|
Fin de la prise en charge | Non disponible dans UMDF 2.0 et versions ultérieures. |
Plateforme cible | Desktop (Expérience utilisateur) |
Version UMDF minimale | 1.5 |
En-tête | wudfusb.h (inclure Wudfusb.h) |
DLL | WUDFx.dll |