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)

Voir aussi

EvtWorkItem