Single Binary Opt-In: POOL_NX_OPTIN

Per creare un singolo file binario driver che viene eseguito sia in Windows 8 che nelle versioni precedenti di Windows, usare il meccanismo di consenso esplicito POOL_NX_OPTIN. Si tratta di un aiuto di conversione per i fornitori di hardware di terze parti che forniscono un singolo binario driver per supportare più versioni di Windows.

Per usare questo meccanismo di consenso esplicito, eseguire le operazioni seguenti:

  • Definire POOL_NX_OPTIN = 1 per tutti i file di origine che si desidera effettuare il consenso esplicito. A tale scopo, includere la definizione del preprocessore seguente nella pagina delle proprietà appropriate per il progetto driver:

    C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

  • Nella routine DriverEntry (o equivalente) includere la chiamata di funzione seguente:

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);

    Questa chiamata deve verificarsi prima che il driver effettui eventuali allocazioni che usano il tipo di pool NonPagedPool o effettua chiamate alla routine ExInitializeNPagedLookasideList . ExInitializeDriverRuntime è una funzione inline di forza e può essere chiamata in Windows 8 o versioni successive di Windows.

Per la maggior parte dei driver, queste due attività sono sufficienti per abilitare il meccanismo di opt-in per il singolo driver binario.

Dettagli dell'implementazione

POOL_NX_OPTIN funziona sostituendo NonPagedPool con una variabile globale di POOL_TYPE, , ExDefaultNonPagedPoolTypeinizializzata in NonPagedPoolNx (per Windows 8 e versioni successive di Windows) o in NonPagedPoolExecute (per le versioni precedenti di Windows). Questo meccanismo di consenso esplicito consente al driver in modalità kernel di eseguire entrambi i Windows 8, con la protezione avanzata del pool NX e nelle versioni precedenti di Windows, che non supportano il pool NX. La macro che converte le istanze del nome costante NonPagedPool in NonPagedPoolNx converte anche le istanze di NonPagedPoolCacheAligned in NonPagedPoolNxCacheAligned.

Supporto per le librerie statiche (progetti.lib)

È possibile usare il meccanismo di consenso esplicito POOL_NX_OPTIN per un progetto .lib, ma i progetti che si collegano a .lib in genere devono usare anche POOL_NX_OPTIN. Almeno, il progetto che implementa la routine DriverEntry deve contenere la chiamata di funzione seguente:

ExInitializeDriverRuntime(DrvRtPoolNxOptIn);