Função WdfWorkItemFlush (wdfworkitem.h)

[Aplica-se a KMDF e UMDF]

O método WdfWorkItemFlush retorna depois que um item de trabalho especificado é atendido.

Sintaxe

void WdfWorkItemFlush(
  [in] WDFWORKITEM WorkItem
);

Parâmetros

[in] WorkItem

Um identificador para um objeto de item de trabalho de estrutura obtido de uma chamada anterior para WdfWorkItemCreate.

Retornar valor

Nenhum

Comentários

Um bug marcar ocorrerá se o driver fornecer um identificador de objeto inválido.

Se WdfWorkItemEnqueue tiver sido chamado e o driver chamar o método WdfWorkItemFlush , o método não retornará até que um thread de trabalho do sistema remova o item de trabalho especificado da fila do item de trabalho e chame a função de retorno de chamada EvtWorkItem do driver e a função de retorno de chamada EvtWorkItem tenha retornado posteriormente após o processamento do item de trabalho. Observe que WdfWorkItemFlush aguarda a conclusão de uma função de retorno de chamada EvtWorkItem já em execução .

Se WdfWorkItemEnqueue não tiver sido chamado, chamar WdfWorkItemFlush será concluído imediatamente.

É ilegal chamar WdfWorkItemFlush de dentro do retorno de chamada do item de trabalho ou do código que ele chama que é executado no mesmo thread de trabalho do sistema. De fato, se o verificador de driver estiver habilitado, o WDF entrará no depurador para avisar que isso levará a um deadlock. Por outro lado, chamar WdfObjectDelete no objeto de item de trabalho de dentro do retorno de chamada é perfeitamente adequado.

A maioria dos drivers que usam itens de trabalho não precisa chamar WdfWorkItemFlush. Um driver poderá chamar WdfWorkItemFlush se precisar sincronizar a conclusão de itens de trabalho com a remoção de um destino de E/S remoto. Nesse caso, o driver pode chamar WdfWorkItemFlush de dentro de sua função de retorno de chamada EvtIoTargetQueryRemove .

Para obter mais informações sobre itens de trabalho, consulte Usando itens de trabalho da estrutura.

Exemplos

O exemplo de código a seguir é uma função de retorno de chamada EvtIoTargetQueryRemove do driver de exemplo toaster .

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

Requisitos

Requisito Valor
Plataforma de Destino Universal
Versão mínima do KMDF 1.0
Versão mínima do UMDF 2,0
Cabeçalho wdfworkitem.h (inclua Wdf.h)
Biblioteca Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF)
IRQL PASSIVE_LEVEL
Regras de conformidade da DDI DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf)

Confira também

EvtWorkItem