Nie znaleziono wymaganego ciągu w inf. Ogólne dzienniki sterowników

Oczywiście każdy użytkownik komputera osobistego od czasu do czasu musi podłączyć jakieś urządzenie do swojej stacji. Powód, dla którego tak się dzieje, nie interesuje nas teraz zbytnio, może to być dobrze znana wielu aktualizacja (w celu zwiększenia wydajności poszczególnych węzłów, a w konsekwencji ogólnej wydajności systemu), to może też polegać po prostu na dodaniu nowego sprzętu w celu rozszerzenia funkcjonalności istniejącej konfiguracji, gdyż np. w przypadku podłączenia nowego kontrolera do gier może to oznaczać także konieczność wykorzystania danych z pendrive'a. Niezależnie od tego, jak dokładnie podłączymy nowe urządzenie, system operacyjny Windows zmuszony jest reagować na pojawienie się nowego sprzętu, wykonując pewne manipulacje, aby zapewnić obsługę nowego sprzętu na poziomie oprogramowania. Wiele systemów operacyjnych wykorzystuje interfejs pomiędzy sprzętem a warstwą oprogramowania zwany sterownikiem, aby zapewnić interakcję oprogramowania z urządzeniami.

Sterownik to oprogramowanie, za pomocą którego system operacyjny i działające w nim moduły oprogramowania uzyskują dostęp do sprzętu lub urządzeń logicznych.

Dlatego system operacyjny stara się wszelkimi dostępnymi mu środkami zapewnić funkcjonowanie urządzenia w swoim środowisku; w tym celu podejmowana jest próba zainstalowania odpowiedniego sterownika dla nowo podłączonego urządzenia, aby w ten sposób zapewnić funkcje nowego urządzenia umożliwiającego dostęp do programów trybu użytkownika i kodu trybu jądra, ponieważ bez tych bardzo znanych sterowników sprzęt w systemie po prostu nie będzie mógł działać.
To nie przypadek, że w definicji wspomniałem o urządzeniach logicznych, istnieje bowiem osobna kategoria sterowników, które nie obsługują sprzętu, ale integrują się w celu rozszerzenia realizacji (rozbudowy, dodania) cech funkcjonalnych różnych modułów systemu. Ale kogo może zdziwić instalowanie sterowników teraz? Proces ten jest już tak znany wszystkim użytkownikom komputerów PC z wieloletniej praktyki, że niektórzy, jestem pewien, mogą to zrobić z zamkniętymi oczami :) Ale czy zastanawialiśmy się nad szczegółami tego procesu, czy kiedykolwiek myśleliśmy o tym algorytm instalacji sterownika? Czy zastanawiałeś się kiedyś, jakie czynności wykonuje system operacyjny podczas podłączania nowego urządzenia i instalowania sterowników?

Zgadzam się, że z punktu widzenia użytkownika proces instalacji sterownika w systemie Windows w większości przypadków wygląda dość prozaicznie. W zasobniku systemowym pojawia się zwykła animowana ikona kreatora instalacji, a po chwili system może wygenerować raport o pomyślnym lub niepomyślnym zakończeniu procedury instalacji nowego sterownika urządzenia w systemie. Co więcej, często kreator instalacji poza tą właśnie ikonką w zasobniku nie daje żadnego wizualnego potwierdzenia prób instalacji nowego urządzenia, natomiast „po cichu” dodaje nowy sprzęt do listy urządzeń i (w przypadku niepowodzenia) zaznacza go specjalna ikona w menedżerze urządzeń, sugerująca użytkownikowi możliwość kontynuowania ręcznej konfiguracji sprzętu. Wszystkie te zewnętrzne procesy, dobrze znane zarówno Tobie, jak i mnie, są obecne w takiej czy innej formie we wszystkich wersjach systemów operacyjnych Windows niemal od czasu pojawienia się tego systemu operacyjnego, różniąc się nieznacznie od siebie jedynie szczegółami. Stały się tak znajome i przyzwyczajające, że nawet nie pomyślałem o tym, co dzieje się „po drugiej stronie ekranu”, w głębi systemu operacyjnego, co kryje się pod tą wyimaginowaną prostotą? Jak zobaczysz poniżej, instalacja sterownika Windows dla urządzenia fizycznego lub logicznego kryje w sobie dość złożone i niezwykle interesujące procesy. Algorytm instalacji sterownika w systemie Windows można podzielić na następujące kluczowe zadania globalne:

  • Kopiowanie pliku binarnego sterownika do odpowiedniego katalogu w systemie;
  • Rejestracja sterownika w systemie Windows ze wskazaniem metody rozruchu;
  • Dodanie niezbędnych informacji do rejestru systemu;
  • Skopiuj/zainstaluj powiązane komponenty pomocnicze z pakietu sterowników;

Oprócz głównych zadań wykonywanych w ramach algorytmu instalacji sterownika w systemie Windows, warto byłoby sklasyfikować warunki, w jakich rozpoczyna się proces instalacji sterownika Windows:

  • Użytkownik instaluje nowe urządzenie w wyłączonym komputerze. W takim wypadku proces wykrycia nowego urządzenia i instalacji sterownika rozpoczyna się już na etapie ładowania systemu operacyjnego.
  • Użytkownik posiadający uprawnienia administratora lokalnego, korzystając z przystawki Menedżer urządzeń, inicjuje instalację lub aktualizację sterownika dla już zainstalowanego urządzenia.
  • Użytkownik „w drodze” podłącza nowe urządzenie do działającego komputera. W tym przypadku mówimy o pewnej kategorii urządzeń, które można podłączyć w locie, np. urządzeniach z zewnętrznym interfejsem eSata, USB itp. W końcu nie zainstalujesz wewnętrznej karty graficznej, gdy gniazda PCIe będą zasilane? Osobiście jeszcze tego nie robiłem :)
  • Użytkownik samodzielnie uruchamia program instalacyjny pakietu sterowników z konta z uprawnieniami administratora lokalnego. Metodę tę można zastosować zarówno do instalacji sterowników urządzeń fizycznych obsługujących standard Plug and Play, jak i do zainstalowania sterowników innych niż PnP (starszych), czyli sterowników urządzeń logicznych, których system nie może automatycznie wykryć i których nie da się zainstalować w inny sposób ręcznie tryb. Typowym przykładem mogą być programy antywirusowe lub maszyny wirtualne, które instalują swoje sterowniki (urządzenia logiczne) w systemie.
  • Użytkownik klika prawym przyciskiem myszy plik .inf w katalogu sterowników i wybiera opcję Zainstaluj z konta z uprawnieniami administratora lokalnego.

Ale czym jest sam pakiet sterowników? W końcu, jak widzieliśmy nie raz, jest to cały zestaw plików o zupełnie innych, na pierwszy rzut oka, celach. Bez dokładniejszego przejrzenia struktury pakietu instalacyjnego sterownika trudno będzie nam zrozumieć sam algorytm instalacji sterownika, dlatego przedstawimy ogólne komponenty:

  • Plik(i) .inf. Kluczowym elementem pakietu instalacyjnego sterownika jest plik opisujący proces instalacji sterownika. inf jest podzielony na sekcje i zawiera instrukcje, które dokładnie wskazują systemowi sposób instalacji sterownika: opisują instalowane urządzenie, lokalizację źródłową i docelową wszystkich komponentów sterownika, różne zmiany, które należy wprowadzić w rejestrze podczas instalowanie sterownika systemu Windows, sterowników zawierających informacje o zależnościach i tak dalej. Pliki .inf kojarzą urządzenie fizyczne ze sterownikiem sterującym tym urządzeniem.
  • Plik(i) binarny sterownika. Pakiet musi zawierać co najmniej plik .sys lub .dll dla rdzenia sterownika. Tak naprawdę pojedynczy plik .sys (w ostateczności) można zainstalować (z zastrzeżeniami) ręcznie, edytując rejestr.
  • Pliki wykonywalne instalacji. Zwykle są to już dobrze znane narzędzia instalacyjne, które mają nazwy setup.exe, install.exe i kilka innych.
  • Usuwanie plików wykonywalnych. Są to zazwyczaj narzędzia dezinstalacyjne o nazwie „uninstall.exe”.
  • Plik(i) dodatkowych procedur i bibliotek. Zwykle są to biblioteki pomocnicze w formacie .dll, współinstalatory.
  • Plik(i) .cat. Cyfrowo podpisany plik katalogu. Pliki te zawierają cyfrowe podpisy katalogów i pełnią funkcję podpisu plików pakietów, za pomocą których użytkownik może określić pochodzenie pakietu i zweryfikować integralność plików pakietu sterowników. Wymagane w 64-bitowych wersjach systemu Windows, począwszy od Vista i nowszych, i zalecane dla wszystkich pozostałych.
  • Moduły sterujące w trybie użytkownika. Zwykle są to różne aplety poleceń działające w trybie użytkownika, takie jak ATI Catalist Control Center, VIA HD Audio Desk, Realtek HD Audio Control Panel i tym podobne.
  • Pliki pomocy. Gdzie byśmy byli bez nich?

Warunki i definicje

W tym artykule opiszę tylko jedną metodę instalacji, która w każdym razie opisuje prawie wszystkie etapy algorytmu instalacji sterownika w systemie Windows, które można zastosować również w przypadku innych metod. A teraz porozmawiamy o sytuacji, gdy użytkownik wkłada nowy sprzęt, na przykład kartę graficzną, do wewnętrznego złącza wyłączonego komputera. Ale najpierw wprowadźmy kilka definicji, które będą nam potrzebne w procesie badania algorytmu instalacji sterownika.
Menedżer (dyspozytor) Plug and Play (Menedżer PnP, Menedżer PnP)- chmura trybu jądra i kodu trybu użytkownika, odpowiedzialna za dodawanie, rozpoznawanie, usuwanie urządzeń w systemie. Blok trybu jądra współdziała z pozostałymi elementami systemu podczas procesu pobierania/instalowania oprogramowania niezbędnego do obsługi urządzeń obecnych w systemie. Blok trybu użytkownika ( %Windir%\System32\umpnpmgr.dll, działa w kontekście głównego procesu systemowego svchost.exe) odpowiada za interakcję użytkownika w sytuacjach wymagających instalacji nowych sterowników lub dostosowania parametrów pracy już zainstalowanych. Odpowiedzialny za przydzielanie i późniejszą alokację zasobów sprzętowych, takich jak przerwania (IRQ), porty we/wy, kanały bezpośredniego dostępu do pamięci (DMA) i adresy pamięci. Posiada funkcję określania sterownika wymaganego do obsługi konkretnego urządzenia oraz funkcję pobierania/instalowania tego sterownika. Potrafi rozpoznawać nowe urządzenia, reagować na ich podłączenie i rozłączenie. Jest częścią kodu podsystemu wykonawczego Windows.

Wyliczenie urządzeń

Nie ma sensu opisywać całego etapu ładowania od samego początku, zaczniemy jedynie od interesującego nas etapu, w którym moduł Winload(.efi) ładuje jądro systemu operacyjnego Windows 7 z pliku ntoskrnl. ex. Jądro uruchamiane jest przez menedżera PnP, który jest częścią podsystemu wykonawczego. Menedżer PnP rozpoczyna proces wyliczania urządzeń od urządzenia root, wirtualnego sterownika magistrali zwanego ROOT, który reprezentuje cały system i jest sterownikiem magistrali dla wszystkich urządzeń PnP i innych niż PnP, a także HAL (abstrakcje na poziomie sprzętu) . HAL na tym etapie pełni funkcję sterownika magistrali, który wylicza urządzenia bezpośrednio podłączone do płyty głównej. Jednak warstwa HAL zamiast ją faktycznie wyświetlić, opiera się na opisie sprzętu już obecnym w rejestrze. Celem HAL na tym etapie jest odkrycie głównych magistral, takich jak PCI. Z kolei główny sterownik magistrali PCI wyświetla listę urządzeń podłączonych do tej magistrali i znajduje inne magistrale, dla których menedżer PnP natychmiast ładuje sterowniki. Ci kierowcy autobusów z kolei wykrywają urządzenia w swoich autobusach. Ten rekurencyjny proces wyliczania, ładowania sterowników, a następnie wyliczania jest kontynuowany do momentu wykrycia i skonfigurowania wszystkich urządzeń w systemie. Podczas procesu wyliczania menedżer PnP tworzy drzewo urządzeń, które w unikalny sposób opisuje relacje pomiędzy wszystkimi urządzeniami w systemie. Węzły w tym drzewie, zwane devnodes (skrót od węzłów urządzenia), zawierają informacje o obiekcie urządzenia, które z kolei szczegółowo opisują urządzenie.
Zapisy wszystkich urządzeń, które zostały wykryte od czasu instalacji systemu, przechowywane są w gałęzi rejestru HKLM\SYSTEM\CurrentControlSet\Enum. Podklucze tego gałęzi opisują urządzenia w następującym formacie:

HKLM\SYSTEM\CurrentControlSet\Enum\Enumerator\DeviceID\InstanceID

HKLM\SYSTEM\CurrentControlSet\Enum\

  • Licznik - imię i nazwisko kierowcy autobusu. Może przyjmować wartości: ACPI, DISPLAY, HDAUDIO, HID, HDTREE, IDE, PCI, PCIIDE, Root, STORAGE, SW, UMB, USB, USBSTOR i inne;
  • DeviceID – unikalny identyfikator tego typu urządzenia;
  • InstanceID - unikalny identyfikator dla różnych instancji tego samego urządzenia.

Faktem jest, że sterownik magistrali, do której podłączone jest urządzenie, żąda od urządzenia różnych parametrów (identyfikator producenta, urządzenia, wersji itp.) i generuje tzw. identyfikator sprzętowy (HardwareID), który jednoznacznie opisuje urządzenie i to ciąg parametrów oddzielonych znakami & i składający się z następujących części:

  • Przedrostek opisujący magistralę, do której podłączone jest urządzenie.
  • Identyfikator urzadzenia. Składa się z kilku części, takich jak identyfikator producenta, identyfikator produktu (modelu), wersja urządzenia.

HardwareID to ciąg identyfikacyjny zależny od parametrów urządzenia (producent, model, wersja, wersja itp.), których system Windows używa do dopasowania urządzenia do pliku .inf sterownika.

Typowa struktura HardwareID:

PCI\VEN_10DE&DEV_1341&SUBSYS_2281103C&REV_A2

Oprócz HardwareID do urządzenia przypisany jest parametr(y) IntegratedID, które mają podobny format, ale zawierają jedynie bardziej ogólne wartości, które nie zawierają parametrów specyficznych dla urządzenia (niektóre identyfikatory urządzeń) i są niezbędne do zainicjowania szersza gama kompatybilnych urządzeń.

Identyfikator sprzętu i identyfikator zgodności są używane przez kod wykonawczy systemu Windows w celu znalezienia sterownika urządzenia.

Wykrywanie sterownika

Jeżeli na etapie wyliczania urządzeń i ładowania sterowników sterownik funkcjonalny magistrali, do której podłączone jest nowe urządzenie, poinformuje menadżera PnP o zmianach w podłączonych urządzeniach podrzędnych. Menedżer PnP w trybie jądra sprawdza, czy sterownik jest powiązany z urządzeniem, wysyłając zapytanie do sterownika magistrali, do której podłączone jest nowe urządzenie, i uzyskując identyfikator sprzętu oraz, opcjonalnie, identyfikator kompatybilnego urządzenia. Menedżer PnP trybu jądra informuje menedżera PnP trybu użytkownika specjalnym zdarzeniem, że to urządzenie wymaga instalacji, przekazując mu otrzymane identyfikatory. Menedżer PnP w trybie użytkownika najpierw próbuje automatycznie zainstalować urządzenie bez interwencji użytkownika. W tym celu menedżer PnP w trybie użytkownika uruchamia narzędzie rundll32.exe w celu uruchomienia Kreatora instalacji sterownika urządzenia (%Windir%\System32\Newdev.dll).

Kreator instalacji sterownika urządzenia inicjuje wyszukiwanie odpowiedniego sterownika dla urządzenia, korzystając z informacji ze wszystkich systemowych plików inf znajdujących się w następujących zaufanych lokalizacjach systemu:

  • Repozytorium sterowników;
  • Aktualizacja systemu Windows;
  • Katalog systemowy plików INF;

Do powyższych celów wyszukiwania i instalacji sterownika wykorzystywane są funkcje bibliotek setupapi.dll (funkcje wspomagające instalację) i cfgmgr32.dll (menedżer konfiguracji). W procesie wyszukiwania wykorzystywane są aktualnie uzyskiwane identyfikatory HardwareID oraz (opcjonalnie) IntegratedID, których wartości opisują wszystkie możliwe opcje identyfikacji sprzętu w pliku instalacyjnym sterownika, czyli pliku inf. Wartości identyfikatora zainstalowanego urządzenia porównywane są z wartościami opisanymi w sekcjach Modele plików inf zarejestrowanych w systemie. Listy identyfikatorów są uporządkowane w taki sposób, że bardziej szczegółowe deskryptory sprzętu są prezentowane jako pierwsze na listach. Jeśli w wielu plikach inf znaleziono dopasowania identyfikatora, bardziej dokładne dopasowanie jest uważane za preferowane w stosunku do mniej dokładnego dopasowania, podpisane pliki inf są preferowane w stosunku do niepodpisanych plików inf, a późniejsze podpisane pliki inf są preferowane w stosunku do wcześniej podpisanych plików inf. Jeśli nie zostanie znalezione dopasowanie na podstawie identyfikatora sprzętu, używany jest oczywiście identyfikator zgodności, jeśli jest dostępny. Jeśli na podstawie identyfikatora zgodności nie zostanie znalezione dopasowanie, Kreator dodawania sprzętu może wyświetlić monit o zlokalizowanie najnowszego sterownika sprzętu. Przyjrzyjmy się bliżej wszystkim tym źródłom informacji o kierowcach.

Repozytorium sterowników

Kreator instalacji sterownika próbuje znaleźć odpowiedni plik inf w systemowym magazynie sterowników, zlokalizowanym w katalogu %Windir%\System32\DriverStore, który zawiera wszystkie, bez wyjątku, sterowniki systemowe zawarte w dystrybucji Windows, uzyskane za pośrednictwem „Windows Update "usługi lub instalowane w systemie przez użytkownika.

Repozytorium sterowników to bezpieczna lokalizacja systemu, katalog przeznaczony do przechowywania wszystkich pakietów sterowników, które kiedykolwiek zostały zainstalowane w systemie.

Sklep ze sterownikami został po raz pierwszy wprowadzony w systemie Windows Vista. Przed zainstalowaniem jakiegokolwiek sterownika w systemie, najpierw wyspecjalizowany kod sprawdza podpis cyfrowy sterownika, następnie składnię plików inf sterownika, następnie uprawnienia bieżącego użytkownika, a dopiero potem umieszcza wszystkie składniki sterownika w systemowym magazynie sterowników. Ale wtedy sterownik znajdujący się w repozytorium sterowników może zostać użyty do zainstalowania urządzeń w systemie. Ponieważ procedura umieszczania sterownika w repozytorium jest już dość dojrzała, repozytorium sterowników jest najbardziej zaufanym źródłem informacji o sterownikach.

Katalog systemowy plików INF

Równolegle system wyszukuje sterownik w lokalizacji systemowej opisanej wartością parametru DevicePath znajdującej się w gałęzi rejestru HKLM\Software\Microsoft\Windows\CurrentVersion. Zazwyczaj wartością jest %SystemRoot%\inf, co w większości systemów odpowiada lokalizacji C:\Windows\inf.

plik INF

Chciałbym zrobić małą dygresję i osobno porozmawiać o plikach informacyjnych pakietu sterowników. inf jest jednym z kluczowych elementów zestawu sterowników. Przechowuje sekwencję operacji instalacji i dezinstalacji sterownika, opisaną specjalnymi dyrektywami wskazującymi lokalizację funkcjonalnych plików sterownika. Plik zawiera polecenia dodające informacje do rejestru odpowiedzialnego za wyświetlenie (Enum) sterownika i jego klasy (Class), a także może zawierać instrukcje dla Kreatora instalacji sprzętu dotyczące uruchomienia tzw. instalatorów głównych (Class Installer) i instalatorów dodatkowych ( CoInstaller , Co-installer) dla klasy urządzenia i samego urządzenia. Dodatkowo plik inf określa typ, producenta, model urządzenia, klasę sterownika, niezbędne pliki i zasoby.

Koinstalator (strukturalnie zwykła biblioteka DLL) to dodatkowy instalator wywoływany na etapie instalacji, który wykonuje kroki instalacyjne specyficzne dla podklasy lub urządzenia, takie jak przygotowanie infrastruktury do pracy sterownika w systemie (np. Pakiet .Framework), wyświetlający okna dialogowe konfiguracyjne, w których użytkownik może określić ustawienia dla konkretnego urządzenia.

Ważną cechą współinstalatorów jest to, że w razie potrzeby wiążą instancje nowego urządzenia z protokołami wymaganymi do działania. Może to dotyczyć na przykład różnych typów urządzeń komunikacyjnych, które wymagają do działania różnych protokołów i transportów, takich jak ndis, pppoe, tcpip, tcpip6, smb, netbt.
Plik .inf dodatkowo opisuje operacje rozpakowywania, kopiowania, uruchamiania, zmiany nazw plików, dodawania i usuwania kluczy w rejestrze i wiele więcej.
Wróćmy jednak do głównego algorytmu instalacji sterownika w systemie Windows. Jeżeli instalator sterownika urządzenia nie znajdzie odpowiednich sterowników w podanych powyżej lokalizacjach, system oznaczy urządzenie jako niezidentyfikowane.

W takim przypadku użytkownik proszony jest o kontynuowanie instalacji urządzenia poprzez aplet. menadżer urządzeń. Po samodzielnym wybraniu przez użytkownika urządzenia i wskazaniu lokalizacji plików sterownika, algorytm instalacji sterownika kontynuuje pracę, a kolejnym krokiem jest sprawdzenie podpisu cyfrowego sterownika.

Weryfikacja podpisu cyfrowego sterownika

Faktem jest, że sterownik jako część kodu trybu jądra jest dość krytycznym elementem systemu operacyjnego, a wszelkie błędy popełnione przez programistę w kodzie sterownika mogą łatwo doprowadzić do poważnych awarii (BSOD) w systemie. Od jakiegoś czasu Microsoft jest dość wyczulony na jakość kodu sterowników i w związku z tym do systemów operacyjnych Windows wprowadzono takie mechanizmy, jak cyfrowy podpis sterowników i systemowa polityka podpisów sterowników.

Podpis cyfrowy kierowcy to ciąg danych o zmiennej długości, który daje pewność, że kod sterownika został utworzony przez zaufane źródło i nie został poddany nieupoważnionym modyfikacjom.

Następnym krokiem jest część kodu menedżera PnP dotycząca trybu użytkownika, która sprawdza zasady podpisywania sterowników systemowych. Jeśli zasady systemowe nakazują kodowi jądra blokowanie lub ostrzeganie o instalacji niepodpisanych sterowników, menedżer PnP analizuje plik inf sterownika pod kątem obecności dyrektywy CatalogFile wskazującej plik katalogu (plik z rozszerzeniem .cat) zawierający podpis cyfrowy pakietu sterowników.

Plik katalogu (.cat) to specjalny plik, który pełni funkcję podpisu cyfrowego dla całego pakietu sterowników, ponieważ każdy plik zawarty w pakiecie sterowników nie jest podpisywany osobno. Jedynym wyjątkiem są pliki binarne sterownika jądra fazy rozruchu, ale są one sprawdzane przez oddzielny kod jądra.

Aby przetestować sterowniki i je podpisać, utworzono Laboratorium Jakości Sprzętu Microsoft Windows (WHQL), które dokładnie testuje sterowniki dostarczane z dystrybucjami Windows, a także sterowniki od głównych dostawców sprzętu. Dla wszystkich pozostałych twórców sterowników zapewnione są procedury umożliwiające uzyskanie możliwości samodzielnego podpisywania sterowników za opłatą. Kiedy sterownik przejdzie wszystkie testy WHQL, zostaje „podpisany”. Oznacza to, że WHQL generuje skrót, czyli unikalny podpis, dla sterownika, który jednoznacznie identyfikuje pliki sterownika, a następnie podpisuje go za pomocą algorytmów kryptograficznych przy użyciu specjalnego klucza prywatnego Microsoft używanego do podpisywania sterowników. Podpisany skrót jest umieszczany w pliku katalogu (plik .cat), który jest umieszczany bezpośrednio w katalogu pakietu sterownika.
Podczas procesu instalacji sterownika menedżer PnP w trybie użytkownika wyodrębnia podpis sterownika z pliku .cat, odszyfrowuje podpis przy użyciu klucza publicznego Microsoft i porównuje wynikowy skrót ze skrótem zainstalowanego pliku sterownika. Jeśli skróty są zgodne, sterownik jest oznaczany jako pomyślny, jeśli przeszedł testy WHQL. Jeśli podpisu nie można zweryfikować, menedżer PnP postępuje zgodnie z ustawieniami polityki podpisywania sterowników systemowych, albo zabraniając instalacji sterownika, albo nadal zezwalając na instalację sterownika.

Tworzenie kopii zapasowej

Całkiem dobrą strategią systemu Windows jest utworzenie punktu przywracania przed dodaniem nowych sterowników urządzeń do systemu. Wynika to przede wszystkim z faktu, że sterownik trybu jądra zawierający błąd może spowodować, że system stanie się całkowicie niesprawny i co w takim razie powinniśmy z tym systemem zrobić? Nawet pomimo wszystkich podpisów i kontroli użytkownik powinien mieć możliwość wycofania konfiguracji, jeśli np. coś mu się nie spodoba po instalacji.

Instalacja sterownika

W tym momencie pakiet sterowników innej firmy jest wdrażany w systemowym magazynie sterowników. Następnie system przeprowadza właściwą instalację sterownika ze sklepu sterowników, która odbywa się za pomocą narzędzia %Windir%\System32\drvinst.exe. Na tym etapie zachodzą następujące zdarzenia:

  • inf sterownika jest kopiowany do specjalistycznego folderu %Windir%/inf. W przypadku sterowników innych firm często zmienia się nazwę pliku na OEMx.inf, gdzie x to numer seryjny pliku inf w katalogu.
  • Kod systemu operacyjnego rejestruje fakt instalacji pliku inf w rejestrze.
  • Wzdłuż ścieżki w rejestrze tworzony jest węzeł urządzenia (devnode). HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\ \\ , który zawiera szczegółowe informacje o urządzeniu.
  • Pliki binarne sterownika są kopiowane do folderu docelowego %Windir%\System32\DRIVERS i ewentualnie innych folderów docelowych. Klucze rejestru zostały zaktualizowane.
  • Generowany jest klucz rejestru odpowiadający sterownikowi: HKLM\SYSTEM\CurrentControlSet\Services\nazwa_sterownika. Generowane są kluczowe parametry.
  • Generowany jest klucz rejestru odpowiedzialny za rejestrowanie zdarzeń sterownika, który znajduje się w oddziale HKLM\SYSTEM\CurrentControlSet\Services\EventLog\System\nazwa_sterownika.
  • Menedżer PnP wywołuje procedurę DriverEntry dla każdego nowo zainstalowanego sterownika. Następnie menedżer PnP w trybie jądra próbuje „uruchomić” sterownik, ładując go do pamięci i wywołując procedurę AddDevice sterownika, aby poinformować sam sterownik o obecności urządzenia, dla którego został załadowany.

Lokalizacja informacji o kierowcy

Oprócz opisu samego algorytmu instalacji sterowników w systemie Windows chciałbym wyróżnić osobny rozdział i poświęcić go opisowi możliwych lokalizacji umieszczania informacji o sterownikach w systemie plików i rejestrze. Z praktycznego punktu widzenia informacje te mają na celu uproszczenie ręcznej edycji w przypadku jakichkolwiek krytycznych awarii. Poniżej znajdują się lokalizacje, w których możesz zauważyć ślady informacji o sterownikach.

Ogólne dzienniki sterowników

W systemie znajduje się wiele dzienników, które mogą pomóc w rozwiązaniu różnych problemów ze sterownikami.

  • %Windir%\setupact.log — zawiera komunikaty debugowania z instalatora sterownika trybu jądra, który jest biblioteką DLL Win32 towarzyszącą procesowi instalacji urządzenia;
  • %Windir%\inf\setupapi.app.log – zawiera komunikaty z procesu instalacji aplikacji;
  • %Windir%\inf\setupapi.dev.log -- zawiera komunikaty z procesu instalacji urządzenia;

Dziennik sterowników

Jeśli używasz Menedżera pakietów (pkgmgr) do instalowania/odinstalowywania pakietu, który (z kolei) instaluje, aktualizuje lub odinstalowuje sterownik, masz możliwość włączenia (w celach debugowania) tworzenia specjalnego pliku dziennika sterowników .log , który będzie zawierał tylko błędy specyficzne dla sterownika. Aby utworzyć ten dziennik, utwórz/ustaw następujący klucz rejestru, a następnie ponownie uruchom pkgmgr. Następnie w katalogu, z którego uruchomiono pkgmgr, zostanie utworzony plik sterowniki.log.
Oddział: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Instalator urządzenia
Klucz: DebugPkgMgr
Wpisz: DWord
Wartość: 1

%Windir%\inf

Wszystkie pliki inf są przechowywane w tym katalogu. Jak wspomniano powyżej, po zainstalowaniu w systemie sterownika innej firmy, jego plik inf zostaje przemianowany na OEMx.inf, dzięki czemu w katalogu można zobaczyć całą serię podobnych plików. Kod systemu operacyjnego pamięta fakt, że plik inf został zainstalowany w rejestrze.

%Windir%\System32\DRIVERS

Jest to katalog w systemie plików Windows, w którym znajdują się pliki sterownika. We współczesnych systemach operacyjnych, a mówię tu o Windowsie Vista i nowszych, zdecydowana większość sterowników w tym katalogu ma rozszerzenie .sys, pliki dll są mniej powszechne, ale nie zmienia to ogólnego znaczenia, gdyż niezależnie od rozszerzenie, wszystkie mają identyczną strukturę jak pliki .dll. We wcześniejszych systemach operacyjnych spotykano formaty takie jak .drv i .vxd.

%Windir%\System32\DriverStore

Systemowa kolekcja sterowników, która ma zawierać każdy sterownik, który przeszedł przez system. Używany od systemu Windows Vista. Przed zainstalowaniem jakiegokolwiek sterownika w systemie operacyjnym, najpierw wyspecjalizowany kod sprawdza sygnaturę sterownika, następnie składnię plików inf sterownika, następnie uprawnienia bieżącego użytkownika, a dopiero potem dodaje wszystkie komponenty sterownika do kolekcji systemowej. Dopiero potem sterownik będzie mógł być używany w systemie do instalowania urządzeń bez ingerencji użytkownika.

HKLM\SYSTEM\CurrentControlSet\Enum

Gałąź rejestru zawierająca informacje o urządzeniach obecnych w systemie. Menedżer PnP tworzy tutaj klucz dla każdego urządzenia w formacie HKLM\SYSTEM\CurrentControlSet\Enum\Enumerator\deviceID. gdzie Enumerator jest identyfikatorem magistrali opisanym powyżej w artykule, uzyskanym na etapie wyliczania urządzeń, urządzenieid jest identyfikatorem typu urządzenia. Klucz zawiera następujące informacje: opis urządzenia, identyfikatory sprzętu (Hardware ID), identyfikatory kompatybilnych urządzeń (Compatible ID) i wymagania dotyczące zasobów. Ul jest zarezerwowany do użytku wyłącznie przez kod systemu operacyjnego, dlatego odradza się aplikacjom i sterownikom użytkownika bezpośrednią interakcję z nim i zachęca do korzystania z udokumentowanych funkcji systemu.

HKLM\SYSTEM\CurrentControlSet\Control

Gałąź rejestru zawierająca informacje o różnych parametrach konfiguracyjnych sterownika podczas uruchamiania systemu operacyjnego. Zawiera tak ważne klucze jak:

  • Klasa zawiera informacje o klasach instalacji urządzeń, które służą do grupowania urządzeń, które są konfigurowane i instalowane w podobny sposób. Dla każdej klasy instalacji ten klucz zawiera klucz, którego nazwa odpowiada nazwie GUID odpowiedniej klasy instalacji.
  • CoDeviceInstallers zawiera informacje o współinstalatorach klas
  • DeviceClasses zawiera informacje o interfejsach urządzeń zarejestrowanych w systemie. każdy sterownik, który chce wchodzić w interakcję z programami trybu użytkownika w systemie, musi zapewniać interfejs. Klasa interfejsu urządzenia udostępnia funkcjonalność urządzenia i jego sterownika innym komponentom systemu i aplikacjom trybu użytkownika.

HKLM\SYSTEM\CurrentControlSet\Services

Gałąź rejestru służąca do umieszczania informacji o wszystkich usługach (sterownikach) w systemie. Każdy sterownik systemowy umieszcza w połączeniach formularza dość ważne globalne informacje o sobie HKLM\SYSTEM\CurrentControlSet\Services\<Имя_драйвера> , który jest używany przez sterownik podczas procesu inicjalizacji na etapie uruchamiania systemu. Gałąź jest aktywnie wykorzystywana przez menedżera PnP do przekazywania parametrów podczas wywoływania procedury inicjalizacji sterownika.
Ten krzak zawiera następujące elementy:

  • ImagePath - zawiera pełną ścieżkę do pliku binarnego sterownika (obrazu). program instalacyjny wypełnia tę wartość w oparciu o dane z pliku inf pakietu sterownika;
  • Parametry - przechowuje indywidualne informacje o sterowniku, wypełniane na podstawie danych umieszczonych w pliku inf pakietu sterowników;
  • Wydajność - informacja służąca do monitorowania wydajności urządzenia sterowanego przez sterownik. Określa nazwę biblioteki DLL monitorowania wydajności i nazwy funkcji eksportowanych przez tę bibliotekę DLL. Wypełniane na podstawie danych uzyskanych z pliku inf;

HKLM\SYSTEM\CurrentControlSet\HardwareProfiles

Gałąź rejestru zawierająca informacje o profilach sprzętu systemu i zaprojektowana do obsługi tej technologii. Profil sprzętowy to po prostu zbiór zmian w standardowej konfiguracji sprzętowej i konfiguracji usługi (konfiguracja pierwotna), ładowany podczas uruchamiania systemu. Zawiera określone zmiany w oryginalnym, głównym profilu sprzętowym skonfigurowanym w dwóch kluczach rejestru: HKLM\SOFTWARE i HKLM\SYSTEM. Nieużywany w systemie Windows 7, chociaż klucze rejestru pozostają, prawdopodobnie ze względu na kompatybilność.


Czasami błędy związane z plikiem .inf i innymi systemami Windows mogą wynikać z problemów w rejestrze systemu Windows. Kilka programów może korzystać z pliku .inf, ale w przypadku ich odinstalowania lub modyfikacji pozostawiane są czasami „osierocone” (niepoprawne) wpisy rejestru systemu Windows.

Zasadniczo oznacza to, że chociaż rzeczywista ścieżka pliku mogła się zmienić, jego poprzednia niepoprawna lokalizacja jest nadal rejestrowana w rejestrze systemu Windows. Gdy system Windows próbuje wyszukać nieprawidłowe odniesienia do plików (lokalizacje plików na komputerze), może wystąpić błąd .inf. Ponadto infekcja złośliwym oprogramowaniem może spowodować uszkodzenie wpisów rejestru związanych z Academic Fitness Tools for Academic Success. Dlatego te uszkodzone wpisy rejestru systemu Windows muszą zostać naprawione, aby rozwiązać problem u źródła.

Ręczna edycja rejestru systemu Windows w celu usunięcia nieprawidłowych kluczy .inf nie jest zalecana, chyba że jesteś specjalistą serwisu komputerów PC. Błędy popełnione podczas edycji rejestru mogą spowodować, że komputer przestanie działać i spowodować nieodwracalne uszkodzenie systemu operacyjnego. W rzeczywistości nawet jeden przecinek umieszczony w niewłaściwym miejscu może uniemożliwić uruchomienie komputera!

Ze względu na to ryzyko zdecydowanie zalecamy korzystanie z zaufanego narzędzia do czyszczenia rejestru, takiego jak WinThruster (opracowanego przez partnera z certyfikatem Microsoft Gold Certified), do skanowania i naprawiania wszelkich problemów w rejestrze związanych z plikiem .inf. Za pomocą narzędzia do czyszczenia rejestru można zautomatyzować proces znajdowania uszkodzonych wpisów rejestru, brakujących odniesień do plików (takich jak te powodujące błąd .inf) i uszkodzonych łączy w rejestrze. Przed każdym skanowaniem automatycznie tworzona jest kopia zapasowa, która pozwala cofnąć zmiany jednym kliknięciem i chroni Cię przed możliwym uszkodzeniem komputera. Najlepsze jest to, że wyeliminowanie błędów rejestru może radykalnie poprawić szybkość i wydajność systemu.


Ostrzeżenie: Jeśli nie jesteś doświadczonym użytkownikiem komputera, NIE zalecamy ręcznej edycji rejestru systemu Windows. Nieprawidłowe użycie Edytora rejestru może być przyczyną poważnych problemów, które spowodują, że konieczna będzie ponowna instalacja systemu Windows. Nie gwarantujemy, że problemy wynikające z nieprawidłowego użycia Edytora rejestru będą mogły zostać naprawione. Korzystasz z Edytora rejestru na własne ryzyko.

Przed ręczną naprawą rejestru systemu Windows należy utworzyć kopię zapasową, eksportując część rejestru powiązaną z plikiem .inf (na przykład Academic Fitness Tools for Academic Success):

  1. Kliknij przycisk Zaczynać.
  2. Wchodzić " Komenda„W pasek wyszukiwania... NIE KLIKAJ JESZCZE WCHODZIĆ!
  3. Przytrzymując klawisze CTRL-Shift na klawiaturze naciśnij WCHODZIĆ.
  4. Wyświetlone zostanie okno dialogowe umożliwiające dostęp.
  5. Kliknij Tak.
  6. Otwiera się czarna skrzynka z migającym kursorem.
  7. Wchodzić " regedit" i naciśnij WCHODZIĆ.
  8. W Edytorze rejestru wybierz klucz związany z plikiem .inf (na przykład Academic Fitness Tools for Academic Success), dla którego chcesz utworzyć kopię zapasową.
  9. W menu Plik wybierać Eksport.
  10. Na liście Zapisz do Wybierz folder, w którym chcesz zapisać kopię zapasową klucza Academic Fitness Tools for Academic Success.
  11. W polu Nazwa pliku Wprowadź nazwę pliku kopii zapasowej, np. „Kopia zapasowa Academic Fitness Tools for Academic Success”.
  12. Upewnij się, że pole Zakres eksportu wybrana wartość Wybrany oddział.
  13. Kliknij Ratować.
  14. Plik zostanie zapisany z rozszerzeniem .reg.
  15. Utworzono kopię zapasową wpisu rejestru związanego z plikiem .inf.

Poniższe kroki dotyczące ręcznej edycji rejestru nie zostaną opisane w tym artykule, ponieważ mogą spowodować uszkodzenie systemu. Jeśli chcesz uzyskać więcej informacji na temat ręcznej edycji rejestru, skorzystaj z poniższych łączy.