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.
Az Illesztőprogram-ellenőrző a következő ellenőrzéseket hajtja végre, amikor egy vagy több illesztőprogramot ellenőriz. Ezeket az ellenőrzéseket nem lehet aktiválni vagy inaktiválni. A Windows 10 1709-es verziójától kezdve ezek az automatikus ellenőrzések át lettek helyezve a megfelelő szabványos jelzőkbe. Ennek eredményeképpen az illesztőprogram-ellenőrzőt a szabványos jelzőkkel engedélyező felhasználók nem láthatják az ellenőrzések csökkenését.
Az IRQL és a memória rutinjainak monitorozása
A Driver Verifier a következő tiltott műveletekhez figyeli a kiválasztott illesztőprogramot:
Az IRQL növelése a KeLowerIrql meghívásával
Az IRQL csökkentése a KeRaiseIrql meghívásával
Nulla méretű memóriafoglalás kérése
Lapozott készlet kiosztása vagy felszabadítása IRQL-APC_LEVEL >
Nem lapozható készlet kiosztása vagy felszabadítása IRQL-DISPATCH_LEVEL >
Egy korábbi foglalásból nem visszaadott cím felszabadítása
Kísérlet egy már felszabadított cím újbóli felszabadítására
Gyors mutex megszerzése vagy elengedése IRQL APC_LEVEL >
IRQL nem egyenlő a DISPATCH_LEVEL-el spin lock beszerzése vagy feloldása.
Forgózár kétszeri feloldása.
Kiosztási kérelem megjelölése: MUST_SUCCEED. Ilyen kérések soha nem megengedettek.
Ha az Illesztőprogram-ellenőrző nem aktív, előfordulhat, hogy ezek a szabálysértések nem okoznak azonnali rendszerösszeomlást minden esetben. Az Illesztőprogram-ellenőrző figyeli az illesztőprogram viselkedését, és 0xC4-es hibaellenőrzést ad ki, ha ezek a szabálysértések előfordulnak. Lásd a Hibaellenőrzés 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) című témakört a hibaellenőrzési paraméterek listájáért.
Ellenőrzése a veremcserének
Az Illesztőprogram-ellenőrző az ellenőrzés alatt álló illesztőprogram veremhasználatát figyeli. Ha az illesztőprogram átváltja a vermet, és az új verem nem szálverem vagy DPC-verem, a rendszer hibaellenőrzést ad ki. (Ez a 0xC4 hibaellenőrzés az első paraméterrel egyenlő 0x90.) A KB hibakereső parancs által megjelenített verem általában felfedi a műveletet végrehajtó illesztőprogramot.
Az illesztőprogram eltávolításának ellenőrzése
Miután az ellenőrzött illesztőprogramot eltávolították, a Driver Verifier több ellenőrzést is végrehajt, hogy meggyőződjön arról, hogy az illesztőprogram ki lett takarítva.
A Driver Verifier különösen a következőket keresi:
Nem törölt időzítők
Függőben lévő halasztott eljáráshívások (DPC-k)
Nem törölt lookaside listák
Nem törölt feldolgozói szálak
Nem törölt üzenetsorok
Egyéb hasonló erőforrások
Az ilyen problémák miatt előfordulhat, hogy az illesztőprogram kiürítése után egy ideig rendszerhiba-ellenőrzéseket kell kibocsátani, és a hibaellenőrzések okát nehéz lehet megállapítani. Ha a Driver Verifier aktív, az ilyen szabálysértések a 0xC7 hibaellenőrzés kiadását eredményezik közvetlenül az illesztőprogram eltávolítása után. A hibaellenőrzési paraméterek listáját a Hibaellenőrző 0xC7 (TIMER_OR_DPC_INVALID) résznél találja.
Memórialeírók (MDL) használatának monitorozása
Windows Vista rendszerben az Illesztőprogram-ellenőrző a kijelölt illesztőprogramot is figyeli a következő tiltott műveletekhez:
Az MmProbeAndLockPages vagy az MmProbeAndLockProcessPages meghívása olyan MDL-en, amely nem rendelkezik a megfelelő jelzőkkel. Helytelen például az MmProbeAndLockPages meghívása az MmBuildMdlForNonPagedPool használatával létrehozott MDL-hez.
Az MmMapLockedPages meghívása olyan MDL-n, amely nem rendelkezik a megfelelő jelzőkkel. Helytelen például az MmMapLockedPages meghívása egy olyan MDL-hez, amely már le van képezve egy rendszercímre, vagy egy olyan MDL-re, amely nincs zárolva.
Az MmUnlockPages vagy az MmUnmapLockedPages meghívása a részleges MDL-n, azaz az IoBuildPartialMdl használatával létrehozott MDL-n.
Az MmUnmapLockedPages meghívása egy olyan MDL objektumon, amely nincs rendszercímre leképezve.
Ha az Illesztőprogram-ellenőrző nem aktív, előfordulhat, hogy ezek a szabálysértések miatt a rendszer nem válaszol azonnal minden esetben. Az Illesztőprogram-ellenőrző figyeli az illesztőprogram viselkedését, és 0xC4-es hibaellenőrzést ad ki, ha ezek a szabálysértések előfordulnak. Lásd a Hibaellenőrzés 0xC4 (DRIVER_VERIFIER_DETECTED_VIOLATION) című témakört a hibaellenőrzési paraméterek listájáért.
Szinkronizálási objektum lefoglalása a NonPagedPoolSession memóriából
A Windows 7-től kezdve az Illesztőprogram-ellenőrző ellenőrzi a munkamenet memóriájából származó szinkronizálási objektumokat.
A szinkronizálási objektumoknak nem lapozhatónak kell lenniük. Emellett a globális, rendszerszintű virtuális címtérben kell élniük.
A grafikus illesztőprogramok az API-k, például az EngAllocMem meghívásával lefoglalhatják a munkamenet memóriáját. A globális címtértől eltérően a munkamenet-címtér minden terminálkiszolgáló-munkamenethez virtualizálva van. Ez azt jelenti, hogy ugyanaz a virtuális cím, amelyet két különböző munkamenet kontextusában használnak, két különböző objektumra utal. A Windows kernelnek képesnek kell lennie a szinkronizálási objektumok elérésére bármely terminálkiszolgáló-munkamenetből. Ha egy munkamenet memóriacímére próbál hivatkozni egy másik munkamenetből, az kiszámíthatatlan eredményeket eredményez, például rendszerösszeomlást vagy egy másik munkamenet adatainak csendes sérülését.
Windows 7-től kezdve, amikor egy ellenőrzött illesztőprogram inicializál egy szinkronizálási objektumot olyan API-k meghívásával, mint a KeInitializeEvent vagy a KeInitializeMutex, az illesztőprogram-ellenőrző ellenőrzi, hogy az objektum címe a munkamenet virtuális címterébe esik-e. Ha az Illesztőprogram-ellenőrző ilyen típusú helytelen címet észlel, kiad egy 0xC4 hibaellenőrzést: DRIVER_VERIFIER_DETECTED_VIOLATION, ahol az 1. paraméter értéke 0xDF.
Objektumhivatkozás számlálója 0-ról 1-re módosul
A Windows 7-től kezdve az Illesztőprogram-ellenőrző ellenőrzi a helytelen objektumhivatkozások további osztályait.
Amikor a Windows kernelobjektum-kezelő létrehoz egy objektumot( például fájlobjektumot vagy szálobjektumot), az új objektum hivatkozásszámlálója 1 értékre van állítva. A referenciaszámlálót olyan API-k hívásai növelik, mint az ObReferenceObjectByPointer vagy az ObReferenceObjectByHandle. A referenciaszámlálót minden ObDereferenceObject hívás ugyanahhoz az objektumhoz dekrementálja.
Miután a hivatkozásszámláló elérte a 0 értéket, az objektum jogosulttá válik a felszabadításra. Előfordulhat, hogy az objektumkezelő azonnal felszabadítja, vagy később felszabadítja. Az ObReferenceObjectByPointer vagy ObDereferenceObject meghívása és a referenciaszámláló 0-ról 1-re történő módosítása egy már felszabadított objektum referenciaszámlálójának növelését jelenti. Ez mindig helytelen, mert az mások memóriafoglalásának sérülését okozhatja.
Rendszerleállítási blokkok vagy késések
A Windows 7-től kezdődően az Illesztőprogram-ellenőrző hibát okoz a kernel hibakeresőjében, ha a rendszer leállítása nem fejeződik be 20 perccel a kezdés után. A Driver Verifier a rendszerleállítás kezdetét rendeli hozzá a Windows kernel különböző alrendszereinek( például a Beállításjegyzék, a Plug And Play vagy az I/O-kezelő alrendszerek) leállításának megkezdéséhez.
Ha kernel- vagy rendszermagszintű hibakereső nincs csatlakoztatva a rendszerhez, az Illesztőprogram-ellenőrző kiad egy Bug Check 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION hibát, az 1. paraméter értéke 0x115, a töréspont helyett.
A 20 percnél rövidebb ideig nem befejezhető rendszerleállítás gyakran azt jelzi, hogy a rendszeren futó egyik illesztőprogram hibásan működik. A kernel hibakeresőjének !analyze -v futtatása megjeleníti a leállításért felelős rendszer munkaszál veremnyomát. Meg kell vizsgálnia a verem nyomkövetését, és meg kell állapítania, hogy a leállítási szálat blokkolta-e a tesztelt illesztőprogramok egyike.
Néha a rendszer nem tud leállni, mert nagy terheléses tesztelésnek van alávetve – annak ellenére, hogy minden illesztőprogram megfelelően működik. A felhasználó dönthet úgy, hogy folytatja a végrehajtást az illesztőprogram-ellenőrző töréspontja után, és ellenőrizheti, hogy a rendszer végül leáll-e.