Función WdfWorkItemFlush (wdfworkitem.h)
[Se aplica a KMDF y UMDF]
El método WdfWorkItemFlush devuelve después de que se haya atendido un elemento de trabajo especificado.
Sintaxis
void WdfWorkItemFlush(
[in] WDFWORKITEM WorkItem
);
Parámetros
[in] WorkItem
Identificador de un objeto de elemento de trabajo de marco que se obtiene de una llamada anterior a WdfWorkItemCreate.
Valor devuelto
None
Observaciones
Se produce una comprobación de errores si el controlador proporciona un identificador de objeto no válido.
Si se ha llamado a WdfWorkItemEnqueue y el controlador llama al método WdfWorkItemFlush , el método no devuelve hasta que un subproceso de trabajo del sistema haya quitado el elemento de trabajo especificado de la cola de elementos de trabajo y ha llamado a la función de devolución de llamada EvtWorkItem del controlador, y la función de devolución de llamada EvtWorkItem se ha devuelto posteriormente después de procesar el elemento de trabajo. Tenga en cuenta que WdfWorkItemFlush espera a que se complete una función de devolución de llamada EvtWorkItem que ya está en ejecución.
Si no se ha llamado a WdfWorkItemEnqueue , la llamada a WdfWorkItemFlush se completa inmediatamente.
No es válido llamar a WdfWorkItemFlush desde dentro de la devolución de llamada del elemento de trabajo o desde el código que llama a que se ejecuta en el mismo subproceso de trabajo del sistema. De hecho, si el comprobador de controladores está habilitado, WDF se divide en el depurador para advertir de que hacerlo provocará un interbloqueo. Por otro lado, llamar a WdfObjectDelete en el objeto del elemento de trabajo desde dentro de la devolución de llamada es perfectamente correcto.
La mayoría de los controladores que usan elementos de trabajo no necesitan llamar a WdfWorkItemFlush. Un controlador puede llamar a WdfWorkItemFlush si debe sincronizar la finalización de elementos de trabajo con la eliminación de un destino de E/S remoto. En este caso, el controlador puede llamar a WdfWorkItemFlush desde su función de devolución de llamada EvtIoTargetQueryRemove .
Para obtener más información sobre los elementos de trabajo, vea Uso de elementos de trabajo de framework.
Ejemplos
El ejemplo de código siguiente es una función de devolución de llamada EvtIoTargetQueryRemove del controlador de ejemplo de 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 | Value |
---|---|
Plataforma de destino | Universal |
Versión mínima de KMDF | 1.0 |
Versión mínima de UMDF | 2.0 |
Encabezado | wdfworkitem.h (incluya Wdf.h) |
Library | Wdf01000.sys (KMDF); WUDFx02000.dll (UMDF) |
IRQL | PASSIVE_LEVEL |
Reglas de cumplimiento de DDI | DriverCreate(kmdf), KmdfIrql(kmdf), KmdfIrql2(kmdf), KmdfIrqlExplicit(kmdf) |