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

Você pode tornar todo ou parte do driver paginável. O código do driver de paginação pode reduzir o tamanho da imagem de carga do driver, liberando assim espaço do sistema para outros usos. É mais prático para drivers de dispositivos usados esporadicamente, como modems e CD-ROMs, ou para partes de drivers que raramente são chamados.

O código do driver que faz qualquer um dos procedimentos a seguir deve ser residente em memória. Ou seja, esse código deve estar em uma seção nãopagada ou em uma seção paginada bloqueada na memória quando o código é executado.

  • Execuções em OU acima de IRQL = DISPATCH_LEVEL.

  • Adquire bloqueios de rotação.

  • Chama qualquer uma das rotinas de suporte do objeto do kernel, como KeReleaseMutex ou KeReleaseSemaphore, em que o parâmetro Wait é definido como TRUE. Se o kernel for chamado com Wait definido como TRUE, a chamada retornará com IRQL em DISPATCH_LEVEL.

O código do driver deve estar em execução no IRQL < DISPATCH_LEVEL quando o código faz qualquer coisa que possa causar uma falha de página. O código poderá causar uma falha de página se fizer o seguinte:

  • Acessa o pool paginado que não está bloqueado na memória.

  • Chama uma rotina paginável.

  • Acessa buffers de usuário desbloqueados no contexto do thread do usuário.

Normalmente, você deve criar uma seção paginada se a quantidade total de todo o código paginável (ou dados) for de pelo menos 4 quilobytes (KB). Sempre que possível, você deve isolar código puramente paginável (ou dados) em uma seção separada do código (ou dados) que às vezes pode ser paginável, mas às vezes deve ser bloqueada. Por exemplo, combinar código puramente paginável e código bloqueado sob demanda faz com que mais espaço do sistema seja bloqueado para a seção combinada do que o necessário. No entanto, se um driver tiver menos de 4 KB de código possivelmente paginável (ou dados), você poderá combinar esse código (ou dados) com código bloqueado sob demanda (ou dados) em uma seção, economizando espaço no sistema.