Freigeben über


DRIVER_REINITIALIZE Rückruffunktion (ntddk.h)

Die Routine neu initialisieren setzt die Treiber- und Geräteinitialisierung fort, nachdem die DriverEntry Routine zurückgegeben wird.

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, angegeben in einem vorherigen Aufruf von IoRegisterDriverReinitialization oder IoRegisterBootDriverReinitialization.

[in] Count

Vom Aufrufer bereitgestellter Wert, der angibt, wie oft die Reinitialisieren Routine aufgerufen wurde, einschließlich des aktuellen Anrufs.

Rückgabewert

Nichts

Bemerkungen

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

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

Beispiele

Zum Definieren einer Neuitialisieren Rückrufroutine müssen Sie zuerst eine Funktionsdeklaration bereitstellen, die den Typ der rückrufroutinen 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.

Um beispielsweise eine Rückrufroutine zu definieren, die MyReinitializebenannt ist, verwenden Sie den DRIVER_REINITIALIZE Typ, 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 wird in der Wdm.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 DRIVER_REINITIALIZE 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 WDM-Treiber. Informationen zu _Use_decl_annotations_finden Sie unter Annotating Function Behavior.

Anforderungen

Anforderung Wert
Zielplattform- Desktop
Header- ntddk.h (enthalten Ntddk.h, Ntifs.h)
IRQL- Wird bei PASSIVE_LEVEL aufgerufen.