A Windows illesztőprogramjaival kapcsolatos problémák azonosítása az illesztőprogram-ellenőrzővel tapasztalt felhasználók számára

Összefoglaló

Az Illesztőprogram-ellenőrző a Windows 2000, a Windows XP és a Windows Server 2003 rendszerben található meg a stabilitás és megbízhatóság növelése érdekében. Az eszköz az illesztőprogramok hibakeresésére használható. A Windows kernel módú összetevői a rendszer sérülését vagy leállását okozhatják egy nem megfelelően megírt illesztőprogram (például egy régebbi verziójú WDM-illesztőprogram) esetén. A cikk azt ismerteti, hogyan találhat meg egy illesztőprogramot a rendszerben és hogyan keresheti meg annak hibáját az Illesztőprogram-ellenőrző segítségével.

További információ

A cikkben érintett témakörök:

  • Az Illesztőprogram-ellenőrző szolgáltatásai
  • I/O-ellenőrző
  • Az Illesztőprogram-ellenőrző követelményei
  • Az Illesztőprogram-ellenőrző engedélyezése
  • Az Illesztőprogram-ellenőrző megsértési hibáinak elhárítása
  • Az Illesztőprogram-ellenőrző és a grafikus illesztőprogramok
  • Az Illesztőprogram-ellenőrző kezelője (Verifier.exe)
  • Globális számlálók
  • Készletkövetés
  • Beállítások
  • Nem állandó beállítások
  • Parancssori felület
  • További információ illesztőprogramok fejlesztőinek

Az Illesztőprogram-ellenőrző szolgáltatásai

Az Illesztőprogram-ellenőrző használatához futtassa a Verifier.exe programot, majd indítsa újra a számítógépet. A rendszerben lévő illesztőprogramok ellenőrzéséhez nem szükséges más módosítást végezni.


Az Illesztőprogram-ellenőrző az alábbi szolgáltatásokat nyújtja:

Készletlefoglalások

Kísérlet egy illesztőprogram összes készletfoglalásának egy speciális készletből történő lefoglalására. Ahelyett, hogy megosztaná a készletfoglalásokat a rendszer többi tagjával, az illesztőprogram foglalásai elkülönülnek, és Nincs hozzáférés engedéllyel vannak megkötve. A szolgáltatás meghatározza, hogy egy illesztőprogram saját részénél többet foglalt-e le a készletből, ezzel hibát és a rendszer instabilitását okozva. Ha engedélyezi ezt a szolgáltatást, és a célszámítógépnek elegendő fizikai és virtuális memóriája van, akkor az illesztőprogram összes foglalása automatikusan a speciális készletbe lesz irányítva.

Maximális memóriaterhelés biztosítása

Maximális memóriaterhelés biztosítható egy adott illesztőprogramhoz a többi illesztőprogram befolyásolása nélkül (a rendszermemória méretétől függetlenül). Ezt úgy végezheti el, hogy a memóriakezelő segítségével érvényteleníti az illesztőprogram összes lapozható kódját és adatát, valamint a rendszer lapozható készletét, kódját és adatait. Így megkeresheti azt az illesztőprogramot, amely helytelenül forgó zárolásokat alkalmaz vagy IRQL-emelést hajt végre, majd elérést szerez a lapozott kódhoz vagy adatokhoz. A maximális memóriaterhelés segítségével észlelheti az időszakos problémákat, és felderítheti azok okát.

Paraméterérvényesítés

Az illesztőprogram által végrehajtott minden forgó zárolás, IRQL és készletfoglalás automatikus paraméterérvényesítést kap. Ez azt jelenti, hogy a rendszer ellenőrzi az alábbiakat:

  • Az emelt IRQL valóban emelt IRQL (az aktuális IRQL kisebb a cél IRQL-nél).
  • Az alacsonyabb IRQL valóban alacsonyabb IRQL.
  • Forgó zárolás dupla felszabadítása.
  • A forgó zárolások lefoglalása/felszabadítása a megfelelő IRQL-nél történt.
  • A lapozott készletfoglalások/-felszabadítások a megfelelő IRQL-nél (APC_LEVEL vagy alacsonyabb szinten) történtek.
  • A nem lapozott készletfoglalások/-felszabadítások a megfelelő IRQL-nél (DISPATCH_LEVEL vagy alacsonyabb szinten) történtek.
  • Nincsenek megadva véletlenszerű (inicializálatlan) értékek ezekhez az API-khoz.

Sikertelen készletfoglalás-beillesztések

Azok a készletfoglalások, amelyeket az illesztőprogram nem lát el MUST_SUCCEED jelöléssel, véletlenszerűen sikertelenné tehetők annak biztosítása érdekében, hogy az illesztőprogram megfelelően kezeli az helyzetet kevés memória esetén.

Felszabadítás alatti készlet

A program minden felszabadítás alatti készletet ellenőriz annak biztosítása érdekében, hogy a készletfoglalásban nincsenek függő időzítők, mert ilyen esetekben nehezen felderíthető rendszerösszeomlás történhet.


Készletszivárgás észlelése

A program automatikusan ellenőrzi az illesztőprogram összes készletfoglalását. Az illesztőprogramok eltávolításakor a program hibaellenőrzést végez, ha nem történik meg az összes foglalás felszabadítása. Ezután a kernel !verifier 3 hibakereső parancsával megjelenítheti az összes, fel nem szabadított foglalást. Ezt a parancsot eltávolítás előtt is használhatja az illesztőprogram által végzett kiemelkedő foglalások megtekintéséhez.


Illesztőprogram eltávolításának ellenőrzése

Az illesztőprogram eltávolításának ellenőrzésével a program azokat az illesztőprogramokat keresi meg, amelyek el lettek távolítva, de nem szabadították fel a használt erőforrásokat. (Ez növelheti egy rendszerhiba-ellenőrzés lehetőségét az illesztőprogram eltávolítása után.) Az illesztőprogram által nem törölt erőforrások lehetnek gyors memórialefoglalási listák, függő elhalasztott eljáráshívások (DPC), munkavégző szálak, várólisták, időzítők és egyéb erőforrások.


I/O-ellenőrző

Ha bekapcsolja az I/O-ellenőrző jelzőt az ellenőrző eszközzel vagy a VerifyDriverLevel rendszerbeállítási bejegyzéssel, a program bekapcsolja az I/O-ellenőrző egyes ellenőrzéseit. (További tudnivalókat tartalmaz ezen cikk Az Illesztőprogram-ellenőrző engedélyezése című szakasza.) Ezek az alábbiak:

  • Minden, az IoAllocateIrp használatával lefoglalt IRP foglalása a speciális készletből történik.
  • Az ellenőrzések az IoCallDriver, az IoCompleteRequest és az IoFreeIrp kulcsokban történnek az illesztőprogramok hibaüzeneteinek megtekintéséhez.
  • Az I/O-ellenőrző minden hibájának hibakeresése a DRIVER_VERIFIER_IOMANAGER_VIOLATION (0xC9) kóddal történik.

Az Illesztőprogram-ellenőrző követelményei

Az egyetlen követelmény a Windows 2000, Windows XP vagy Windows Server 2003 rendszer telepítése. Az Illesztőprogram-ellenőrző a Windows kereskedelmi forgalomban kapható és ellenőrzött verzióira telepíthető. A Microsoft Tudásbázis 251233-as cikke tartalmaz információt az Illesztőprogram-ellenőrző munkakörnyezetben használt kiszolgálókra történő telepítése előtti tennivalókról. Ha telepítve van a Norton Antivirus program, ne engedélyezze az Illesztőprogram-ellenőrző holtpontészlelőjét a Microsoft Tudásbázis 325672-es cikkében leírt okból.


Az Illesztőprogram-ellenőrző engedélyezése

Az Illesztőprogram-ellenőrzőt a Verifier.exe programmal engedélyezheti. A Verifier.exe programot a Windows minden példánya tartalmazza, és automatikusan telepíti a System32 mappába. A Verifier.exe parancssorból és grafikus felületen is használható, így megadhatja az illesztőprogramokat és az ellenőrzés megfelelő szintjeit. Megtekintheti valós időben az Illesztőprogram-ellenőrző statisztikáit is. További tudnivalókat tartalmaz ezen cikk Az Illesztőprogram-ellenőrző kezelője című szakasza.

Az Illesztőprogram-ellenőrző megsértési hibáinak elhárítása

A kernel hibakeresőjének !verifier parancsa és a Verifier.exe eszköz is az Illesztőprogram-ellenőrző aktuális konfigurációját mutatja valós időben.


Az Illesztőprogram-ellenőrző minden megsértési hibája hibakeresést eredményez. A leggyakoribbak (nem szükségszerűen az összes) az alábbiak:


  • IRQL_NOT_LESS_OR_EQUAL 0xA
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • PAGE_FAULT_IN_NONPAGED_AREA 0x50
  • ATTEMPTED_WRITE_TO_READONLY_MEMORY 0xBE
  • SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION 0xC1
  • DRIVER_VERIFIER_DETECTED_VIOLATION 0xC4
  • DRIVER_CAUGHT_MODIFYING_FREED_POOL 0xC6
  • TIMER_OR_DPC_INVALID 0xC7
  • DRIVER_VERIFIER_IOMANAGER_VIOLATION 0xC9

Az Illesztőprogram-ellenőrző és a grafikus illesztőprogramok

A Windows kernel módú grafikus illesztőprogramjai (például a nyomtató és a monitor illesztőprogramjának DLL-je) nem hívhatják közvetlenül a készlet belépési pontját. A készletfoglalások közvetetten történnek úgy, hogy a grafikus illesztőprogram felülete (DDI) visszahívja a Win32k.sys programot. Például az EngAllocMem olyan visszahívás, amelyet egy grafikus illesztőprogram meghív készletmemória foglalásához. Más specializált visszahívások, például az EngCreatePalette és az EngCreateBitmap is készletmemóriát adnak vissza.


Annak érdekében, hogy a grafikus illesztőprogramokhoz ugyanilyen automatikus tesztelést biztosítson, a Win32k.sys támogatja az Illesztőprogram-ellenőrző egyes szolgáltatásait. Azonban mivel a grafikus illesztőprogramok korlátozottabbak a többi kernel módú illesztőprogramnál, az Illesztőprogram-ellenőrzőnek csak egyes szolgáltatásait igénylik. Az IRQL és az I/O ellenőrzése például nem szükséges. A többi szolgáltatást, vagyis a speciális készletet, a készletfoglalások véletlenszerű sikertelenségét és a készletkövetést változó mértékben támogatják a különböző grafikus DDI visszahívások.


A véletlenszerű sikertelenséget a következő grafikus DDI visszahívások támogatják:

  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath
Ezen kívül az EngAllocMem a speciális készletet és a készletkövetést is támogatja.


Az Illesztőprogram-ellenőrző engedélyezése a grafikus illesztőprogramok esetén megegyezik a többi illesztőprogrammal (lásd a cikk Az Illesztőprogram-ellenőrző engedélyezése című részét). A nem támogatott jelzőket, például az IRQL ellenőrzését a program figyelmen kívül hagyja. Ezen kívül a kernel !gdikdx.verifier hibakereső parancsával is megvizsgálhatja az Illesztőprogram-ellenőrző aktuális állapotát és készletkövetését a grafikus illesztőprogramokhoz.


Megjegyzés: A készletfoglalások véletlenszerű sikertelenségét előidéző beállítást csak a megbízhatóság tesztelésére használja. A beállítás használata megjelenítési hibaüzeneteket eredményezhet, ezért nem használható ellenőrzési tesztekhez a grafikus illesztőprogram helyes implementációjának ellenőrzésére (például a grafikus illesztőprogram kimenetének egy referenciaképpel való összehasonlításával).

Az Illesztőprogram-ellenőrző kezelője (Verifier.exe)

Az Illesztőprogram-ellenőrző kezelője (Verifier.exe) eszköz a preferált mód az Illesztőprogram-ellenőrző beállításainak módosításához és az Illesztőprogram-ellenőrző statisztikáinak begyűjtéséhez. A Verifier.exe a %WinDir%\System32 mappában található minden Windows telepítésben.

Illesztőprogram állapota

Az Illesztőprogram állapota tulajdonságlap képet ad az Illesztőprogram-ellenőrző aktuális állapotáról. Itt megtekintheti, hogy milyen illesztőprogramokat észlel az ellenőrző. Az állapot a következők egyike lehet:

  • Betöltve: Az illesztőprogram be van töltve és ellenőrizve van.
  • Kiadva: Az illesztőprogram nincs betöltve, de a számítógép újraindítása óta legalább egyszer be volt töltve.
  • Sosem töltődött be: Az illesztőprogram soha nem volt betöltve. Ez az állapot jelezheti, hogy az illesztőprogram képfájlja sérült vagy hogy a megadott illesztőprogramnév hiányzik a rendszerből.
A listafejre kattintva rendezheti a listát az illesztőprogramok neve vagy állapota szerint. A párbeszédpanel jobb felső részén megtekintheti az aktuálisan érvényben lévő ellenőrzéstípusokat. Az illesztőprogramok állapota automatikusan frissül, ha nem kapcsol manuális frissítésre. A frissítés gyakoriságát módosíthatja a párbeszédpanel bal alsó részén lévő választógombokkal. Az állapotot manuálisan is frissítheti a Frissítés most elemre kattintva.


Ha engedélyezi a Speciális készlet jelzőt, és a készletfoglalásoknak kevesebb, mint 95 százaléka került a speciális készletbe, figyelmeztető üzenet látható ezen a lapon. Ez azt jelenti, hogy kevesebb illesztőprogramot kell kijelölni ellenőrzésre vagy több fizikai memóriát kell adni a számítógéphez a készletfoglalás-ellenőrzés jobb működéséhez.

Globális számlálók

A Globális számlálók tulajdonságlapon látható az Illesztőprogram-ellenőrző egyes számlálóinak aktuális értéke. Egy számláló nulla értéke jelezheti, hogy az Illesztőprogram-ellenőrző hozzá tartozó jelzője nincs engedélyezve. Például az Egyéb/hibák számláló 0 értéke azt jelzi, hogy az alacsony erőforrásszint szimulálásának jelzője nincs engedélyezve. Figyelheti az ellenőrző működését, mert a számlálók értéke automatikusan frissül (alapértelmezésben). Módosíthatja a frissítés gyakoriságát, manuális frissítésre válthat vagy kényszerítheti a frissítést a párbeszédpanel bal alsó részén lévő vezérlőelemekkel.

Készletkövetés

Ezen a tulajdonságlapon az Illesztőprogram-ellenőrzőből gyűjtött további statisztika látható. A lapon látható összes számláló az ellenőrző Készletkövetés jelzőjéhez tartozik. A legtöbb illesztőprogramonkénti számláló (például aktuális foglalások, aktuálisan foglalt bájtok stb.). Ez azt jelenti, hogy a felső legördülő listából egy illesztőprogramot választva megtekintheti az adott illesztőprogram számlálóit.

Beállítások

Ezen a lapon létrehozhatja és módosíthatja az Illesztőprogram-ellenőrző beállításait. A beállításokat a program a beállításjegyzékbe menti, és életbe lépésükhöz újra kell indítani a számítógépet. A listában megtekintheti a jelenleg telepített illesztőprogramokat. Minden illesztőprogram a következő állapotok egyikében lehet:

  • Bekapcsolva: Az illesztőprogram jelenleg ellenőrizve van.
  • Kikapcsolva: Az illesztőprogram jelenleg nincs ellenőrizve.
  • Bekapcsolva (Újraindítás szükséges): Az illesztőprogram csak a következő újraindítás után lesz ellenőrizve.
  • Kikapcsolva (Újraindítás szükséges): Az illesztőprogram jelenleg ellenőrizve van, de a következő újraindítás után nem lesz ellenőrizve.
Kiválaszthat egy vagy több illesztőprogramot a listából, és válthatja az állapotot a lista alatti két gombbal. Egy illesztőprogram nevére jobb gombbal kattintva megjelenítheti a helyi menüt, amellyel állapotváltást végezhet.


A párbeszédpanel alján megadhat további illesztőprogramokat (szóközökkel elválasztva), amelyeket a következő újraindítás után ellenőrizni szeretne. Ezt a szerkesztési vezérlőt akkor célszerű használni, ha még be nem töltött új illesztőprogramot szeretne telepíteni.


Ha a lista fölötti csoportban az Összes illesztőprogram ellenőrzése választógomb van bejelölve, a lista, az Ellenőrzés és a Nincs ellenőrzés gombok, valamint a szerkesztési vezérlő nem érhetők el. Ez azt jelenti, hogy a következő újraindításkor a rendszerben lévő összes illesztőprogram ellenőrizve lesz.


Az ellenőrzés típusát a párbeszédpanel jobb felső részén lévő jelölőnégyzetekkel adhatja meg. Engedélyezheti az I/O-ellenőrzést 1. vagy 2. szinten. A 2. szintű ellenőrzés erősebb az 1. szintűnél.


A beállítások módosítását menteni kell az Alkalmaz gombra kattintva. A lapon további két gomb található:

  • Elsődleges beállítások: Ez néhány gyakran használt beállítást ad meg (minden illesztőprogram ellenőrzött).
  • Alaphelyzet: Ez törli az Illesztőprogram-ellenőrző összes beállítását, hogy ne legyen ellenőrzött illesztőprogram.
Miután az Alkalmaz gombra kattint, újra kell indítani a számítógépet a módosítások életbe léptetéséhez.

Nem állandó beállítások

Ezen a tulajdonságlapon azonnal módosíthatja az Illesztőprogram-ellenőrző jelzőit. Csak az Illesztőprogram-ellenőrző egyes jelzőinek állapotát válthatja, de nem módosíthatja az ellenőrzendő illesztőprogramok listáját. Ha módosítja a jelölőnégyzetek állapotát, az Alkalmaz gombra kell kattintani a módosítások életbe léptetéséhez. A módosítások azonnal életbe lépnek és a következő módosításig vagy a számítógép újraindításáig tartanak.

Parancssori felület

A Verifier.exe programot a parancssorból is futtathatja (további tudnivalókért írja be a verifier.exe /? parancsot a parancssorba). A következő listában a leggyakrabban használt parancssori jelzők láthatók:

  • verifier.exe /flags érték [/iolevel 2]
    Ez a parancs az Illesztőprogram-ellenőrző jelzőinek decimális értékét adja meg, és esetleg az I/O-ellenőrzés szintjét (a használható jelzők listájának megjelenítéséhez írja be a verifier.exe /? parancsot a parancssorba, vagy olvassa el a cikknek Az Illesztőprogram-ellenőrző engedélyezése című szakaszát).


    Az érték paraméter helyére az alábbi ellenőrzőbit-értékek egyikét írhatja:

    0 - Speciális készlet ellenőrzése
    1 - IRQL-ellenőrzés kényszerítése
    2 - Alacsony erőforrásszint szimulálása
    3 - Készletkövetés
    4 - I/O-ellenőrzés
    5 - Holtpontészlelés
    6 - Fokozott I/O-ellenőrzés
    7 - DMA-ellenőrzés
    Például írja be a következő parancsot:

    c:\verifier /flags 3 /iolevel 2
    MEGJEGYZÉS: Az I/O-ellenőrzés alapértelmezett szintje 1. Az értéket a program figyelmen kívül hagyja, ha az I/O-ellenőrzés bitje nincs beállítva a jelzőkben.
  • verifier.exe /all
    Ellenőrzi a rendszer összes illesztőprogramját.
  • verifier.exe /volatile /flags érték
    Azonnal módosítja az ellenőrző jelzőket.
  • verifier.exe /reset
    Törli az Illesztőprogram-ellenőrző összes aktuális beállítását.
  • verifier /query
    Kiírja az Illesztőprogram-ellenőrző aktuális állapotát és számlálóit a szokásos kimenetre.
  • verifier.exe /log NAPLÓFÁJL_NEVE [/interval másodperc]
    Naplófájlba írja az Illesztőprogram-ellenőrző állapotát és számlálóit (a másodperc érték a felhasználó által megadott időtartam).

További információ illesztőprogramok fejlesztőinek

Az alábbi szakaszok az Illesztőprogram-ellenőrző beállításaival kapcsolatos olyan további információkat tartalmazzák, amelyeket az illesztőprogramok fejlesztői hasznosíthatnak. Ezekre a beállításokra az informatikai szakembereknek általában nincs szükségük.
Fontos: Az alábbi bekezdés, módszer, illetve feladat a beállításjegyzék (korábbi nevén rendszerleíró adatbázis) módosítását is magában foglaló lépéseket tartalmaz. A beállításjegyzék helytelen módosítása azonban komoly problémákat okozhat, ezért ügyeljen az utasítások pontos betartására. A beállításjegyzékről módosítása előtt készítsen biztonsági másolatot, hogy szükség esetén visszaállíthassa azt. A beállításjegyzék biztonsági mentéséről és visszaállításáról a Microsoft Tudásbázis alábbi cikkében tájékozódhat:
322756 Útmutató: A rendszerleíró adatbázis biztonsági mentése, szerkesztése és visszaállítása Windows XP és Windows Server 2003 rendszerben

Az Illesztőprogram-ellenőrzőt a beállításjegyzék szerkesztésével a következőképpen engedélyezheti:



  1. Indítsa el a Beállításszerkesztőt (Regedt32).

  2. Keresse meg a következő beállításkulcsot (korábbi nevén rendszerleíró kulcs):

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers
  3. Szerkessze a REG_SZ kulcsot.
Állítsa a REG_SZ kulcsot a tesztelni kívánt illesztőprogramok kis- és nagybetűket meg nem különböztető nevére. Megadhat több illesztőprogramot, de csak egyet használjon. Ezzel biztosíthatja, hogy az elérhető rendszererőforrások nem merülnek ki idő előtt. Az erőforrások idő előtti kimerülése nem rontja a rendszer megbízhatóságát, de okozhatja egyes illesztőprogramok ellenőrzésének kihagyását.

Az alábbi listában a REG_SZ kulcs példaértékei láthatók:





  • Ntfs.sys
  • Win32k.sys ftdisk.sys

  • *.sys

Az illesztőprogramok ellenőrzésének szintjét a következő beállításkulcsban (korábbi nevén rendszerleíró kulcs) adhatja meg:



HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel
Az alábbi listán a kulcs bites mezőértékei láthatók. Ezek az értékek szabadon kombinálhatók:



  • 0x01: Megpróbál minden foglalást a speciális készletből teljesíteni.
  • 0x02: Memóriaterhelést alkalmaz az illesztőprogramra a lapozható kóddal és adatokkal kapcsolatos IRQL-használat érvényesítéséhez.
  • 0x04: Véletlenszerűen sikertelenné tesz több készletfoglalási kérést. Ez a művelet csak akkor lesz végrehajtva, ha a rendszer elindult és elért egy olyan pontot, ahol a probléma kezelendő helyzetként megoldható.
  • 0x08: Készletfoglalás követésének engedélyezése. Minden foglalást fel kell szabadítani az illesztőprogram eltávolítása vagy a rendszer által végrehajtott hibakeresés előtt.
  • 0x10: Az I/O-ellenőrző engedélyezése.
Megjegyzés: Az alapértelmezett érték 3, ha a kulcs nem létezik vagy ha nincs megadva az illesztőprogram-ellenőrzés szintje. Az alapértelmezett érték 0x1B, ha az ellenőrző segédprogram Elsődleges beállítások elemét használja. A memóriaszivárgások követéséhez próbálkozzon a 0xB értékkel. Ezt az értéket legegyszerűbben úgy kapja meg, hogy az elsődleges beállítás jelölőnégyzetét bejelöli, az I/O-ellenőrzés jelölőnégyzetéből pedig törli a jelet.
Tulajdonságok

Cikkazonosító: 244617 - Utolsó ellenőrzés: 2008. máj. 21. - Verziószám: 1

Visszajelzés