Zabýváme se zaváděcí chybou kvůli chybějícímu digitálnímu podpisu ovladače v systému x64

V tomto článku se pokusím popsat metodu diagnostiky problémů s nepodepsanými soubory ovladačů v x64 bitové verzi systémů Windows, kvůli které počítač přestane načítat a při načítání dojde k BSOD. Systém však lze stále načíst deaktivací ověření digitálního podpisu při spuštění (F8 -> Zakázat Řidič Podpis Výkon) Například v tomto článku budu pracovat se systémem Windows Server 2008 R2 (který, jak si vzpomínám, může být pouze v 64bitové edici), ale tato technika je vhodná pro Windows 7 x64 a Vista x64.

Pokud se vrátíme na pozadí problému, připomínáme, že Microsoft se rozhodl, že v 64bitových systémech, počínaje Windows Vista, načte Windows ovladače v režimu jádra, pouze pokud je ovladač digitálně podepsán. Pokud ovladač nemá digitální podpis, dojde při spuštění systému k kritické chybě (záleží na typu ovladače, jehož načítání je blokováno) a objeví se obrazovka BSOD. Konkrétní chyba a její kód závisí na konkrétním ovladači, který je během procesu spouštění blokován. Některé chyby přímo na obrazovce BSOD mohou znamenat nepodepsaný soubor ovladače.

V mém případě se po aktualizaci ovladačů na serveru Windows 2008 r2 během normálního spuštění počítače objevila modrá obrazovka smrti s textem:

STOP: c000021a (závažná chyba systému)

Proces počáteční relace nebo systémový proces byl neočekávaně ukončen stavem 0x00000000 (0xc000428 0x00100448). Systém byl vypnut

Zkusme zjistit, o jaký druh chyby jde, který ovladač ji způsobuje, a určme konkrétní zařízení pomocí ovladače.

K dekódování chyby potřebujeme druhý parametr (je zvýrazněn tučně) - 0xc000428.

Převeďte hexadecimální kód chyby do čitelnější podoby. Chcete-li to provést, můžete použít vestavěný nástroj v systému Windows SLUI.Exe nebo odpovídají chybovému kódu v souboru ntstatus.h, které lze nalézt v sadě Windows SDK. Použijeme první metodu, kterou provedeme na příkazovém řádku:

slui.exe 0x2a 0xC0000428

Jak můžete vidět na snímku obrazovky, byli jsme přesvědčeni, že BSOD je způsobena neschopností ověřit digitální podpis ovladače („Windows nemůže ověřit digitální podpis pro toto soubor“)

Restartujeme počítač a při spuštění stiskneme klávesu F8. V nabídce Rozšířené možnosti spuštění zakažte ověřování digitálního podpisu výběremZakázat Řidič Podpis Výkon .

V případě, že se v tomto režimu server spustí, jsme si jisti, že některý nepodepsaný modul nebo ovladač neumožňuje normální spuštění systému..

Dalším krokem je identifikace problémového modulu nebo souboru ovladače. Otevřete protokol událostí konzoly (Prohlížeč událostí) a přejděte na Protokoly aplikací a služeb -> Microsoft -> Windows -> CodeIntegrity -> Provozní.

Poznámka: Pokud při přístupu k protokolům v této větvi dojde k chybě „přístup denied ”, vytvořte na disku c: adresář poskytnutím skupiny Všichni mají plný přístup. Poté změňte cestu k souboru ETL do nového adresáře a vypněte a znovu zapněte protokolování.

V mém případě je v protokolu událost EventID 3001 s textem „Integrita kódu určila, že do systému je načten nepodepsaný modul jádra \ Device \ HarddiskVolume1 \ Windows \ System32 \ win32k.sys. Ověřte u vydavatele, zda je k dispozici podepsaná verze modulu jádra"Takže jsme našli problémový ovladač."!

Tento ovladač může být nativním ovladačem společnosti Microsoft nebo ovladačem jiného výrobce. Ujistěte se, že tento ovladač ve skutečnosti nemá digitální podpis. K tomu potřebujeme obslužný program od Sysinternals zvaný SIGCHECK.EXE (můžete si ho vzít sem http: //technet.Microsoft.com /en-nás /sysinternals /bb897441).

Ověření přítomnosti digitálního podpisu se provádí příkazem:

c: \ TOOLS> sigcheck.exe -i c: \ Windows \ System32 \ win32k.sys

Pokud není podepsán, bude v poli Ověřeno uvedeno Nepodepsáno (jinak bude podepsáno).

Máme dvě možnosti, jak vyřešit problém nemožnosti normálního spuštění systému pomocí nepodepsaného ovladače:

  1. Najděte podepsanou verzi ovladače
  2. Odmítnout používat tento ovladač (a zařízení)
  3. v systému Windows deaktivujte ověření digitálního podpisu ovladače

Třetí možnost nemusí fungovat z jednoho nebo druhého důvodu. V prvních dvou případech musíme určit, ke kterému konkrétnímu zařízení daný soubor ovladače .sys patří..

Jak zjistit zařízení, znát pouze název souboru sys? Používám následující metodiku (potřebujeme určit zařízení, jehož ovladač se jmenuje HpCISSs2.sys):

1) Otevřete editor registru a prohledejte větev HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 hledá klíč s hodnotou HpCISSs2.sys

2) V mém případě to bylo nalezeno v oboru HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ HpCISSs2

3) Rozbalíme vnořenou větev s názvem ENUM, zajímá nás klíčová hodnota  0, v mém případě je to PCI \ VEN_103C& DEV_3230& SUBSYS_3235103C & REV_01 \ 4 & 3b416f2c & 0 & 0018

4) Zjistili jsme, že výrobce zařízení má ID 103C a kód zařízení je 3230

5) Dále na místě v polích Vyhledat dodavatele a Vyhledat zařízení uveďte kódy, které jsme našli.

6) Zjistili jsme, že hledané zařízení je řadič pevného disku HP Smart Array P400 Controller.

Musíme jen najít novou verzi ovladače na webu výrobce zařízení (pečlivě hledat, které verze operačního systému, který ovladač potřebujete) a aktualizovat ovladač v počítači.