Megosztás:


Alacsony erőforrások szimulációja

Ha az Alacsony erőforrások szimulációja lehetőség (a Windows 8.1-ben véletlenszerű alacsony erőforrás-szimuláció) aktív, az Illesztőprogram-ellenőrző az illesztőprogram memóriafoglalásainak véletlenszerű példányait meghiúsíthatja, mintha nem megfelelő memóriájú számítógépen futna az illesztőprogram. Ez azt teszteli, hogy az illesztőprogram képes-e megfelelően reagálni az alacsony memória és más alacsony erőforrás-feltételekre.

Az alacsony erőforrás-szimulációs teszt több különböző függvényhívás által kért foglalásokat meghiúsít, például ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache és MmMapIoSpace.

A Windows Vista-tól kezdve az alacsony erőforrás-szimulációs teszt az IoAllocateIrp, az IoAllocateMdl, az IoAllocateWorkItem, az IoAllocateErrorLogEntry, az MmAllocateContiguousMemory, a MmAllocateContiguousMemorySpecifyCache, az MmAllocatePagesForMdl és az MmAllocatePagesForMdlEx fájlba is injektálja a hibákat. Ezenkívül a Windows Vista rendszertől kezdve, ha engedélyezve van az Alacsony erőforrások szimulációja, a KeWaitForMultipleObjects vagy a KeWaitForSingleObject metódus true értékre beállított riasztási paramétere STATUS_ALERTED tud visszaadni, ha nem emelt jogosultságú folyamatok környezetében fut. Ez egy lehetséges szálriasztást szimulál, amely ugyanabban a nem emelt jogosultságú alkalmazásban található másik szálról érkezik.

Az alacsony erőforrás-szimulációs teszt a következő GDI-függvényekbe is hibákat injektál: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush és CLIPOBJ_ppoGetPath.

A Windows operációs rendszer Windows 7-ben és újabb verzióiban az Alacsony erőforrások szimulációja lehetőség támogatja a következő kernel API-k használatával lefoglalt memóriát:

A Windows 8.1-től kezdődően az Alacsony erőforrások szimulációja lehetőség az MmAllocateNodePagesForMdlEx hívásai által kért foglalásokat is meghiúsul. Emellett egyes függvények esetében a Driver Verifier véletlenszerű mintával tölti ki a lefoglalt memóriát. De csak olyan helyzetekben, amikor a függvény nem inicializált memóriát ad vissza. Ezek a függvények a következők:

Alacsony erőforrás-szimuláció egyéni beállításai

A Windows Vista és a Windows újabb verzióiban az alábbi egyéni beállításokat adhatja meg.

  • Annak valószínűsége , hogy egy adott foglalás meghiúsul. Az alapértelmezett érték 6%.

  • Érintett alkalmazások . Ez a beállítás korlátozza az injektált sikertelen lefoglalásokat a megadott alkalmazásokra. Alapértelmezés szerint minden allokációra hatással van.

  • Érintett címkék. Ez a beállítás a megadott készletcímkéket tartalmazó foglalásokra korlátozza az injektált hibákat. Alapértelmezés szerint minden allokációra hatással van.

  • Késleltetés (percekben) az erőforrás-kiosztások meghiúsulása előtt. Ez a késleltetés lehetővé teszi, hogy a rendszer elinduljon és stabilizálódjon a hibák beadása előtt. Az alapértelmezett érték nyolc perc.

A Windows Vista előtti operációs rendszereken nem szabhatja testre ezeket a beállításokat. Az operációs rendszer az alapértelmezett értékeket használja.

Alacsony erőforrás-szimuláció újraindítás nélkül

A Windows 2000 és újabb windowsos verziók alacsony erőforrás-szimulációját anélkül aktiválhatja, hogy újraindítaná a számítógépet az /volatile paraméter használatával. A beállítások azonnal érvénybe lépnek, de a számítógép leállítása vagy újraindítása esetén elvesznek.

Az alacsony erőforrás-szimulációs beállításokat a beállításjegyzékben is tárolhatja a /volatile paraméter kihagyásával. Ezek a beállítások csak a számítógép újraindításakor lépnek érvénybe, de mindaddig érvényesek maradnak, amíg nem módosítja őket.

A beállítás aktiválása

Az Alacsony erőforrások szimulációja lehetőséget egy vagy több illesztőprogramhoz aktiválhatja az Illesztőprogram-ellenőrzőkezelő vagy a Verifier.exe parancssor használatával. További információ: Illesztőprogram-ellenőrző beállításainak kiválasztása.

  • A parancssorban

    A parancssorban az Alacsony erőforrások szimulációja lehetőséget a 2. bit (0x4) jelöli. Az Alacsony erőforrás-szimuláció aktiválásához használjon egy 0x4 jelzőértéket, vagy adjon hozzá 0x4 a jelzők értékéhez. Például:

    verifier /flags 0x4 /driver MyDriver.sys
    

    A beállítás a következő rendszerindítás után aktív lesz.

    A Windows Vista és a Windows újabb verzióiban a /faults paraméterrel vagy a 0x4 jelzőértékével aktiválhatja az Alacsony erőforrások szimulációját. Az alacsony erőforrás-szimuláció beállításainak módosításához a /faultokat kell használnia. Például:

    verifier /faults /driver MyDriver.sys
    

    A Windows Windows 2000 és újabb verzióiban az alacsony erőforrásigényű szimuláció aktiválása és inaktiválása a számítógép újraindítása nélkül is lehetővé teszi a /volatile paraméter hozzáadását a parancshoz. Például:

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

    Ez a beállítás azonnal érvénybe lép, de a számítógép leállítása vagy újraindításakor elveszik. További részletekért lásd Illékony beállítások használata.

    Windows Vista rendszeren a /faults paraméterrel jelölheti az alacsony erőforrás-szimulációt a /volatile paraméterrel, amely újraindítás nélkül is hatékony. Ekkor megjelenik a beállítás módosítása. Például:

    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.
    
  • Driver Verifier Manager használata

    1. Indítsa el a Meghajtó Ellenőrző Kezelőt. Írja be Verifier parancssori ablakba.
    2. Válassza az Egyéni beállítások létrehozása (kódfejlesztők számára) lehetőséget, majd kattintson a Tovább gombra.
    3. Válassza Egyéni beállítások kiválasztása a teljes listából.
    4. Válassza az Alacsony erőforrások szimulációja lehetőséget.

A beállítások testreszabása (Windows Vista és újabb verziók)

A Windows Vista-tól kezdve módosíthatja az Alacsony erőforrások szimulációja beállítás késleltetési, valószínűségi, alkalmazás- és készletcímkék tulajdonságainak alapértelmezett beállításait. Ezeket a beállításokat az Illesztőprogram-ellenőrző kezelő vagy a Verifier.exe parancssor használatával módosíthatja. További információ: Illesztőprogram-ellenőrző beállításainak kiválasztása.

A parancssorban a beállítások szintaxisa a következő:

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

Jegyzet Az egyéni beállítások paramétereinek a megjelenített sorrendben kell megjelennie. Ha kihagy egy értéket, írjon be idézőjeleket a helyük megtartásához.

Részparaméterek

  • /Hibák

    Engedélyezi az Alacsony erőforrások szimulációja lehetőséget az Illesztőprogram-ellenőrzőben. (A /flags 0x4 nem használható az egyéni beállítási alparaméterekkel.)

  • Valószínűség

    Megadja annak valószínűségét, hogy az illesztőprogram-ellenőrző egy adott foglalást nem sikerül. Írjon be egy számot (decimális vagy hexadecimális formátumban), amely azt jelzi, hogy a Driver Verifier 10 000 esetből hányszor hibázik a foglalás során. Az alapértelmezett érték ( 600) 600/10000 vagy 6%.

  • PoolTags

    Korlátozza az illesztőprogram-ellenőrző által a megadott készletcímkéket tartalmazó foglalásokat. Helyettesítő karakterrel (*) több készletcímkét is jelölhet. Több készletcímke listázásához különítse el a címkéket szóközökkel. Alapértelmezés szerint minden hozzárendelés meghiúsulhat.

  • Alkalmazások

    Korlátozza az illesztőprogram-ellenőrző által a megadott programhoz tartozó foglalások lefoglalását. Írja be a végrehajtható fájl nevét. A programok listázásához különítse el a programneveket szóközökkel. Alapértelmezés szerint minden kiosztás meghiúsulhat.

  • DelayMins

    Azt adja meg, hány perc telhet el a rendszerindítás után, amelyek során az Illesztőprogram-ellenőrző nem akadályoz meg szándékosan erőforrás-lefoglalásokat. Ez a késleltetés lehetővé teszi az illesztőprogramok betöltését, és a rendszer stabilizálódik a teszt megkezdése előtt. Írjon be egy számot (decimális vagy hexadecimális formátumban). Az alapértelmezett érték 8 (perc).

Az alábbi parancs például 10% (1000/10000) valószínűségű alacsony erőforrás-szimulációt tesz lehetővé, a készletcímkék, a Tag1 és Fred, valamint az alkalmazás esetében pedig öt perc késleltetéssel, Notepad.exe.

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

Az alábbi parancs az alapértelmezett értékekkel engedélyezi az alacsony erőforrás-szimulációt, azzal a különbséggel, hogy a késleltetést 10 percre meghosszabbítja.

verifier /faults "" "" "" 0xa

Driver Verifier Manager használata

  1. Indítsa el a Meghajtó Ellenőrző Kezelőt. Írja be Verifier parancssori ablakba.

  2. Válassza az Egyéni beállítások létrehozása (kódfejlesztők számára) lehetőséget, majd kattintson a Tovább gombra.

  3. Válassza Egyéni beállítások kiválasztása a teljes listából.

  4. Válassza az Alacsony erőforrások szimulációja lehetőséget, majd kattintson a Tovább gombra.

  5. Tetszés szerint módosíthatja a késés, a valószínűség, az alkalmazások és a készletcímkék tulajdonságait.

Az eredmények megtekintése

Az Illesztőprogram-ellenőrző által szándékosan meghiúsított erőforrás-foglalások számát nyomon követheti az Illesztőprogram-ellenőrző bekapcsolt hibák globális számláló megjelenítésével. Ez a számláló azon erőforrás-foglalások teljes számát jeleníti meg, amelyeket az Illesztőprogram-ellenőrző szándékosan meghiúsított az utolsó rendszerindítás óta.

Ezt a számlálót megtekintheti egy Driver Verifier naplófájlban (/naplóban), a parancssorban (/lekérdezésben) vagy a Driver Verifier Managerben. A Windows 2000-ben a globális számlálók megtekintéséhez válassza a Globális számlálók lapot. A Windows későbbi verzióiban válassza az Aktuálisan ellenőrzött illesztőprogramok feladat adatainak megjelenítése lehetőséget, majd nyomja le kétszer a Tovább billentyűt. További információ: Globális számlálók figyelése.

A ! verifier hibakereső bővítmény használatával megjelenítheti a szándékosan meghiúsult foglalások számát és a teljes foglalások számát (a valószínűség kiszámításához). Az alábbi példa a !hitelesítő kimenet mintáját mutatja be.

Ebben a példában a véletlenszerű, alacsony erőforrásigényű API-hibák injektálása azt jelzi, hogy az alacsony erőforrás-szimuláció engedélyezve van. Az erőforrás-foglalások szándékos meghiúsítása a szándékosan meghiúsult foglalások számát, míg a készletfoglalások megkísérlése a foglalások teljes számát jelöli.

!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

Az illesztőprogram-ellenőrző által legeslegutóbb meghiúsult foglalások veremkövetőinek megjelenítéséhez használja a !verifier 4-et a kernel-hibakeresőben.

Az alábbi példa a !verifier 4 kimenetének mintáját mutatja be. A !verifier 4 alapértelmezés szerint a legutóbbi sikertelen foglalások veremkövetőit jeleníti meg, de a Quantity paraméter használatával növelheti a megjelenített veremkövetések számát. A !verifier 0x80 például a legutóbbi sikertelen foglalásokból 128-at jelenít meg.

Ebben a példában vegye figyelembe, hogy a Verifier elfogta és lecserélte az illesztőprogram ExAllocatePoolWithTagre irányuló hívását. Az illesztőprogram összeomlásának egyik leggyakoribb oka akkor fordul elő, ha egy illesztőprogram memóriát próbál lefoglalni, majd a foglalási függvény által visszaadott mutatót használja, mielőtt meggyőződne arról, hogy nem NULL értékű.

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

Az Alacsony erőforrás-szimulációs teszttel kapcsolatos tapasztalatok azt mutatják, hogy a legtöbb illesztőprogram összeomlását a legutóbb meghiúsult erőforrás-foglalás okozza. A fenti példában az összeomlás a win32k!GreEnableEUDC útvonalán történt. Vizsgálja meg a foglalás útvonalán található kódot az összeomlás okának megkereséséhez.

A !verifierről további információt a Windows hibakeresési eszközeinek dokumentációjában talál.

A beállításjegyzék beállításainak parancssori megtekintéséhez használja a /querysettings lehetőséget. Például:

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