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 :
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 |