Utilizzo di un oggetto callback System-Defined
Il sistema definisce tre oggetti di callback per l'uso del driver:
\Callback\SetSystemTime
\Callback\PowerState
\Callback\ProcessorAdd
I driver che usano l'ora di sistema (ad esempio i driver del file system) potrebbero registrarsi per l'oggetto callback \Callback\SetSystemTime . Questo callback fornisce una notifica quando cambia l'ora di sistema.
L'oggetto callback\PowerState fornisce la notifica quando si verifica una delle operazioni seguenti:
Il sistema passa dall'alimentazione AC all'alimentazione DC o viceversa.
I criteri di risparmio energia di sistema vengono modificati come risultato di una richiesta di utente o applicazione.
Una transizione a uno stato di sospensione o arresto del sistema è imminente. Un driver può richiedere una notifica in modo che possa bloccare il codice in memoria in previsione dell'arresto. Le routine di callback verranno notificate prima che il risparmio energia invii l'IRP di alimentazione del sistema.
Il callback \Callback\ProcessorAdd fornisce una notifica quando viene aggiunto un nuovo processore al sistema.
Per usare un callback definito dal sistema, un driver inizializza un blocco di attributi chiamando InitializeObjectAttributes con il nome del callback, quindi apre l'oggetto di callback (ExCreateCallback), proprio come per un callback definito dal driver. Il driver non deve richiedere la creazione dell'oggetto callback.
Con l'handle restituito da ExCreateCallback, il driver chiama ExRegisterCallback per registrare una routine di notifica, passando un puntatore a un contesto arbitrario e un puntatore alla routine. Un driver può registrare la routine di callback in qualsiasi momento. Quando si verifica la condizione specificata, il sistema chiama la routine di callback registrata in IRQL<=DISPATCH_LEVEL.
Quando il driver non richiede più la notifica, deve chiamare ExUnregisterCallback per eliminare la routine di callback dall'elenco di callback registrati e rimuovere il relativo riferimento all'oggetto callback.