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 zależności od pozycji określonego sterownika w łańcuchu sterowników warstwowych, charakter urządzenia bazowego i projekt sterownika, procedura DriverEntry może być również odpowiedzialna za następujące zadania:
Wywołanie IoAllocateDriverObjectExtension w celu utworzenia i zainicjowania rozszerzenia obiektu sterownika, jeśli sterownik wymaga przechowywania danych w skali całego sterownika. Rozszerzenie obiektu sterownika to struktura danych specyficzna dla sterownika. Na przykład sterownik może użyć rozszerzenia obiektu sterownika do przechowywania ścieżki rejestru lub innych informacji globalnych.
Wywołanie funkcji PsCreateSystemThread w celu utworzenia wątków roboczych dla menedżera wykonawczego, jeżeli sterownik jest sterownikiem najwyższego poziomu (takim jak sterownik systemu plików), który używa takich wątków. W takim przypadku sterownik musi również mieć procedurę wywołania zwrotnego typu WORKER_THREAD_ROUTINE, która przyjmuje jako jedyny parametr PVOID Parameter.
Rejestrowanie procedury Reinitialize . (Zobacz Pisanie procedury ponownej inicjalizacji.)
Obsługa wymagań inicjalizacji specyficznych dla klasy, które różnią się od omówionych tutaj, takich jak te, które może mieć sterownik miniportu lub miniklasy specyficzny dla urządzenia, współpracujący z portem lub sterownikiem klasy. Aby uzyskać szczegółowe informacje, zobacz dokumentację specyficzną dla typu urządzenia w zestawie sterowników systemu Windows (WDK).
Zapewnianie magazynu dla zasobów systemowych
Przydziel obiekty dla poszczególnych urządzeń w procedurze AddDevice lub w procedurze Dispatch, która obsługuje żądanie pnP IRP_MN_START_DEVICE , a nie w DriverEntry.
Sterownik może jednak wymagać przydzielenia dodatkowej pamięci w przestrzeni systemowej na inne potrzeby całego sterownika. Jeśli tak, procedura DriverEntry może wywołać jedną (lub więcej) z następujących procedur:
IoAllocateDriverObjectExtension, aby utworzyć obszar kontekstu skojarzony z obiektem sterownika
ExAllocatePoolWithTag dla pamięci stronicowanej lub niestronicowanej w przestrzeni systemowej
MmAllocateNonCachedMemory lub MmAllocateContiguousMemory dla pamięci podręcznej niestronicowanej pamięci systemowej (używanej dla we/wy)
Każda procedura DriverEntry działa w kontekście wątku systemowego na poziomie IRQL równym PASSIVE_LEVEL. W związku z tym każda pamięć przydzielona exAllocatePoolWithTag do użytku wyłącznie podczas inicjowania może pochodzić ze stronicowanej puli, o ile sterownik nie kontroluje urządzenia, które przechowuje plik strony systemu. Przydzielona pamięć musi zostać zwolniona z ExFreePool, zanim DriverEntry zwróci kontrolę. Jednak sterownik, który ustawia procedurę Reinitialize, może przekazać wskaźnik do tej pamięci, gdy wywołuje IoRegisterDriverReinitialization, co sprawia, że procedura Reinitialize jest odpowiedzialna za zwolnienie alokacji pamięci.
Przejmowanie zasobów sprzętowych
Starsze sterowniki nie-PnP rezerwowały zasoby z rejestru. Z drugiej strony sterowniki PnP nie zgłaszają zasobów urządzeń z rejestru ani bezpośrednio zapisują wymagania dotyczące zasobów w rejestrze. Zamiast tego sterowniki zgłaszają żądania w odpowiedzi na niektóre IRP PnP w ramach procesu enumeracji menedżera PnP. Sterownik PnP odbiera przydzielone zasoby w żądaniu PnP IRP_MN_START_DEVICE.
Sterowniki, które nie wchodzą bezpośrednio w interakcje z menedżerem PnP, takie jak niektóre sterowniki miniportu, mogą mieć różne wymagania dotyczące raportowania nałożone przez klasę lub sterownik portu, który współdziała z menedżerem PnP. Takie wymagania są specyficzne dla klasy urządzenia. Aby uzyskać szczegółowe informacje specyficzne dla urządzenia i specyficzne dla klasy, zobacz dokumentację odpowiedniej klasy urządzeń w zestawie Sterowników systemu Windows (WDK).
Korzystanie z rejestru
Procedura DriverEntry może użyć rejestru, aby uzyskać niektóre informacje potrzebne do zainicjowania sterownika lub może ustawić informacje w rejestrze dla innych sterowników lub podsystemów chronionych do użycia. Charakter informacji zależy od typu urządzenia. Sterowniki mogą uzyskiwać dostęp do rejestru przy użyciu procedur ZwXxx i RtlXxx . Parametr RegistryPath procedury DriverEntry wskazuje zliczany ciąg Unicode, który określa ścieżkę do klucza rejestru sterownika, \Registry\Machine\System\CurrentControlSet\Services\DriverName. Procedura powinna zapisać kopię ciągu, a nie sam wskaźnik, ponieważ wskaźnik nie jest już prawidłowy po powrocie DriverEntry .