Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para criar um único binário de driver que seja executado no Windows 8 e em versões anteriores do Windows, use o mecanismo de aceitação POOL_NX_OPTIN. Esta é uma ajuda de portabilidade para fornecedores de hardware de terceiros que fornecem um único binário de driver para suportar várias versões do Windows.
Para usar esse mecanismo de aceitação, faça o seguinte:
Defina POOL_NX_OPTIN = 1 para todos os arquivos de origem que você deseja aceitar. Para fazer isso, inclua a seguinte definição de pré-processador na página de propriedades apropriada para seu projeto de driver:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1Na sua rotina DriverEntry (ou equivalente), inclua a seguinte chamada de função:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);Essa chamada deve ocorrer antes que o driver faça qualquer alocação que use o tipo de pool NonPagedPool ou faça chamadas para a rotinaExInitializeNPagedLookasideList. ExInitializeDriverRuntime é uma função force inline e pode ser chamada no Windows 8 ou em versões posteriores do Windows.
Para a maioria dos drivers, essas duas tarefas são suficientes para habilitar o mecanismo de aceitação para o binário de driver único.
Detalhes da implementação
POOL_NX_OPTIN funciona substituindo NonPagedPool por uma variável POOL_TYPE global, ExDefaultNonPagedPoolType, que é inicializada para NonPagedPoolNx (para Windows 8 e versões posteriores do Windows) ou para NonPagedPoolExecute (para versões anteriores do Windows). Esse mecanismo de aceitação permite que o driver do modo kernel seja executado no Windows 8, com a proteção aprimorada do pool NX, e em versões anteriores do Windows, que não suportam o pool NX. A macro que converte instâncias do NonPagedPool nome constante para NonPagedPoolNx também converte instâncias de NonPagedPoolCacheAligned para NonPagedPoolNxCacheAligned.
Suporte para bibliotecas estáticas (projetos .lib)
Você pode usar o mecanismo de aceitação POOL_NX_OPTIN para um projeto .lib, mas os projetos vinculados ao .lib geralmente também devem usá-POOL_NX_OPTIN. No mínimo, o projeto que implementa a rotina deDriverEntry dodeve conter a seguinte chamada de função:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);