Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
aviso C30033: a alocação executável foi detectada em um driver compilado com POOL_NX_OPTIN. Este driver foi determinado a ser carregado em tempo de execução por outro driver. Verifique se as chamadas de driver de carregamento ExInitializeDriverRuntime(DrvRtPoolNxOptIn) em seu DriverEntry.
BANNED_MEM_ALLOCATION_MAYBE_UNSAFE_DRIVER_LOADED
Foi determinado que essa é uma DLL carregada por outro driver e, como tal, não tem uma função de inicialização completa. Verifique se o driver de carregamento é:
- Compilado usando POOL_NX_OPTIN=1
- Chamadas ExInitializeDriverRuntime(DrvRtPoolNxOptIn) em sua função de inicialização
Se o driver de carregamento especificar corretamente, o aviso poderá ser ignorado.
Exemplo de
O código a seguir em cada carregador da DLL significa que você deve fazer a alteração (de acordo com o exemplo seguro abaixo)
No arquivo de fontes
C_DEFINES=$(C_DEFINES)
Em DriverEntry, antes que qualquer alocação de memória ocorra:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
…
// No call to ExInitializeDriverRuntime
return(status)
}
O código a seguir em cada carregador da DLL significa que você pode ignorar o aviso.
No arquivo de origem, adicione
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
Em DriverEntry, antes que qualquer alocação de memória ocorra:
NTSTATUS
DriverEntry (
_In_ PDRIVER_OBJECT DriverObject,
_In_ PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
ExInitializeDriverRuntime( DrvRtPoolNxOptIn );
…
exemplo nº 2
Uma segunda maneira de corrigir isso é fazer com que cada chamada referencie explicitamente a memória não executável.
O código a seguir gera esse aviso.
ExAllocatePoolWithTag(NonPagedPool, numberOfBytes, 'xppn');
O código a seguir evita este aviso:
ExAllocatePoolWithTag(NonPagedPoolNx, numberOfBytes, 'xppn');