Single Binary Opt-In: POOL_NX_OPTIN
Um eine einzelne Treiber-Binärdatei zu erstellen, die sowohl in Windows 8 als auch in früheren Versionen von Windows ausgeführt wird, verwenden Sie den POOL_NX_OPTIN Opt-In-Mechanismus. Dies ist eine Portierungshilfe für Hardwareanbieter von Drittanbietern, die eine einzelne Treiber-Binärdatei bereitstellen, um mehrere Windows-Versionen zu unterstützen.
Gehen Sie wie folgt vor, um diesen Opt-In-Mechanismus zu verwenden:
Definieren Sie POOL_NX_OPTIN = 1 für alle Quelldateien, die Sie abonnieren möchten. Fügen Sie hierzu die folgende Präprozessordefinition in die entsprechende Eigenschaftenseite für Ihr Treiberprojekt ein:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
Schließen Sie in Ihrem DriverEntry- (oder einer gleichwertigen) Routine den folgenden Funktionsaufruf ein:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
Dieser Aufruf muss erfolgen, bevor der Treiber Zuordnungen vorgibt, die den NonPagedPool- Pooltyp verwenden oder aufruft die ExInitializeNPagedLookasideList Routine. ExInitializeDriverRuntime ist eine Inlinefunktion, die unter Windows 8 oder höher aufgerufen werden kann.
Für die meisten Treiber reichen diese beiden Aufgaben aus, um den Opt-In-Mechanismus für die Einzeltreiber-Binärdatei zu aktivieren.
Details zur Implementierung
POOL_NX_OPTIN funktioniert, indem NonPagedPool durch eine globale POOL_TYPE Variable ExDefaultNonPagedPoolType
ersetzt wird, die entweder für NonPagedPoolNx- (für Windows 8 und höher) oder für NonPagedPoolExecute (für frühere Versionen von Windows) initialisiert wird. Mit diesem Opt-In-Mechanismus kann Ihr Kernelmodustreiber sowohl unter Windows 8 als auch mit dem verbesserten Schutz des NX-Pools und in früheren Versionen von Windows ausgeführt werden, die NX-Pool nicht unterstützen. Das Makro, das Instanzen des NonPagedPool Konstantennamen in NonPagedPoolNx konvertiert, konvertiert auch Instanzen von NonPagedPoolCacheAligned in NonPagedPoolNxCacheAligned.
Unterstützung für statische Bibliotheken (LIB-Projekte)
Sie können den POOL_NX_OPTIN Opt-In-Mechanismus für ein LIB-Projekt verwenden, aber Projekte, die mit der LIB verknüpft sind, müssen im Allgemeinen auch POOL_NX_OPTIN verwenden. Das Projekt, das die DriverEntry-Routine implementiert, muss mindestens den folgenden Funktionsaufruf enthalten:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);