Megosztás:


Készletkövetés

A Készletkövetés az illesztőprogram által létrehozott memória-hozzárendeléseket figyeli. Az illesztőprogram eltávolításának időpontjában a Driver Verifier biztosítja, hogy az illesztőprogram által végzett összes foglalás felszabadításra kerüljön.

A nem feloldott memóriafoglalások (más néven memóriaszivárgások) gyakori oka az operációs rendszer teljesítményének csökkenésének. Ezek széttöredezhetik a rendszerkészleteket, és végül rendszerösszeomlásokat okozhatnak.

Ha ez a beállítás aktív, az Illesztőprogram-ellenőrző kiad egy 0xC4 hibaellenőrzést (az 1. paraméter értéke 0x62), ha egy illesztőprogram anélkül áll le, hogy felszabadítaná az összes foglalását.

Ha az Illesztőprogram-ellenőrző ezt a hibaellenőrzést az 1. paraméter értéke 0x51, 0x52, 0x53, 0x54 vagy 0x59 esetén, az illesztőprogram a foglalásain kívüli memóriába írt. Ebben az esetben engedélyeznie kell a Speciális készlet funkciót a hiba forrásának megkereséséhez.

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.

A Windows Vista-tól kezdve a készletkövetési beállítás engedélyezése lehetővé teszi a zárolt oldalak nyomon követését is. Ha ez a beállítás aktív, az Illesztőprogram-ellenőrző hibaellenőrzési 0xCB (DRIVER_LEFT_LOCKED_PAGES_IN_PROCESS) ad ki, ha egy illesztő nem tudja feloldani a zárolt oldalakat egy I/O-művelet után.

A Windows 7-ben és az operációs rendszer újabb verzióiban a Pool Tracking opció támogatja az alábbi kernel API-k használatával lefoglalt memóriát:

A Windows operációs rendszer Windows 7-ben és újabb verzióiban a Készletkövetés aktiválásakor az illesztőprogram-ellenőrző észleli a rendszermagkészlet memóriájának kvótával való lefoglalására tett kísérleteket az üresjárati folyamat kontextusában. Az ilyen kísérletek általában azt jelentik, hogy az illesztőprogram memóriát foglal le egy DPC-rutinból. A DPC-rutinok szál- vagy folyamatkörnyezete megbízhatatlan, ezért helytelen a kvóta felszámítása az adott folyamatra.

Készletkövetés figyelése

A memóriakészletek foglalási statisztikái külön-külön monitorozásra kerülnek az egyes ellenőrzött illesztőprogramok esetében. Ezeket a statisztikákat a Driver Verifier Manager, a Verifier.exe parancssor vagy egy naplófájl jelenítheti meg. Részletekért tekintse meg az egyes számlálók monitorozását ismertető cikket.

A kernel hibakereső bővítménye (!verifier 0x3 ) az illesztőprogram eltávolítása után megkeresheti a kiugró memóriafoglalásokat, vagy nyomon követheti az aktuális foglalásokat az illesztőprogram futtatása közben. Ez a bővítmény a készletcímkét, a készlet méretét és az egyes foglalások kiosztójának címét is megjeleníti. További információ a hibakereső bővítményekről: Windows hibakeresési.

Készletkvóta díjai a DPC rutinból

A kernelillesztők meghívhatják az ExAllocatePoolWithQuotaTag-et a kernelkészlet memóriájának lefoglalásához és az aktuális folyamat készletkvótájára lefoglalt bájtok számának felszámításához. Az illesztőprogramok általában kvótát használnak olyan memóriafoglalásokhoz, amelyek közvetlenül kapcsolódnak egy alkalmazásból érkező kéréshez.

A késleltetett eljáráshívási (DPC-) rutinok bármilyen folyamat kontextusában futtathatók. Ezért egy DPC-rutin kvótáinak feltöltése véletlenszerű folyamatot számít fel. Még rosszabb, ha a DPC-rutin az üresjárati folyamat kontextusában fut, ez a feltétel memóriasérülést vagy rendszer összeomlását eredményezheti.

A Windows 7-től kezdődően az Driver Verifier észleli az ExAllocatePoolWithQuotaTag hívásokat a DPC-rutinokból.

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

Egy vagy több illesztőprogram készletkövetési funkcióját az Illesztőprogram-ellenőrzőkezelő vagy a Verifier.exe parancssor használatával aktiválhatja. További információ: Illesztőprogram-ellenőrző beállításainak kiválasztása.

  • A parancssorban

    A parancssorban a Készletkövetés lehetőséget a 3. bit (0x8) jelöli. A Készletkövetés aktiválásához használjon egy 0x8 jelzőértéket, vagy adjon hozzá 0x8-at a jelzőértékhez. Például:

    verifier /flags 0x8 /driver MyDriver.sys
    

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

    A Windows Vista és az annál újabb verziók esetében is aktiválhatja és deaktiválhatja a Pool Tracking funkciót a számítógép újraindítása nélkül, ha hozzáadja a /volatile paramétert a parancshoz. Például:

    verifier /volatile /flags 0x8 /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.

    A Pool Tracking funkció a standard beállításokban is megtalálható. Például:

    verifier /standard /driver MyDriver.sys
    
  • 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. Válassza ki (jelölje be) a készlet nyomon követését.

    A készletkövetési 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.