Partager via


IWDFDevice ::CreateIoQueue, méthode (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 CreateIoQueue configure la file d’attente d’E/S par défaut associée à un appareil ou crée une file d’attente d’E/S secondaire pour l’appareil.

Syntaxe

HRESULT CreateIoQueue(
  [in, optional] IUnknown                   *pCallbackInterface,
  [in]           BOOL                       bDefaultQueue,
  [in]           WDF_IO_QUEUE_DISPATCH_TYPE DispatchType,
  [in]           BOOL                       bPowerManaged,
  [in]           BOOL                       bAllowZeroLengthRequests,
  [out]          IWDFIoQueue                **ppIoQueue
);

Paramètres

[in, optional] pCallbackInterface

Pointeur vers l’interface IUnknown que le framework utilise pour déterminer les fonctions de rappel d’événement auxquelles le pilote s’abonne sur la file d’attente. Il s’agit des fonctions que l’infrastructure appelle lorsque les événements pertinents se produisent.

Pour les versions UMDF 1.9 et ultérieures, ce paramètre est requis pour les files d’attente d’E/S qui utilisent la méthode de répartition séquentielle ou parallèle, et il est facultatif (peut être NULL) pour les files d’attente d’E/S qui utilisent la méthode de répartition manuelle. Pour les versions UMDF antérieures à 1.9, ce paramètre est requis pour toutes les méthodes de répartition.

[in] bDefaultQueue

Valeur boOL qui spécifie s’il faut configurer la file d’attente d’E/S par défaut ou créer une file d’attente d’E/S secondaire pour l’appareil. TRUE indique de configurer la file d’attente d’E/S par défaut ; FALSE indique la création d’une file d’attente d’E/S secondaire.

[in] DispatchType

Valeur de type WDF_IO_QUEUE_DISPATCH_TYPE qui identifie la façon dont le pilote doit recevoir les requêtes de la file d’attente d’E/S.

[in] bPowerManaged

Valeur BOOL qui spécifie si la file d’attente d’E/S est gérée par l’alimentation. TRUE indique que l’infrastructure coordonne automatiquement la répartition de la file d’attente d’E/S avec Plug-and-Play (PnP) et l’état d’alimentation de l’appareil ; FALSE indique qu’il n’y a pas de distribution coordonnée automatiquement.

[in] bAllowZeroLengthRequests

Valeur BOOL qui spécifie si l’infrastructure place les demandes d’E/S de longueur nulle directement dans la file d’attente d’E/S que le pilote doit gérer. TRUE indique que le pilote doit recevoir des demandes de lecture et d’écriture qui ont des mémoires tampons de longueur nulle. Autrement dit, l’infrastructure place automatiquement ces types de requêtes directement dans la file d’attente d’E/S pour le pilote. FALSE indique que l’infrastructure termine les demandes d’E/S de longueur nulle au lieu de les placer dans la file d’attente d’E/S.

[out] ppIoQueue

Pointeur vers une variable qui reçoit un pointeur vers l’interface IWDFIoQueue pour l’objet file d’attente d’E/S nouvellement créé ou l’objet file d’attente d’E/S par défaut.

Valeur retournée

CreateIoQueue retourne l’une des valeurs suivantes :

Code de retour Description
S_OK
La file d’attente d’E/S a été créée avec succès.
HRESULT_FROM_WIN32(ERROR_BAD_CONFIGURATION)
La file d’attente d’E/S est configurée de l’une des manières suivantes :
  • Le paramètre DispatchType spécifie une file d’attente non managée et aucune des interfaces de rappel de file d’attente d’E/S spécifiées dans la section Remarques n’est prise en charge via le paramètre pCallbackInterface .
  • Le paramètre DispatchType spécifie une file d’attente manuelle et une ou plusieurs interfaces de rappel de file d’attente d’E/S spécifiées dans la section Remarques sont prises en charge via le paramètre pCallbackInterface .
Pour plus d’informations sur ces configurations, consultez la section Remarques.
 

CreateIoQueue peut également retourner d’autres valeurs HRESULT.

Remarques

L’interface IUnknown que le pilote fournit pour le paramètre pCallbackInterface peut prendre en charge plusieurs fonctions de rappel de file d’attente. L’infrastructure appelle la méthode QueryInterface sur l’interface IUnknown fournie plusieurs fois pour récupérer les méthodes d’interface prises en charge par le pilote. Lorsque les applications effectuent des actions liées aux méthodes des interfaces prises en charge (telles qu’une demande de lecture d’E/S), l’infrastructure appelle les méthodes (telles que la méthode IQueueCallbackRead ::OnRead ) pour avertir le pilote. L’infrastructure appelle QueryInterface pour les interfaces suivantes :

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackRead

IQueueCallbackWrite

Lorsque le pilote passe WdfIoQueueDispatchSequential ou WdfIoQueueDispatchParallel pour le paramètre DispatchType de CreateIoQueue afin de créer une file d’attente non managée, CreateIoQueue ne peut retourner S_OK que si l’objet de rappel de file d’attente du pilote implémente au moins une des interfaces précédentes et indique la prise en charge de ces interfaces via l’interface IUnknown vers laquelle pCallbackInterface pointe.

Lorsque le pilote passe WdfIoQueueDispatchManual pour DispatchType pour créer une file d’attente manuelle, CreateIoQueue ne peut retourner S_OK que si l’objet de rappel de file d’attente du pilote n’implémente ni n’indique la prise en charge de l’une des interfaces de rappel précédentes. Pour plus d’informations sur les objets de rappel du pilote, consultez Création d’objets de rappel.

Note Le pilote ne peut pas utiliser le même objet de rappel pour une file d’attente manuelle que celui utilisé pour une file d’attente séquentielle ou parallèle. Autrement dit, si le pilote passe un pointeur particulier vers une interface IUnknown dans un appel à CreateIoQueue pour créer une file d’attente manuelle, le pilote ne peut pas transmettre ultérieurement le pointeur identique à IUnknown dans un appel à CreateIoQueue pour créer une file d’attente séquentielle ou parallèle.
 
Pour plus d’informations sur la configuration du mode de répartition, consultez Configuration du mode de répartition pour une file d’attente d’E/S.

L’infrastructure appelle également QueryInterface sur l’interface IUnknown fournie pour déterminer si le pilote prend en charge l’une des interfaces suivantes :

IObjectCleanup

IQueueCallbackIoResume

IQueueCallbackIoStop

L’infrastructure appelle également QueryInterface sur l’interface IUnknown fournie pour déterminer si le pilote prend en charge l’interface IQueueCallbackStateChange . L’objet de rappel de file d’attente du pilote peut éventuellement implémenter et indiquer la prise en charge d’IQueueCallbackStateChange uniquement pour une file d’attente manuelle. L’objet de rappel de file d’attente du pilote ne doit pas implémenter et indiquer la prise en charge d’IQueueCallbackStateChange pour une file d’attente séquentielle ou parallèle.

Exemples

Pour obtenir un exemple de code montrant comment utiliser la méthode CreateIoQueue , consultez IWDFDriver ::CreateDevice.

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

IObjectCleanup

IQueueCallbackCreate

IQueueCallbackDefaultIoHandler

IQueueCallbackDeviceIoControl

IQueueCallbackIoResume

IQueueCallbackIoStop

IQueueCallbackRead

IQueueCallbackStateChange

IQueueCallbackWrite

IWDFDevice

IWDFIoQueue

WDF_IO_QUEUE_DISPATCH_TYPE