Compartir a través de


MINIPORT_INTERRUPT_DPC función de devolución de llamada (ndis.h)

Un controlador de miniport debe proporcionar una función MiniportInterruptDPC si el controlador llama a la función NdisMRegisterInterruptEx para registrar una interrupción.

Nota Debe declarar la función mediante el tipo MINIPORT_INTERRUPT_DPC . Para obtener más información, consulte la sección Ejemplos siguientes.
 

Sintaxis

MINIPORT_INTERRUPT_DPC MiniportInterruptDpc;

void MiniportInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
  [in] PVOID NdisReserved2
)
{...}

Parámetros

[in] MiniportInterruptContext

Identificador de un bloque de información de contexto de interrupción. El controlador de minipuerto proporcionó este controlador en el parámetro MiniportInterruptContext que el controlador de miniporte pasó al Función NdisMRegisterInterruptEx .

[in] MiniportDpcContext

Puntero a un área de contexto que el controlador de miniporte proporcionó cuando llamó a la función NdisMQueueDpcEx o NdisMQueueDpc . Si NDIS llamó a MiniportInterruptDPC porque el controlador de minipuerto devolvió una máscara de bits en el parámetro TargetProcessors de la función MiniportInterrupt , MiniportDpcContext es NULL.

[in] ReceiveThrottleParameters

Puntero a un NDIS_RECEIVE_THROTTLE_PARAMETERS estructura. Esta estructura especifica el número máximo de estructuras de NET_BUFFER_LIST que un controlador de minipuerto debe indicar en un DPC.

[in] NdisReserved2

Reservado para NDIS.

Valor devuelto

None

Observaciones

Los controladores miniport que registran una interrupción con la función NdisMRegisterInterruptEx deben proporcionar una función MiniportInterruptDPC .

NDIS llama a MiniportInterruptDPC para completar el procesamiento diferido de una interrupción. El controlador de minipuerto puede llamar a la función NdisMQueueDpcEx o NdisMQueueDpc para solicitar llamadas de procedimiento diferidas adicionales (DPC) para otros procesadores.

Los controladores de minipuerto determinan el origen de cada interrupción y toman las medidas adecuadas. Por ejemplo, si una interrupción indica la finalización de una operación de transmisión, el controlador de miniporte completa una solicitud de envío pendiente. Si el origen de la interrupción es un cambio en el estado del vínculo, el controlador de miniporte indica el nuevo estado del vínculo a NDIS. Si hay paquetes de recepción pendientes, el controlador de minipuerto indica los paquetes a NDIS.

Un controlador de minipuerto que admite el escalado lateral de recepción (RSS) y tiene habilitada la característica, examina sus colas de recepción en MiniportInterruptDPC. La NIC podría haber puesto en cola paquetes recibidos en cola en colas independientes basadas en valores hash, si la NIC proporciona estas funcionalidades. De lo contrario, el controlador de minipuerto puede ordenar los paquetes en colas independientes en MiniportInterruptDPC.

MiniportInterruptDPC llama a Función NdisMIndicateReceiveNetBufferLists para indicar paquetes en el procesador actual. MiniportInterruptDPC puede identificar el procesamiento necesario para otras CPU y solicitar NDIS para programar DPC en CPU en las que un DPC no está pendiente.

Si el DPC actual se ejecuta en la misma CPU que la función MiniportInterrupt , el controlador de miniporte debe indicar todos los paquetes que no se pudieron asignar a una CPU. Si este DPC es el último DPC programado y no solicitará DPC adicionales, MiniportInterruptDPC debe volver a habilitar las interrupciones en la NIC antes de que se devuelva.

Las interrupciones normalmente se deshabilitan en la NIC de la función MiniportInterrupt antes de que NDIS llame a MiniportInterruptDPC. Antes de que devuelva el control, MiniportInterruptDPC puede volver a habilitar las interrupciones. Si el controlador de miniporte pone en cola dpCs adicionales mientras se deshabilitaban las interrupciones, el controlador debe habilitar las interrupciones antes de que el último DPC vuelva.

Los controladores de minipuerto deben limitar el número de búferes de recepción que indican mientras procesan un lote DPC de interrupción para completarse dentro del límite de tiempo necesario. Un lote DPC de interrupción es la colección de todos los DPC que se ejecutan después del ISR y antes de que se vuelvan a habilitar las interrupciones.

Un controlador de minipuerto puede llamar a Función NdisMDeregisterInterruptEx de su función MiniportInitializeEx o MiniportHaltEx para liberar recursos asignados con NdisMRegisterInterruptEx. Después de que NdisMDeregisterInterruptEx devuelva, NDIS no llama a la función MiniportInterrupt o MiniportInterruptDPC del controlador de miniport.

NDIS llama a MiniportInterruptDPC en IRQL = DISPATCH_LEVEL.

Ejemplos

Para definir una función MiniportInterruptDPC , primero debe proporcionar una declaración de función que identifique el tipo de función que va a definir. Windows proporciona un conjunto de tipos de función para controladores. Declarar una función mediante los tipos de función ayuda a Code Analysis for Drivers, Static Driver Verifier (SDV) y otras herramientas de comprobación a encontrar errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función MiniportInterruptDPC denominada "MyInterruptDPC", use el tipo de MINIPORT_INTERRUPT_DPC como se muestra en este ejemplo de código:

MINIPORT_INTERRUPT_DPC MyInterruptDPC;

A continuación, implemente la función de la siguiente manera:

_Use_decl_annotations_
VOID
 MyInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

El tipo de función MINIPORT_INTERRUPT_DPC se define en el archivo de encabezado Ndis.h. Para identificar con más precisión los errores al ejecutar las herramientas de análisis de código, asegúrese de agregar la anotación Use_decl_annotations a la definición de función. La anotación Use_decl_annotations garantiza que se usen las anotaciones que se aplican al tipo de función MINIPORT_INTERRUPT_DPC en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declarar funciones mediante tipos de roles de función para controladores NDIS.

Para obtener información sobre Use_decl_annotations, consulte Anotación del comportamiento de la función.

Requisitos

Requisito Value
Cliente mínimo compatible Compatible con NDIS 6.0 y versiones posteriores.
Plataforma de destino Windows
Encabezado ndis.h (incluya Ndis.h)
IRQL DISPATCH_LEVEL

Consulte también

MiniportHaltEx

MiniportInitializeEx

MiniportInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

Receive Side Scaling (RSS)