Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Pokud je aktivní možnost Simulace nízkých prostředků (označovaná jako randomizovaná simulace nízkých prostředků ve Windows 8.1), nástroj Driver Verifier způsobí selhání náhodných případů přidělení paměti ovladače, což může nastat, pokud ovladač běží na počítači s nedostatkem paměti. Tím otestujete schopnost ovladače správně reagovat na nedostatek paměti a další podmínky s nízkými prostředky.
Test simulace nízkých prostředků selhává při pokusech o přidělení prostředků prostřednictvím volání několika různých funkcí, včetně ExAllocatePoolWithXXX, MmGetSystemAddressForMdlSafe, MmProbeAndLockPages, MmMapLockedPagesSpecifyCache a MmMapIoSpace.
Počínaje systémem Windows Vista test Simulace nízkých prostředků také vloží chyby do IoAllocateIrp, IoAllocateMdl, IoAllocateWorkItem, IoAllocateErrorLogEntry, MmAllocateContiguousMemory, MmAllocateContiguousMemorySpecifyCache, MmAllocatePagesForMdl a MmAllocatePagesForMdlEx. Kromě toho, počínaje systémem Windows Vista, může volání KeWaitForMultipleObjects nebo KeWaitForSingleObject s parametrem Alertable nastaveným na TRUE vrátit STATUS_ALERTED při běhu v kontextu neprivilegovaných procesů, pokud je povolená simulace nízkých prostředků. Tím se simuluje možná výstraha vlákna pocházející z jiného vlákna ve stejné neprivilegované aplikaci.
Test simulace s nízkými prostředky také vkládá chyby do následujících funkcí GDI: EngAllocMem, EngAllocUserMem, EngCreateBitmap, EngCreateDeviceSurface, EngCreateDeviceBitmap, EngCreatePalette, EngCreateClip, EngCreatePath, EngCreateWnd, EngCreateDriverObj, BRUSHOBJ_pvAllocRbrush a CLIPOBJ_ppoGetPath.
Ve Windows 7 a novějších verzích operačního systému Windows volba simulace nízkých prostředků podporuje paměť přidělenou pomocí následujících rozhraní API jádra:
IoAllocateIrp a další rutiny, které můžou přidělovat datové struktury paketů vstupně-výstupních požadavků (IRP)
RtlAnsiStringToUnicodeString a další rutiny řetězců RTL (běhové knihovny)
Počínaje Windows 8.1, volba Simulace nízkých prostředků také selže při přidělování prostředků požadovaných voláními na MmAllocateNodePagesForMdlEx. Kromě toho pro některé funkce ovladač Verifier nyní vyplní přidělenou paměť náhodným vzorem. Ale pouze v situacích, kdy funkce vrací neinicializovanou paměť. Mezi tyto funkce patří:
- MmAllocatePagesForMdlEx
- MmAllocateNodePagesForMdlEx
- MmAllocateContiguousMemory
- MmAllocateContiguousMemorySpecifyCache
- MmAllocateContiguousMemorySpecifyCacheNode
- MmAllocateContiguousNodeMemory
- MmAllocateNonCachedMemory
Vlastní nastavení pro simulaci s nízkými prostředky
V systému Windows Vista a novějších verzích systému Windows můžete zadat následující vlastní nastavení.
Pravděpodobnost , že dané přidělení selže. Výchozí hodnota je 6%.
Aplikace ovlivněné. Toto nastavení omezuje vložené neúspěšné přidělení ve zadaných aplikacích. Ve výchozím nastavení jsou ovlivněny všechny alokace.
Ovlivněné tagy fondu Toto nastavení omezuje vložené chyby pouze na přidělení s určenými značkami fondů. Ve výchozím nastavení jsou ovlivněny všechny alokace.
Zpoždění (v minutách) před tím, než dojde k selhání přidělení. Toto zpoždění umožňuje, aby se systém spustil a stabilizoval před injektáží chyb. Výchozí hodnota je osm minut.
V operačních systémech před systémem Windows Vista nelze tato nastavení přizpůsobit. Operační systém používá výchozí hodnoty.
Simulace nízkých zdrojů bez restartování
Simulaci nízkých prostředků můžete aktivovat ve Windows 2000 a novějších verzích systému Windows bez restartování počítače pomocí parametru /volatile . Nastavení platí okamžitě, ale při vypnutí nebo restartování počítače dojde ke ztrátě.
Nastavení simulace nízkých prostředků můžete také uložit v registru vynecháním parametru /volatile . Tato nastavení jsou platná pouze při restartování počítače, ale zůstávají efektivní, dokud je nezměníte.
Aktivace této možnosti
Možnost Simulace nízkých prostředků můžete aktivovat pro jeden nebo více ovladačů pomocí Správce ověřování ovladačů nebo pomocí příkazového řádku Verifier.exe. Podrobnosti najdete v tématu Výběr možností ověření ovladače.
Na příkazovém řádku
Na příkazovém řádku je možnost Simulace nízkých prostředků reprezentována bitem 2 (0x4). Pokud chcete aktivovat simulaci nízkých prostředků, použijte hodnotu příznaků 0x4 nebo přidejte 0x4 k hodnotě příznaků. Například:
verifier /flags 0x4 /driver MyDriver.sys
Tato možnost bude aktivní po dalším spuštění.
V systému Windows Vista a novějších verzích systému Windows můžete k aktivaci simulace nízkých prostředků použít parametr /faults nebo hodnotu příznaků 0x4 . Pokud chcete upravit nastavení simulace nízkých prostředků, musíte použít /faults. Například:
verifier /faults /driver MyDriver.sys
Ve Windows 2000 a novějších verzích Systému Windows můžete také aktivovat a deaktivovat simulaci nízkých prostředků bez restartování počítače přidáním parametru /volatile do příkazu. Například:
verifier /volatile /flags 0x4 /adddriver MyDriver.sys
Toto nastavení je efektivní okamžitě, ale při vypnutí nebo restartování počítače dojde ke ztrátě. Podrobnosti najdete v tématu Použití volatile nastavení.
V systému Windows Vista můžete použít parametr /faults k reprezentaci simulace nízkých prostředků a parametr /volatile k reprezentaci nastavení, které je účinné bez restartování. Zobrazí se změna nastavení. Například:
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.
Použití Správce ověřovatele ovladačů
- Spusťte Správce ověřovatele ovladačů. Do okna příkazového řádku zadejte ověřitel .
- Vyberte Vytvořit vlastní nastavení (pro vývojáře kódu) a potom klikněte na Tlačítko Další.
- Vyberte jednotlivá nastavení z úplného seznamu.
- Vyberte simulaci s nízkými prostředky.
Přizpůsobení nastavení (Windows Vista a novější)
Počínaje systémem Windows Vista můžete změnit výchozí nastavení zpoždění, pravděpodobnosti, aplikací a značek fondů u možnosti Simulace nízkých prostředků. Tato nastavení můžete změnit pomocí Správce ověření ovladače nebo příkazového řádku Verifier.exe. Podrobnosti najdete v tématu Výběr možností ověření ovladače.
Na příkazovém řádku je syntaxe těchto nastavení následující:
verifier [/volatile] /faults[Probability|PoolTags|DelayMins|Applications][/driver|DriverList]
Poznámka Parametry vlastního nastavení se musí zobrazit v zobrazeném pořadí. Pokud hodnotu vynecháte, zadejte uvozovky jako zástupný znak.
Dílčí parametry
/chyby
Povolí volbu Simulace nízkých prostředků v nástroji Driver Verifier. (Nelze použít /flags 0x4 s vlastními dílčími parametry nastavení.)
Pravděpodobnost
Určuje pravděpodobnost, že nástroj Driver Verifier selže s daným přidělením. Zadejte číslo (v desítkovém nebo šestnáctkovém formátu), které bude představovat počet šancí ve 10 000, že nástroj Driver Verifier přidělení nezdaří. Výchozí hodnota 600 znamená 600/100000 nebo 6%.
PoolTags
Omezí neúspěšné přidělení ověřitele ovladače na přidělení s určenými značkami fondu. Pomocí zástupného znaku (*) můžete reprezentovat více značek fondu. Pokud chcete vypsat více tagů fondu, oddělte je mezerami. Ve výchozím nastavení můžou všechny přidělení selhat.
Aplikace
Omezuje přidělení, která může Ověřovač ovladačů neúspěšně provést pro zadaný program. Zadejte název spustitelného souboru. Pokud chcete zobrazit seznam programů, oddělte názvy programů mezerami. Ve výchozím nastavení můžou všechny přidělení selhat.
DelayMins
Určuje počet minut po spuštění, během kterých Driver Verifier záměrně nezpůsobí selhání žádné alokace. Toto zpoždění umožňuje načtení ovladačů a stabilizaci systému před zahájením testu. Zadejte číslo (v desítkovém nebo šestnáctkovém formátu). Výchozí hodnota je 8 (minuty).
Následující příkaz například spustí simulaci nízkých prostředků s pravděpodobností 10% (1000/10000) a zpožděním pěti minut pro fondové značky Tag1 a Fred a aplikaci Notepad.exe.
verifier /faults 1000 "Tag1 Fred" Notepad.exe 5
Následující příkaz povolí simulaci nízkých prostředků s výchozími hodnotami s tím rozdílem, že prodlužuje zpoždění na 10 minut.
verifier /faults "" "" "" 0xa
Použití Správce ověřovatele ovladačů
Spusťte Správce ověřovatele ovladačů. Do okna příkazového řádku zadejte ověřitel .
Vyberte Vytvořit vlastní nastavení (pro vývojáře kódu) a potom klikněte na Tlačítko Další.
Vyberte jednotlivá nastavení z úplného seznamu.
Vyberte simulaci s nízkými prostředky a potom klepněte na tlačítko Další.
Podle potřeby změňte nastavení zpoždění, pravděpodobnosti, aplikací a značek fondu.
Zobrazení výsledků
Počet úmyslných neúspěšných přidělení prostředků ovladače můžete monitorovat zobrazením globálního čítače injektáže chyb pro ověření ovladače. Tento čítač zobrazí celkový počet přidělení prostředků, které Ovladač Verifier záměrně selhal od posledního spuštění.
Tento čítač můžete zobrazit v souboru protokolu ovladače (/log), na příkazovém řádku (/query) nebo v nástroji Správce ověření ovladače. Pokud chcete zobrazit globální čítače ve Windows 2000, vyberte kartu Globální čítače . V novějších verzích systému Windows vyberte Zobrazit informace o aktuálně ověřené úloze ovladačů a stiskněte dvakrát klávesu Další . Další informace naleznete v tématu Monitorování globálních čítačů.
Můžete také zobrazit počet úmyslně neúspěšných přidělení a celkový počet přidělení (k výpočtu pravděpodobnosti) pomocí rozšíření ladicího programu !verifier . Následující příklad ukazuje ukázku výstupu !verifier .
V tomto příkladu náhodné selhání API u omezených zdrojů naznačuje, že je povolená simulace nízkých prostředků. Záměrně neúspěšná přidělení prostředků představuje počet úmyslně neúspěšných přidělení a Pokusy o přidělení fondu představuje celkový počet přidělení.
!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
Chcete-li zobrazit trasování zásobníku pro přidělení, která naposledy selhala kvůli ovladači Verifier, použijte v debuggeru jádra !verifier 4.
Následující příklad ukazuje ukázku výstupu z !verifier 4. Ve výchozím nastavení !verifier 4 zobrazuje trasování zásobníku ze čtyř naposledy neúspěšných přidělení, ale můžete použít jeho parametr Množství ke zvýšení počtu zobrazených trasování zásobníku. Například !verifier 0x80 zobrazí 128 naposledy neúspěšných přidělení.
V tomto příkladu si všimněte, že Verifier zachytil a nahradil volání ovladače ExAllocatePoolWithTag. Jednou z nejběžnějších příčin chybového ukončení ovladače nastane, když se ovladač pokusí přidělit paměť a pak použije ukazatel, který funkce přidělení vrátí před ověřením, že není NULL.
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
Zkušenosti s testem simulace nízkých prostředků ukazují, že většina chyb ovladačů je způsobena nejnovějším neúspěšným přidělením. V předchozím příkladu došlo k chybě v cestě win32k!GreEnableEUDC. Prozkoumejte kód v cestě přidělení a zjistěte příčinu pádu.
Informace o nástroji !verifier naleznete v dokumentaci nástroje ladění pro Windows .
Pokud chcete zobrazit nastavení v registru na příkazovém řádku, použijte možnost /querysettings . Například:
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