Compartir a través de


Problemas de compatibilidad del grupo de NX

Al usar el grupo no paginado de NX en archivos binarios de controladores para Windows 8, encontrará problemas de compatibilidad si ejecuta estos archivos binarios en versiones anteriores de Windows.

Windows 8 es la primera versión de Windows para admitir el grupo no paginado de NX. Sin embargo, hay un gran número de archivos binarios del controlador en modo kernel existentes disponibles para Windows 7 y versiones anteriores de Windows que se ejecutan en las arquitecturas de procesador x86, x64 e IA64. Para asignar memoria no paginada, estos controladores usan el grupo no paginado ejecutable en su lugar el grupo no paginado NX. Por motivos de compatibilidad con versiones anteriores, los archivos binarios del controlador en modo kernel que se ejecutan en Windows 7 y en algunas versiones anteriores de Windows, y que asignan memoria del grupo no paginado, se ejecutarán en Windows 8 sin modificaciones. Sin embargo, estos controladores no aprovechan la disponibilidad del grupo no paginado de NX en Windows 8.

Ejecución de archivos binarios de controladores existentes en Windows 8

No se impide ejecutar en Windows 8 un archivo binario de controlador creado para Windows 7 (o posiblemente para una versión anterior de Windows) y que usa el tipo de grupo NonPagedPool. Para habilitar la compatibilidad con versiones anteriores, la constante NonPagedPoolExecute se define para tener el mismo valor que la constante NonPagedPool en la enumeración POOL_TYPE . Por lo tanto, en cualquier versión de Windows en la que se ejecuta este controlador, la memoria que asigna el controlador desde el grupo no paginado siempre es ejecutable.

Windows 8 es la primera versión de Windows para admitir la arquitectura arm. Por lo tanto, no hay archivos binarios de controladores para Arm creados para versiones anteriores de Windows y que requieren compatibilidad con versiones anteriores. En su lugar, se espera que todos los controladores escritos para Windows en Arm especifiquen NonPagedPoolNx en lugar de NonPagedPoolExecute en sus asignaciones de grupo no paginadas a menos que requieran explícitamente memoria ejecutable.

Si un controlador se traslada a Arm desde x86, x64 o IA64, el mecanismo de participación POOL_NX_OPTIN_AUTO se aplica automáticamente durante el proceso de compilación del controlador. Este mecanismo de participación usa el preprocesador para reemplazar, de forma predeterminada, todas las instancias del nombre de constante NonPagedPool con NonPagedPoolNx. Si es necesario, puede usar el mecanismo de exclusión POOL_NX_OPTOUT para sobreserr este mecanismo de participación por archivo.

Otros problemas de compatibilidad

El tipo de grupo NonPagedPoolNx se admite a partir de Windows 8. No use este tipo de grupo en controladores para versiones anteriores de Windows. Los asignadores de grupo de estas versiones anteriores de Windows no funcionan correctamente cuando el controlador solicita una asignación con un tipo de grupo NonPagedPoolNx .

En versiones de Windows anteriores a Windows 8, el tipo de grupo NonPagedPoolExecute se puede usar libremente como sustituto del tipo de grupo NonPagedPool. La enumeración POOL_TYPE define NonPagedPool y NonPagedPoolExecute para tener el mismo valor.

Directrices de migración de tipos de grupo de NX

Al migrar el código de controlador a Windows 8 o posterior desde una versión anterior de Windows, hay varias maneras de agregar compatibilidad con los tipos de grupo NonPagedPoolNx y NonPagedPoolExecute. En la lista siguiente, elija el enfoque que mejor se adapte a sus requisitos:

  • Si el controlador no está diseñado para ejecutarse en una versión de Windows anterior a Windows 8, reemplace la mayoría o todas las instancias de NonPagedPool por NonPagedPoolNx. Solo rara vez el desarrollador debe reemplazar una instancia de NonPagedPool por NonPagedPoolExecute.

  • Si el código fuente del controlador tiene como destino Windows 8 y versiones anteriores de Windows, y envía un binario de controlador diferente para cada versión, use el mecanismo de participación de POOL_NX_OPTIN_AUTO. Este enfoque no requiere reemplazar las instancias de NonPagedPool en el origen del controlador. Para más información, consulte Mecanismos de Opt-In de grupos de NX.

  • Si el código fuente del controlador tiene como destino Windows 8 y versiones anteriores de Windows, y envía un archivo binario de controlador único para que se ejecute en todas las versiones compatibles, use el mecanismo de participación POOL_NX_OPTIN. Este enfoque no requiere reemplazar las instancias de NonPagedPool en el origen del controlador. Para más información, consulte Mecanismos de Opt-In de grupos de NX.

Mediante el uso de uno de estos tres enfoques, la mayoría de los controladores se pueden migrar rápidamente y con poco esfuerzo.

Evite reemplazar simplemente todas las instancias de NonPagedPool en el código de controlador por NonPagedPoolExecute. Use el tipo de grupo NonPagedPoolExecute solo para las asignaciones de grupo que deben ser ejecutables (por ejemplo, para ejecutar código generado por un compilador Just-In-Time o JIT).