Partager via


HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE fonction de rappel (storport.h)

La routine HwMSInterruptRoutine gère une interruption de message signalée (MSI).

Syntaxe

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

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

Paramètres

HwDeviceExtension

Pointeur vers l’extension de périphérique matériel pour l’adaptateur de bus hôte (HBA).

MessageId

Identificateur du message.

Valeur retournée

HwMSInterruptRoutine retourne TRUE s’il détermine que l’adaptateur HBA a généré l’identité MSI. Si l’adaptateur HBA n’a pas généré l’msi, HwMSInterruptRoutine retourne FALSE.

Remarques

La routine HwMSInterruptRoutine d’un pilote miniport traite les interruptions de message signalées (MSI) générées par l’adaptateur HBA. Un pilote miniport indique que son adaptateur HBA génère des msis en définissant le membre HwMSInterruptRoutine de la structure PORT_CONFIGURATION_INFORMATION pour qu’il pointe vers la routine HwMSInterruptRoutine . Si l’adaptateur HBA ne génère pas d’IMS, un pilote miniport doit définir HwMSInterruptRoutine sur NULL.

Si le membre InterruptSynchronizationMode de la structure PORT_CONFIGURATION_INFORMATION est défini sur InterruptSynchronizeAll, le pilote Storport synchronise tous les msis qui proviennent de l’adaptateur qu’il gère ou des périphériques connectés à l’adaptateur. Lorsqu’une interruption se produit, le pilote Storport appelle la routine HwMSInterruptRoutine du pilote miniport à DIRQL après avoir acquis le verrouillage de rotation d’interruption.

Si le membre InterruptSynchronizationMode de la structure PORT_CONFIGURATION_INFORMATION est défini sur InterruptSynchronizePerMessage, le pilote Storport appelle la routine HwMSInterruptRoutine du pilote miniport à IRQL = DIRQL, en maintenant le verrou de rotation d’interruption qui correspond à l’identificateur de message (ID) indiqué dans le paramètre MessageID . L’adaptateur HBA peut interrompre la routine HwMSInterruptRoutine pour des interruptions pour d’autres ID de message, de sorte que le pilote Storport peut effectuer des appels imbriqués à HwMSInterruptRoutine ou exécuter différentes instances de HwMSInterruptRoutine simultanément sur différents processeurs. Pour synchroniser l’accès aux données sensibles par différentes instances de HwMSInterruptRoutine, le miniport doit appeler les routines StorPortAcquireMSISpinLock et StorPortReleaseMSISpinLock pour acquérir et libérer les verrous de rotation pour les ID de message autres que l’ID dans MessageID.

Un pilote miniport peut récupérer des informations supplémentaires sur le message en appelant la routine StorPortGetMSIInfo .

Il ne doit pas appeler la routine StorPortGetMSIInfo à partir de la routine HwMSInterruptRoutine .

Le nom HwMSInterruptRoutine est simplement un espace réservé. Le prototype réel de cette routine est défini dans Storport.h comme suit :

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

Exemples

Pour définir une fonction de rappel HwMSInterruptRoutine , vous devez d’abord fournir une déclaration de fonction qui identifie le type de fonction de rappel que vous définissez. Windows fournit un ensemble de types de fonctions de rappel pour les pilotes. La déclaration d’une fonction à l’aide des types de fonction de rappel permet à l’analyse du code pour les pilotes, au vérificateur de pilotes statiques (SDV) et à d’autres outils de vérification de trouver des erreurs. Il s’agit d’une exigence pour l’écriture de pilotes pour le système d’exploitation Windows.

Par exemple, pour définir une routine de rappel HwMSInterruptRoutine nommée MyHwMSIRoutine, utilisez le type HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE comme indiqué dans cet exemple de code :

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

Ensuite, implémentez votre routine de rappel comme suit :

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

Le type de fonction HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE est défini dans le fichier d’en-tête Storport.h. Pour identifier plus précisément les erreurs lors de l’exécution des outils d’analyse du code, veillez à ajouter l’annotation Use_decl_annotations à votre définition de fonction. L’annotation Use_decl_annotations garantit que les annotations appliquées au type de fonction HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE dans le fichier d’en-tête sont utilisées. Pour plus d’informations sur la configuration requise pour les déclarations de fonction, consultez Déclaration de fonctions à l’aide de types de rôles de fonction pour les pilotes Storport. Pour plus d’informations sur Use_decl_annotations, consultez Annotating Function Behavior.

Configuration requise

Condition requise Valeur
Plateforme cible Universal
En-tête storport.h (inclure Storport.h)
IRQL DIRQL

Voir aussi

PORT_CONFIGURATION_INFORMATION

StorPortAcquireMSISpinLock

StorPortGetMSIInfo

StorPortReleaseMSISpinLock