Installation eines nicht signierten Treibers während Entwicklung und Test

Standardmäßig werden 64-Bit-Versionen von Windows Vista und neueren Versionen von Windows nur dann geladen, wenn der Kernel die Treibersignatur überprüfen kann. Dieses Standardverhalten kann jedoch während der frühen Treiberentwicklung und für nicht automatisierte Tests deaktiviert werden. Entwickler können einen der folgenden Mechanismen verwenden, um die Erzwingung einer gültigen Treibersignatur beim Laden vorübergehend zu deaktivieren. Um das Testen eines Treibers, der von Plug & Play (PnP) installiert wird, vollständig zu automatisieren, muss die Katalogdatei des Treibers signiert werden. Das Signieren des Treibers ist erforderlich, da Windows Vista und spätere Versionen von Windows bei nicht signierten Treibern ein Dialogfeld zur Treibersignierung anzeigen, bei dem ein Systemadministrator die Installation des Treibers autorisieren muss, wodurch unter Umständen verhindert wird, dass Benutzer ohne die erforderlichen Berechtigungen den Treiber installieren und das Gerät verwenden. Dieses PnP-Treiberinstallationsverhalten kann bei Windows Vista und höheren Versionen von Windows nicht deaktiviert werden.

Verwenden Sie die erweiterte Startoption mit F8

Windows Vista und neuere Versionen von Windows unterstützen die erweiterte F8-Startoption -- „Treibersignaturerzwingung deaktivieren“ --, die die Erzwingung der Signatur beim Laden für einen Kernelmodustreiber nur für die aktuelle Systemsitzung deaktiviert. Diese Einstellung wird nicht über Systemneustarts hinweg beibehalten.

Kerneldebugger anfügen, um die Signaturüberprüfung zu deaktivieren

Durch das Anfügen eines aktiven Kerneldebuggers an einen Entwicklungs- oder Testcomputer wird die Erzwingung der Ladezeitsignatur für Kernelmodustreiber deaktiviert. Um diese Debugkonfiguration zu verwenden, fügen Sie einen Debugcomputer an einen Entwicklungs- oder Testcomputer an, und aktivieren Sie das Kerneldebugging auf dem Entwicklungs- oder Testcomputer, indem Sie den folgenden Befehl ausführen:

bcdedit -debug on

Um BCDEdit zu verwenden, muss der Benutzer Mitglied der Gruppe "Administratoren" im System sein und den Befehl über eine Eingabeaufforderung mit erhöhten Rechten ausführen. Um ein Eingabeaufforderungsfenster mit erhöhten Rechten zu öffnen, erstellen Sie eine Desktopverknüpfung zu Cmd.exe, halten Sie die Verknüpfung gedrückt (oder klicken Sie mit der rechten Maustaste darauf), und wählen Sie "Als Administrator ausführen" aus.

Erzwingen der Kernel-Mode-Signaturüberprüfung im Kerneldebuggingmodus

Es gibt jedoch Situationen, in denen ein Entwickler möglicherweise einen Kerneldebugger angeschlossen haben muss, aber auch die Erzwingung der Ladezeitsignatur beibehalten muss. Wenn beispielsweise ein Treiberstapel über einen nicht signierten Treiber (z. B. einen Filtertreiber) verfügt, der nicht geladen wird, kann er den gesamten Stapel ungültig machen. Da das Anfügen eines Debuggers das Laden des nicht signierten Treibers zulässt, scheint das Problem zu verschwinden, sobald der Debugger angefügt ist. Das Debuggen dieses Problems kann schwierig sein.

Um das Debuggen solcher Probleme zu erleichtern, unterstützt die Kernelmodus-Codesignaturrichtlinie den folgenden Registrierungswert:

HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags

Dieser Registrierungswert ist vom Typ REG_DWORD und kann auf einen Wert festgelegt werden, der auf einem bitweisen ODER einer oder mehrerer der folgenden Flags basiert:

0x00000001
Dieser Flagwert konfiguriert den Kernel so, dass er in den Debugger wechselt, wenn ein Treiber nicht signiert ist. Der Entwickler oder Tester kann sich dann entscheiden, den nicht signierten Treiber zu laden, indem er g an der Debuggeraufforderung eingibt.

0x00000010
Dieser Flagwert konfiguriert den Kernel so, dass er das Vorhandensein des Debuggers ignoriert und immer das Laden eines nicht signierten Treibers blockiert.

Wenn dieser Registrierungswert nicht in der Registrierung vorhanden ist oder einen Wert aufweist, der nicht auf den zuvor beschriebenen Flags basiert, lädt der Kernel immer einen Treiber im Kerneldebuggingmodus, unabhängig davon, ob der Treiber signiert ist.

Hinweis Dieser Registrierungswert ist in der Registrierung standardmäßig nicht vorhanden. Sie müssen den Wert erstellen, um die Überprüfung der Kernelmodussignatur zu debuggen.