HW_DPC_ROUTINE Rückruffunktion (storport.h)

Die HwStorDpcRoutine-Routine ist eine Routine, die mithilfe des DPC-Mechanismus (DeFerred Procedure Call) für die Ausführung bei DISPATCH IRQL zurückgestellt wird.

Syntax

HW_DPC_ROUTINE HwDpcRoutine;

void HwDpcRoutine(
  PSTOR_DPC Dpc,
  PVOID HwDeviceExtension,
  PVOID SystemArgument1,
  PVOID SystemArgument2
)
{...}

Parameter

Dpc

Ein Zeiger auf einen Storport-DPC-Kontext.

HwDeviceExtension

Ein Zeiger auf die Geräteerweiterung pro Adapter.

SystemArgument1

Ein Zeiger auf vom Aufrufer bereitgestellte Informationen.

SystemArgument2

Ein Zeiger auf vom Aufrufer bereitgestellte Informationen.

Rückgabewert

Keine

Bemerkungen

Wenn ein Miniporttreiber StorPortInitializeDpc aufruft , um einen DPC zu initialisieren, muss der HwDpcRoutine-Parameter der StorPortInitializeDpc-Routine mit einem Zeiger auf die HwStorDpcRoutine-Routine geladen werden.

Jede bestimmte instance einer DPC-Routine wird garantiert mit anderen Instanzen der DPC-Routine synchronisiert. Eine DPC-Routine kann sich selbst mit der HwStorStartIo-Routine oder mit der HwStorInterrupt-Routine synchronisieren, indem sie die entsprechende Spinsperre mit einem Aufruf von StorPortAcquireSpinLock erwirbt. Weitere Informationen zur Verwaltung von Drehsperren in DPC-Routinen finden Sie unter StorPortIssueDpc.

Der Name HwStorDpcRoutine ist nur ein Platzhalter. Der eigentliche Prototyp dieser Routine wird in storport.h wie folgt definiert:

typedef
BOOLEAN
HW_DPC_ROUTINE (
  _In_  PSTOR_DPC Dpc,
  _In_  PVOID HwDeviceExtension,
  _In_opt_  PVOID SystemArgument1,
  _In_opt_  PVOID SystemArgument2
  );

Der Porttreiber ruft die HwStorDpcRoutine-Routine bei DISPATCH IRQL auf.

Beispiele

Um eine HwStorDpcRoutine-Rückruffunktion zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückruffunktion identifiziert. 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 Anforderung zum Schreiben von Treibern für das Windows-Betriebssystem.

Um beispielsweise eine HwStorDpcRoutine-Rückrufroutine namens MyHwDpcRoutine zu definieren, verwenden Sie den HW_DPC_ROUTINE-Typ , wie in diesem Codebeispiel gezeigt:

HW_DPC_ROUTINE MyHwDpcRoutine;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
BOOLEAN
MyHwDpcRoutine (
  _In_  PSTOR_DPC Dpc,
  _In_  PVOID HwDeviceExtension,
  _In_opt_  PVOID SystemArgument1,
  _In_opt_  PVOID SystemArgument2
  );
  {
      ...
  }

Der HW_DPC_ROUTINE Funktionstyp ist in der Headerdatei Storport.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie der Funktionsdefinition die Use_decl_annotations Anmerkung hinzu. Die Use_decl_annotations Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den HW_DPC_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 (einschließlich Storport.h)
IRQL DISPATCH_LEVEL (siehe Abschnitt "Hinweise").

Weitere Informationen

Wenn ein Miniporttreiber aufruft, um einen DPC zu initialisieren, muss er den HwDpcRoutine-Parameter der StorPortInitializeDpc-Routine mit einem Zeiger auf die HwStorDpcRoutine-Routine laden.

Jede bestimmte instance einer DPC-Routine wird garantiert mit anderen Instanzen der DPC-Routine synchronisiert. Eine DPC-Routine kann sich mit der Routine oder mit der Routine synchronisieren, indem die entsprechende Spinsperre mit einem Aufruf von abgerufen wird. Weitere Informationen zur Verwaltung von Drehsperren in DPC-Routinen finden Sie unter .

HwStorInterrupt

HwStorStartIo

StorPortAcquireSpinLock

StorPortInitializeDpc

StorPortIssueDpc