HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE Rückruffunktion (storport.h)

Die HwMSInterruptRoutine-Routine verarbeitet einen Message Signaled Interrupt (MSI).

Syntax

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE HwMessageSignaledInterruptRoutine;

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

Parameter

HwDeviceExtension

Ein Zeiger auf die Hardwaregeräteerweiterung für den Host bus adapter (HBA).

MessageId

Der Bezeichner der Nachricht.

Rückgabewert

HwMSInterruptRoutine gibt TRUE zurück, wenn ermittelt wird, dass der HBA die MSI generiert hat. Wenn der HBA die MSI nicht generiert hat, gibt HwMSInterruptRoutineFALSE zurück.

Hinweise

Die HwMSInterruptRoutine-Routine eines Miniporttreibers verarbeitet msIs (Message Signaled Interrupts), die vom HBA generiert werden. Ein Miniporttreiber gibt an, dass sein HBA MSIs generiert, indem er den HwMSInterruptRoutine-Member der PORT_CONFIGURATION_INFORMATION-Struktur so festlegt, dass er auf die HwMSInterruptRoutine-Routine verweist. Wenn der HBA keine MSIs generiert, sollte ein Miniporttreiber HwMSInterruptRoutine auf NULL festlegen.

Wenn das InterruptSynchronizationMode-Element der PORT_CONFIGURATION_INFORMATION-Struktur auf InterruptSynchronizeAll festgelegt ist, synchronisiert der Storport-Treiber alle MSIs, die mit dem von ihm verwalteten Adapter stammen, oder den mit dem Adapter verbundenen Geräten. Wenn ein Interrupt auftritt, ruft der Storport-Treiber die HwMSInterruptRoutine-Routine des Miniporttreibers bei DIRQL auf, nachdem er die Interrupt-Spinsperre erhalten hat.

Wenn der InterruptSynchronizationMode-Member der PORT_CONFIGURATION_INFORMATION-Struktur auf InterruptSynchronizePerMessage festgelegt ist, ruft der Storport-Treiber die HwMSInterruptRoutine-Routine des Miniporttreibers unter IRQL = DIRQL auf, wobei die Interrupt-Spinsperre gedrückt wird, die der im MessageID-Parameter angegebenen Nachrichten-ID entspricht. Der HBA kann die HwMSInterruptRoutine-Routine für Interrupts für andere Nachrichten-IDs unterbrechen, sodass der Storport-Treiber geschachtelte Aufrufe an HwMSInterruptRoutine durchführt oder verschiedene Instanzen von HwMSInterruptRoutine gleichzeitig auf verschiedenen Prozessoren ausführen kann. Um den Zugriff auf vertrauliche Daten durch verschiedene Instanzen von HwMSInterruptRoutine zu synchronisieren, muss der Miniport die Routinen StorPortAcquireMSISpinLock und StorPortReleaseMSISpinLock aufrufen, um die Spinsperren für andere Nachrichten-IDs als die ID in MessageID abzurufen und freizugeben.

Ein Miniporttreiber kann zusätzliche Informationen zur Nachricht abrufen, indem er die StorPortGetMSIInfo-Routine aufruft.

Die StorPortGetMSIInfo-Routine sollte nicht innerhalb der HwMSInterruptRoutine-Routine aufgerufen werden.

Der Name HwMSInterruptRoutine ist nur ein Platzhalter. Der eigentliche Prototyp für diese Routine ist in Storport.h wie folgt definiert:

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

Beispiele

Um eine HwMSInterruptRoutine-Rückruffunktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der Rückruffunktion identifiziert, die Sie definieren. Windows bietet eine Reihe von Rückruffunktionstypen für Treiber. Das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen hilft der Codeanalyse für Treiber, der statischen Treiberüberprüfung (Static Driver Verifier , SDV) und anderen Überprüfungstools, Fehler zu finden, und es ist eine Voraussetzung für das Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine HwMSInterruptRoutine-Rückrufroutine namens MyHwMSIRoutine zu definieren, verwenden Sie den typ HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE , wie in diesem Codebeispiel gezeigt:

HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE MyHwMSIRoutine;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

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

Der HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE Funktionstyp ist in der Storport.h-Headerdatei definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, müssen Sie der Funktionsdefinition die anmerkung Use_decl_annotations hinzufügen. Die Use_decl_annotations-Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE Funktionstyp in der Headerdatei angewendet werden. Weitere Informationen zu den Anforderungen für Funktionsdeklarationen finden Sie unter Deklarieren von Funktionen mithilfe von Funktionsrollentypen für Storport-Treiber. Informationen zu Use_decl_annotations finden Sie unter Verhalten von Funktionen mit Anmerkungen.

Anforderungen

Anforderung Wert
Zielplattform Universell
Header storport.h (Storport.h einschließen)
IRQL DIRQL

Weitere Informationen

PORT_CONFIGURATION_INFORMATION

StorPortAcquireMSISpinLock

StorPortGetMSIInfo

StorPortReleaseMSISpinLock