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.
A memóriakorrupció gyakori illesztőprogram-probléma. Az illesztőprogram hibák baleseteket okozhatnak hosszú idővel a hibák elkövetése után. Ezek közül a leggyakoribb hibák a már felszabadított memória elérése, az n bájtok kiosztása, majd az n+1 bájt elérése.
A memória sérülésének észleléséhez az Illesztőprogram-ellenőrző lefoglalhatja az illesztőprogram memóriáját egy speciális készletből, és figyelheti a készletet a helytelen hozzáférés érdekében. A rendszer által biztosított kernel módú rutinokhoz, például az ExAllocatePoolWithTaghez , valamint a GDI által biztosított rutinokhoz, például az EngAllocMemhez speciális készlettámogatást biztosítunk.
Speciális tárterület igazítások szerint
A speciális készlet két kiigazítása érhető el:
- A Verify Start igazítás jobban érzékeli a hozzáférési alulcsordulásokat.
- A Befejezés Ellenőrzése jobban észleli a hozzáférési túllépéseket.
A Start és a Záró ellenőrzés beállításainak használatáról további információt a Túlfuttatások és az Aláfutások észlelése című témakörben talál. Vegye figyelembe, hogy a memóriasérülések túlnyomó többsége túlfutások miatt következik be, nem pedig alulfutások miatt.
Ha a Speciális készlet funkció aktív, és a Befejezés ellenőrzése lehetőség ki van választva, az illesztőprogram által kért memóriafoglalások külön oldalra kerülnek. A lehető legmagasabb címet adja vissza, amely lehetővé teszi, hogy a foglalás elférjen az oldalon, így a memória igazodik az oldal végéhez. Az oldal előző része speciális mintákkal van megírva. Az előző és a következő lap elérhetetlenként van megjelölve.
Ha az illesztőprogram a foglalás befejezése után próbál hozzáférni a memóriához, az Illesztőprogram-ellenőrző azonnal észleli ezt, és Hibaellenőrzés 0xCD-et ad ki. Ha az illesztőprogram a puffer kezdete előtt ír a memóriába, ez (feltehetően) megváltoztatja a mintákat. A puffer felszabadításakor az Illesztőprogram-ellenőrző észleli a módosítást, és 0xC1 hibajelentést bocsát ki.
Ha az illesztőprogram a felszabadítása után olvas vagy ír a pufferbe, az Illesztőprogram-ellenőrző egy Hibaellenőrzés 0xCC-et ad ki.
Ha a Start ellenőrzése beállítás be van jelölve, a memóriapuffer a lap elejéhez igazodik. Ezzel a beállítással az aláfutások azonnali hibaellenőrzést okoznak, a túllépések pedig hibaellenőrzést okoznak a memória felszabadításakor. Ez a beállítás egyébként megegyezik a Befejezés ellenőrzése lehetőséggel.
Verify End az alapértelmezett igazítás, mivel a túlfutási hibák sokkal gyakoribbak az illesztőprogramokban, mint az aluláteresztési hibák.
Az egyedi memóriafoglalás felülbírálhatja ezeket a beállításokat, és kiválaszthatja saját igazítását az ExAllocatePoolWithTagPriority meghívásával, a prioritási paramétert a XxxSpecialPoolOverrun vagy XxxSpecialPoolUnderrun értékre állítva. (Ez a rutin nem tudja aktiválni vagy inaktiválni a speciális készlet funkciót, vagy nem kérheti a speciális készletet egy memóriafoglaláshoz, amely egyébként a normál készletből lenne lefoglalva. Ebből a rutinból csak az igazítás szabályozható.)
A Windows operációs rendszer Windows 7-ben és újabb verzióiban a Speciális készlet lehetőség támogatja a következő kernel API-k használatával lefoglalt memóriát:
Az IoAllocateIrp és az I/O-kéréscsomagok (IRP) adatstruktúráit lefoglaló egyéb rutinok
RtlAnsiStringToUnicodeString és más futásidejű könyvtári (RTL) rutinsorok
Speciális medence medencetag vagy foglalási méret szerint
A Driver Verifier "különleges tárterület" funkciója mellett, amely egy adott illesztőprogram foglalásaihoz kér különleges tárterületet, további két módja is van annak használatának:
Készletcímke. Speciális medence kérése egy meghatározott készletcímkével rendelkező összes foglalás esetén.
Méret. Speciális pool kérése a megadott mérettartományban lévő összes foglaláshoz.
Ha különleges készletet igényel egy pool taghoz vagy mérettartományhoz, használja a Windows hibakeresési eszközei között található Gflags eszközt. További részletekért lásd : A Globális jelzők segédprogram használata.
Egyszerre használhatja a Driver Verifier speciális készletfunkcióját és a Gflags speciális készletfunkcióit. Ha igen, ne feledje, hogy a speciális készlet korlátozott, hogy nem minden kísérlet sikerül a speciális készletből való lefoglalásra, és hogy a Windows sikeres állapotot ad vissza a sikertelen lefoglalási kísérletekhez a speciális készletből, amelyeket a normál memóriakészletek foglalásai kielégítenek.
Speciális készlethatékonyság
Nem teljesül minden speciális készletkérés. A speciális készlet minden foglalása egy oldal nem lapozható fizikai memóriát és két oldal virtuális címterületet használ fel. Ha a készlet kimerült, a memória a szokásos módon lesz lefoglalva, amíg a speciális készlet újra elérhetővé nem válik. Ha egy speciális készletkérelem ki van töltve a standard készletből, a kérő függvény nem ad vissza hibát, mivel a készletkérelem sikeres volt. Ezért nem ajánlott egyszerre több illesztőprogramot ellenőrizni az aktivált 'Special Pool' funkció mellett.
Egyetlen illesztőprogram, amely sok kis memóriakérelmet végez, szintén kimerítheti ezt a készletet. Ha ez történik, célszerű lehet készletcímkéket rendelni az illesztőprogram memóriafoglalásaihoz, és a speciális készletet egyszerre egy készletcímkének szentelni.
A speciális készlet mérete a rendszer fizikai memóriájának mennyiségével nő; ideális esetben ennek legalább 1 gigabájtnak (GB) kell lennie. x86 gépeken, mivel a virtuális tér (a fizikai mellett) is használatban van, ne használja a /3GB indítási beállítást. Érdemes a pagefile minimális/maximális mennyiségét két vagy három tényezővel növelni.
Annak biztosítására, hogy a meghajtó összes erőforrás-kiosztását teszteljék, ajánlott hosszú ideig terhelni a meghajtót.
A speciális készlet figyelése
A készletfoglalásokkal kapcsolatos statisztikák monitorozása végezhető el. Ezeket megjelenítheti a Driver Verifier Manager, a Verifier.exe parancssor vagy egy naplófájl. Részletekért lásd Globális számlálók figyelése.
Ha a speciális készletben sikeres készletfoglalások számláló egyenlő a sikeres készletfoglalások számláló értékével, akkor a speciális készlet elegendő volt az összes memóriafoglalás fedezésére. Ha az előbbi számláló alacsonyabb, mint az utóbbi, akkor a speciális készlet legalább egyszer kimerült.
Ezek a számlálók nem követik nyomon azokat a foglalásokat, amelyek mérete egy oldal vagy nagyobb, mivel a speciális készlet nem alkalmazható rájuk.
Ha a speciális készlet funkció engedélyezve van, de a teljes készlet-hozzárendelések kevesebb mint 95%%-a lett a speciális készletből kiosztva, figyelmeztetés jelenik meg a Driver Verifier Managerben. A Windows 2000 rendszerben ez a figyelmeztetés megjelenik az illesztőprogram állapota képernyőn. A Windows XP és újabb verziókban ez a figyelmeztetés megjelenik a Globális számlálók képernyőn. Ha ez történik, ellenőrizze az illesztőprogramok rövidebb listáját, ellenőrizze az egyes készleteket készletcímke alapján, vagy adjon hozzá több fizikai memóriát a rendszerhez.
A kernel hibakereső bővítménye (!verifier ) a speciális készlethasználat figyelésére is használható. A Driver Verifier Managerhez hasonló információkat jelenít meg. További információ a hibakereső bővítményekről: Windows hibakeresési.
A speciális készlet opció aktiválása
A Speciális készlet funkciót egy vagy több illesztőprogramhoz aktiválhatja a Driver Verifier Manager vagy a Verifier.exe parancssor használatával. További részletekért lásd: Illesztőprogram-ellenőrző beállításainak kiválasztása.
Megjegyzés:
Ha készletcímke vagy foglalási méret alapján szeretné aktiválni a Speciális készlet funkciót, vagy be szeretné állítani a Start ellenőrzése (aláfutások észlelése) és a Befejezés ellenőrzése (túlfutások észlelése) igazítást, használja a Global Flags segédprogramot; ezek az igazítási beállítások az összes speciális készletfoglalásra vonatkoznak.
A parancssorban
A parancssorban a Speciális készlet lehetőséget a 0. bit (0x1) jelöli. A Speciális készlet aktiválásához használjon 0x1 értékű jelzőt, vagy adjon hozzá 0x1-et a jelzőértékhez. Például:
verifier /flags 0x1 /driver MyDriver.sysA funkció a következő rendszerindítás után aktív lesz.
A speciális készletet a számítógép újraindítása nélkül is aktiválhatja és inaktiválhatja, ha hozzáadja a /volatile paramétert a parancshoz. Például:
verifier /volatile /flags 0x1 /adddriver MyDriver.sysEz 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 Speciális Pool funkció a standard beállításokban is megtalálható. Például:
verifier /standard /driver MyDriver.sysDriver Verifier Manager használata
- Válassza Egyéni beállítások létrehozása (kódfejlesztőknek) lehetőséget, majd kattintson a Továbbgombra.
- Válassza Egyéni beállítások kiválasztása a teljes listából.
- Válassza ki (ellenőrizze) a speciális készletet.
A Speciális Készlet funkció a szokásos beállításokban is szerepel. A funkció használatához a Driver Verifier Managerben kattintson a Standard beállítások létrehozásaelemre.