Mamy do czynienia z błędem rozruchu spowodowanym brakiem podpisu cyfrowego sterownika w systemie x64

W tym artykule postaram się opisać metodę diagnozowania problemów z niepodpisanymi plikami sterowników w x64-bitowej wersji systemów Windows, z powodu których komputer przestaje się ładować i ulega awarii do BSOD po załadowaniu. Ale system nadal można załadować, wyłączając weryfikację podpisu cyfrowego podczas rozruchu (F8 -> Wyłącz Kierowca Podpis Egzekwowanie) Jako przykład, w tym artykule będę pracować z Windows Server 2008 R2 (który, jak pamiętam, może być tylko w wersji 64-bitowej), ale ta technika jest odpowiednia dla Windows 7 x64 i Vista x64.

Jeśli wrócimy do tła problemu, przypominamy sobie, że Microsoft zdecydował, że w systemach 64-bitowych, począwszy od Windows Vista, Windows ładuje sterowniki w trybie jądra tylko wtedy, gdy sterownik jest podpisany cyfrowo. Jeśli sterownik nie ma podpisu cyfrowego, to podczas uruchamiania systemu pojawia się błąd krytyczny (zależy to od typu sterownika, którego ładowanie jest zablokowane) i pojawia się ekran BSOD. Konkretny błąd i jego kod zależą od konkretnego sterownika, który jest blokowany podczas procesu uruchamiania. Niektóre błędy bezpośrednio na ekranie BSOD mogą wskazywać na niepodpisany plik sterownika.

W moim przypadku, po aktualizacji sterowników na serwerze Windows 2008 R2 podczas normalnego rozruchu komputera, pojawił się niebieski ekran śmierci z tekstem:

STOP: c000021a (krytyczny błąd systemu)

Proces sesji początkowej lub proces systemowy nieoczekiwanie zakończył się ze statusem 0x00000000 (0xc000428 0x00100448). System został zamknięty

Spróbujmy dowiedzieć się, jaki to jest błąd, który sterownik go powoduje, i określmy konkretne urządzenie przez sterownik.

Aby zdekodować błąd, potrzebujemy drugiego parametru (jest on pogrubiony) - 0xc000428.

Przekształć szesnastkowy kod błędu w bardziej czytelną formę. Aby to zrobić, możesz użyć wbudowanego narzędzia w systemie Windows SLUI.Exe lub dopasuj kod błędu w pliku ntstatus.h, które można znaleźć w zestawie Windows SDK. Użyjemy pierwszej metody, dla której wykonamy w linii poleceń:

slui.exe 0x2a 0xC0000428

Jak widać na zrzucie ekranu, byliśmy przekonani, że BSOD jest spowodowany niemożnością weryfikacji podpisu cyfrowego sterownika („Windows nie mogę zweryfikuj cyfrowy podpis dla to plik”)

Ponownie uruchamiamy komputer i podczas uruchamiania naciśnij klawisz F8. W menu Zaawansowane opcje rozruchu wyłącz weryfikację podpisu cyfrowego, wybierającWyłącz Kierowca Podpis Egzekwowanie .

W przypadku gdy serwer uruchomi się w tym trybie, jesteśmy pewni, że jakiś niepodpisany moduł lub sterownik nie pozwala na normalne uruchomienie systemu.

Następnym krokiem jest zidentyfikowanie problemu lub pliku sterownika. Otwórz dziennik zdarzeń konsoli (Podgląd zdarzeń) i przejdź do Dzienniki aplikacji i usług -> Microsoft -> Windows -> CodeIntegrity -> Operational.

Uwaga: jeśli podczas uzyskiwania dostępu do dzienników w tej gałęzi wystąpi błąd „dostęp odmowa ”, utwórz na dysku c: katalog, podając grupę Wszyscy mają pełny dostęp. Następnie zmień ścieżkę pliku ETL do nowego katalogu, wyłącz i włącz ponownie logowanie.

W moim przypadku w dzienniku znajduje się zdarzenie EventID 3001 z tekstem „Integralność kodu określiła niepodpisany moduł jądra \ Device \ HarddiskVolume1 \ Windows \ System32 \ win32k.sys. Sprawdź u wydawcy, czy dostępna jest podpisana wersja modułu jądra„Więc znaleźliśmy sterownik problemu!

Ten sterownik może być natywnym sterownikiem Microsoft lub sterownikiem innej firmy. Upewnij się, że ten sterownik tak naprawdę nie ma podpisu cyfrowego. Aby to zrobić, potrzebujemy narzędzia Sysinternals o nazwie SIGCHECK.EXE (możesz go pobrać tutaj http: //technet.Microsoft.com /en-my /sysinternals /bb897441).

Weryfikacja obecności podpisu cyfrowego odbywa się za pomocą polecenia:

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

Jeśli nie ma podpisu, w polu Zweryfikowane zostanie wyświetlony komunikat Bez podpisu (w przeciwnym razie Podpisano odpowiednio).

Mamy dwie opcje rozwiązania problemu niemożności normalnego rozruchu systemu z niepodpisanym sterownikiem:

  1. Znajdź podpisaną wersję sterownika
  2. Odmów używania tego sterownika (i urządzenia)
  3. wyłącz weryfikację podpisu cyfrowego sterownika w systemie Windows

Trzecia opcja może nie działać z tego czy innego powodu. W pierwszych dwóch przypadkach musimy ustalić, do którego konkretnego urządzenia należy dany plik sterownika .sys..

Jak określić urządzenie, znając tylko nazwę pliku sys? Korzystam z następującej metodologii (musimy zidentyfikować urządzenie, którego sterownik ma nazwę HpCISSs2.sys):

1) Otwórz edytor rejestru i wyszukaj oddział HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 szuka klucza o wartości HpCISSs2.sys

2) W moim przypadku znaleziono go w oddziale HKEY_LOAL_MACHINE \ SYSTEM \ ControlSet001 \ services \ HpCISSs2

3) Rozwijamy gałąź zagnieżdżoną o nazwie ENUM, interesuje nas kluczowa wartość  0, w moim przypadku jest to PCI \ VEN_103C.I DEV_3230& SUBSYS_3235103C i REV_01 \ 4 i 3b416f2c oraz 0 i 0018

4) Ustalamy, że producent urządzenia ma ID 103C, a kod urządzenia to 3230

5) Dalej na stronie w polach Wyszukiwanie dostawcy i Wyszukiwanie urządzenia wpisz znalezione kody.

6) Rozumiemy, że szukanym urządzeniem jest kontroler dysku twardego HP Smart Array P400 Controller.

Musimy tylko znaleźć nową wersję sterownika na stronie producenta sprzętu (dokładnie sprawdź, które wersje systemu operacyjnego jest odpowiedni sterownik, którego potrzebujesz) i zaktualizuj sterownik na komputerze.