Sdílet prostřednictvím


Kontrola chyb 0x139: KERNEL_SECURITY_CHECK_FAILURE

Kontrola chyb KERNEL_SECURITY_CHECK_FAILURE má hodnotu 0x00000139 a indikuje, že jádro detekuje poškození kritické datové struktury.

Důležité

Tento článek je určený pro programátory. Pokud jste zákazník, který při používání počítače obdrží kód chyby modré obrazovky, přečtěte si téma Řešení chyb s modrou obrazovkou.

Parametry 0x139 KERNEL_SECURITY_CHECK_FAILURE kontroly chyb

Parametr Popis
1 Typ korupce. Další informace najdete v následující tabulce.
2 Adresa rámce přesahu pro výjimku, která způsobila kontrolu chyb
3 Adresa záznamu o výjimce pro výjimku, která způsobila kontrolu chyb
4 Rezervováno

Následující tabulka popisuje možné hodnoty parametru 1.

Parametr 1 Popis
0 Vyrovnávací paměť založená na zásobníku je přetečení (starší verze /GS porušení).
1 Kód nástroje VTGuard zjistil pokus o použití nelegální virtuální tabulky funkcí. Obvykle je poškozen objekt C++ a potom se volání virtuální metody pokusilo použít tento ukazatel poškozeného objektu.
2 Kód instrumentace souborů cookie zásobníku zjistil přetečení vyrovnávací paměti na základě zásobníku (porušení /GS).
3 LIST_ENTRY je poškozen (například dvojité odebrání). Další informace naleznete v následující části Příčina.
4 Rezervováno
5 Neplatný parametr byl předán funkci, která považuje neplatné parametry za závažné.
6 Zavaděč neinicializoval správně soubor cookie zabezpečení zásobníku. Tato kontrola chyb je způsobená sestavením ovladače, který se spustí pouze ve Windows 8 a pokusí se načíst image ovladače ve starší verzi Windows. Chcete-li se problémem vyhnout, je nutné sestavit ovladač, který se má spustit ve starší verzi Systému Windows.
7 Bylo požadováno fatální ukončení programu.
8 Kontrola hranic pole vložená kompilátorem zjistila neplatnou operaci indexování pole.
9 Bylo provedeno volání RtlQueryRegistryValues určující RTL_QUERY_REGISTRY_DIRECT bez RTL_QUERY_REGISTRY_TYPECHECK a cílová hodnota nebyla v důvěryhodném systémovém podregistru.
10 Nepřímá kontrola ochrany hovorů zjistila neplatný přenos řízení.
11 Kontrola ochrany zápisu zjistila neplatný zápis do paměti.
12 Byl učiněn pokus o přepnutí na neplatný kontext vlákna.
13 Byl proveden pokus o přiřazení neplatného kontextu registru.
14 Počet odkazů na objekt je neplatný.
18 Byl proveden pokus o přepnutí do neplatného jmp_buf kontextu.
19 Byla provedena nebezpečná změna dat pouze pro čtení.
20 Kryptografický autotest se nezdařil.
21 Byl zjištěn neplatný řetězec výjimek.
22 Došlo k chybě kryptografické knihovny.
23 V rámci DllMain bylo provedeno neplatné volání.
24 Byla zjištěna neplatná adresa báze obrázků.
25 Při ochraně importu zpožděného načtení došlo k neopravitelnému selhání.
26 Bylo uskutečněno volání na nebezpečnou linku.
27 Byla vyvolána zastaralá služba.
28 Byl zjištěn přístup do vyrovnávací paměti mimo rozsah.
29 Položka RTL_BALANCED_NODE RBTree je poškozena.
37 Byla vyvolána položka jumptable přepínače mimo rozsah.
38 Byl proveden pokus o longjmp na neplatný cíl.
39 Cíl volání s potlačeným exportem nelze nastavit jako platný cíl volání.

Příčina

Pomocí tabulky parametru 1 a souboru s výpisem paměti můžete zúžit příčinu mnoha kontrol chyb tohoto typu.

LIST_ENTRY poškození může být obtížné sledovat. Tato kontrola chyb značí, že do seznamu byla zavedena nekonzistence (zjištěna při přidání nebo odebrání jednotlivého vstupního prvku seznamu ze seznamu). Bohužel nekonzistence nemusí být nutně zjištěna v době, kdy ke korupci došlo, takže k identifikaci hlavní příčiny může být zapotřebí určitá detektivní práce.

Mezi běžné příčiny poškození položek v seznamu patří:

  • Ovladač poškodil objekt synchronizace jádra, například KEVENT (například zdvojnásobil inicializaci KEVENT, když vlákno stále čekalo na stejné KEVENT nebo umožnilo, aby zásobník založený KEVENT přešl mimo rozsah, zatímco jiné vlákno používalo toto KEVENT). Tento typ kontroly chyb se obvykle vyskytuje v nt! Ke* nebo nt! Kód Ki*. Může k tomu dojít, když vlákno dokončí čekání na synchronizační objekt nebo když se kód pokusí umístit synchronizační objekt do signalizovaného stavu. Synchronizační objekt, který je obvykle signalizován, je objekt, který je poškozený. Ovladač Verifier se speciálním fondem někdy může pomoct sledovat viník (pokud je poškozený synchronizační objekt v bloku fondu, který je již uvolněn).
  • Ovladač poškodil periodický KTIMER. Tento typ kontroly chyb se obvykle vyskytuje v nt! Ke* nebo nt! Ki* a zahrnuje signalizaci časovače nebo vložení nebo odebrání časovače z tabulky časovačů. Manipulovaný časovač může být poškozený, ale může být nutné zkontrolovat tabulku časovače pomocí nástroje !timer (nebo ručně procházet odkazy seznamu časovačů), abyste zjistili, který časovač je poškozený. Ovladač Verifier se speciálním fondem někdy může pomoct sledovat viník (pokud je poškozený KTIMER v bloku fondu, který už je uvolněný).
  • Ovladač nesprávně spravoval interní propojený seznam LIST_ENTRY stylu. Typickým příkladem by bylo volání RemoveEntryList dvakrát na stejné položce seznamu bez opětovného vložení položky seznamu mezi dvěma voláními RemoveEntryList . Jsou možné i další varianty, například dvojité vložení položky do stejného seznamu.
  • Ovladač uvolnil datovou strukturu, která obsahuje LIST_ENTRY bez odebrání datové struktury z odpovídajícího seznamu, což způsobilo pozdější zjištění poškození při kontrole seznamu po opětovném použití starého bloku fondu.
  • Ovladač použil seznam ve stylu LIST_ENTRY souběžným způsobem bez správné synchronizace, což vede k aktualizaci seznamu roztrženým způsobem.

Ve většině případů můžete poškozenou datovou strukturu identifikovat tak, že projdete připojený seznam dopředu i dozadu (příkazy dl a dlb jsou pro tento účel užitečné) a porovnáte výsledky. Pokud je seznam nekonzistentní mezi krokem vpřed a vzad, je obvykle místo poškození. Vzhledem k tomu, že operace aktualizace propojeného seznamu může změnit odkazy na seznam sousedního prvku, měli byste se pečlivě podívat na sousedy poškozené položky seznamu, protože mohou být základním viníkem.

Vzhledem k tomu, že mnoho systémových komponent interně využívá LIST_ENTRY seznamy, mohou různé typy chybné správy prostředků ovladačem používajícím systémová rozhraní API způsobit poškození propojeného seznamu v propojeném seznamu spravovaném systémem.

Řešení

Určení příčiny problémů s poškozením položek seznamu obvykle vyžaduje použití ladicího programu ke shromáždění dalších informací. Je třeba prozkoumat více souborů výpisu, abyste zjistili, jestli má kód zastavení podobné charakteristiky, například kód, který je spuštěný při zobrazení kódu zastavení.

Další informace naleznete v tématech Analýza výpisu stavu systému pomocí ladicích programů systému Windows (WinDbg),Použití rozšíření !analyze a !analyze.

Protokol událostí použijte k tomu, abyste zjistili, jestli nastanou události vyšší úrovně, které vedou k kódu zastavení.

Tyto obecné tipy pro odstraňování problémů mohou být užitečné.

  • Pokud jste do systému nedávno přidali hardware, zkuste ho odebrat nebo nahradit. Nebo se obraťte na výrobce, zda jsou k dispozici nějaké patche.

  • Pokud byly nedávno přidány nové ovladače zařízení nebo systémové služby, zkuste je odebrat nebo aktualizovat. Zkuste zjistit, co se změnilo v systému, které způsobily zobrazení nového kódu kontroly chyb.

  • V prohlížeči událostí v systémovém protokolu zkontrolujte další chybové zprávy, které můžou pomoct určit zařízení nebo ovladač, který chybu způsobuje. Hledejte kritické chyby v systémovém protokolu, ke kterým došlo ve stejném časovém okně jako modrá obrazovka.

  • Podívejte se do Správce zařízení , zda nejsou některá zařízení označena vykřičníkem (!). Zkontrolujte protokol událostí zobrazený ve vlastnostech ovladače pro všechny chybující ovladače. Zkuste aktualizovat související ovladač.

  • Spusťte program detekce virů. Viry můžou nakazit všechny typy pevných disků formátovaných pro Windows a výsledné poškození disku může generovat kódy kontroly chyb systému. Ujistěte se, že program pro detekci virů kontroluje hlavní spouštěcí záznam na přítomnost infekcí.

  • Další obecné informace o řešení potíží najdete v tématu Analyzovat data kontroly chyb na modré obrazovce.

Viz také

Analýza výpisu stavu po zhroucení systému pomocí ladicího nástroje systému Windows (WinDbg)

Analýza výpisového souboru Kernel-Mode pomocí WinDbg