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.
Każdy sterownik, który musi inicjalizować się etapami, może zawierać rutynę Reinitialize. Procedura Reinitialize jest wywoływana po tym, jak procedura DriverEntry zwróciła kontrolę, a inne sterowniki się zainicjowały. Zazwyczaj procedura Reinitialize wykonuje zadania, które należy wykonać po uruchomieniu innego sterownika.
Na przykład sterownik klasy klawiatury systemu, kbdclass, obsługuje zarówno porty PnP, jak i starsze porty klawiatury. Jeśli system zawiera co najmniej jeden starszy port, którego menedżer PnP nie może wykryć, sterownik klasy klawiatury musi mimo to utworzyć obiekt urządzenia dla każdego portu i nałożyć się na sterowniki niższego poziomu obsługujące ten port. W związku z tym sterownik klasy ma procedurę ponownego inicjowania , która ma być wywoływana po wywołaniu procedur DriverEntry i AddDevice , a inne sterowniki zostały załadowane. Procedura Reinitialize wykrywa port, tworzy dla niego obiekt urządzenia i nakłada sterownik na sterowniki niższego poziomu dla tego urządzenia.
Procedura DriverEntry kierowcy wywołuje procedurę IoRegisterDriverReinitialization w celu kolejkowania procedury Reinitialize do wykonania. Ponowne inicjowanie procedury może się również wywołać IoRegisterDriverReinitialization, co powoduje ponowne wywołanie procedury. Jeden z parametrów do ponownego zainicjowania wskazuje liczbę wywołań.
Wywołanie funkcji IoRegisterDriverReinitialization może zawierać wskaźnik do danych kontekstowych zdefiniowanych przez sterownik, które system dostarcza jako dane wejściowe do ponownego zainicjowania. Jeśli procedura Reinitialize używa rejestru, dane kontekstu powinny zawierać wskaźnik RegistryPath , który został przekazany do procedury DriverEntry , ponieważ ten wskaźnik nie jest parametrem wejściowym do procedury Reinitialize .
Ponowne inicjowanie procedury nie zostanie wywołana, jeśli DriverEntry nie zwróci STATUS_SUCCESS.
Zazwyczaj kierowca z procedurą Reinitialize jest sterownikiem wyższego poziomu, który kontroluje zarówno PnP, jak i starsze urządzenia. Oprócz tworzenia obiektów urządzeń wykrywanych przez menedżera PnP (i dla których menedżer PnP wywołuje procedurę AddDevice sterownika), sterownik musi również utworzyć obiekty urządzeń dla starszych urządzeń, których menedżer PnP nie wylicza. Procedura Reinitialize tworzy odpowiednie obiekty urządzeń i nakłada sterownik na kolejny znajdujący się niżej sterownik dla urządzenia bazowego.
Jeśli sterownik ma procedurę Reinitialize, inicjalizuje się w ten sam sposób, co opisano w Pisanie procedury DriverEntry, a także ma takie same podstawowe wymagania jak procedura DriverEntry.