Sdílet prostřednictvím


Použití systémem definovaného objektu zpětného volání

Systém definuje tři objekty zpětného volání pro použití ovladače:

\Callback\SetSystemTime

\Callback\PowerState

\Callback\ProcessorAdd

Ovladače, které používají systémový čas (například ovladače systému souborů), se mohou zaregistrovat pro \Callback\SetSystemTime objekt zpětného volání. Toto zpětné volání poskytuje oznámení o změně systémového času.

Objekt zpětného volání \Callback\PowerState poskytuje oznámení, když dojde k některé z následujících situací:

  • Systém se přepne ze střídavého proudu na stejnosměrný proud nebo naopak.

  • Zásady napájení systému se mění v důsledku požadavku uživatele nebo aplikace.

  • Přechod do stavu spánku nebo vypnutí systému je bezprostředně blízko. Ovladač může požádat o oznámení, aby mohl kód uzamknout do paměti v očekávání vypnutí. Rutiny zpětného volání budou upozorněny před tím, než správce napájení odešle IRP pro nastavení napájení systému.

Zpětné volání \Callback\ProcessorAdd zajišťuje oznámení při přidání nového procesoru do systému.

Chcete-li použít zpětné volání definované systémem, ovladač inicializuje blok atributu voláním InitializeObjectAttributes s názvem zpětného volání a pak otevře objekt zpětného volání (ExCreateCallback), stejně jako u zpětného volání definovaného ovladačem. Ovladač by neměl požadovat vytvoření objektu zpětného volání.

S popisovačem vráceným ExCreateCallbackovladač volá ExRegisterCallback k registraci rutiny oznámení, předání ukazatele na libovolný kontext a ukazatel na jeho rutinu. Ovladač může kdykoli zaregistrovat svoji rutinu zpětného volání. Když nastane zadaná podmínka, systém volá zaregistrovanou rutinu zpětného volání v IRQL<=DISPATCH_LEVEL.

Pokud ovladač již nevyžaduje oznámení, měl by volat ExUnregisterCallback, aby odstranil svou rutinu zpětného volání ze seznamu registrovaných zpětných volání a odebral svou referenci na objekt zpětného volání.