Udostępnij przez


Wskazówki dotyczące pisania procedur obsługi powiadomień PnP

Menedżer PnP wywołuje procedury wywołania zwrotnego powiadomień w IRQL = PASSIVE_LEVEL.

Aby zapewnić bezproblemowe działanie podsystemu PnP, procedury wywołania zwrotnego powiadomień PnP muszą być zgodne z następującymi wytycznymi:

  1. Nie można zablokować procedury wywołania zwrotnego powiadomień.

  2. Procedury wywołania zwrotnego powiadomień nie mogą wywoływać wywołań lub powodować wywołania procedur synchronicznych, które generują zdarzenia PnP lub procedury blokujące oczekiwanie na instalację lub usunięcie urządzenia.

    Wywoływanie takich procedur podczas wywołania zwrotnego powiadomień może spowodować zakleszczenie systemu.

    Na przykład sterownik nie może wywołać metody IoReportTargetDeviceChange w procedurze wywołania zwrotnego powiadomień. Wywołaj IoReportTargetDeviceChangeAsynchronous zamiast tego.

  3. Rutyna wywołania zwrotnego powiadomień powinna zwracać powodzenie dla wszystkich zdarzeń, które nie kończą się jawnie niepowodzeniem.

    Gdy sterownik rejestruje się w celu powiadomienia w kategorii zdarzeń, menedżer PnP powiadamia sterownik o wszystkich zdarzeniach w tej kategorii, obecnych i przyszłych. Jeśli sterownik zwraca stan błędu dla zdarzeń, których nie obsługuje, sterownik ryzykuje niespodziewane niepowodzenie zapytania o nowe zdarzenie przez pomyłkę.

    Sterownik poprawnie zwraca stan błędu, gdy na przykład nie udaje mu się zrealizować powiadomienia zapytania, mającego na celu zawetowanie proponowanego zdarzenia.

  4. Procedura wywołania zwrotnego powiadomień powinna być kodem stronicowanym.