Freigeben über


HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE Rückruffunktion (storport.h)

Die HwMSInterruptRoutine Routine verarbeitet einen Signalunterbruch (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 Hostbusadapter (HBA).

MessageId

Der Bezeichner der Nachricht.

Rückgabewert

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

Bemerkungen

Die HwMSInterruptRoutine eines Miniporttreibers Von der HBA generierte Nachrichtenunterbrüche (MSIs) werden von der HBA generiert. Ein Miniporttreiber gibt an, dass seine HBA MSIs generiert, indem die HwMSInterruptRoutine Mitglied der PORT_CONFIGURATION_INFORMATION-Struktur so festgelegt wird, dass sie auf die HwMSInterruptRoutine Routine verweist. Wenn die HBA keine MSIs generiert, sollte ein Miniporttreiber HwMSInterruptRoutine auf NULL-festlegen.

Wenn das InterruptSynchronizationMode Mitglied der PORT_CONFIGURATION_INFORMATION-Struktur auf InterruptSynchronizeAllfestgelegt ist, synchronisiert der Storport-Treiber alle MSIs, die mit dem vom Adapter verwalteten Adapter stammen, oder die mit dem Adapter verbundenen Geräte. Wenn eine Unterbrechung auftritt, ruft der Storport-Treiber die HwMSInterruptRoutine Routine bei DIRQL auf, nachdem die Unterbrechungsdrehsperre erworben wurde.

Wenn das InterruptSynchronizationMode Member der PORT_CONFIGURATION_INFORMATION-Struktur auf InterruptSynchronizePerMessagefestgelegt ist, ruft der Storport-Treiber die HwMSInterruptRoutine Routine bei IRQL = DIRQL auf, wobei die Unterbrechungsdrehsperre gedrückt wird, die dem im MessageID Parameter angegebenen Nachrichtenbezeichner (ID) entspricht. Die HBA kann die HwMSInterruptRoutine Routine für Unterbrechungen für andere Nachrichten-IDs unterbrechen, sodass der Storport-Treiber verschachtelte Aufrufe an HwMSInterruptRoutineausführt oder verschiedene Instanzen von HwMSInterruptRoutine gleichzeitig auf verschiedenen Prozessoren ausführt. Um den Zugriff auf vertrauliche Daten von verschiedenen Instanzen von HwMSInterruptRoutinezu synchronisieren, muss der Miniport die StorPortAcquireMSISpinLock und StorPortReleaseMSISpinLock Routinen aufrufen, um die Drehsperren für Nachrichten-IDs abzurufen und freizugeben, die nicht die ID in MessageID-.

Ein Miniporttreiber kann zusätzliche Informationen zu der Nachricht abrufen, indem die StorPortGetMSIInfo Routine aufgerufen wird.

Sie sollte die StorPortGetMSIInfo- Routine nicht innerhalb der HwMSInterruptRoutine Routine aufrufen.

Der Name HwMSInterruptRoutine ist nur ein Platzhalter. Der eigentliche Prototyp für diese Routine wird 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 zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückruffunktion identifiziert, die Sie definieren. Windows stellt eine Reihe von Rückruffunktionstypen für Treiber bereit. Durch das Deklarieren einer Funktion mithilfe der Rückruffunktionstypen können Codeanalyse für Treiber, statische Treiberüberprüfung (SDV) und andere Überprüfungstools Fehler finden, und es ist eine Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Wenn Sie beispielsweise eine HwMSInterruptRoutine Rückrufroutine definieren möchten, die MyHwMSIRoutineheißt, verwenden Sie den HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE Typ 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 wird in der Storport.h-Headerdatei definiert. Um Fehler genauer zu identifizieren, wenn Sie die Codeanalysetools ausführen, müssen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzufügen. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen, die auf den Funktionstyp HW_MESSAGE_SIGNALED_INTERRUPT_ROUTINE in der Headerdatei angewendet werden, verwendet 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_annotationsfinden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform- Universal
Header- storport.h (include Storport.h)
IRQL- DIRQL

Siehe auch

PORT_CONFIGURATION_INFORMATION

StorPortAcquireMSISpinLock

StorPortGetMSIInfo-

StorPortReleaseMSISpinLock