Sdílet prostřednictvím


Přehled analýzy kódu pro ovladače

Sada Windows Driver Kit poskytuje rozšíření nástroje pro analýzu kódu specifické pro ovladače v sadě Microsoft Visual Studio. Analýza kódu pro ovladače zahrnuje pravidla, která se vztahují pouze na ovladače, zejména ovladače režimu jádra. Analýza kódu pro ovladače dokáže detekovat potenciální chyby v kódu, jakmile je možné kód zkompilovat.

Důležité

Analýza kódu pro ovladače je k dispozici ve Windows 24H2 WDK a EWDK, ale upozorňujeme, že se plánuje její vyřazení v budoucnu.
V budoucnu bude CodeQL primárním nástrojem pro statickou analýzu ovladačů. CodeQL poskytuje výkonný dotazovací jazyk, který zpracovává kód jako databázi, která se má dotazovat, což usnadňuje psaní dotazů pro konkrétní chování, vzory a další. Další informace o použití CodeQL naleznete v tématu CodeQL a Static Tools Logo Test.

Jak funguje nástroj pro analýzu kódu

Nástroj pro analýzu kódu zachytí volání nástroje sestavení ke standardnímu kompilátoru Cl.exe a místo toho spustí kompilátor CL intercept, který analyzuje zdrojový kód ovladače a vytvoří soubor protokolu chyb a varování. Nástroj pro analýzu kódu můžete spustit samostatně nebo můžete nakonfigurovat nástroj pro analýzu kódu tak, aby se spustil při sestavování ovladače. Když spustíte nástroj Analýza kódu samostatně (Spustit > analýzu kódu na řešení), zobrazí se výsledky v okně Zpráva analýzy kódu. Při spuštění nástroje Pro analýzu kódu v rámci sestavení vytvoří kompilátor CL intercept soubor protokolu s chybovými a upozorňujícími zprávami a potom zavolá standardní verzi Cl.exe pro vytvoření výstupu sestavení. Výsledné soubory objektů jsou stejné jako soubory vytvořené standardním příkazem sestavení.

Když se spustí interceptující kompilátor, analýza kódu pro ovladače zkoumá každou funkci v kódu nezávisle a poté simuluje provádění všech možných cest kódem, aby nalezla běžné chyby ovladačů a nevhodné postupy kódování. Nástroj pro analýzu kódu běží relativně rychle, i na větších ovladačích a sestava, kterou generuje, přesně identifikuje řádek kódu ovladače s podezřelou chybou.

Typy chyb, které může detekovat analýza kódu

Analýza kódu dokáže rozpoznat několik typů chyb, včetně chyb v následujících kategoriích:

  • Paměť: Potenciální úniky paměti, dereferencované ukazatele NULL, přístup k neinicializované paměti, nadměrné použití zásobníku režimu jádra a nesprávné použití značek pro paměťové oblasti.

  • Prostředky: Selhání uvolnění prostředků, jako jsou zámky, prostředky, které by se měly uchovávat při volání některých funkcí, a prostředky, které by se neměly uchovávat při volání jiných funkcí.

  • Použití funkce: Potenciálně nesprávné použití určitých funkcí, argumentů funkce, které se zobrazují nesprávně, možné neshody typů argumentů pro funkce, které nekontrolují typy, možné použití některých zastaralých funkcí a volání funkcí v potenciálně nesprávném irQL.

  • Stav plovoucího bodu: Nepodařilo se chránit hardwarový stav plovoucího bodu v ovladači a pokus o obnovení tohoto stavu po jeho uložení na jiné úrovni IRQL.

  • Pravidla precedencí: Kód, který se nemusí chovat, jak programátor zamýšlel, kvůli pravidlům precedencí v programování jazyka C.

  • Postupy kódování v režimu jádra: Postupy kódování, které mohou způsobovat chyby, jako je úprava struktury seznamu neprůhledných paměťových popisovačů (MDL), opomenutí zkontrolovat hodnotu proměnné nastavené volanou funkcí a používání funkcí pro manipulaci s řetězci C/C++ namísto bezpečných řetězcových funkcí definovaných v Ntstrsafe.h.

  • Postupy kódování specifické pro ovladače: Konkrétní operace, které jsou často zdrojem chyb v ovladačích režimu jádra. Například kopírování celého paketu vstupně-výstupních požadavků (IRP) beze změny členů a uložení ukazatele na řetězec nebo argument struktury místo kopírování argumentu v rutině DriverEntry .

Upozornění analýzy kódu

Nástroj pro analýzu kódu používá model založený na pravidlech k identifikaci chyb v kódu programu nebo ovladače. Každé pravidlo je přidruženo k upozornění, které se hlásí, pokud nástroj pro analýzu kódu zjistí porušení pravidla. Podrobné informace o upozorněních specifických pro ovladače naleznete v tématu Analýza kódu pro upozornění ovladačů. Informace o základní sadě upozornění, která nástroj Analýza kódu v sestavách sady Visual Studio obsahuje, najdete v tématu Upozornění analýzy kódu.

Anotace

Jednou z důležitých funkcí, které nástroj analýza kódu poskytuje, je možnost anotovat popisy funkcí a některé další entity ve zdrojovém kódu ovladače. Nástroj pro analýzu kódu má uvnitř funkční obor; to znamená, že analyzuje interakce mezi funkcemi. Cílem poznámek je poskytnout ucelenější výraz kontraktu mezi volanou a volající funkcí, aby nástroj pro analýzu kódu mohl zkontrolovat splnění kontraktu. Dalším cílem poznámek je, že informuje, kdo přečte kód, jak se má funkce používat a jaké výsledky lze očekávat. Poznámky deklarují kontrakt rozhraní a nepokoušnou se popsat, jak se kontrakt dosahuje. V mnoha případech výsledky spuštění nástroje Analýza kódu odrážejí absenci odpovídající poznámky a přidáním poznámky, potlačuje se upozornění na chybějící poznámku a jsou povoleny další kontroly. Další informace naleznete v tématu SAL 2.0 Poznámky pro ovladače systému Windows. Další informace o SAL 2.0 naleznete v tématu Použití poznámek SAL ke snížení vad kódu C/C++. SAL 2.0 nahrazuje SAL 1.0. Sal 2.0 by se měl používat se sadou WDK pro Windows 8. Pokud potřebujete informace o nástroji SAL 1.0 pro ovladače, projděte si dokumentaci k poznámkám k ovladačům PREfast, která je dodávána s WDK pro Windows 7.

Interpretace výsledku

Analýza kódu pro ovladače je snadná a běží rychle, i na velmi velkých ovladačích a programech. Práce vývojáře spočívá ve zkoumání výstupu, analýze chyb, které nástroj analýza kódu zjistil, a rozlišení skutečných chyb kódování od platného kódu, který nástroj Analýza kódu nesprávně interpretoval.

Komplexní referenční informace popisující každé upozornění, které nástroj analýza kódu může rozpoznat, najdete v tématu Upozornění analýzy kódu pro ovladače. Informace o základní sadě upozornění, která nástroj Analýza kódu v sestavách sady Visual Studio obsahuje, najdete v tématu Upozornění analýzy kódu.

Řešení upozornění analýzy kódu obvykle zahrnuje aktualizaci zdrojového kódu, pokud je to vhodné, nebo přidání poznámky k objasnění kontraktu funkce. Přidání poznámky umožňuje analyzátoru vynutit kontrakt pro všechny budoucí volající a také zlepšuje čitelnost.

Pokud výsledky analýzy kódu zobrazují chyby, které určíte po pečlivém vyšetření, jsou neplatné a nelze se vyhnout ani při použití poznámek, můžete se rozhodnout vyloučit nebo potlačit tato upozornění. Další informace naleznete v tématu Jak spustit analýzu kódu pro ovladače.

Spuštění analýzy kódu pro ovladače

Nástroj Pro analýzu kódu v sadě Visual Studio

Upozornění pro ovladače: analýza kódu

Upozornění analýzy kódu

poznámky SAL 2.0 pro ovladače systému Windows