Hacer que los controladores sean paginables

De forma predeterminada, el enlazador asigna nombres como ".text" y ".data" a las secciones de código y datos de un archivo de imagen de controlador. Cuando se carga el controlador, el administrador de E/S hace que estas secciones no se paginan. Una sección no paginada siempre es residente en memoria.

Un desarrollador de controladores tiene la opción de hacer que las partes designadas de un controlador se puedan paginar para que Windows pueda mover estas partes al archivo de paginación cuando no están en uso. Para que se pueda paginar un código o una sección de datos, el desarrollador del controlador asigna un nombre que comienza por "PAGE" a la sección. El administrador de E/S comprueba los nombres de las secciones cuando carga un controlador. Si un nombre de sección comienza por "PAGE", el administrador de E/S hace que la sección sea paginable.

El código que se ejecuta en IRQL >= DISPATCH_LEVEL debe ser residente en memoria. Es decir, este código debe estar en un segmento no paginable o en un segmento paginable que esté bloqueado en la memoria. Si el código que se ejecuta en IRQL >= DISPATCH_LEVEL produce un error de página, se produce una comprobación de errores. Los controladores pueden usar la macro PAGED_CODE para comprobar que solo se llama a funciones paginables en las IRQL adecuadas.

Si se puede paginar un código o una sección de datos, el controlador puede bloquear la sección en memoria llamando a la rutina MmLockPagableCodeSection o MmLockPagableDataSection . La sección permanece bloqueada hasta que el controlador llama a la rutina MmUnlockPagableImageSection para desbloquearla. Mientras la sección paginable está bloqueada, se comporta igual que una sección no paginada.

Para obtener información sobre cómo asignar nombres a secciones de código y datos, vea MmLockPagableCodeSection y MmLockPagableDataSection.

Esta sección contiene los siguientes temas:

¿Cuándo se deben paginar el código y los datos?

Hacer que el código del controlador o los datos sean paginables