Sdílet prostřednictvím


Nástroje pro ověřování ovladačů

Sada Windows Driver Kit (WDK) poskytuje nástroje pro ověření ovladačů, které pomáhají při vývoji zjišťovat a opravovat chyby. Mezi tyto nástroje patří nástroje statické analýzy, jako je CodeQL a dynamické nástroje, jako je Driver Verifier, které můžou před nasazením najít kritické chyby. Použití těchto ověřovacích nástrojů v rané fázi vývoje šetří čas a zabraňuje vážným problémům s ovladači v produkčním prostředí.

Dokumentace WDK popisuje tyto ověřovací nástroje a doporučuje jejich použití, protože každý nástroj zjišťuje různé typy chyb ovladačů různými způsoby. Tyto nástroje jsou mnohem efektivnější než ruční kontroly. Můžou detekovat chyby, které se obvykle nenacházejí ve standardních testech ovladačů, a ztělesňují odborné znalosti vývojářů ovladačů a návrhářů rozhraní ovladačů windows.

Nejlepších výsledků dosáhnete, když použijete všechny nástroje, které se dají spustit na ovladači. Pokud některý z těchto nástrojů vynecháte, můžete přehlédnout závažnou chybu v ovladači.

Nástroje pro statické a dynamické ověřování

Existují dva základní typy ověřovacích nástrojů:

  • Statické ověřovací nástroje kontrolují kód ovladače bez spuštění ovladače. Vzhledem k tomu, že tyto nástroje nespoléhají na testy, které kód využívají, můžou být velmi důkladné. Teoreticky můžou nástroje statického ověřování zkoumat veškerý kód ovladače, včetně cest kódu, které se v praxi zřídka provádějí. Vzhledem k tomu, že ovladač ve skutečnosti není spuštěný, můžou tyto nástroje generovat falešně pozitivní výsledky. To znamená, že můžou hlásit chybu v cestě kódu, která se v praxi nenachází.

    CodeQL je primární nástroj pro statickou analýzu ovladačů. CodeQL poskytuje výkonný dotazovací jazyk, který zpracovává kód jako databázi, která se má dotazovat, a usnadňuje zápis dotazů pro konkrétní chování a vzory. Program kompatibility hardwaru s Windows vyžaduje program CodeQL pro testy loga statického nástroje (STL) na našich operačních systémech Klient a Server. Další informace naleznete v tématu CodeQL a testu loga statických nástrojů.

  • Nástroje pro dynamické ověřování kontrolují kód ovladače, když je ovladač spuštěný, obvykle zachycením volání běžně používaných rutin podpory ovladačů a nahrazením volání vlastních verzí kontroly chyb stejných rutin. Vzhledem k tomu, že ovladač skutečně běží, zatímco dynamické nástroje provádí ověření, jsou falešně pozitivní výsledky vzácné. Vzhledem k tomu, že dynamické nástroje detekují pouze akce, ke kterým dochází při monitorování ovladače, můžou nástroje vynechat určité závady ovladače, pokud pokrytí testu ovladače není dostatečné. Ve stejnou dobu můžou nástroje pro dynamické ověřování pomocí informací dostupných za běhu – například informace, které je obtížnější extrahovat staticky ze zdrojového kódu – nástroje pro dynamické ověřování můžou detekovat určité třídy chyb ovladačů, které jsou obtížněji rozpoznatelné pomocí nástrojů pro statickou analýzu.

Použijte kombinaci nástrojů pro statické a dynamické ověřování. Statické nástroje umožňují zkontrolovat cesty kódu, které se v praxi obtížně provádějí, zatímco dynamické nástroje najdou vážné chyby, ke kterým dochází v ovladači.

Přehled ověřovacích nástrojů

Důležité

Nástroj Static Driver Verifier (SDV) se už nepodporuje. Není k dispozici ve WDK novější než je build 26017, včetně WDK pro Windows 24H2 RTM. Použití SDV pro analýzu se nedoporučuje.

WdK popisuje následující ověřovací nástroje a doporučuje jejich použití vývojáři ovladačů a testerů. Jsou uvedené v pořadí, ve kterém je obvykle používáte.

Po kompilaci kódu

  • CodeQL je výkonný sémantický modul pro analýzu kódu. Kombinace rozsáhlé sady vysoce hodnotných dotazů na zabezpečení a robustní platformy je neocenitelným nástrojem pro zabezpečení kódu ovladače. Další informace naleznete v tématu CodeQL a testu loga statických nástrojů.

Při spuštění ovladače

Jakmile se ovladač sestaví a spustí bez zjevných chyb, použijte následující nástroje pro dynamické ověřování.

  • Driver Verifier je nástroj pro dynamické ověřování, který je napsán speciálně pro ovladače systému Windows. Zahrnuje několik testů, které můžete spustit na několika ovladačích současně. Nástroj Driver Verifier je tak efektivní při hledání závažných chyb v ovladačích, že jej zkušení vývojáři a testeři nastavují ke spuštění pokaždé, když jejich ovladač běží ve vývojovém nebo testovacím prostředí. Ovladač Verifier je součástí Windows. Pokud povolíte nástroj Driver Verifier pro ovladač, musíte také spustit více testů na ovladači. Nástroj Verifier ovladače dokáže rozpoznat určité chyby ovladačů, které jsou obtížné rozpoznat pomocí samotných nástrojů pro statické ověření. Mezi příklady těchto typů chyb patří:

    • Vyrovnávací paměť fondu jádra se přetečí. Když ověřený ovladač přiděluje vyrovnávací paměti fondu, ovladač Verifier je chrání pomocí stránky paměti, která není přístupná. Pokud se ovladač pokusí použít paměť za hranicí vyrovnávací paměti, Driver Verifier spustí kontrolu chyby.

    • Použití paměti po jejím uvolnění. Speciální paměťové bloky fondů využívají své vlastní paměťové stránky a nesdílejí je s jinými alokacemi. Když ovladač uvolní blok paměti fondu, bude odpovídající stránka paměti nedostupná. Pokud se ovladač pokusí tuto paměť po uvolnění použít, ovladač se okamžitě zhroutí.

    • Použití stránkovatelné paměti při běhu na zvýšené úrovni IRQL. Když ověřený ovladač zvýší hodnotu IRQL na DISPATCH_LEVEL nebo vyšší, Verifier ovladačů ořízne veškerou stránkovou paměť z pracovní sady systému, čímž simuluje systém pod zatížením paměti. Ovladač se chybově ukončí, pokud se pokusí použít jednu z těchto stránkovatelných virtuálních adres.

    • Simulace nízkých prostředků Pokud chcete simulovat systém při nízkých systémových prostředcích, Driver Verifier může způsobit, že různé API jádra operačního systému selžou.

    • Úniky paměti. Ovladač Verifier sleduje přidělení paměti provedené ovladačem a před uvolněním paměti zajistí, že ovladač uvolní paměť.

    • Vstupně-výstupní operace, které dokončení nebo zrušení trvá příliš dlouho. Ověřovač ovladačů může otestovat logiku ovladače pro reagování na navrácené hodnoty z IoCallDriver.

    • Kontrola dodržování předpisů DDI (Dostupné od Windows 8) Nástroj Driver Verifier používá sadu pravidel rozhraní ovladače zařízení (DDI), která kontrolují správnou interakci mezi ovladačem a rozhraním jádra operačního systému.

  • Sanitizér adres jádra (KASAN) je technologie detekce chyb podporovaná pro ovladače Windows, která umožňuje detekovat několik tříd nelegálních přístupů k paměti, například přetečení vyrovnávací paměti a události použití po uvolnění.

  • Application Verifier je nástroj pro dynamické ověřování pro aplikace a ovladače v uživatelském režimu napsané v jazyce C nebo C++. Neověřuje spravovaný kód.