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.
System definiuje trzy obiekty wywołań zwrotnych przeznaczone do użytku przez sterownik.
\Callback\SetSystemTime
\Callback\PowerState
\Callback\ProcessorAdd
Sterowniki korzystające z czasu systemowego (na przykład sterowniki systemu plików) mogą zarejestrować się do obiektu wywołania zwrotnego \Callback\SetSystemTime. To wywołanie zwrotne informuje o zmianie czasu systemowego.
Obiekt wywołania zwrotnego \Callback\PowerState udostępnia powiadomienie, gdy wystąpi jeden z następujących elementów:
System przełącza się z prądu ac do zasilania prądu stałego lub na odwrót.
Zasady zasilania systemu zmieniają się w wyniku żądania użytkownika lub aplikacji.
Przejście do stanu uśpienia systemu lub zamknięcia jest nieuchronne. Sterownik może zażądać powiadomienia, aby zablokować kod w pamięci w oczekiwaniu na zamknięcie. Procedury wywołania zwrotnego będą powiadamiane przed wysłaniem przez menedżera zasilania systemu protokołu IRP.
Wywołanie zwrotne \Callback\ProcessorAdd udostępnia powiadomienie po dodaniu nowego procesora do systemu.
Aby użyć wywołania zwrotnego zdefiniowanego przez system, sterownik inicjuje blok atrybutów przez wywołanie InitializeObjectAttributes z nazwą wywołania zwrotnego, a następnie otwiera obiekt wywołania zwrotnego (ExCreateCallback), podobnie jak w przypadku wywołania zwrotnego zdefiniowanego przez sterownik. Sterownik nie powinien zażądać utworzenia obiektu wywołania zwrotnego.
Z dojściem zwróconym przez ExCreateCallback sterownik wywołuje ExRegisterCallback , aby zarejestrować procedurę powiadamiania, przekazując wskaźnik do dowolnego kontekstu i wskaźnik do jego rutynowej procedury. Kierowca może zarejestrować swoją procedurę wywołania zwrotnego w dowolnym momencie. Po wystąpieniu określonego warunku system wywołuje procedurę zarejestrowanego wywołania zwrotnego na poziomie IRQL<=DISPATCH_LEVEL.
Gdy sterownik nie wymaga już powiadomienia, powinien wywołać metodę ExUnregisterCallback , aby usunąć procedurę wywołania zwrotnego z listy zarejestrowanych wywołań zwrotnych i usunąć odwołanie do obiektu wywołania zwrotnego.