Objetos de evento Padrão
O sistema fornece vários objetos de evento padrão. Os drivers podem usar esses objetos de evento para serem notificados pelo sistema sempre que determinadas condições ocorrerem. A lista a seguir contém os objetos de evento padrão:
\KernelObjects\HighMemoryCondition
Esse evento é definido sempre que a quantidade de memória física livre excede uma quantidade definida pelo sistema. Os drivers podem esperar que esse evento seja definido como um sinal para alocar agressivamente a memória.
\KernelObjects\LowMemoryCondition
Esse evento é definido sempre que a quantidade de memória física livre fica abaixo de uma quantidade definida pelo sistema. Os drivers que alocaram grandes quantidades de memória podem esperar que esse evento seja definido como um sinal para liberar memória não usada.
Para o Microsoft Windows Server 2003 e versões posteriores do Windows, os drivers também podem usar os seguintes objetos de evento padrão adicionais:
\KernelObjects\HighPagedPoolCondition
Esse evento é definido sempre que a quantidade de pool de páginas gratuitas excede uma quantidade definida pelo sistema. Os drivers podem esperar que esse evento seja definido como um sinal para alocar agressivamente a memória do pool de páginas.
\KernelObjects\LowPagedPoolCondition
Esse evento é definido sempre que a quantidade de pool de páginas livres fica abaixo de uma quantidade definida pelo sistema. Os drivers que alocaram grandes quantidades de memória podem esperar que esse evento seja definido como um sinal para liberar memória não usada do pool de páginas.
\KernelObjects\HighNonPagedPoolCondition
Esse evento é definido sempre que a quantidade de pool livre nãopagado excede um valor definido pelo sistema. Os drivers podem esperar que esse evento seja definido como um sinal para alocar agressivamente a memória do pool nãopagado.
\KernelObjects\LowNonPagedPoolCondition
Esse evento é definido sempre que a quantidade de pool livre nãopagado fica abaixo de uma quantidade definida pelo sistema. Os drivers que alocaram grandes quantidades de memória podem esperar que esse evento seja definido como um sinal para liberar memória não usada do pool nãopagado.
Para o Windows Vista e versões posteriores do Windows, os drivers também podem usar os seguintes objetos de evento padrão adicionais:
\KernelObjects\LowCommitCondition
Esse evento é definido quando a taxa de confirmação do sistema operacional é baixa, em relação ao limite de confirmação atual. Em outras palavras, o uso de memória é baixo e muito espaço está disponível em arquivos de paginação ou memória física.
\KernelObjects\HighCommitCondition
Esse evento é definido quando a cobrança de confirmação do sistema operacional é alta, em relação ao limite de confirmação atual. Em outras palavras, o uso de memória é alto e muito pouco espaço está disponível em arquivos de paginação ou memória física, mas o sistema operacional pode ser capaz de aumentar o tamanho de seus arquivos de paginação.
\KernelObjects\MaximumCommitCondition
Esse evento é definido quando a cobrança de confirmação do sistema operacional está próxima do limite máximo de confirmação. Em outras palavras, o uso de memória é muito alto, muito pouco espaço está disponível em arquivos de paginação ou memória física e o sistema operacional não pode aumentar o tamanho de seus arquivos de paginação. (Um administrador do sistema sempre pode aumentar o tamanho ou o número de arquivos de paginação, sem reiniciar o computador, se houver recursos de armazenamento suficientes.)
Cada um desses eventos são eventos de notificação. Eles permanecem definidos enquanto a condição de gatilho permanecer verdadeira.
Para abrir um identificador para qualquer um desses eventos, use a rotina IoCreateNotificationEvent . Um driver que aguarda qualquer um desses eventos deve criar um thread dedicado para fazer a espera. O thread pode aguardar um ou mais desses eventos chamando KeWaitForSingleObject ou KeWaitForMultipleObjects.