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)

Consulte también

EvtWorkItem