DRIVER_INITIALIZE Rückruffunktion (wdm.h)

DriverEntry ist die erste Routine, die nach dem Laden eines Treibers aufgerufen wird, und ist für die Initialisierung des Treibers verantwortlich.

Syntax

DRIVER_INITIALIZE DriverInitialize;

NTSTATUS DriverInitialize(
  [in] _DRIVER_OBJECT *DriverObject,
  [in] PUNICODE_STRING RegistryPath
)
{...}

Parameter

[in] DriverObject

Ein Zeiger auf eine DRIVER_OBJECT-Struktur . Dies ist das Treiberobjekt des Treibers.

[in] RegistryPath

Ein Zeiger auf eine gezählte Unicode-Zeichenfolge, die den Pfad zum Registrierungsschlüssel des Treibers angibt.

Rückgabewert

Wenn die Routine erfolgreich ist, muss sie STATUS_SUCCESS zurückgeben. Andernfalls muss einer der In Ntstatus.h definierten Fehlerwerte status zurückgegeben werden.

Hinweise

Der DriverObject-Parameter stellt der DriverEntry-Routine einen Zeiger auf das Treiberobjekt des Treibers bereit, das vom E/A-Manager zugeordnet wird. Die DriverEntry-Routine muss das Driver-Objekt mit Einstiegspunkten für die Standardroutinen des Treibers ausfüllen.

Der DriverObject-Zeiger gewährt dem Treiber Zugriff auf DriverObject-HardwareDatabase>, die auf eine gezählte Unicode-Zeichenfolge verweist, die einen Pfad zur \Registry\Machine\Hardware-Struktur der Registrierung angibt.

Die Registrierungspfadzeichenfolge, auf die von RegistryPath verwiesen wird, hat das Format \Registry\Machine\System\CurrentControlSet\Services\DriverName. Ein Treiber kann diesen Pfad verwenden, um treiberspezifische Informationen zu speichern. Siehe Registrierungsschlüssel für Treiber. Die DriverEntry-Routine sollte eine Kopie der Unicode-Zeichenfolge speichern, nicht den Zeiger, da der E/ A-Manager den RegistryPath-Puffer nach der Rückgabe von DriverEntry freigibt.

Weitere Informationen zum Implementieren einer DriverEntry-Routine finden Sie unter Schreiben einer DriverEntry-Routine.

Obwohl es möglich ist, diese Routine etwas anderes als DriverEntry zu nennen, wird dies nicht empfohlen. Die von DDK bereitgestellten Buildtools informieren den Linker automatisch darüber, dass der Einstiegspunkt des Treibers DriverEntry heißt. Wenn Sie der Routine einen anderen Namen geben, müssen Sie die Buildtools ändern. Weitere Informationen zu Buildtools finden Sie unter Erstellen eines Treibers.

Beispiele

Um eine DriverEntry-Rückrufroutine zu definieren, müssen Sie zunächst eine Funktionsdeklaration bereitstellen, die den Typ der von Ihnen definierten Rückrufroutine angibt. 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 eine DriverEntry-Rückrufroutine zu definieren, verwenden Sie den DRIVER_INITIALIZE-Typ, wie in diesem Codebeispiel gezeigt:

DRIVER_INITIALIZE DriverEntry;

Implementieren Sie dann Ihre Rückrufroutine wie folgt:

_Use_decl_annotations_
NTSTATUS 
  DriverEntry( 
    struct _DRIVER_OBJECT  *DriverObject,
    PUNICODE_STRING  RegistryPath 
    )
  {
      // Function body
  }

Der DRIVER_INITIALIZE Funktionstyp ist in der Wdm.h-Headerdatei 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_INITIALIZE 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 wdm.h (include Mcd.h, Ntddk.h, Ntifs.h, Wudfwdm.h)
IRQL Wird bei PASSIVE_LEVEL aufgerufen.

Weitere Informationen

DRIVER_OBJECT