Objets d’événements standard
Le système fournit plusieurs objets d’événement standard. Les pilotes peuvent utiliser ces objets d’événement pour être avertis par le système chaque fois que certaines conditions se produisent. La liste suivante contient les objets d’événement standard :
\KernelObjects\HighMemoryCondition
Cet événement est défini chaque fois que la quantité de mémoire physique disponible dépasse une quantité définie par le système. Les pilotes peuvent attendre que cet événement soit défini en tant que signal pour allouer de la mémoire de manière agressive.
\KernelObjects\LowMemoryCondition
Cet événement est défini chaque fois que la quantité de mémoire physique libre tombe en dessous d’une quantité définie par le système. Les pilotes qui ont alloué de grandes quantités de mémoire peuvent attendre que cet événement soit défini comme un signal pour libérer de la mémoire inutilisée.
Pour Microsoft Windows Server 2003 et versions ultérieures de Windows, les pilotes peuvent également utiliser les objets d’événement standard supplémentaires suivants :
\KernelObjects\HighPagedPoolCondition
Cet événement est défini chaque fois que la quantité de pool paginé libre dépasse une quantité définie par le système. Les pilotes peuvent attendre que cet événement soit défini en tant que signal pour allouer de manière agressive de la mémoire à partir d’un pool paginé.
\KernelObjects\LowPagedPoolCondition
Cet événement est défini chaque fois que la quantité de pool paginé libre tombe en dessous d’un montant défini par le système. Les pilotes qui ont alloué de grandes quantités de mémoire peuvent attendre que cet événement soit défini comme un signal pour libérer de la mémoire inutilisée du pool paginé.
\KernelObjects\HighNonPagedPoolCondition
Cet événement est défini chaque fois que la quantité de pool libre non paginé dépasse une quantité définie par le système. Les pilotes peuvent attendre que cet événement soit défini en tant que signal pour allouer de manière agressive de la mémoire à partir d’un pool non paginé.
\KernelObjects\LowNonPagedPoolCondition
Cet événement est défini chaque fois que la quantité de pool libre non paginé tombe en dessous d’un montant défini par le système. Les pilotes qui ont alloué de grandes quantités de mémoire peuvent attendre que cet événement soit défini en tant que signal pour libérer de la mémoire inutilisée du pool non paginé.
Pour Windows Vista et les versions ultérieures de Windows, les pilotes peuvent également utiliser les objets d’événement standard supplémentaires suivants :
\KernelObjects\LowCommitCondition
Cet événement est défini lorsque les frais de validation du système d’exploitation sont faibles, par rapport à la limite de validation actuelle. En d’autres termes, l’utilisation de la mémoire est faible et beaucoup d’espace est disponible dans les fichiers de mémoire physique ou de pagination.
\KernelObjects\HighCommitCondition
Cet événement est défini lorsque les frais de validation du système d’exploitation sont élevés, par rapport à la limite de validation actuelle. En d’autres termes, l’utilisation de la mémoire est élevée et très peu d’espace est disponible dans la mémoire physique ou les fichiers de pagination, mais le système d’exploitation peut être en mesure d’augmenter la taille de ses fichiers de pagination.
\KernelObjects\MaximumCommitCondition
Cet événement est défini lorsque les frais de validation du système d’exploitation sont proches de la limite de validation maximale. En d’autres termes, l’utilisation de la mémoire est très élevée, très peu d’espace est disponible dans les fichiers de mémoire physique ou de pagination, et le système d’exploitation ne peut pas augmenter la taille de ses fichiers de pagination. (Un administrateur système peut toujours augmenter la taille ou le nombre de fichiers de pagination, sans redémarrer l’ordinateur, s’il existe suffisamment de ressources de stockage.)
Chacun de ces événements est un événement de notification. Ils restent définis tant que la condition de déclenchement reste vraie.
Pour ouvrir un handle à l’un de ces événements, utilisez la routine IoCreateNotificationEvent . Un pilote qui attend l’un de ces événements doit créer un thread dédié pour effectuer l’attente. Le thread peut attendre un ou plusieurs de ces événements en appelant KeWaitForSingleObject ou KeWaitForMultipleObjects.