Inscription binaire unique : POOL_NX_OPTIN
Pour créer un fichier binaire de pilote unique qui s’exécute à la fois dans Windows 8 et dans les versions antérieures de Windows, utilisez le mécanisme d’adhésion POOL_NX_OPTIN. Il s’agit d’une aide au portage pour les fournisseurs de matériel tiers qui fournissent un seul fichier binaire de pilote pour prendre en charge plusieurs versions de Windows.
Pour utiliser ce mécanisme d’adhésion, procédez comme suit :
Définissez POOL_NX_OPTIN = 1 pour tous les fichiers sources que vous souhaitez accepter. Pour ce faire, incluez la définition de préprocesseur suivante dans la page de propriétés appropriée pour votre projet de pilote :
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
Dans votre routine DriverEntry (ou équivalent), incluez l’appel de fonction suivant :
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
Cet appel doit se produire avant que le pilote effectue des allocations qui utilisent le type de pool NonPagedPool ou effectue des appels à la routine ExInitializeNPagedLookasideList . ExInitializeDriverRuntime est une fonction inline force qui peut être appelée sur Windows 8 ou versions ultérieures de Windows.
Pour la plupart des pilotes, ces deux tâches sont suffisantes pour activer le mécanisme d’adhésion pour le binaire de pilote unique.
Informations d’implémentation
POOL_NX_OPTIN fonctionne en remplaçant NonPagedPool par une variable POOL_TYPE globale, ExDefaultNonPagedPoolType
, qui est initialisée à NonPagedPoolNx (pour les versions Windows 8 et ultérieures de Windows) ou à NonPagedPoolExecute (pour les versions antérieures de Windows). Ce mécanisme d’adhésion permet à votre pilote en mode noyau de s’exécuter à la fois sur Windows 8, avec la protection améliorée du pool NX et sur les versions antérieures de Windows, qui ne prennent pas en charge le pool NX. La macro qui convertit les instances de la constante NonPagedPool en NonPagedPoolNx convertit également les instances de NonPagedPoolCacheAligned en NonPagedPoolNxCacheAligned.
Prise en charge des bibliothèques statiques (projets .lib)
Vous pouvez utiliser le mécanisme d’adhésion POOL_NX_OPTIN pour un projet .lib, mais les projets qui sont liés au fichier .lib doivent généralement également utiliser POOL_NX_OPTIN. Au minimum, le projet qui implémente la routine DriverEntry doit contenir l’appel de fonction suivant :
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);