Simulation mit geringen Ressourcen

Wenn die Option Simulation mit geringen Ressourcen (in Windows 8.1 als Simulation mit randomisierten niedrigen Ressourcen bezeichnet) aktiv ist, schlägt die Treiberüberprüfung zufällige Instanzen der Speicherbelegungen des Treibers fehl, wie dies der Fall sein kann, wenn der Treiber auf einem Computer mit unzureichendem Arbeitsspeicher ausgeführt wurde. Dadurch wird die Fähigkeit des Treibers getestet, ordnungsgemäß auf geringe Arbeitsspeicher- und andere Ressourcenbedingungen zu reagieren.

Der Test der Simulation mit niedrigen Ressourcen schlägt Zuordnungen fehl, die von Aufrufen mehrerer verschiedener Funktionen angefordert werden, einschließlich ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache und MmMapIoSpace.

Ab Windows Vista fügt der Low Resource Simulation-Test auch Fehler in IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl und MmAllocatePagesForMdlEx ein. Ab Windows Vista können Aufrufe von KeWaitForMultipleObjects oder KeWaitForMultipleLeObjects , bei denen der Alertable-Parameter auf TRUE festgelegt ist, STATUS_ALERTED zurückgeben, wenn sie im Kontext von nicht privilegierten Prozessen ausgeführt werden. Dadurch wird eine mögliche Threadwarnung simuliert, die von einem anderen Thread in derselben nicht privilegierten Anwendung stammt.

Der Test der Low Resource Simulation fügt auch Fehler in die folgenden GDI-Funktionen ein: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush und CLIPOBJ_ppoGetPath.

In Windows 7 und höheren Versionen des Windows-Betriebssystems unterstützt die Option Simulation mit niedrigen Ressourcen Arbeitsspeicher, der mithilfe der folgenden Kernel-APIs zugeordnet wurde:

Ab Windows 8.1 schlägt die Option Simulation mit niedrigen Ressourcen auch Zuordnungen fehl, die von Aufrufen von MmAllocateNodePagesForMdlEx angefordert werden. Darüber hinaus füllt Driver Verifier für einige Funktionen jetzt den zugeordneten Speicher mit einem zufälligen Muster aus. Aber nur in Situationen, in denen die Funktion nicht initialisierten Arbeitsspeicher zurückgibt. Dazu gehören folgende Funktionen:

Benutzerdefinierte Einstellungen für simulation mit geringen Ressourcen

Unter Windows Vista und höheren Versionen von Windows können Sie die folgenden benutzerdefinierten Einstellungen angeben.

  • Wahrscheinlichkeit , dass eine bestimmte Zuordnung fehlschlägt. Der Standardwert ist 6 %.

  • Betroffene Anwendungen . Diese Einstellung schränkt die eingefügten fehlerhaften Zuordnungen auf die angegebenen Anwendungen ein. Standardmäßig sind alle Zuordnungen betroffen.

  • Betroffene Pooltags . Diese Einstellung beschränkt die eingefügten Fehler auf Zuordnungen mit den angegebenen Pooltags. Standardmäßig sind alle Zuordnungen betroffen.

  • Verzögerung (in Minuten), bevor Zuordnungen fehlschlägt. Durch diese Verzögerung kann das System gestartet und stabilisiert werden, bevor Fehler eingespritzt werden. Der Standardwert ist acht Minuten.

Unter Betriebssystemen vor Windows Vista können Sie diese Einstellungen nicht anpassen. Das Betriebssystem verwendet die Standardwerte.

Simulation mit geringen Ressourcen ohne Neustart

Sie können die Simulation für niedrige Ressourcen unter Windows 2000 und höheren Versionen von Windows aktivieren, ohne den Computer neu zu starten, indem Sie den Parameter /volatile verwenden. Die Einstellungen werden sofort wirksam, gehen aber verloren, wenn Sie den Computer herunterfahren oder neu starten.

Sie können die Einstellungen für simulation mit niedrigen Ressourcen auch in der Registrierung speichern, indem Sie den Parameter /volatile weglassen . Diese Einstellungen sind nur wirksam, wenn Sie den Computer neu starten, aber sie bleiben wirksam, bis Sie sie ändern.

Aktivieren dieser Option

Sie können die Option Simulation für niedrige Ressourcen für einen oder mehrere Treiber aktivieren, indem Sie den Treiberüberprüfungs-Manager oder die Verifier.exe Befehlszeile verwenden. Weitere Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen.

  • Über die Befehlszeile

    In der Befehlszeile wird die Option Simulation mit niedrigen Ressourcen durch Bit 2 (0x4) dargestellt. Um die Simulation mit niedrigen Ressourcen zu aktivieren, verwenden Sie den Flagwert 0x4, oder fügen Sie dem Flags-Wert 0x4 hinzu. Beispiel:

    verifier /flags 0x4 /driver MyDriver.sys
    

    Die Option ist nach dem nächsten Start aktiv.

    Unter Windows Vista und höheren Versionen von Windows können Sie den Parameter /faults oder den Flagwert 0x4 verwenden, um die Simulation mit niedrigen Ressourcen zu aktivieren. Um die Einstellungen für Simulation mit geringen Ressourcen zu ändern, müssen Sie /faults verwenden. Beispiel:

    verifier /faults /driver MyDriver.sys
    

    Unter Windows 2000 und höheren Versionen von Windows können Sie auch die Simulation mit niedrigen Ressourcen aktivieren und deaktivieren, ohne den Computer neu zu starten, indem Sie dem Befehl den Parameter /volatile hinzufügen. Beispiel:

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

    Diese Einstellung wird sofort wirksam, geht aber verloren, wenn Sie den Computer herunterfahren oder neu starten. Weitere Informationen finden Sie unter Verwenden von flüchtigen Einstellungen.

    Unter Windows Vista können Sie den Parameter /faults verwenden, um die Simulation mit niedrigen Ressourcen mit dem Parameter /volatile darzustellen, um eine Einstellung darzustellen, die ohne Neustart wirksam ist. Die Einstellungsänderung wird angezeigt. Beispiel:

    0>  verifier /volatile /faults /adddriver MyDriver.sys
    New Low Resources Simulation options:
    
    - Use default fault injection probability.
    - Allocations using any pool tag can be failed.
    - Simulate low resources conditions in any application.
    
    The new settings are in effect until you restart this computer
    or change them again.
    
  • 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 Simulation mit geringen Ressourcen aus.

Anpassen der Einstellungen (Windows Vista und höher)

Ab Windows Vista können Sie die Standardeinstellungen für die Eigenschaften Verzögerung, Wahrscheinlichkeit, Anwendungen und Pooltags der Option Simulation mit niedrigen Ressourcen ändern. Sie können diese Einstellungen mithilfe des Treiberüberprüfungs-Managers oder der Verifier.exe Befehlszeile ändern. Weitere Informationen finden Sie unter Auswählen von Treiberüberprüfungsoptionen.

In der Befehlszeile lautet die Syntax für diese Einstellungen wie folgt:

verifier [/volatile] /faults[Probability|PoolTags|Applications|DelayMins][/driver|DriverList]

Hinweis Die benutzerdefinierten Einstellungsparameter müssen in der angezeigten Reihenfolge angezeigt werden. Wenn Sie einen Wert weglassen, geben Sie Anführungszeichen ein, um seinen Platz zu behalten.

Unterparameter

  • /faults

    Aktiviert die Option Simulation mit niedrigen Ressourcen in der Treiberüberprüfung. (Sie können /flags nicht 0x4 mit den unterparametern der benutzerdefinierten Einstellung verwenden.)

  • Probability

    Gibt die Wahrscheinlichkeit an, dass die Treiberüberprüfung bei einer bestimmten Zuordnung fehlschlägt. Geben Sie eine Zahl (im Dezimal- oder Hexadezimalformat) ein, um die Wahrscheinlichkeit in 10.000 darzustellen, dass die Driver Verifier die Zuordnung fehlschlägt. Der Standardwert 600 bedeutet 600/10000 oder 6 %.

  • PoolTags

    Schränkt die Zuordnungen ein, bei denen die Treiberüberprüfung keine Zuordnungen mit den angegebenen Pooltags ausführen kann. Sie können ein Wildcardzeichen (*) verwenden, um mehrere Pooltags darzustellen. Wenn Sie mehrere Pooltags auflisten möchten, trennen Sie die Tags durch Leerzeichen ab. Standardmäßig können alle Zuordnungen zu Fehlern führen.

  • Anwendungen

    Schränkt die Zuordnungen ein, bei denen die Treiberüberprüfung keine Zuordnungen für das angegebene Programm ausführen kann. Geben Sie den Namen einer ausführbaren Datei ein. Trennen Sie die Programmnamen beim Auflisten durch Leerzeichen ab. Standardmäßig können alle Zuordnungen zu Fehlern führen.

  • DelayMins

    Gibt die Anzahl der Minuten nach dem Start an, in denen die Treiberüberprüfung keine Zuordnungen absichtlich fehlschlägt. Diese Verzögerung ermöglicht das Laden der Treiber und die Stabilisierung des Systems, bevor der Test beginnt. Geben Sie eine Zahl (im Dezimal- oder Hexadezimalformat) ein. Der Standardwert ist 8 (Minuten).

Der folgende Befehl aktiviert beispielsweise die Simulation mit niedrigen Ressourcen mit einer Wahrscheinlichkeit von 10 % (1000/10000) und einer Verzögerung von fünf Minuten für die Pooltags Tag1 und Fred und die Anwendung Notepad.exe.

verifier /faults 1000 "Tag1 Fred" Notepad.exe 5

Der folgende Befehl aktiviert die Simulation mit niedrigen Ressourcen mit den Standardwerten, mit der Ausnahme, dass die Verzögerung auf 10 Minuten verlängert wird.

verifier /faults "" "" "" 0xa

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 Simulation mit geringen Ressourcen aus, und klicken Sie dann auf Weiter.

  5. Ändern Sie die Einstellungen für die Eigenschaften verzögerungs-, wahrscheinlichkeits-, Anwendungs- und Pooltags wie gewünscht.

Anzeigen der Ergebnisse

Sie können überwachen, wie oft die Driver Verifier-Ressourcenzuordnung absichtlich fehlschlägt, indem Sie den globalen Leistungsindikator Driver Verifier Faults Injected (Treiberüberprüfungsfehler eingefügt ) anzeigen. Dieser Leistungsindikator zeigt die Gesamtanzahl der Ressourcenzuordnungen an, bei denen die Treiberüberprüfung seit dem letzten Start absichtlich fehlgeschlagen ist.

Sie können diesen Leistungsindikator in einer Driver Verifier-Protokolldatei (/log), in der Befehlszeile (/Abfrage) oder im Treiberüberprüfungs-Manager anzeigen. Wählen Sie in Windows 2000 die Registerkarte Globale Leistungsindikatoren aus, um globale Indikatoren anzuzeigen. Wählen Sie in späteren Versionen von Windows Informationen zur aktuell überprüften Treiberaufgabe anzeigen aus, und drücken Sie dann zweimal Weiter . Weitere Informationen finden Sie unter Überwachen globaler Leistungsindikatoren.

Sie können auch die Anzahl absichtlich fehlgeschlagener Zuordnungen und die Anzahl der Gesamtzuordnungen (zur Berechnung der Wahrscheinlichkeit) anzeigen, indem Sie die Debuggererweiterung !verifier verwenden. Das folgende Beispiel zeigt ein Beispiel der !verifier-Ausgabe .

In diesem Beispiel gibt injizieren zufällige API-Fehler mit geringen Ressourcen an, dass die Simulation für niedrige Ressourcen aktiviert ist. Fehlgeschlagene Ressourcenzuordnungen Stellt absichtlich die Anzahl der absichtlich fehlgeschlagenen Zuordnungen dar, und Versuchter Poolzuordnungen stellt die Gesamtzahl der Zuordnungen dar.

!verifier

Verify Level 5 ... enabled options are:
        Special pool
        Inject random low-resource API failures

Summary of All Verifier Statistics

RaiseIrqls                             0x2c671f
AcquireSpinLocks                       0xca1a02
Synch Executions                       0x10a623
Trims                                  0x0

Pool Allocations Attempted             0x862e0e
Pool Allocations Succeeded             0x8626e3
Pool Allocations Succeeded SpecialPool 0x768060
Pool Allocations With NO TAG           0x0
Pool Allocations Failed                0x34f
Resource Allocations Failed Deliberately   0x3f5

Verwenden Sie !verifier 4 im Kerneldebugger, um die Stapelüberwachungen für die Zuordnungen anzuzeigen, die zuletzt durch die Treiberüberprüfung fehlgeschlagen sind.

Das folgende Beispiel zeigt ein Beispiel für die Ausgabe von !verifier 4. Standardmäßig zeigt !verifier 4 Stapelablaufverfolgungen aus den vier zuletzt fehlgeschlagenen Zuordnungen an. Sie können jedoch den Parameter Quantity verwenden, um die Anzahl der angezeigten Stapelablaufverfolgungen zu erhöhen. Beispielsweise zeigt !verifier 0x80 die 128 zuletzt fehlgeschlagenen Zuordnungen an.

Beachten Sie in diesem Beispiel, dass Verifier den Aufruf von ExAllocatePoolWithTag des Treibers abgefangen und ersetzt hat. Eine der häufigsten Ursachen für Treiberabstürze tritt auf, wenn ein Treiber versucht, Arbeitsspeicher zuzuweisen und dann den Zeiger verwendet, den die Zuordnungsfunktion zurückgibt, bevor überprüft wird, ob es nicht NULL ist.

kd> !verifier 4
Resource fault injection history:
Tracker @ 8354A000 (# entries: 80, size: 80, depth: 8)

Entry @ 8354B258 (index 75)

    Thread: C2638220

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A4720443 win32k!bDeleteAllFlEntry+0x15d
    A4720AB0 win32k!GreEnableEUDC+0x70
    A47218FA win32k!CleanUpEUDC+0x37
    A473998E win32k!GdiMultiUserFontCleanup+0x5
    815AEACC nt!MiDereferenceSession+0x74
    8146D3B4 nt!MmCleanProcessAddressSpace+0x112
    815DF739 nt!PspExitThread+0x603

Entry @ 8354B230 (index 74)

    Thread: 8436D770

    816760CB nt!VerifierExAllocatePoolWithTag+0x49
    A462141C win32k!Win32AllocPool+0x13
    A4725F94 win32k!StubGdiAlloc+0x10

Die Erfahrung mit dem Test der Simulation mit niedrigen Ressourcen zeigt, dass die meisten Treiberabstürze durch die zuletzt fehlgeschlagene Zuordnung verursacht werden. Im obigen Beispiel lag der Absturz im Pfad von win32k! GreEnableEUDC. Untersuchen Sie den Code im Pfad der Zuordnung, um die Ursache des Absturzes zu ermitteln.

Informationen zu !verifier finden Sie in der Dokumentation Debugtools für Windows .

Verwenden Sie die Option /querysettings , um die Einstellungen in der Registrierung über die Befehlszeile anzuzeigen. Beispiel:

C:\>verifier /querysettings
Special pool: Disabled
Pool tracking: Disabled
Force IRQL checking: Disabled
I/O verification: Disabled
Enhanced I/O verification: Disabled
Deadlock detection: Disabled
DMA checking: Disabled
Security checks: Disabled
Force pending I/O requests: Disabled
Low resources simulation: Enabled
IRP Logging: Disabled
Miscellaneous checks: Disabled

Low Resources Simulation options:

- Fault injection probability: 1/10000.
- Fail only allocations using pool tags: Tag1 Tag2.
- Simulate low resources conditions only in applications: test1.exe test2.exe.
- Boot time delay: 2 minutes.

Verified drivers:

blah.sys