Compartir a través de


HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE función de devolución de llamada (storport.h)

La rutina HwMSInterruptRoutine controla una interrupción señalada de mensaje (MSI).

Sintaxis

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

BOOLEAN HwMessageSignaledInterruptRoutine(
  IN PVOID HwDeviceExtension,
  IN ULONG MessageId
)
{...}

Parámetros

HwDeviceExtension

Puntero a la extensión de dispositivo de hardware para el adaptador de bus host (HBA).

MessageId

Identificador del mensaje.

Valor devuelto

HwMSInterruptRoutine devuelve TRUE si determina que el HBA generó el MSI. Si el HBA no ha generado la MSI, HwMSInterruptRoutine devuelve FALSE.

Observaciones

Un controlador de miniporte HwMSInterruptRoutine rutina procesa interrupciones señaladas (MSIs) generadas por el HBA. Un controlador de miniport indica que su HBA genera MSIs estableciendo el HwMSInterruptRoutine miembro de la estructura de PORT_CONFIGURATION_INFORMATION para que apunte a la rutina de HwMSInterruptRoutine. Si el HBA no genera MSIs, un controlador de miniport debe establecer HwMSInterruptRoutine en NULL.

Si el interruptSynchronizationMode miembro de la estructura PORT_CONFIGURATION_INFORMATION se establece en InterruptSynchronizeAll, el controlador storport sincroniza todos los MSIs que se originan con el adaptador que administra o los dispositivos conectados al adaptador. Cuando se produce una interrupción, el controlador de Storport llama a la HwMSInterruptRoutine de HwMSInterruptRoutine rutina en DIRQL después de adquirir el bloqueo de giro de interrupción.

Si el miembro InterruptSynchronizationMode de la estructura de PORT_CONFIGURATION_INFORMATION se establece en interruptSynchronizePerMessage, el controlador de Storport llama a la rutina HwMSInterruptRou tine del controlador de miniport en IRQL = DIRQL, que contiene el bloqueo de número de interrupción que corresponde al identificador de mensaje (ID) indicado en el parámetro MessageID. El HBA puede interrumpir la rutina de HwMSInterruptRoutine para las interrupciones de otros identificadores de mensaje, por lo que el controlador storport podría realizar llamadas anidadas a HwMSInterruptRoutineo ejecutar instancias diferentes de HwMSInterruptRoutine simultáneamente en diferentes procesadores. Para sincronizar el acceso a datos confidenciales por diferentes instancias de HwMSInterruptRoutine, el miniport debe llamar a la StorPortAcquireMSISpinLock y las rutinas storPortReleaseMSISpinLock para adquirir y liberar los bloqueos de giro para los identificadores de mensaje distintos del identificador de MessageID.

Un controlador de miniport puede recuperar información adicional sobre el mensaje llamando a la rutinaStorPortGetMSIInfo.

No debe llamar a la rutina StorPortGetMSIInfo desde dentro de la rutina de HwMSInterruptRoutine.

El nombre HwMSInterruptRoutine es simplemente un marcador de posición. El prototipo real de esta rutina se define en Storport.h de la siguiente manera:

typedef
BOOLEAN
  HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE (
    _In_ PVOID  HwDeviceExtension,
    _In_ ULONG  MessageId
    );

Ejemplos

Para definir un HwMSInterruptRoutine función de devolución de llamada, primero debe proporcionar una declaración de función que identifique el tipo de función de devolución de llamada que está definiendo. Windows proporciona un conjunto de tipos de función de devolución de llamada para controladores. Declarar una función mediante los tipos de función de devolución de llamada 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 un HwMSInterruptRoutine rutina de devolución de llamada denominada MyHwMSIRoutine, use el tipo HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE tal como se muestra en este ejemplo de código:

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

A continuación, implemente la rutina de devolución de llamada de la siguiente manera:

_Use_decl_annotations_
BOOLEAN
MyHwMSIRoutine (
  _In_ PVOID  DeviceExtension,
  _In_ ULONG  MessageId
  );
  {
      ...
  }

El tipo de función HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE se define en el archivo de encabezado Storport.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 HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE 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 tipos de rol de función para controladores de Storport. Para obtener información sobre Use_decl_annotations, vea Anotación del comportamiento de la función.

Requisitos

Requisito Valor
de la plataforma de destino de Universal
encabezado de storport.h (incluya Storport.h)
irQL DIRQL

Consulte también

PORT_CONFIGURATION_INFORMATION

storPortAcquiremSISpinLock

StorPortGetMSIInfo

StorPortReleaseMSISpinLock