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 da estrutura que é obtido de uma chamada anterior para WdfWorkItemCreate.

Valor retornado

Nenhum

Comentários

Ocorre uma verificação de bug se o driver fornece um identificador de objeto inválido.

Se WdfWorkItemEnqueue tiver sido chamado e seu driver chamar o método WdfWorkItemFlush , o método não retornará até que um thread de trabalho do sistema tenha removido o item de trabalho especificado da fila do item de trabalho e chamado da função de retorno de chamada EvtWorkItem do driver e a função de retorno de chamada EvtWorkItem retornará posteriormente após processar o item de trabalho. Observe que o 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á ao deadlock. Por outro lado, chamar WdfObjectDelete no objeto de item de trabalho de dentro do retorno de chamada é perfeitamente bom.

A maioria dos drivers que usam itens de trabalho não precisa chamar WdfWorkItemFlush. Um driver pode 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 da Torradeira .

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

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

Confira também

EvtWorkItem