Partager via


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
S_OK

CreateUsbTargetDevice a correctement créé un objet de périphérique USB qui est également une cible d’E/S.

E_OUTOFMEMORY

CreateUsbTargetDevice a rencontré un échec d’allocation.

Code d’erreur défini dans Winerror.h
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.

RemarqueCreateUsbTargetDevice hérite de toutes les méthodes de l’interface IWDFIoTarget .
 
Pour utiliser l’objet cible d’E/S USB nouvellement créé dans une pile de périphériques, le fichier INF qui installe le pilote UMDF doit contenir la directive UmdfDispatcher et définir UmdfDispatcher sur WinUsb (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

Voir aussi

IWDFIoTarget

IWDFIoTarget ::GetTargetFile

IWDFUsbTargetDevice

IWDFUsbTargetFactory

WinUsb_Initialize