Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Ahhoz, hogy az SDV ellenőrizze az illesztőprogramot, képesnek kell lennie értelmezni az illesztőprogram kódját, különösen az illesztőprogram belépési pontjait, valamint a szükséges illesztőprogram-funkciókat támogató függvényekben és rutinokban lévő kódot.
A következő szakaszok ismertetik az illesztőprogramok alapvető követelményeit és azt a konkrét szintaxist, amelyet az SDV elvár az általa ellenőrizt illesztőprogramoktól. Az SDV nem ellenőrzi, hogy az illesztőprogramok megfelelnek-e ezeknek a követelményeknek, de ha az illesztőprogram nem felel meg, előfordulhat, hogy az SDV nem fut, és ritkán hamis pozitív vagy hamis negatív eredményt jelent félreértelmezés miatt.
Fontos
Az SDV már nem támogatott, és az SDV nem érhető el a Windows 24H2 WDK-ban vagy az EWDK-kiadásokban. A 26017-es buildnél újabb WDK-kban nem érhető el, és nem szerepel a Windows 24H2 RTM WDK-ban.
Az SDV továbbra is használható a Windows 11 22H2 EWDK (2023. október 24-én megjelent) verziójának a Visual Studio 17.1.5-ös buildelési eszközeinek letöltésével a Windows Driver Kit (WDK) letöltéséből. Csak az Enterprise WDK használata ajánlott az SDV futtatásához. A standard WDK régebbi verzióinak használata a Visual Studio legutóbbi kiadásaival együtt nem ajánlott, mivel ez valószínűleg elemzési hibákat fog eredményezni.
A továbbiakban a CodeQL lesz 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, minták és egyebek céljából.
További információ a CodeQL használatáról a következőben található: CodeQL és a Static Tools Logo Test.
Alapvető illesztőprogram-jellemzők
Az SDV csak az alábbi jellemzőkkel rendelkező illesztőprogramokat tudja ellenőrizni:
Az SDV ellenőrzi a C és C++ nyelven írt illesztőprogramokat és kódtárakat.
Az SDV csak KMDF-kompatibilis és WDM-kompatibilis eszközillesztők (függvényillesztők, szűrőillesztők és buszillesztők), NDIS-illesztőprogramok (szűrő-, miniport- és protokollillesztők) és Storport-illesztőprogramok esetén végez teljes ellenőrzést.
Az SDV az általános tulajdonságok (például NullCheck) korlátozott ellenőrzését kísérli meg olyan illesztőprogramokon, amelyek nem férnek be a fenti kategóriákba.
Az SDV a WDM függvényszerepkör típusok használatával ellenőrizheti azokat a WDM-illesztőprogramokat, amelyek deklarálják az illesztőprogram visszahívási függvényeit. További információ a függvények deklarálásáról: Függvények deklarálása függvényszerepkör-típusok használatával WDM-illesztőprogramokhoz.
Az SDV ellenőrizheti a Kernel-Mode illesztőprogram-keretrendszerből előállított illesztőprogramokat, feltéve, hogy az egyes visszahívási függvényeket egy SDV-KMDF visszahívási függvény szerepkörtípus használatával deklarálja. További információ: Függvények deklarálása függvényszerepkör-típusok használatával KMDF-illesztőprogramokhoz.
Az SDV ellenőrizheti az NDIS-illesztőprogramokat, feltéve, hogy az egyes visszahívási függvényeket a függvénydeklarációban SDV-NDIS visszahívási függvénytípussal jegyzi meg. További információ: Függvények deklarálása függvényszerepkör-típusok használatával az NDIS-illesztőprogramokhoz.
Az SDV ellenőrizheti a Storport-illesztőprogramokat, feltéve, hogy minden visszahívási függvényt a függvénydeklarációval jegyzetel. Ezt egy SDV-Storport visszahívási függvénytípus használatával teheti meg. További információ: Függvények deklarálása függvényszerepkör-típusok használatával a Storport-illesztőprogramokhoz.
Alapvető illesztőprogram-követelmények
Ahhoz, hogy az SDV ellenőrizze a WDM-illesztőt, az illesztőprogramnak a következőnek kell lennie:
Tartalmazza a Wdm.h vagy Ntddk.h fájlokat (A Wdm.h az Ntddk.h részhalmaza).
Eszközobjektumok létrehozása az eszközobjektumok bemutatása és követése című témakörben ismertetett módszerekkel.
Rendelkezik egy olyan eltávolítási rutinnal, amely az ajánlott módon van megírva a Kipakolás rutin megírása során.
Deklarálja az egyes kézbesítő függvényeket egy függvényszerepkör-típus deklarációval, amelyet a Függvényszerepkör-típusdeklarációk című cikkben ismertetünk. A WDM-szerepkörtípusokról és a _Dispatch_type_ (típus) széljegyzetekről további információt a függvények deklarálása a WDM-illesztőprogramok függvényszerepkör-típusaival című témakörben talál.
Ahhoz, hogy az SDV ellenőrizze a KMDF-illesztőt, az illesztőprogramnak a következőnek kell lennie:
Vegye be a Wdf.h és Ntddk.h fájlokat.
Hozza létre az illesztőprogramok fejlesztéséhez a keretrendszer használatával leírt KMDF-objektumokat.
Az egyes visszahívási függvényeket egy SDV-KMDF visszahívási függvény szerepkörtípusával jegyzetelheti, amelyet a Függvényszerepkör-típusdeklarációk használata című témakörben ismertet. A támogatott szerepkörtípusok listáját a Static Driver Verifier KMDF függvénydeklarációi című témakörben találja.
Ahhoz, hogy az SDV ellenőrizze az NDIS-illesztőprogramot, az illesztőprogramnak a következőnek kell lennie:
Tartalmazza az Ndis.h és Ntddk.h fájlokat.
Az NDIS-illesztőprogramok létrehozásához kövesse a hálózattervezési útmutatóban található irányelveket.
Az egyes visszahívási függvényeket egy SDV-NDIS visszahívási függvény szerepkörtípus használatával jegyzetelheti, a függvényszerepkör-deklarációk használata című cikkben leírtak szerint. A támogatott szerepkörtípusok listáját a Static Driver Verifier NDIS függvénydeklarációi című témakörben találja.
A SDV továbbá képes ellenőrizni a bizonyos funkciókat támogató illesztőprogramokat.
Fenntartott függvénynevek
Az SDV ellenőrző motor nem működik megfelelően, ha az illesztőprogram vagy a kódtár kódja ugyanazokat a függvénynév-mintákat használja, amelyeket az SDV belsőleg használ.
Az SDV nem megfelelően értelmezi a kódot, ha:
A kód olyan függvényneveket tartalmaz, amelyek __init kezdődnek, és amelyeket egy vagy több egész szám követ, például __init123.
A kód olyan függvényneveket tartalmaz, amelyek sdv_ kezdődnek, például sdv_Func, vagy tartalmazzák az _sdv_sztringet, például Func_sdv_ vagy Func_sdv_foo.
A könyvtár egy
.deffájl használatával nevez át egy exportált függvényt, és a külső név megegyezik a könyvtár egy másik statikus függvényének nevével.
Ha az illesztőprogram kódja vagy kódtár kódja tartalmazza ezeket az elemeket, az SDV megpróbálja ellenőrizni az illesztőprogramot vagy feldolgozni az erőforrástárat, de az eredmény nem támogatott szolgáltatás (NSF). Az SDV-eredményekről további információt a Statikus illesztőprogram-ellenőrző eredményeinek értelmezése című témakörben talál.