Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
advertencia C30033: se detectó la asignación ejecutable en un controlador compilado con POOL_NX_OPTIN. Otro controlador ha determinado que otro controlador cargará este controlador en tiempo de ejecución. Compruebe que el controlador de carga llama a ExInitializeDriverRuntime(DrvRtPoolNxOptIn) en su DriverEntry.
BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED
Se ha determinado que se trata de un archivo DLL cargado por otro controlador y, como tal, no tiene una función de inicialización completa. Compruebe que el controlador de carga es:
- Compilado con POOL_NX_OPTIN=1
- Llama a ExInitializeDriverRuntime(DrvRtPoolNxOptIn) en su función de inicialización
Si el controlador de carga especifica estos correctamente, se puede omitir la advertencia.
Ejemplo de
El código siguiente en cada cargador del archivo DLL significa que debe realizar el cambio (según el ejemplo seguro siguiente)
En el archivo de orígenes
C_DEFINES=$(C_DEFINES)
En driverEntry, antes de que se produzca cualquier asignación de memoria:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
…
// No call to ExInitializeDriverRuntime
return(status)
}
El código siguiente en cada cargador del archivo DLL significa que puede omitir la advertencia.
En el archivo de orígenes, agregue
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
En driverEntry, antes de que se produzca cualquier asignación de memoria:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…
ejemplo de n.º 2
Una segunda manera de corregir esto es hacer que cada llamada haga referencia explícitamente a la memoria no ejecutable.
El código siguiente genera esta advertencia.
ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');
El código siguiente evita esta advertencia:
ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');