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.
Nástroj Verifier provádí následující kontroly vždy, když ověřuje jeden nebo více ovladačů. Tyto kontroly nelze aktivovat ani deaktivovat. Počínaje Windows 10 verze 1709 byly tyto automatické kontroly přesunuty do příslušných standardních příznaků. V důsledku toho by uživatelé, kteří povolí nástroj Driver Verifier se standardními příznaky, neměli vidět žádné snížení použitých kontrol.
Monitorování rutin IRQL a paměti
Nástroj Driver Verifier monitoruje vybraný ovladač s následujícími zakázanými akcemi:
Vyvolání irQL voláním KeLowerIrql
Snížení IRQL voláním KeRaiseIrql
Žádost o alokaci paměti o velikosti nula
Přidělování nebo uvolnění stránkovaného fondu pomocí APC_LEVEL IRQL >
Přidělování nebo uvolnění nestránkovaného fondu pomocí DISPATCH_LEVEL IRQL >
Pokus o uvolnění adresy, která nebyla vrácena z předchozího přidělení
Pokus o uvolnění adresy, která už byla uvolněna
Získání nebo uvolnění rychlého mutexu pomocí APC_LEVEL IRQL >
Získání nebo uvolnění zámku spinu pomocí IRQL se nerovná DISPATCH_LEVEL
Dvojité uvolnění spinlocku.
Označení žádosti o přidělení jako MUST_SUCCEED Žádné takové žádosti nejsou nikdy přípustné.
Pokud ovladač Verifier není aktivní, nemusí tato porušení způsobit okamžité chybové ukončení systému ve všech případech. Kontrola chyb ovladače monitoruje chování a problémy ovladače 0xC4, pokud dojde k nějakému z těchto porušení. Podívejte se na Kontrolu chyb 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) pro seznam parametrů kontroly chyb.
Monitorování přepínání zásobníků
Ovladač Verifier monitoruje využití zásobníku ověřeným ovladačem. Pokud ovladač přepne svůj zásobník a nový zásobník není zásobníkem vláken ani zásobníkem DPC, dojde k vydání kontroly chyb. (Toto bude kontrola chyby 0xC4 s prvním parametrem, který má hodnotu 0x90.) Zásobník zobrazený příkazem ladicího programu KB obvykle odhalí ovladač, který tuto operaci provedl.
Kontrola uvolnění ovladače
Po uvolnění ovladače během ověřování provede nástroj Driver Verifier několik kontrol, aby se zajistilo, že byl ovladač vyčištěn.
Konkrétně nástroj Driver Verifier hledá:
Neodstraněné časovače
Čekající odložená volání procedur (DPCS)
Seznamy nedeletovaných vyhledávání
Neodstraněná pracovní vlákna
Nedeletované fronty
Další podobné zdroje informací
Problémy, jako jsou takovéto, mohou potenciálně způsobit systémové kontroly chyb po odstranění ovladače, a může být obtížné určit příčinu těchto kontrol chyb. Pokud je nástroj Driver Verifier aktivní, taková porušení způsobí, že kód chyby 0xC7 bude vydán okamžitě po odstranění ovladače. Seznam parametrů kontroly chyb najdete v části Kontrola chyb 0xC7 (TIMER_OR_DPC_INVALID).
Monitorování využití seznamu popisovačů paměti (MDL)
Ve Windows Vista ovladač Verifier také monitoruje vybraný ovladač pro následující zakázané akce:
Volání MmProbeAndLockPages nebo MmProbeAndLockProcessPages v MDL, který nemá příslušné příznaky. Například není správné volat MmProbeAndLockPages pro MDL, který byl vytvořen pomocí MmBuildMdlForNonPagedPool.
Volání MmMapLockedPages v MDL, který nemá příslušné příznaky. Například není správné volat MmMapLockedPages pro MDL, který je již namapován na systémovou adresu nebo MDL, který není uzamčen.
Volání MmUnlockPages nebo MmUnmapLockedPages u částečné MDL, tedy MDL vytvořené pomocí IoBuildPartialMdl.
Zavolání MmUnmapLockedPages na MDL, který není namapován na systémovou adresu.
Pokud ovladač Verifier není aktivní, nemusí tato porušení způsobit, že systém přestane reagovat okamžitě ve všech případech. Kontrola chyb ovladače monitoruje chování a problémy ovladače 0xC4, pokud dojde k nějakému z těchto porušení. Podívejte se na Kontrolu chyb 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) pro seznam parametrů kontroly chyb.
Přidělování objektů synchronizace z paměti NonPagedPoolSession
Od Windows 7 kontroluje Driver Verifier synchronizační objekty z paměti relace.
Synchronizační objekty musí být nestránkové. Musí také působit v globálním, systémovém virtuálním adresovém prostoru.
Grafický ovladač může přidělit paměť relace voláním API, jako je EngAllocMem. Na rozdíl od globálního adresního prostoru je adresní prostor relace virtualizován pro každou relaci terminálového serveru. To znamená, že stejná virtuální adresa, která se používá v kontextu dvou různých relací, odkazuje na dva různé objekty. Jádro Systému Windows musí mít přístup k synchronizačním objektům z jakékoli relace terminálového serveru. Pokus o odkazování na adresu paměti relace z jiné relace má nepředvídatelné výsledky, například chybové ukončení systému nebo tiché poškození dat jiné relace.
Počínaje Systémem Windows 7, když ověřený ovladač inicializuje objekt synchronizace voláním rozhraní API, jako je KeInitializeEvent nebo KeInitializeMutex, Ovladač Verifier zkontroluje, zda adresa objektu spadá do virtuálního adresního prostoru relace. Pokud Driver Verifier zjistí tento druh nesprávné adresy, vydá kontrolu chyb 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION s hodnotou parametru 1 rovnající se 0xDF.
Čítač referencí objektu se mění z 0 na 1
Počínaje systémem Windows 7 kontroluje nástroj Driver Verifier další třídy nesprávných odkazů na objekty.
Když správce objektů jádra Systému Windows vytvoří objekt, například objekt File nebo Thread, je referenční čítač nového objektu nastaven na hodnotu 1. Referenční čítač je zvýšen voláním rozhraní API, jako jsou ObReferenceObjectByPointer nebo ObReferenceObjectByHandle. Referenční čítač se dekrementuje každým voláním ObDereferenceObject pro stejný objekt.
Jakmile referenční čítač dosáhne hodnoty 0, objekt se stane způsobilým uvolnit. Správce objektů ho může okamžitě uvolnit nebo ho později uvolnit. Volání ObReferenceObjectByPointer nebo ObDereferenceObject a změna referenčního čítače z 0 na 1 znamená zvýšení referenčního čítače již uvolněného objektu. To je vždy nesprávné, protože může vést k poškození přidělení paměti někoho jiného.
Blokování nebo zpoždění vypnutí systému
Počínaje Systémem Windows 7 vydá nástroj Driver Verifier přerušení ladicího programu jádra, pokud se vypnutí systému nedokončí 20 minut po spuštění. Driver Verifier přiřazuje čas spuštění vypnutí systému jako čas, kdy jádro Windows začne vypínat své různé subsystémy, jako jsou Registr, Plug And Play nebo subsystémy Správce vstupu/výstupu.
Pokud není ladicí program jádra připojen k systému, Driver Verifier vydá kontrolu chyb 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION, s hodnotou parametru 1 0x115, namísto této zarážky.
Často vypnutí systému, které nemůže dokončit za méně než 20 minut, značí, že jeden z ovladačů spuštěných v daném systému nefunguje správně. Spuštěním !analyze -v z jádrového debuggeru se zobrazí trasování zásobníku systémového pracovního vlákna odpovědného za vypnutí systému. Měli byste zkontrolovat trasování zásobníku a určit, jestli je vlákno vypnutí blokováno jedním z otestovaných ovladačů.
Někdy se systém nemůže vypnout, protože je předmětem zátěžového testování – i když všechny ovladače fungují správně. Uživatel se může rozhodnout pokračovat ve spuštění po výchozím bodu Driver Verifieru a zkontrolovat, zda se systém nakonec vypne.