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. |