Fonction WdfWorkItemFlush (wdfworkitem.h)
[S’applique à KMDF et UMDF]
La méthode WdfWorkItemFlush retourne une fois qu’un élément de travail spécifié a été pris en charge.
Syntaxe
void WdfWorkItemFlush(
[in] WDFWORKITEM WorkItem
);
Paramètres
[in] WorkItem
Handle pour un objet d’élément de travail d’infrastructure obtenu à partir d’un appel précédent à WdfWorkItemCreate.
Valeur de retour
None
Remarques
Un bogue case activée se produit si le pilote fournit un handle d’objet non valide.
Si WdfWorkItemEnqueue a été appelé et que votre pilote appelle la méthode WdfWorkItemFlush , la méthode ne retourne pas tant qu’un thread de travail système n’a pas supprimé l’élément de travail spécifié de la file d’attente d’éléments de travail et appelé la fonction de rappel EvtWorkItem du pilote, et que la fonction de rappel EvtWorkItem n’a pas été retournée après avoir traité l’élément de travail. Notez que WdfWorkItemFlush attend qu’une fonction de rappel EvtWorkItem déjà en cours d’exécution se termine.
Si WdfWorkItemEnqueue n’a pas été appelé, l’appel de WdfWorkItemFlush se termine immédiatement.
Il est interdit d’appeler WdfWorkItemFlush à partir du rappel d’élément de travail ou du code qu’il appelle qui s’exécute sur le même thread de travail système. En effet, si le vérificateur de pilote est activé, WDF s’insère dans le débogueur pour avertir que cela entraînera un blocage. D’autre part, l’appel de WdfObjectDelete sur l’objet élément de travail à partir du rappel est parfaitement correct.
La plupart des pilotes qui utilisent des éléments de travail n’ont pas besoin d’appeler WdfWorkItemFlush. Un pilote peut appeler WdfWorkItemFlush s’il doit synchroniser l’achèvement des éléments de travail avec la suppression d’une cible d’E/S distante. Dans ce cas, le pilote peut appeler WdfWorkItemFlush à partir de sa fonction de rappel EvtIoTargetQueryRemove .
Pour plus d’informations sur les éléments de travail, consultez Utilisation d’éléments de travail framework.
Exemples
L’exemple de code suivant est une fonction de rappel EvtIoTargetQueryRemove de l’exemple de pilote Grille-pain .
NTSTATUS
ToastMon_EvtIoTargetQueryRemove(
WDFIOTARGET IoTarget
)
{
PTARGET_DEVICE_INFO targetDeviceInfo = NULL;
//
// Get the I/O target object's context.
//
targetDeviceInfo = GetTargetDeviceInfo(IoTarget);
//
// Ensure that the I/O target's work item
// has been processed before closing the target.
//
WdfWorkItemFlush(targetDeviceInfo->WorkItem);
WdfIoTargetCloseForQueryRemove(IoTarget);
return STATUS_SUCCESS;
}
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Universal |
Version KMDF minimale | 1.0 |
Version UMDF minimale | 2.0 |
En-tête | wdfworkitem.h (include Wdf.h) |
Bibliothèque | Wdf01000.sys (KMDF) ; WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Règles de conformité DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |