Erzwingen der IRQL-Überprüfung

Obwohl Kernelmodustreibern der Zugriff auf auslagerungsfähigen Arbeitsspeicher bei einer hohen IRQL- oder während einer Drehsperre verboten ist, wird eine solche Aktion möglicherweise nicht bemerkt, wenn die Seite nicht tatsächlich aus dem Arbeitssatz gekürzt und auf den Datenträger ausgelagert wurde.

Wenn IRQL-Überprüfung erzwingen aktiviert ist, sorgt driver verifier für extremen Druck bei der Verwendung des Systemspeichers. Wenn ein überprüfter Treiber eine Spin-Sperre anfordert, KeSynchronizeExecution aufruft oder den IRQL auf DISPATCH_LEVEL oder höher anhebt, werden alle systemseitigen Pool, Code und Daten (einschließlich des auslagerungsfähigen Codes und der Daten des Treibers) aus dem Arbeitssatz gekürzt. Wenn der Treiber versucht, auf einen dieser Speicher zuzugreifen, führt Driver Verifier eine Fehlerüberprüfung aus.

Ab Windows Vista bewirkt diese Option auch, dass driver verifier erkennt, wann bestimmte Synchronisierungsobjekte im auslagerungsfähigen Arbeitsspeicher enthalten sind. Diese Synchronisierungsobjekte können nicht ausgelagert werden, da der Betriebssystemkern bei IRQL mit erhöhten Rechten darauf zugreift. Driver Verifier kann die seitenfähigen Strukturen KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE und FAST_MUTEX erkennen.

Dieser Druck auf die Arbeitsspeicherauslastung wirkt sich nicht direkt auf Treiber aus, die nicht zur Überprüfung ausgewählt sind. Wenn ein Treiber, der nicht für die Überprüfung ausgewählt ist, den IRQL auslöst, löst er die Aktion zum Kürzen nicht aus. Wenn jedoch ein überprüfter Treiber den IRQL auslöst, schneidet Driver Verifier Seiten ab, die von Treibern verwendet werden können, die nicht überprüft werden. Fehler, die von Treibern, die nicht überprüft werden, können daher gelegentlich abgefangen werden, wenn diese Option aktiv ist.

Überwachen von IRQL-Aus- und Drehsperren

Die Anzahl der IRQL-Auslöser, Spinsperren und Aufrufe an KeSynchronizeExecution , die von überprüften Treibern vorgenommen werden, kann überwacht werden. Es kann auch überwacht werden, wie oft Driver Verifier den auslagerungsfähigen Arbeitsspeicher aus dem Arbeitssatz gekürzt hat. Diese Statistiken können vom Driver Verifier Manager, der Verifier.exe-Befehlszeile oder in einer Protokolldatei angezeigt werden. Weitere Informationen finden Sie unter Überwachen globaler Leistungsindikatoren .

Die Kerneldebuggererweiterung !verifier kann auch verwendet werden, um diese Statistiken zu überwachen. Es stellt ähnliche Informationen wie die des Treiberüberprüfungs-Managers dar. In Windows XP und höher zeigt die Erweiterung !verifier 0x8 ein Protokoll der letzten IRQL-Änderungen an, die von überprüften Treibern vorgenommen wurden. Informationen zu Debuggererweiterungen finden Sie unter Windows-Debuggen.

Aufrufen von KeEnterCriticalRegion oder KeLeaveCriticalRegion bei DISPATCH_LEVEL oder höher

KeEnterCriticalRegion und KeLeaveCriticalRegion sind APIs, mit denen Sie die Ausführung einer kritischen Sequenz von Treibercode mit der Übermittlung gewöhnlicher asynchroner Kernelprozeduraufrufe (APCs) synchronisieren können. Die APIs KeEnterCriticalRegion und KeLeaveCriticalRegion können nicht unter IRQL = DISPATCH_LEVEL oder höher aufgerufen werden. Das Aufrufen von KeEnterCriticalRegion oder KeLeaveCriticalRegion bei DISPATCH_LEVEL oder höher kann zu einer Systembelässung oder speicherbeschädigung führen.

Ab Windows 7 erkennt Driver Verifier Aufrufe dieser APIs auf DISPATCH_LEVEL oder höher, wenn die Option IRQL-Überprüfung erzwingen aktiviert ist.

Aktivieren dieser Option

Sie können die Funktion IRQL-Überprüfung erzwingen für einen oder mehrere Treiber aktivieren, indem Sie den Treiberüberprüfungs-Manager oder die Verifier.exe-Befehlszeile verwenden. Ausführliche Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen.

  • An der Befehlszeile

    An der Befehlszeile wird die Option IRQL-Überprüfung erzwingen durch Bit 1 (0x2) dargestellt. Um IRQL-Überprüfung erzwingen zu aktivieren, verwenden Sie den Flagwert 0x2, oder fügen Sie dem Flagwert 0x2 hinzu. Beispiel:

    verifier /flags 0x2 /driver MyDriver.sys
    

    Das Feature ist nach dem nächsten Start aktiv.

    Sie können auch IRQL-Überprüfung erzwingen aktivieren und deaktivieren, ohne den Computer neu zu starten, indem Sie dem Befehl den Parameter /volatile hinzufügen. Beispiel:

    verifier /volatile /flags 0x2 /adddriver MyDriver.sys
    

    Diese Einstellung ist sofort wirksam, geht aber verloren, wenn Sie den Computer herunterfahren oder neu starten. Ausführliche Informationen finden Sie unter Verwenden flüchtiger Einstellungen.

    Die Funktion IRQL-Überprüfung erzwingen ist auch in den Standardeinstellungen enthalten. Beispiel:

    verifier /standard /driver MyDriver.sys
    
  • Verwenden des Treiberüberprüfungs-Managers

    1. Starten Sie den Treiberüberprüfungs-Manager. Geben Sie Verifier in ein Eingabeaufforderungsfenster ein.
    2. Wählen Sie Benutzerdefinierte Einstellungen erstellen (für Codeentwickler) aus, und klicken Sie dann auf Weiter.
    3. Wählen Sie Einzelne Einstellungen aus einer vollständigen Liste auswählen aus.
    4. Wählen Sie (überprüfen) IRQL-Überprüfung erzwingen aus.

    Die Funktion IRQL-Überprüfung erzwingen ist auch in den Standardeinstellungen enthalten. Um dieses Feature zu verwenden, klicken Sie im Treiberüberprüfungs-Manager auf Standardeinstellungen erstellen.