Freigeben über


Installieren eines nicht signierten Treibers während der Entwicklung und des Tests

Standardmäßig laden 64-Bit-Versionen von Windows Vista und höheren Versionen von Windows einen Kernelmodustreiber nur, 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 Ladezeiterzwingung einer gültigen Treibersignatur vorübergehend zu deaktivieren. Um jedoch 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 höhere Versionen von Windows ein Dialogfeld für die Treibersignatur für nicht signierte Treiber anzeigen, die einen Systemadministrator erfordern, um die Installation des Treibers zu autorisieren, wodurch möglicherweise verhindert wird, dass benutzer ohne die erforderlichen Berechtigungen den Treiber installieren und das Gerät verwenden. Dieses PnP-Treiberinstallationsverhalten kann unter Windows Vista und höheren Versionen von Windows nicht deaktiviert werden.

Verwenden der Option "Erweiterter Start" für F8

Windows Vista und höhere Versionen von Windows unterstützen die F8 Advanced Boot-Option(- "Treibersignaturerzwingung deaktivieren"), die die Erzwingung von Signaturen zur Ladezeit für einen Kernelmodustreiber nur für die aktuelle Systemsitzung deaktiviert. Diese Einstellung wird bei Systemneustarts nicht beibehalten.

Anfügen eines Kerneldebuggers zum Deaktivieren der Signaturüberprüfung

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 Kerneldebuggen auf dem Entwicklungs- oder Testcomputer, indem Sie den folgenden Befehl ausführen:

bcdedit -debug on

Um BCDEdit verwenden zu können, muss der Benutzer Mitglied der Gruppe Administratoren auf dem System sein und den Befehl an einer Eingabeaufforderung mit erhöhten Rechten ausführen. Um ein Eingabeaufforderungsfenster mit erhöhten Rechten zu öffnen, erstellen Sie eine Desktopverknüpfung zum 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 Kernel-Mode Signaturüberprüfung im Kerneldebugmodus

Es gibt jedoch Situationen, in denen ein Entwickler möglicherweise einen Kerneldebugger angefügt haben muss, aber auch die Erzwingung der Ladezeitsignatur aufrechterhalten muss. Wenn ein Treiberstapel beispielsweise über einen nicht signierten Treiber (z. B. einen Filtertreiber) verfügt, der nicht geladen werden kann, kann dies 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 dieser Art von Problem kann schwierig sein.

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

HKLM\SYSTEM\CurrentControlSet\Control\CI\DebugFlags

Dieser Registrierungswert ist vom Typ REG_DWORD und kann basierend auf einem bitweisen OR eines oder mehrerer der folgenden Flags ein Wert zugewiesen werden:

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

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

Wenn dieser Registrierungswert nicht in der Registrierung vorhanden ist oder über einen Wert verfügt, 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 Signaturüberprüfung im Kernelmodus zu debuggen.