V tem članku bom poskušal opisati način diagnosticiranja težav z nepodpisanimi datotekami gonilnikov v x64 bitni različici sistemov Windows, zaradi česar se računalnik ob nalaganju ustavi in se zruši na BSOD. Toda sistem je še vedno mogoče naložiti tako, da ob zagonu onemogočite preverjanje digitalnega podpisa (F8 -> Onemogoči Voznik Podpis Izvršitev) Kot primer, v tem članku bom sodeloval z Windows Server 2008 R2 (ki je, spomnim se, lahko le v 64-bitni izdaji), vendar je ta tehnika primerna za Windows 7 x64 in Vista x64.
Če se vrnemo k ozadju težave, se spomnimo, da se je Microsoft odločil, da v 64-bitnih sistemih, začenši z operacijskim sistemom Windows Vista, Windows gonilnike v načinu jedra nalaga le, če je gonilnik digitalno podpisan. Če gonilnik nima digitalnega podpisa, se pojavi kritična napaka, ko se sistem zažene (odvisno je od vrste gonilnika, katerega nalaganje je blokirano) in se prikaže zaslon BSOD. Konkretna napaka in njena koda sta odvisni od specifičnega gonilnika, ki je med zagonom blokiran. Nekatere napake na zaslonu BSOD lahko kažejo na nepodpisano gonilniško datoteko.
V mojem primeru se je po normalnem zagonu gonilnikov na strežniku Windows 2008 r2 med običajnim zagonom naprave pojavil modri zaslon smrti z besedilom:
STOP: c000021a (usodna napaka sistema)
Začetni postopek seje ali sistemski proces se je nepričakovano končal s statusom 0x00000000 (0xc000428 0x00100448). Sistem je bil izklopljen
Poskusimo ugotoviti, kakšna napaka je, kateri gonilnik jo povzroča, in določimo, kakšno napravo bo gonilnik določil.
Za dekodiranje napake potrebujemo drugi parameter (označen je s krepko pisavo) - 0xc000428.
Pretvorite šestnajsto kodo napake v bolj berljivo obliko. Če želite to narediti, lahko uporabite vgrajeni pripomoček v operacijskem sistemu Windows SLUI.Exe ali se ujemajo s kodo napake v datoteki ntstatus.h, ki jih najdemo v paketu SDK za Windows. Uporabili bomo prvo metodo, za katero bomo izvedli v ukazni vrstici:
slui.exe 0x2a 0xC0000428
Kot lahko vidite na posnetku zaslona, smo bili prepričani, da BSOD povzroča nezmožnost preverjanja digitalnega podpisa voznika (“Windows ne more preveriti digitalni podpis za to datoteka”)
Znova zaženemo računalnik in ob zagonu pritisnemo tipko F8. V meniju Napredne možnosti zagona onemogočite preverjanje digitalnega podpisa z izbiroOnemogoči Voznik Podpis Izvršitev .
V primeru, da se v tem načinu zažene strežnik, smo prepričani, da nek nepodpisan modul ali gonilnik ne omogoča, da se sistem zažene normalno.
Naslednji korak je prepoznavanje težavnega modula ali datoteke gonilnika. Odprite dnevnik dogodkov na konzoli (Pregledovalnik dogodkov) in pojdite na Dnevnike aplikacij in storitev -> Microsoft -> Windows -> CodeIntegrity -> Operativni.
Opomba: če pri dostopu do dnevnikov v tej veji napaka "dostop zavrnjen ", ustvarite na disku c: imenik z zagotavljanjem skupine Vsi polni dostop. Nato spremenite pot datoteke ETL v nov imenik in izklopite in ponovno vklopite.
V mojem primeru je v dnevniku dogodek EventID 3001 z besedilom "V integriteto kode je določen nepopisan modul jedra \ Device \ HarddiskVolume1 \ Windows \ System32 \ win32k.sys se naloži v sistem. Pri založniku preverite, ali je na voljo podpisana različica modula jedra". Zato smo našli gonilnika težave!
Ta gonilnik je lahko domači gonilnik Microsofta ali gonilnik drugega proizvajalca. Prepričajte se, da ta gonilnik res nima digitalnega podpisa. Če želite to narediti, potrebujemo pripomoček Sysinternals, imenovan SIGCHECK.EXE (lahko si ga ogledate tukaj http: //technet.microsoft.com /en-nas /sysinternals /bb897441).
Preverjanje prisotnosti digitalnega podpisa izvede ukaz:
c: \ ORODJA> sigcheck.exe -i c: \ Windows \ System32 \ win32k.sys
Če podpisa ni, bo v polju Preverjeno označeno Nepodpisano (v nasprotnem primeru podpisano).
Na voljo imamo dve možnosti za rešitev problema nemožnosti običajnega zagona sistema z nepodpisanim gonilnikom:
- Poiščite podpisano različico gonilnikov
- Zavrni uporabo tega gonilnika (in naprave)
- onemogoči preverjanje digitalnega podpisa gonilnika v sistemu Windows
Tretja možnost iz enega ali drugega razloga morda ne bo delovala. V prvih dveh primerih moramo določiti, kateri konkretni napravi pripada podana gonilna datoteka .sys..
Kako določiti napravo, vedoč samo ime datoteke sys? Uporabljam naslednjo metodologijo (določiti moramo napravo, katere gonilnik se imenuje HpCISSs2.sys):
1) Odprite urejevalnik registra in poiščite podružnico HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 išče ključ z vrednostjo HpCISSs2.sys
2) V mojem primeru so ga našli v podružnici HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 \ storitve \ HpCISSs2
3) Gnezdečo vejo razširimo z imenom ENUM, zanima nas ključna vrednost 0, v mojem primeru je to PCI \ VEN_103C& DEV_3230& SUBSYS_3235103C & REV_01 \ 4 & 3b416f2c & 0 & 0018
4) Ugotovimo, da ima proizvajalec naprave ID 103C in koda naprave 3230
5) Nadalje na mestu v poljih Iskanje prodajalca in naprave navedite kode, ki smo jih našli.
6) Ugotovimo, da je naprava, ki jo iščemo, krmilnik trdega diska HP Smart Array P400 Controller.
Na spletni strani proizvajalca opreme moramo najti novo gonilniško različico (natančno poiščite, za katere različice OS je primeren gonilnik, ki ga potrebujete) in posodobiti gonilnik v računalniku..