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 obtido de uma chamada anterior para WdfWorkItemCreate.
Valor de retorno
Nenhum
Observações
Uma verificação de bug ocorre 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 retorna até que um thread de trabalho do sistema tenha removido o item de trabalho especificado da fila do item de trabalho e chamado de função de retorno de chamada EvtWorkItem do driver e a função de retorno de chamada EvtWorkItem retornada posteriormente após o processamento do item de trabalho. Observe que WdfWorkItemFlush aguarda que uma função de retorno de chamada EvtWorkItem já em execução seja concluída.
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 invadirá o depurador para avisar que isso levará a um deadlock. Por outro lado, chamar WdfObjectDelete no objeto do 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 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 de.
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 do 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 |
---|---|
da 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 de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |