Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W przypadku większości systemów fizyczna hierarchia urządzeń na komputerze określa kolejność, w jakiej systemy Windows i menedżer PnP ładują sterowniki. System Windows i menedżer PnP konfigurują urządzenia rozpoczynające się od urządzenia głównego systemu, a następnie konfigurują urządzenia podrzędne urządzenia głównego (na przykład adapter PCI), elementy podrzędne tych urządzeń itd. Menedżer PnP ładuje sterowniki dla każdego urządzenia, gdy urządzenie jest konfigurowane, jeśli sterowniki nie zostały wcześniej załadowane dla innego urządzenia.
Ustawienia w pliku INF mogą mieć wpływ na kolejność ładowania sterowników. W tym temacie opisano odpowiednie wartości, które dostawcy powinni określić w sekcji zainstalowanej usługi odniesionej przez dyrektywę INF AddService sterownika. W szczególności w tym temacie omówiono wpisy StartType, BootFlags, LoadOrderGroup i Dependencies .
Sterowniki powinny przestrzegać następujących reguł określania typu startowego:
Sterownik PnP nie jest potrzebny na początku rozruchu
Sterownik PnP powinien mieć typ uruchamiania SERVICE_DEMAND_START (0x3), co oznacza, że menedżer PnP może załadować sterownik, gdy znajdzie urządzenie, które obsługuje sterownik.
Sterownik urządzenia wymaganego do uruchomienia komputera
Jeśli urządzenie jest wymagane do uruchomienia komputera, sterowniki urządzenia powinny mieć typ startu SERVICE_BOOT_START (0x0).
Sterownik niewładowywany przy rozruchu, który wykrywa urządzenia nieenumerowalne przez PnP
W przypadku urządzenia, które nie jest enumerowalne przez PnP, sterownik zgłasza urządzenie menedżerowi PnP przez wywołanie IoReportRootDevice lub IoReportDetectedDevice. Taki sterownik powinien mieć typ startu SERVICE_SYSTEM_START (0x01), aby system Windows załadował sterownik podczas inicjowania systemu.
Tylko sterowniki, które zgłaszają sprzęt inny niż PnP, powinny ustawić ten typ uruchamiania. Jeśli sterownik obsługuje zarówno urządzenia PnP, jak i inne niż PnP, powinien ustawić ten typ uruchamiania.
Sterownik inny niż PnP, który musi zostać uruchomiony przez menedżera sterowania usługami
Taki sterownik powinien mieć typ startu SERVICE_AUTO_START (0x02). Sterowniki PnP nie mogą ustawiać tego typu uruchamiania.
Należy napisać sterownik PnP, aby można go było załadować, gdy system Windows konfiguruje urządzenie, które obsługuje sterownik. Z drugiej strony sterownik powinien być w stanie zostać usunięty w dowolnym momencie, gdy menedżer PnP ustali, że nie ma już urządzeń, które sterownik obsługuje. Jedynymi kolejnościami ładowania sterowników, od których powinny zależeć sterowniki PnP, są następujące:
Sterowniki urządzenia podrzędnego mogą zależeć od tego, czy sterowniki dla urządzenia nadrzędnego zostały załadowane.
Sterownik w stosie urządzenia może zależeć od tego, czy wszystkie sterowniki poniżej niego są ładowane.
Na przykład sterownik funkcji może mieć pewność, że wszystkie sterowniki filtru niższego są ładowane.
Należy jednak pamiętać, że sterownik w stosie urządzenia nie może zależeć od sekwencyjnego ładowania po niższych sterownikach urządzenia, ponieważ sterownik mógł zostać załadowany wcześniej podczas konfigurowania innego urządzenia.
Sterowniki filtrów w grupie filtrów nie mogą przewidzieć ich kolejności ładowania. Jeśli na przykład urządzenie ma trzy zarejestrowane sterowniki górnego filtru, te trzy sterowniki zostaną załadowane po sterowniku funkcji, ale mogą zostać załadowane w dowolnej kolejności w ich górnej grupie filtrów.
Jeśli sterownik ma jawną zależność kolejności ładowania od innego sterownika, ta zależność powinna zostać zaimplementowana za pośrednictwem relacji nadrzędnej/podrzędnej. Sterownik dla urządzenia podrzędnego może zależeć od załadowania sterowników dla urządzenia nadrzędnego zanim zostaną załadowane sterowniki podrzędne.
Aby wzmocnić znaczenie ustawiania poprawnej wartości typu StartType , na poniższej liście opisano, jak system Windows i menedżer PnP używają wpisów StartType w plikach INF:
Podczas uruchamiania systemu moduł ładujący systemu operacyjnego ładuje sterowniki typu SERVICE_BOOT_START przed przeniesieniem kontroli do jądra. Te sterowniki są w pamięci, gdy jądro uzyskuje kontrolę.
Sterowniki rozruchu są ładowane przed skonfigurowaniem większości urządzeń, więc ich kolejność ładowania nie może być określona przez hierarchię urządzeń. Sterowniki rozruchu mogą używać wpisów INF LoadOrderGroup , aby zamówić ich ładowanie. System operacyjny ignoruje wpisy zależności INF dla sterowników rozruchu.
Menedżer PnP wywołuje procedury DriverEntry sterowników SERVICE_BOOT_START, aby sterowniki mogły obsługiwać urządzenia rozruchowe.
Jeśli urządzenie rozruchowe ma urządzenia podrzędne, zostaną one wyliczone. Urządzenia podrzędne są konfigurowane i uruchamiane, jeśli ich sterowniki również są sterownikami rozruchu. Jeśli sterowniki urządzenia nie są sterownikami rozruchu, menedżer PnP tworzy węzeł urządzenia (devnode) dla urządzenia, ale nie uruchamia jeszcze urządzenia.
Po załadowaniu wszystkich sterowników rozruchu i uruchomieniu urządzeń rozruchowych menedżer PnP konfiguruje pozostałe urządzenia PnP i ładuje ich sterowniki.
Menedżer PnP przeprowadzi drzewo urządzeń i ładuje sterowniki dla węzłów deweloperskich , które nie zostały jeszcze uruchomione (czyli wszystkie niestartowane węzły devnode z poprzedniego kroku). Podczas uruchamiania każdego urządzenia menedżer PnP wylicza dzieci urządzenia, jeśli istnieją.
Podczas konfigurowania tych urządzeń menedżer PnP ładuje sterowniki dla urządzeń, niezależnie od wartości StartType sterowników (z wyjątkiem sytuacji, gdy parametr StartType jest SERVICE_DISABLED) przed przejściem do uruchomienia urządzeń. Wiele z tych sterowników jest SERVICE_DEMAND_START sterowników.
Menedżer pnP ignoruje wpisy rejestru, które zostały utworzone w wyniku wpisów zależności INF i wpisy LoadOrderGroup dla sterowników, które są ładowane w tym kroku. Kolejność ładowania jest oparta na hierarchii urządzeń fizycznych.
Na końcu tego kroku wszystkie urządzenia są skonfigurowane, z wyjątkiem urządzeń, które nie są wykrywalne przez PnP, oraz elementów podrzędnych tych urządzeń. (Elementy potomne mogą lub nie mogą być wyliczalne PnP).
Menedżer pnP ładuje sterowniki StartType SERVICE_SYSTEM_START, które nie zostały jeszcze załadowane.
Te sterowniki wykrywają i zgłaszają swoje urządzenia inne niż PnP. Menedżer PnP przetwarza wpisy rejestru, które są wynikiem wpisów INF LoadOrderGroup dla tych sterowników. Ignoruje wpisy rejestru, które zostały utworzone na skutek wpisów zależności INF dla tych sterowników.
Menedżer kontroli usług ładuje sterowniki typu StartType SERVICE_AUTO_START, które nie zostały jeszcze załadowane.
Menedżer kontroli usług przetwarza informacje o bazie danych usługi w odniesieniu do usług DependOnGroup i DependOnServices. Ta informacja pochodzi z wpisów zależności we wpisach INF AddService. Należy pamiętać, że informacje o zależnościach są przetwarzane tylko dla sterowników innych niż PnP, ponieważ wszystkie niezbędne sterowniki PnP zostały załadowane we wcześniejszym kroku uruchamiania systemu. Menedżer kontroli usługi ignoruje informacje INF LoadOrderGroup .
Aby uzyskać więcej informacji na temat menedżera kontroli usług, zobacz dokumentację zestawu Microsoft Windows SDK.
Używanie bootFlags do podwyższania poziomu parametru StartType sterownika podczas rozruchu w zależności od scenariusza rozruchu
System operacyjny może podwyższyć poziom typu StartType sterownika, aby był sterownikiem uruchamiania rozruchu w zależności od wartości BootFlags określonej w inf sterownika. W pliku INF można określić jedną lub więcej z następujących wartości liczbowych, połączonych za pomocą OR, wyrażonych jako wartości szesnastkowe:
- Jeśli sterownik powinien zostać awansowany na sterownik rozruchowy przy rozruchu sieciowym, określ 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD).
- Jeśli sterownik powinien być promowany podczas rozruchu z dysku VHD, określ 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD)
- Jeśli sterownik powinien zostać podwyższony podczas rozruchu z dysku USB, określ 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD).
- Jeśli sterownik ma zostać promowany podczas uruchamiania z pamięci SD, określ 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
- Jeśli sterownik powinien być promowany podczas rozruchu z dysku na kontrolerze USB 3.0, określ 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD).
- Jeśli sterownik powinien być promowany podczas rozruchu z włączonym mierzonym rozruchem, określ 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD).
- Jeśli sterownik powinien zostać podwyższony podczas rozruchu z włączonym rozruchem weryfikatora, określ 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD).
- Jeśli sterownik powinien zostać załadowany podczas rozruchu WinPE, określ 0x80 (CM_SERVICE_WINPE_BOOT_LOAD).
Więcej informacji na temat promowania StartType sterownika podczas rozruchu, w zależności od scenariusza rozruchu, znajdziesz w dyrektywie INF AddService.