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, ExDefaultNonPagedPoolTypedie 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);