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) |