Compartir a través de


EVT_WDF_DPC función de devolución de llamada (wdfdpc.h)

[Solo se aplica a KMDF]

La función de devolución de llamada EvtDpcFunc de un controlador realiza operaciones definidas por el controlador en IRQL = DISPATCH_LEVEL.

Sintaxis

EVT_WDF_DPC EvtWdfDpc;

void EvtWdfDpc(
  [in] WDFDPC Dpc
)
{...}

Parámetros

[in] Dpc

Identificador de un objeto DPC de marco.

Valor devuelto

None

Observaciones

Para registrar una función de devolución de llamada EvtDpcFunc , el controlador debe colocar la dirección de la función en una estructura de WDF_DPC_CONFIG y llamar a WdfDpcCreate.

Normalmente, los controladores completan las solicitudes de E/S en sus funciones de devolución de llamada EvtDpcFunc .

La función de devolución de llamada EvtDpcFunc se ejecuta en DISPATCH_LEVEL y no debe tener acceso al código paginable . Si una función de devolución de llamada EvtDpcFunc debe realizar operaciones en IRQL = PASSIVE_LEVEL, puede usar elementos de trabajo de marco.

En lugar de proporcionar funciones de devolución de llamada EvtDpcFunc , muchos controladores proporcionan una única función de devolución de llamada EvtInterruptDpc para cada tipo de interrupción que admiten sus dispositivos. Si el controlador crea varios objetos de cola de marco para cada dispositivo, puede considerar la posibilidad de usar un objeto DPC independiente y una función de devolución de llamada EvtDpcFunc para cada cola.

Para programar la ejecución de una función de devolución de llamada EvtDpcFunc , el controlador debe llamar a WdfDpcEnqueue. Los controladores suelen llamar a WdfDpcEnqueue desde una función de devolución de llamada EvtInterruptIsr .

Cuando un controlador llama a WdfDpcEnqueue, el sistema agrega el objeto DPC a la cola DPC del sistema. Si el sistema no ejecuta tareas de mayor prioridad, quita el objeto de la cola y llama a la función de devolución de llamada EvtDpcFunc del objeto.

El sistema no agrega el objeto DPC a la cola DPC si el objeto ya está en cola. Una función de devolución de llamada EvtInterruptIsr puede llamarse varias veces antes de que el sistema llame a la función de devolución de llamada EvtDpcFunc . Por lo tanto, la función de devolución de llamada EvtDpcFunc debe ser capaz de procesar información de varias interrupciones y debe procesar todas las interrupciones que se han producido desde la última vez que se llamó.

Normalmente, es necesario sincronizar la ejecución de la función de devolución de llamada EvtDpcFunc de un controlador con la ejecución de otras funciones de devolución de llamada. Para obtener más información, vea Sincronizar código de interrupción.

Para obtener un identificador para el objeto primario de un objeto DPC, la función de devolución de llamada EvtDpcFunc puede llamar a WdfDpcGetParentObject. Para obtener un puntero a la estructura KDPC subyacente de un objeto DPC, la función de devolución de llamada EvtDpcFunc puede llamar a WdfDpcWdmGetDpc.

Para obtener más información sobre el uso de las funciones de devolución de llamada EvtDpcFunc , consulte Mantenimiento de una interrupción.

Requisitos

Requisito Value
Plataforma de destino Universal
Versión mínima de KMDF 1.0
Encabezado wdfdpc.h (incluya Wdf.h)
IRQL DISPATCH_LEVEL

Consulte también

EvtInterruptDpc

EvtInterruptIsr

WDF_DPC_CONFIG

WdfDpcCreate

WdfDpcEnqueue

WdfDpcGetParentObject

WdfDpcWdmGetDpc