Partager via


Méthode IWDFDriver ::CreateDevice (wudfddi.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 CreateDevice configure et crée un objet d’appareil d’infrastructure.

Syntaxe

HRESULT CreateDevice(
  [in]           IWDFDeviceInitialize *pDeviceInit,
  [in, optional] IUnknown             *pCallbackInterface,
  [out]          IWDFDevice           **ppDevice
);

Paramètres

[in] pDeviceInit

Pointeur vers l’interface IWDFDeviceInitialize qui représente les propriétés de configuration du nouvel appareil à créer.

[in, optional] pCallbackInterface

Pointeur vers l’interface IUnknown que l’infrastructure utilise pour obtenir les interfaces que le pilote fournit pour le nouvel objet d’appareil. Ces interfaces fournissent les fonctions de rappel que l’infrastructure appelle lorsque des événements pertinents se produisent. Pour plus d'informations, consultez la section Notes qui suit.

[out] ppDevice

Pointeur vers une mémoire tampon qui reçoit un pointeur vers l’interface IWDFDevice pour le nouvel objet d’appareil.

Valeur retournée

CreateDevice retourne S_OK si l’opération réussit. Sinon, cette méthode retourne l’un des codes d’erreur définis dans Winerror.h.

Remarques

L’interface IUnknown que le pilote fournit pour le paramètre pCallbackInterface peut prendre en charge plusieurs interfaces. L’infrastructure appelle la méthode QueryInterface de l’interface IUnknown fournie plusieurs fois pour récupérer les interfaces prises en charge par le pilote. La méthode QueryInterface du pilote peut retourner les interfaces suivantes :

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallbackHardware

IPnpCallbackHardware2

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPnpCallbackHardwareInterrupt

IPnpCallbackSelfManagedIo

IPowerPolicyCallbackWakeFromS0

IPowerPolicyCallbackWakeFromSx

Lorsque l’appareil change d’état, l’infrastructure appelle la méthode liée à la modification (telle que la méthode IPnpCallback ::OnD0Entry ) pour avertir le pilote.

Si l’appel à CreateDevice réussit, le pilote doit appeler la méthode IWDFDevice ::Release . Notez que l’infrastructure a son propre nombre de références sur l’objet .

Pour plus d’informations, consultez Ajout d’un appareil.

Exemples

L’exemple de code suivant montre une implémentation de la méthode OnDeviceAdd de l’interface IDriverEntry . Le framework appelle OnDeviceAdd lorsqu’un appareil est ajouté à un ordinateur.

HRESULT 
CDriver::OnDeviceAdd(
 IWDFDriver* pDriver,
 IWDFDeviceInitialize* pDeviceInit
    )
{
 IUnknown   *pDeviceCallback = NULL;
 IWDFDevice *pIWDFDevice     = NULL;
 IUnknown   *pIUnkQueue      = NULL;    

    //
    // Create the device callback object.
    //
    HRESULT hr = CDevice::CreateInstance(&pDeviceCallback);

    //
    // Set device properties
    //
    if (S_OK == hr) {
        pDeviceInit->SetLockingConstraint(WdfDeviceLevel);
        // To register as the power-policy owner for 
        // the device stack, call the following:
        // pDeviceInit->SetPowerPolicyOwnership(TRUE);

        // For a filter driver, call the following:
        // pDeviceInit->SetFilter();
    }

    //
    // Request that the framework create a device object.
    // The device callback object is passed to inform the 
    // framework about the PnP callback functions the driver supports.
    //
    if (S_OK == hr) {
        hr = pDriver->CreateDevice(pDeviceInit, 
                                   pDeviceCallback,
                                   &pIWDFDevice);
    }

    //
    // Create the queue callback object.
    //

    if (S_OK == hr) {
        hr = CQueue::CreateInstance(&pIUnkQueue);
    }

    //
    // Configure the default queue. 
    // The queue callback object is passed to inform the 
    // framework about the queue callback functions the driver supports.
    //
    if (S_OK == hr) {
        IWDFIoQueue * pDefaultQueue = NULL;
        hr = pIWDFDevice->CreateIoQueue(
                       pIUnkQueue,
                       TRUE,                  // bDefaultQueue
                       WdfIoQueueDispatchParallel,
                       TRUE,                  // bPowerManaged
                       FALSE, //bAllowZeroLengthRequests
                       &pDefaultQueue);
        SAFE_RELEASE(pDefaultQueue);
    }

    SAFE_RELEASE(pDeviceCallback);
    SAFE_RELEASE(pIWDFDevice);
    SAFE_RELEASE(pIUnkQueue);    

    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 wudfddi.h (inclure Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IDriverEntry ::OnDeviceAdd

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallback ::OnD0Entry

IPnpCallbackHardware

IPnpCallbackSelfManagedIo

IWDFDevice

IWDFDeviceInitialize

IWDFDriver