MINIPORT_MESSAGE_INTERRUPT_DPC función de devolución de llamada (ndis.h)
Un controlador de minipuerto debe proporcionar un controlador MiniportMessageInterruptDPC si el controlador llama a la función NdisMRegisterInterruptEx para registrar una interrupción.
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 minipuerto 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 IO_INTERRUPT_MESSAGE_INFO estructura. 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 NDIS llamó a MiniportMessageInterruptDPC porque el controlador de minipuerto devolvió una máscara de bits en el parámetro TargetProcessors del La 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 minipuerto debe indicar en un DPC.
NdisReserved1
Reservado para NDIS.
[in] NdisReserved2
Reservado para NDIS.
Valor devuelto
None
Observaciones
Los controladores de miniport que registran una interrupción señalada por 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 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 realizan las acciones 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 minipuerto 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 MiniportMessageInterruptDPC. La NIC podría haber puesto en cola paquetes recibidos en colas independientes en función de los valores hash, si la NIC proporciona estas funcionalidades. De lo contrario, el controlador de minipuerto 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 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 MiniportMessageInterrupt , el controlador de minipuerto 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 que NDIS llame a MiniportMessageInterruptDPC, las interrupciones del mensaje especificado en la NIC se han deshabilitado normalmente en . Función MiniportMessageInterrupt . Antes de que devuelva el control, MiniportMessageInterruptDPC puede volver a habilitar interrupciones. Si el controlador de minipuerto pone en cola dpCs adicionales mientras se deshabilitan las interrupciones, el controlador debe habilitar las interrupciones después de que se ejecute la última DPC.
Un controlador de miniport puede llamar a NdisMDeregisterInterruptEx desde su función MiniportInitializeEx o MiniportHaltEx para liberar los recursos asignados con NdisMRegisterInterruptEx. Después de que se devuelva NdisMDeregisterInterruptEx , NDIS no llama a la función MiniportMessageInterrupt o MiniportMessageInterruptDPC del controlador de miniport.
NDIS llama a MiniportMessageInterruptDPC en IRQL = DISPATCH_LEVEL.
Ejemplos
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 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 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, consulte 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, consulte Anotación del comportamiento de la función.
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Se admite en NDIS 6.0 y versiones posteriores. |
Plataforma de destino | Windows |
Encabezado | ndis.h (incluya Ndis.h) |
IRQL | DISPATCH_LEVEL |