Megosztás:


Eszközök az illesztőprogramok ellenőrzéséhez

A Windows Driver Kit (WDK) illesztőprogram-ellenőrző eszközöket biztosít, amelyek segítenek a hibák észlelésében és javításában a fejlesztés során. Ezek az eszközök közé tartoznak a statikus elemzési eszközök, például a CodeQL és a dinamikus eszközök, például a Driver Verifier, amelyek kritikus hibákat találnak az üzembe helyezés előtt. Ezeknek az ellenőrző eszközöknek a fejlesztés korai szakaszában történő használata időt takarít meg, és megakadályozza a gyártás során előforduló súlyos illesztőprogram hibákat.

A WDK dokumentációja ismerteti ezeket az ellenőrző eszközöket, és javasolja azok használatát, mivel minden eszköz különböző típusú illesztőprogram-hibákat észlel különböző módokon. Ezek az eszközök sokkal hatékonyabbak, mint a manuális ellenőrzések. Képesek olyan hibákat észlelni, amelyek általában nem találhatók meg a szabványos illesztőprogram-tesztekben, és a tapasztalt illesztőprogram-fejlesztők és a Windows illesztőfelület tervezőinek szakértelmét testesítik meg.

A legjobb eredmény érdekében használja az illesztőprogramon futtatható összes eszközt. Ha kihagyja ezeket az eszközöket, előfordulhat, hogy egy jelentős hibát nem vesz észre az illesztőprogramban.

Statikus és dinamikus ellenőrző eszközök

Az ellenőrző eszközöknek két alapvető típusa van:

  • A statikus ellenőrző eszközök az illesztőprogram futtatása nélkül vizsgálják meg az illesztőprogram kódját. Mivel ezek az eszközök nem a kódot gyakorló tesztekre támaszkodnak, rendkívül alaposak lehetnek. A statikus ellenőrző eszközök elméletileg megvizsgálhatják az összes illesztőprogram-kódot, beleértve a gyakorlatban ritkán végrehajtott kódútvonalakat is. Mivel azonban az illesztőprogram valójában nem fut, ezek az eszközök hamis pozitív eredményeket eredményezhetnek. Ez azt jelenti, hogy olyan hibát jeleznek egy kódútvonalban, amely a gyakorlatban nem fordul elő.

    A CodeQL az illesztőprogramok elsődleges statikus elemző eszköze. A CodeQL hatékony lekérdezési nyelvet biztosít, amely a kódot adatbázisként kezeli lekérdezni, így egyszerűen írhat lekérdezéseket adott viselkedések és minták alapján. A Windows hardverkompatibilitási programhoz a Statikus eszköz emblémájának (STL) teszteléséhez szükséges a CodeQL az ügyfél- és kiszolgáló operációs rendszereken. További információért lásd a CodeQL és a Static Tools Logo Test.

  • A dinamikus ellenőrző eszközök az illesztőprogram futása közben vizsgálják meg az illesztőprogram kódját, általában úgy, hogy elfogják a gyakran használt illesztőprogram-támogatási rutinok hívásait, és a saját hibaellenőrzési verziójukra cserélik a hívásokat. Mivel az illesztőprogram valójában fut, miközben a dinamikus eszközök végzik az ellenőrzést, a hamis pozitív eredmények ritkán fordulnak elő. Mivel azonban a dinamikus eszközök csak azokat a műveleteket észlelik, amelyek az illesztőprogram monitorozása során történnek, az eszközök kihagyhatnak bizonyos illesztőprogram-hibákat, ha a vezetőteszt lefedettsége nem megfelelő. Ugyanakkor a futtatáskor rendelkezésre álló információk – például a forráskódból statikusan nehezebben kinyerhető információk – használatával a dinamikus ellenőrző eszközök észlelhetik a statikus elemzőeszközökkel nehezebben észlelhető illesztőprogram-hibák bizonyos osztályait.

Statikus és dinamikus ellenőrző eszközök kombinációját használhatja. A statikus eszközök lehetővé teszik a gyakorlatban nehezen gyakorolható kódútvonalak ellenőrzését, míg a dinamikus eszközök komoly hibákat találnak az illesztőprogramban.

Az ellenőrző eszközök áttekintése

Fontos

A Statikus illesztőprogram-ellenőrző (SDV) eszköz már nem támogatott. A 26017-es buildnél újabb WDK-kban nem érhető el, beleértve a Windows 24H2 RTM WDK-t is. Az SDV használata elemzéshez nem ajánlott.

A WDK az alábbi ellenőrzési eszközöket ismerteti, és javasolja azok használatát az illesztőprogram-fejlesztők és tesztelők számára. Azok a sorrendben vannak felsorolva, amelyben általában használja őket.

A kód fordítása után

  • A CodeQL egy hatékony szemantikai kódelemző motor. A nagy értékű biztonsági lekérdezések széles választékának és a robusztus platformnak köszönhetően felbecsülhetetlen értékű eszköz az illesztőprogram kódjának biztonságossá tételéhez. További információért lásd a CodeQL és a Static Tools Logo Test.

Az illesztőprogram futtatásakor

Használja az alábbi dinamikus ellenőrző eszközöket, amint az illesztőprogram elkészült, és nyilvánvaló hibák nélkül fut.

  • A Driver Verifier egy dinamikus ellenőrző eszköz, amely kifejezetten Windows-illesztőprogramokhoz készült. Több tesztet is tartalmaz, amelyeket egyszerre több illesztőprogramon is futtathat. A Driver Verifier olyan hatékonyan találja meg a súlyos hibákat az illesztőprogramokban, hogy tapasztalt illesztőprogram-fejlesztők és tesztelők úgy konfigurálják, hogy az mindig fusson, amikor az illesztőprogram fejlesztési vagy tesztelési környezetben fut. A Driver Verifier a Windows része. Ha engedélyezi az Illesztőprogram-ellenőrzőt egy illesztőprogramhoz, több tesztet is le kell futtatnia az illesztőprogramon. A Driver Verifier képes észlelni bizonyos illesztőprogram-hibákat, amelyeket csak statikus ellenőrző eszközökkel nehéz észlelni. Ilyen típusú hibák például a következők:

    • A kernelkészlet puffertúlcsordulásai. Amikor a megerősített illesztőprogram lefoglalja a készlet memóriapuffereit, az Illesztőprogram-ellenőrző egy hozzáférhetetlen memóriaoldalt használ ezek védelmére. Ha az illesztőprogram a puffer végén lévő memóriát próbál használni, az Illesztőprogram-ellenőrző hibaellenőrzést kezdeményez.

    • A memória használata a felszabadítása után. A speciális készlet memóriablokkjai saját memórialapot használnak, és nem osztanak meg memórialapokat más foglalásokkal. Amikor az illesztőprogram felszabadítja a pool memória blokkját, a megfelelő memórialap nem lesz elérhető. Ha az illesztőprogram felszabadítja a memóriát, majd megpróbálja használni, az illesztőprogram azonnal összeomlik.

    • Lapozható memória használata emelt szintű IRQL-ben való futtatás közben. Ha egy ellenőrzött illesztőprogram DISPATCH_LEVEL vagy annál magasabb szinten emeli ki az IRQL-t, a Driver Verifier a rendszer munkakészletéből levágja az összes lapozható memóriát, és memóriaterhelés alatt szimulálja a rendszert. Az illesztőprogram összeomlik, ha ezen lapozható virtuális címek egyikét próbálja használni.

    • Alacsony erőforrás-szimuláció. Ha alacsony erőforrás-feltételek mellett szeretne szimulálni egy rendszert, az Illesztőprogram-ellenőrző az illesztőprogramok által meghívott különböző operációsrendszer-kernel API-k sikertelenségét okozhatja.

    • Memóriavesztés. A Driver Verifier nyomon követi az illesztőprogram által létrehozott memóriafoglalásokat, és gondoskodik arról, hogy az illesztőprogram felszabadítsa a memóriát, mielőtt kipakolna.

    • Olyan I/O-műveletek, amelyek végrehajtása vagy megszakítása túl sok időt vesz igénybe. Az Illesztőprogram-ellenőrző képes tesztelni az illesztőprogram logikáját, hogy válaszoljon az STATUS_PENDING által visszaadott értékekre.

    • DDI-megfelelőség ellenőrzése. (Windows 8-tól kezdve érhető el) Az Illesztőprogram-ellenőrző olyan eszközillesztő-illesztői (DDI) szabályokat alkalmaz, amelyek ellenőrzik az illesztőprogram és az operációs rendszer kernelfelülete közötti megfelelő interakciót.

  • A Kernel Address Sanitizer (KASAN) egy Windows-illesztőprogramokon támogatott hibaészlelő technológia, amely lehetőséget ad az illegális memóriahozzáférések több osztályának észlelésére, például a puffer túlcsordulásának és a felszabadítás utáni használat eseményeinek.

  • Az Application Verifier egy dinamikus ellenőrző eszköz a C vagy C++ nyelven írt felhasználói módú alkalmazásokhoz és illesztőprogramokhoz. Nem ellenőrzi a felügyelt kódot.