Einzelbinär-Opt-In: POOL_NX_OPTIN
Verwenden Sie den POOL_NX_OPTIN Opt-In-Mechanismus, um eine einzelne Treiberbinärdatei zu erstellen, die sowohl in Windows 8 als auch in früheren Versionen von Windows ausgeführt wird. Dies ist eine Portierungshilfe für Hardwarehersteller von Drittanbietern, die eine einzelne Treiberbinärdatei zur Unterstützung mehrerer Windows-Versionen bereitstellen.
Gehen Sie wie folgt vor, um diesen Opt-In-Mechanismus zu verwenden:
Definieren Sie POOL_NX_OPTIN = 1 für alle Quelldateien, die Sie aktivieren möchten. Fügen Sie dazu die folgende Präprozessordefinition auf der entsprechenden Eigenschaftenseite für Ihr Treiberprojekt ein:
C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1
Schließen Sie in Ihre DriverEntry-Routine (oder eine entsprechende) Routine den folgenden Funktionsaufruf ein:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);
Dieser Aufruf muss erfolgen, bevor der Treiber Zuordnungen vornimmt, die den NonPagedPool-Pooltyp verwenden oder Aufrufe an die ExInitializeNPagedLookasideList-Routine durchführt. ExInitializeDriverRuntime ist eine Force-Inlinefunktion und kann unter Windows 8 oder höheren Versionen von Windows aufgerufen werden.
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 ersetzt wird, ExDefaultNonPagedPoolType
die entweder in NonPagedPoolNx (für Windows 8 und höhere Versionen von Windows) oder in NonPagedPoolExecute (für frühere Versionen von Windows) initialisiert wird. Dieser Aktivierungsmechanismus ermöglicht es Ihrem Kernelmodustreiber, sowohl auf Windows 8 mit dem erweiterten Schutz des NX-Pools als auch auf früheren Versionen von Windows auszuführen, die NX-Pool nicht unterstützen. Das Makro, das Instanzen des NonPagedPool-Konstantennamens 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 auf die LIB-Datei verweisen, müssen in der Regel auch POOL_NX_OPTIN verwenden. Das Projekt, das die DriverEntry-Routine implementiert, muss mindestens den folgenden Funktionsaufruf enthalten:
ExInitializeDriverRuntime(DrvRtPoolNxOptIn);