Utilisation d’un objet callback System-Defined

Le système définit trois objets de rappel pour l’utilisation du pilote :

\Callback\SetSystemTime

\Callback\PowerState

\Callback\ProcessorAdd

Les pilotes qui utilisent l’heure système (par exemple, les pilotes de système de fichiers) peuvent s’inscrire à l’objet de rappel \Callback\SetSystemTime . Ce rappel fournit une notification lorsque l’heure système change.

L’objet de rappel \Callback\PowerState fournit une notification lorsque l’un des événements suivants se produit :

  • Le système passe d’une alimentation CA à une alimentation CC ou vice versa.

  • La stratégie d’alimentation du système change à la suite d’une demande d’utilisateur ou d’application.

  • Une transition vers un état de veille ou d’arrêt du système est imminente. Un pilote peut demander une notification afin qu’il puisse verrouiller le code dans la mémoire en prévision de l’arrêt. Les routines de rappel sont averties avant que le gestionnaire d’alimentation n’envoie l’IRP set-power du système.

Le rappel \Callback\ProcessorAdd fournit une notification lorsqu’un nouveau processeur est ajouté au système.

Pour utiliser un rappel défini par le système, un pilote initialise un bloc d’attributs en appelant InitializeObjectAttributes avec le nom du rappel, puis ouvre l’objet de rappel (ExCreateCallback), comme pour un rappel défini par le pilote. Le pilote ne doit pas demander la création de l’objet de rappel.

Avec le handle retourné par ExCreateCallback, le pilote appelle ExRegisterCallback pour inscrire une routine de notification, en passant un pointeur vers un contexte arbitraire et un pointeur vers sa routine. Un pilote peut inscrire sa routine de rappel à tout moment. Lorsque la condition spécifiée se produit, le système appelle la routine de rappel inscrite à l’adresse IRQL<=DISPATCH_LEVEL.

Lorsque le pilote n’a plus besoin de notification, il doit appeler ExUnregisterCallback pour supprimer sa routine de rappel de la liste des rappels inscrits et supprimer sa référence à l’objet de rappel.