Compartir a través de


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

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

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

Sintaxis

MINIPORT_MESSAGE_INTERRUPT_DPC MiniportMessageInterruptDpc;

void MiniportMessageInterruptDpc(
  [in] NDIS_HANDLE MiniportInterruptContext,
  [in] ULONG MessageId,
  [in] PVOID MiniportDpcContext,
  [in] PVOID ReceiveThrottleParameters,
       PVOID NdisReserved2 PULONG NdisReserved1,
  [in] PULONG 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] MessageId

Identificador de mensaje de interrupción con señal de mensaje (MSI). messageId es un índice de un IO_INTERRUPT_MESSAGE_INFO_ENTRY estructura dentro de estructura IO_INTERRUPT_MESSAGE_INFO. NDIS pasa un puntero a la estructura de IO_INTERRUPT_MESSAGE_INFO asociada en el miembro MessageInfoTable cuando el controlador se registra correctamente para MSI con la 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 se llama a NDIS miniportMessageInterruptDPC porque el controlador de minipuerto devolvió una máscara de bits en el parámetro TargetProcessors del parámetro función MiniportMessageInterrupt y, a continuación, miniportDpcContext es null.

[in] ReceiveThrottleParameters

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

Nota En NDIS 6.1 y versiones anteriores, este parámetro se denomina NdisReserved1, su tipo de datos es PULONGy está reservado para NDIS.
 

NdisReserved1

Reservado para NDIS.

[in] NdisReserved2

Reservado para NDIS.

Nota En NDIS 6.1 y versiones anteriores, el tipo de datos de este parámetro es PULONG.
 

Valor devuelto

Ninguno

Observaciones

Los controladores de miniport que registran una interrupción con señal de mensaje con la función NdisMRegisterInterruptEx deben proporcionar una función miniportMessageInterruptDPC.

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

Los controladores de miniporte 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 miniporta completa una solicitud de envío pendiente. Si la causa 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 miniporte indica los paquetes a NDIS.

Un controlador de miniporte que admite escalado lateral (RSS)y tiene habilitada la característica, examina sus colas de recepción en MiniportMessageInterruptDPC. La NIC podría haber ya 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 miniport puede ordenar los paquetes en colas independientes en MiniportMessageInterruptDPC.

miniportMessageInterruptDPC llama a función NdisMIndicateReceiveNetBufferLists para indicar los paquetes en el procesador actual. MiniportMessageInterruptDPC puede determinar el procesamiento necesario para otras CPU y solicitar NDIS para programar DPCs en CPU en las que un DPC no está pendiente.

Si el DPC actual se ejecuta en la misma CPU que la función miniportMessageInterrupt, el controlador de miniport 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, MiniportMessageInterruptDPC debe volver a habilitar las interrupciones en la NIC, para el mensaje especificado, antes de que devuelva.

Antes de llamar a NDIS MiniportMessageInterruptDPC, las interrupciones del mensaje especificado en la NIC normalmente se han deshabilitado en el función miniportMessageInterrupt. Antes de devolver el control, MiniportMessageInterruptDPC puede volver a habilitar interrupciones. Si el controlador de miniporte pone en cola otros DPC mientras se deshabilitaban las interrupciones, el controlador debe habilitar las interrupciones después de que se ejecute la última DPC.

Nota Para mejorar el rendimiento, los controladores de miniport solo deben deshabilitar las interrupciones de mensajes específicos. No deben deshabilitar todas las interrupciones señaladas por mensaje.
 
Los controladores de miniport deben limitar el número de búferes de recepción que indican mientras procesan un lote DPC de interrupción de 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 miniport puede llamar a NdisMDeregisterInterruptEx desde su MiniportInitializeEx o función de MiniportHaltEx para liberar los recursos asignados con NdisMRegisterInterruptEx. Después de NdisMDeregisterInterruptEx, NDIS no llama a la función miniportMessageInterrupt o miniportMessageInterruptDPC.

NDIS llama a miniportMessageInterruptDPC en IRQL = DISPATCH_LEVEL.

Ejemplos de

Para definir una función MiniportMessageInterruptDPC, 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 análisis de código para controladores, comprobador de controladores estáticos (SDV) y otras herramientas de comprobación encuentran errores y es un requisito para escribir controladores para el sistema operativo Windows.

Por ejemplo, para definir una función MiniportMessageInterruptDPC denominada "MyMessageInterruptDPC", use el tipo MINIPORT_MESSAGE_INTERRUPT_DPC tal como se muestra en este ejemplo de código:

MINIPORT_MESSAGE_INTERRUPT_DPC MyMessageInterruptDPC;

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

_Use_decl_annotations_
VOID
 MyMessageInterruptDPC(
    NDIS_HANDLE  MiniportInterruptContext,
    ULONG  MessageId,
    PVOID  MiniportDpcContext,
    PVOID  ReceiveThrottleParameters,
    PVOID  NdisReserved2
    )
  {...}

El tipo de función MINIPORT_MESSAGE_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_MESSAGE_INTERRUPT_DPC en el archivo de encabezado. Para obtener más información sobre los requisitos de las declaraciones de función, vea Declaración de funciones mediante el uso de tipos de roles de función para controladores NDIS.

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

Requisitos

Requisito Valor
cliente mínimo admitido Se admite en NDIS 6.0 y versiones posteriores.
de la plataforma de destino de Windows
encabezado de ndis.h (incluya Ndis.h)
irQL DISPATCH_LEVEL

Consulte también

IO_INTERRUPT_MESSAGE_INFO

IO_INTERRUPT_MESSAGE_INFO_ENTRY

MiniportHaltEx

MiniportInitializeEx

miniportMessageInterrupt

NDIS_MINIPORT_INTERRUPT_CHARACTERISTICS NDIS_RECEIVE_THROTTLE_PARAMETERS

NET_BUFFER_LIST

NdisMDeregisterInterruptEx

NdisMIndicateReceiveNetBufferLists

NdisMQueueDpc

NdisMQueueDpcEx

NdisMRegisterInterruptEx

de escalado lateral de recepción (RSS) de