Megosztás:


Kényszerített IRQL-ellenőrzés

Bár a kernel módú illesztőprogramok nem férnek hozzá a lapozható memóriához magas IRQL-ben vagy pörgetési zár mellett, előfordulhat, hogy ez a művelet nem észlelhető, ha az oldalt ténylegesen nem vágták ki a munkakészletből, és nem lapozták ki a lemezre.

Ha engedélyezve van az IRQL-ellenőrzés kényszerítése, a Driver Verifier rendkívüli nyomást gyakorol a rendszermemória használatára. Amikor egy ellenőrzött illesztőprogram spin-zárolást kér, meghívja a KeSynchronizeExecutionfüggvényt, vagy az IRQL szintjét DISPATCH_LEVEL vagy annál magasabbra emeli, a rendszer minden lapozható készletet, kódot és adatot (beleértve az illesztőprogram lapozható kódját és adatait) eltávolítja a munkakészletből. Ha az illesztőprogram megpróbál hozzáférni a memória bármelyikéhez, az Illesztőprogram-ellenőrző hibaellenőrzést ad ki.

A Windows Vista-tól kezdve ez a beállítás azt is eredményezi, hogy az Illesztőprogram-ellenőrző észleli, ha bizonyos szinkronizálási objektumok szerepelnek a lapozható memóriában. Ezeket a szinkronizálási objektumokat nem lehet lapra tenni, mert az operációs rendszer kernele emelt szintű IRQL-en éri el őket. Az illesztőprogram-ellenőrző képes észlelni a lapozható KTIMER, PRKMUTEX, PKSPIN_LOCK, PRKEVENT, PKSPIN_LOCK, PRKSEMAPHORE, PERESOURCE és FAST_MUTEX struktúrákat.

Ez a memóriahasználatra gyakorolt nyomás nem fogja közvetlenül befolyásolni azokat az illesztőprogramokat, amelyeket nem jelöltek ki ellenőrzésre. Ha egy nem ellenőrzésre kijelölt illesztőprogram elindítja az IRQL-t, az nem indítja el a vágási műveletet. Ha azonban egy ellenőrzött illesztőprogram növeli az IRQL-t, az Illesztőprogram-ellenőrző levágja a nem ellenőrzött illesztőprogramok által használható oldalakat. Ezért előfordulhat, hogy a nem ellenőrzött illesztőprogramok által elkövetett hibák időnként megjelennek, ha ez a beállítás aktív.

Az IRQL-emelések és a spin lockok monitorozása

A vizsgált illesztőprogramok által indított IRQL-emelések, pörgetési zárolások és KeSynchronizeExecution hívások száma megfigyelhető. Az illesztőprogram-ellenőrző által a munkakészletből levágott lapozható memória száma is monitorozható. Ezeket a statisztikákat a Driver Verifier Manager, a Verifier.exe parancssor vagy egy naplófájl jelenítheti meg. Részletekért lásd Globális számlálók figyelése.

A kernel hibakereső bővítménye !verifier ezen statisztikák figyelésére is használható. A Driver Verifier Managerhez hasonló információkat jelenít meg. Windows XP-ben és újabb verziókban a !verifier 0x8 bővítmény megjeleníti az illesztőprogramok által végrehajtott legutóbbi IRQL-módosítások naplóját. További információ a hibakereső bővítményekről: Windows hibakeresési.

KeEnterCriticalRegion vagy KeLeaveCriticalRegion hívása a DISPATCH_LEVEL-en vagy magasabb szinten

KeEnterCriticalRegion és KeLeaveCriticalRegion olyan API-k, amelyekkel szinkronizálható az illesztőprogram-kód kritikus sorozatának végrehajtása a szokásos kernel-aszinkron eljáráshívások (API-k) kézbesítésével. A KeEnterCriticalRegion és KeLeaveCriticalRegion API-k nem hívhatók meg IRQL = DISPATCH_LEVEL vagy újabb értéken. A KeEnterCriticalRegion vagy KeLeaveCriticalRegion hívása DISPATCH_LEVEL szinten vagy annál magasabb szinteken rendszerlefagyást vagy memóriasérülést okozhat.

A Windows 7-től kezdődően az Illesztőprogram-ellenőrző észleli ezen API-k hívásait DISPATCH_LEVEL vagy annál magasabb szinten, ha az IRQL-ellenőrzés kényszerítése lehetőség engedélyezve van.

A beállítás aktiválása

Egy vagy több illesztőprogramhoz aktiválhatja az IRQL-ellenőrzés kényszerítése funkciót a Driver Verifier Manager vagy a Verifier.exe parancssor használatával. További információ: Illesztőprogram-ellenőrző beállításainak kiválasztása.

  • A parancssorban

    A parancssorban az IRQL-ellenőrzés kényszerített aktiválását a 1. bit (0x2)jelzi. Az IRQL-ellenőrzés kényszerítéséhez használjon egy 0x2 jelzőértéket, vagy adjon a jelzőértékhez 0x2-t. Például:

    verifier /flags 0x2 /driver MyDriver.sys
    

    A funkció a következő rendszerindítás után aktív lesz.

    Az IRQL-ellenőrzés kényszerítése a számítógép újraindítása nélkül is aktiválható és inaktiválható, ha hozzáadja a /illékony paramétert a parancshoz. Például:

    verifier /volatile /flags 0x2 /adddriver MyDriver.sys
    

    Ez a beállítás azonnal érvénybe lép, de a számítógép leállítása vagy újraindításakor elveszik. További részletekért lásd Illékony beállítások használata.

    Az IRQL-ellenőrzés kényszerítése funkció a standard beállításokban is megtalálható. Például:

    verifier /standard /driver MyDriver.sys
    
  • A Driver Verifier Manager használata

    1. Indítsa el a Meghajtó Ellenőrző Kezelőt. Írja be Verifier parancssori ablakba.
    2. Válassza Egyéni beállítások létrehozása (kódfejlesztőknek) lehetőséget, majd kattintson a Továbbgombra.
    3. Válassza Az egyes beállítások kiválasztása teljes listából.
    4. Jelölje be (kattintson) a IRQL ellenőrzés kényszerítéselehetőséget.

    Az IRQL-ellenőrzés kényszerítése funkció a standard beállításokban is megtalálható. A funkció használatához a Driver Verifier Managerben kattintson a Standard beállítások létrehozásaelemre.