Funzione WdfWorkItemFlush (wdfworkitem.h)

[Si applica a KMDF e UMDF]

Il metodo WdfWorkItemFlush restituisce dopo il servizio di un elemento di lavoro specificato.

Sintassi

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

Parametri

[in] WorkItem

Handle a un oggetto elemento di lavoro del framework ottenuto da una chiamata precedente a WdfWorkItemCreate.

Valore restituito

nessuno

Osservazioni

Un controllo di bug si verifica se il driver fornisce un handle di oggetti non valido.

Se WdfWorkItemEnqueue è stato chiamato e il driver chiama il metodo WdfWorkItemFlush , il metodo non restituisce finché un thread di lavoro di sistema non ha rimosso l'elemento di lavoro specificato dalla coda dell'elemento di lavoro e ha chiamato la funzione di callback evtWorkItem del driver e la funzione di callback EvtWorkItem è stata successivamente restituita dopo l'elaborazione dell'elemento di lavoro. Si noti che WdfWorkItemFlush attende il completamento di una funzione di callback evtWorkItem già in esecuzione.

Se WdfWorkItemEnqueue non è stato chiamato, la chiamata a WdfWorkItemFlush viene completata immediatamente.

Non è possibile chiamare WdfWorkItemFlush dall'interno del callback dell'elemento di lavoro o dal codice che chiama che viene eseguito nello stesso thread di lavoro di sistema. In effetti, se il verificatore del driver è abilitato, WDF si interrompe nel debugger per avvisare che in questo modo verrà generato il deadlock. D'altra parte, chiamare WdfObjectDelete sull'oggetto elemento di lavoro dall'interno del callback è perfettamente corretto.

La maggior parte dei driver che usano elementi di lavoro non deve chiamare WdfWorkItemFlush. Un driver potrebbe chiamare WdfWorkItemFlush se deve sincronizzare il completamento degli elementi di lavoro con la rimozione di una destinazione di I/O remota. In questo caso, il driver può chiamare WdfWorkItemFlush dall'interno della sua funzione di callback EvtIoTargetQueryRemove .

Per altre informazioni sugli elementi di lavoro, vedere Uso degli elementi di lavoro di Framework.

Esempio

L'esempio di codice seguente è una funzione di callback EvtIoTargetQueryRemove dal driver di esempio Tostapane .

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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Universale
Versione KMDF minima 1.0
Versione UMDF minima 2,0
Intestazione wdfworkitem.h (includere Wdf.h)
Libreria Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Regole di conformità DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Vedi anche

EvtWorkItem