Tornando os drivers pagináveis

Por padrão, o vinculador atribui nomes como ".text" e ".data" às seções de código e dados de um arquivo de imagem de driver. Quando o driver é carregado, o gerenciador de E/S faz com que essas seções não sejampagadas. Uma seção nãopagada é sempre residente em memória.

Um desenvolvedor de driver tem a opção de tornar as partes designadas de um driver pagináveis para que o Windows possa mover essas partes para o arquivo de paginação quando elas não estiverem em uso. Para tornar um código ou seção de dados paginável, o desenvolvedor do driver atribui um nome que começa com "PAGE" à seção. O gerenciador de E/S verifica os nomes das seções quando carrega um driver. Se um nome de seção começar com "PAGE", o gerenciador de E/S tornará a seção paginável.

O código executado em IRQL >= DISPATCH_LEVEL deve ser residente em memória. Ou seja, esse código deve estar em um segmento não paginável ou em um segmento paginável que esteja bloqueado na memória. Se o código em execução em IRQL >= DISPATCH_LEVEL causar uma falha de página, ocorrerá um bug marcar. Os drivers podem usar a macro PAGED_CODE para verificar se as funções pagináveis são chamadas somente em IRQLs apropriadas.

Se uma seção de código ou dados for paginável, o driver poderá bloquear a seção na memória chamando a rotina MmLockPagableCodeSection ou MmLockPagableDataSection . A seção permanece bloqueada até que o driver chame a rotina MmUnlockPagableImageSection para desbloqueá-la. Embora a seção paginável esteja bloqueada, ela se comporta da mesma forma que uma seção nãopagada.

Para obter informações sobre como atribuir nomes a seções de código e dados, consulte MmLockPagableCodeSection e MmLockPagableDataSection.

Esta seção inclui os tópicos a seguir:

Quando o código e os dados devem ser pagináveis?

Tornando o código do driver ou dados pagináveis