Partager via


IWDFDriver ::CreateDevice, méthode (wudfddi.h)

[Avertissement : UMDF 2 est la dernière version de UMDF et remplace UMDF 1. Tous les nouveaux pilotes UMDF doivent être écrits à l’aide de UMDF 2. Aucune nouvelle fonctionnalité n’est ajoutée à UMDF 1 et il existe une prise en charge limitée de UMDF 1 sur les versions plus récentes de Windows 10. Les pilotes Windows universels doivent utiliser UMDF 2. Pour plus d’informations, consultez Bien démarrer avec UMDF.]

La méthode CreateDevice configure et crée un objet d’appareil framework.

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 utilisée par l’infrastructure 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 quand des événements pertinents se produisent. Pour plus d’informations, consultez la section Remarques suivante.

[out] ppDevice

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

Valeur de retour

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 (par exemple, la méthode IPnpCallback ::OnD0Entry) pour notifier le pilote.

Si l’appel à CreateDevice réussit, le pilote doit appeler la méthode IWDFDevice ::Release. Notez que le framework 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. L’infrastructure 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;
}

Exigences

Exigence Valeur
fin du support Indisponible dans UMDF 2.0 et versions ultérieures.
plateforme cible Bureau
version minimale de UMDF 1.5
d’en-tête wudfddi.h (include Wudfddi.h)
DLL WUDFx.dll

Voir aussi

IDriverEntry ::OnDeviceAdd

IFileCallbackCleanup

IFileCallbackClose

IObjectCleanup

IPnpCallback

IPnpCallback ::OnD0Entry

IPnpCallbackHardware

IPnpCallbackSelfManagedIo

IWDFDevice

IWDFDeviceInitialize

IWDFDriver