Spécification d’un mode de synchronisation de rappel
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.
Les exemples UMDF 1 archivés se trouvent dans la Windows 11, version 22H2 - Mise à jour des exemples de pilotes de mai 2022.
Pour plus d’informations, consultez Prise en main avec UMDF.
Le pilote peut spécifier la façon dont ses fonctions de rappel sont appelées par l’infrastructure. Le pilote spécifie un mode de synchronisation (ou de verrouillage) pour un appareil avant qu’il n’appelle la méthode IWDFDriver::CreateDevice pour créer un objet d’appareil pour l’appareil. Pour spécifier le mode de synchronisation, le pilote doit appeler la méthode IWDFDeviceInitialize::SetLockingConstraint . Le pilote reçoit un pointeur vers l’interface IWDFDeviceInitialize lorsque sa méthode IDriverEntry::OnDeviceAdd est appelée pour ajouter l’appareil au système.
Le pilote peut spécifier l’une des valeurs suivantes du type d’énumération WDF_CALLBACK_CONSTRAINT dans le paramètre LockType de IWDFDeviceInitialize::SetLockingConstraint pour identifier le mode de verrouillage. Le type de contrainte (ou de verrouillage) spécifié dépend de la quantité de parallélisme que le périphérique matériel peut exploiter et de la quantité que le pilote peut gérer.
Valeur | Signification |
---|---|
Aucun (0) |
Indique qu’aucune fonction de rappel dans le pilote n’est synchronisée. |
WdfDeviceLevel (1) |
Indique que toutes les fonctions de rappel de file d’attente dans le pilote sont synchronisées. |
Note Si le pilote n’appelle pas IWDFDeviceInitialize::SetLockingConstraint pour spécifier une valeur, l’infrastructure définit la valeur par défaut de cette propriété sur WdfDeviceLevel.
Les contraintes s’appliquent uniquement aux fonctions de rappel de file d’attente et non aux fonctions de rappel de Plug-and-Play (PnP) et de gestion de l’alimentation. Les fonctions de rappel de file d’attente incluent les éléments suivants :
Fonctions de rappel de répartition automatique, telles que IQueueCallbackRead::OnRead et IQueueCallbackWrite::OnWrite. Pour plus d’informations, consultez Fonctions de rappel des événements de file d’attente d’E/S.
Fonctions de rappel de modification de l’état de file d’attente, telles que IQueueCallbackStateChange::OnStateChange.
Fonctions de rappel d’annulation de demande, telles que IRequestCallbackCancel::OnCancel.
Les fonctions de nettoyage et de rappel de fermeture de fichier, telles que IFileCallbackCleanup::OnCleanupFile et IFileCallbackClose::OnCloseFile.
Les fonctions de rappel de fin de requête (IRequestCallbackRequestRequestCompletion::OnCompletion) ne sont pas des fonctions de rappel de file d’attente. Par conséquent, ils ne sont pas synchronisés.