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.
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.
NdisReserved1
Reservado para NDIS.
[in] NdisReserved2
Reservado para NDIS.
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.
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 |