Share via


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

Puede hacer que todo o parte del controlador se pueda paginar. El código del controlador de paginación puede reducir el tamaño de la imagen de carga del controlador, lo que libera espacio del sistema para otros usos. Es más práctico para los controladores de dispositivos usados esporádicamente, como módems y CD-ROM, o para partes de controladores a los que rara vez se llama.

El código de controlador que realiza cualquiera de las siguientes acciones debe ser residente en memoria. Es decir, este código debe estar en una sección no paginada o en una sección paginada que esté bloqueada en memoria cuando se ejecute el código.

  • Se ejecuta en irQL o superior = DISPATCH_LEVEL.

  • Adquiere bloqueos de giro.

  • Llama a cualquiera de las rutinas de compatibilidad del objeto del kernel, como KeReleaseMutex o KeReleaseSemaphore, en la que el parámetro Wait se establece en TRUE. Si se llama al kernel con Wait establecido en TRUE, la llamada devuelve con IRQL en DISPATCH_LEVEL.

El código del controlador debe ejecutarse en IRQL < DISPATCH_LEVEL cuando el código hace algo que pueda provocar un error de página. El código puede producir un error de página si realiza alguna de las acciones siguientes:

  • Accede al grupo paginado que no está bloqueado en la memoria.

  • Llama a una rutina paginable.

  • Obtiene acceso a los búferes de usuario desbloqueados en el contexto del subproceso de usuario.

Normalmente, debe crear una sección paginada si la cantidad total de todo el código paginable (o datos) es de al menos 4 kilobytes (KB). Siempre que sea posible, debe aislar el código puramente paginable (o los datos) en una sección independiente del código (o datos) que a veces puede ser paginable, pero a veces debe bloquearse. Por ejemplo, la combinación de código puramente paginable y el código bloqueado a petición hace que se bloquee más espacio del sistema para la sección combinada de la necesaria. Sin embargo, si un controlador tiene menos de 4 KB de código paginable (o datos), puede combinar ese código (o datos) con código bloqueado a petición (o datos) en una sección, lo que ahorra espacio en el sistema.