Objetos de evento estándar
El sistema proporciona varios objetos de evento estándar. Los controladores pueden usar estos objetos de evento para que el sistema notifique cada vez que se produzcan determinadas condiciones. La lista siguiente contiene los objetos de evento estándar:
\KernelObjects\HighMemoryCondition
Este evento se establece siempre que la cantidad de memoria física libre supere una cantidad definida por el sistema. Los controladores pueden esperar a que este evento se establezca como una señal para asignar memoria de forma agresiva.
\KernelObjects\LowMemoryCondition
Este evento se establece cada vez que la cantidad de memoria física libre cae por debajo de una cantidad definida por el sistema. Los controladores que han asignado grandes cantidades de memoria pueden esperar a que este evento se establezca como una señal para liberar memoria no utilizada.
Para Microsoft Windows Server 2003 y versiones posteriores de Windows, los controladores también pueden usar los siguientes objetos de eventos estándar adicionales:
\KernelObjects\HighPagedPoolCondition
Este evento se establece cada vez que la cantidad de grupo paginado libre supera una cantidad definida por el sistema. Los controladores pueden esperar a que este evento se establezca como una señal para asignar de forma agresiva la memoria del grupo paginado.
\KernelObjects\LowPagedPoolCondition
Este evento se establece siempre que la cantidad de grupo paginado gratuito se encuentre por debajo de una cantidad definida por el sistema. Los controladores que han asignado grandes cantidades de memoria pueden esperar a que este evento se establezca como una señal para liberar memoria no utilizada del grupo paginado.
\KernelObjects\HighNonPagedPoolCondition
Este evento se establece siempre que la cantidad de grupo no paginado gratuito supere una cantidad definida por el sistema. Los controladores pueden esperar a que este evento se establezca como una señal para asignar de forma agresiva la memoria del grupo no paginado.
\KernelObjects\LowNonPagedPoolCondition
Este evento se establece cada vez que la cantidad de grupo no paginado gratuito cae por debajo de una cantidad definida por el sistema. Los controladores que han asignado grandes cantidades de memoria pueden esperar a que este evento se establezca como una señal para liberar memoria no utilizada del grupo no paginado.
Para Windows Vista y versiones posteriores de Windows, los controladores también pueden usar los siguientes objetos de eventos estándar adicionales:
\KernelObjects\LowCommitCondition
Este evento se establece cuando el cargo de confirmación del sistema operativo es bajo, en relación con el límite de confirmación actual. En otras palabras, el uso de memoria es bajo y hay mucho espacio disponible en memoria física o archivos de paginación.
\KernelObjects\HighCommitCondition
Este evento se establece cuando el cargo de confirmación del sistema operativo es alto, en relación con el límite de confirmación actual. En otras palabras, el uso de memoria es alto y muy poco espacio está disponible en la memoria física o en los archivos de paginación, pero es posible que el sistema operativo pueda aumentar el tamaño de sus archivos de paginación.
\KernelObjects\MaximumCommitCondition
Este evento se establece cuando el cargo de confirmación del sistema operativo está cerca del límite máximo de confirmación. En otras palabras, el uso de memoria es muy alto, muy poco espacio está disponible en memoria física o archivos de paginación, y el sistema operativo no puede aumentar el tamaño de sus archivos de paginación. (Un administrador del sistema siempre puede aumentar el tamaño o el número de archivos de paginación, sin reiniciar el equipo, si existen recursos de almacenamiento suficientes).
Cada uno de estos eventos son eventos de notificación. Permanecen establecidos siempre y cuando la condición de desencadenamiento siga siendo verdadera.
Para abrir un identificador en cualquiera de estos eventos, use la rutina IoCreateNotificationEvent . Un controlador que espere a que cualquiera de estos eventos cree un subproceso dedicado para realizar la espera. El subproceso puede esperar uno o varios de estos eventos llamando a KeWaitForSingleObject o KeWaitForMultipleObjects.