DRIVER_REINITIALIZE Rückruffunktion (ntddk.h)

Die Routine "Neu initialisieren" setzt die Initialisierung von Treibern und Geräten fort, nachdem die DriverEntry-Routine des Treibers zurückgegeben wurde.

Syntax

DRIVER_REINITIALIZE DriverReinitialize;

void DriverReinitialize(
  [in]           _DRIVER_OBJECT *DriverObject,
  [in, optional] PVOID Context,
  [in]           ULONG Count
)
{...}

Parameter

[in] DriverObject

Vom Aufrufer bereitgestellter Zeiger auf eine DRIVER_OBJECT Struktur. Dies ist das Treiberobjekt des Treibers.

[in, optional] Context

Vom Aufrufer bereitgestellter Zeiger auf Kontextinformationen, der in einem vorherigen Aufruf von IoRegisterDriverReinitialization oder IoRegisterBootDriverReinitialization angegeben wurde.

[in] Count

Vom Aufrufer bereitgestellter Wert, der die Anzahl der Aufrufe der Neuitialisierungsroutine darstellt, einschließlich des aktuellen Aufrufs.

Rückgabewert

Keine

Bemerkungen

Um eine Reinitialisierungsroutine für die Ausführung in die Warteschlange zu stellen, muss die DriverEntry-Routine eines Treibers entweder IoRegisterDriverReinitialization oder IoRegisterBootDriverReinitialization aufrufen. Die Routine "Reinitialisieren" kann auch IoRegisterDriverReinitialization selbst aufrufen, wodurch die Routine erneut zurückgefragt wird. Diese Queuierung kann mehrmals erfolgen, und der Count-Parameter der Routine gibt an, wie oft sie aufgerufen wurde. Der erste Aufruf von IoRegisterDriverReinitialization muss von DriverEntry erfolgen, und DriverEntry muss STATUS_SUCCESS zurückgeben.

Weitere Informationen zum Implementieren einer Neuitialisierungsroutine finden Sie unter Schreiben einer Neuitialisierungsroutine.

Beispiele

Um eine Rückrufroutine neu zu initialisieren , müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine 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 Rückrufroutine mit dem Namen MyReinitialize"Reitialisieren" zu definieren, verwenden Sie den typ DRIVER_REINITIALIZE, wie in diesem Codebeispiel gezeigt:

DRIVER_REINITIALIZE MyReinitialize;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
VOID
  MyReinitialize(
    struct _DRIVER_OBJECT  *DriverObject,
    PVOID  Context,
    ULONG  Count
    )
  {
      // Function body
  }

Der DRIVER_REINITIALIZE Funktionstyp ist in der Headerdatei Wdm.h definiert. Um Fehler beim Ausführen der Codeanalysetools genauer zu identifizieren, fügen Sie die _Use_decl_annotations_ Anmerkung ihrer Funktionsdefinition hinzu. Die _Use_decl_annotations_ Anmerkung stellt sicher, dass die Anmerkungen verwendet werden, die auf den DRIVER_REINITIALIZE 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 WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform Desktop
Kopfzeile ntddk.h (include Ntddk.h, Ntifs.h)
IRQL Wird bei PASSIVE_LEVEL aufgerufen.