Aracılığıyla paylaş


Tek İkili Kabul: POOL_NX_OPTIN

Hem Windows 8'de hem de Windows'un önceki sürümlerinde çalışan tek bir sürücü ikili dosyası oluşturmak için POOL_NX_OPTIN kabul etme mekanizmasını kullanın. Bu, birden çok Windows sürümünü desteklemek üzere tek bir sürücü ikili dosyası sağlayan üçüncü taraf donanım satıcıları için taşıma yardımıdır.

Bu kabul etme mekanizmasını kullanmak için aşağıdakileri yapın:

  • Kabul etmek istediğiniz tüm kaynak dosyalar için POOL_NX_OPTIN = 1 tanımlayın. Bunu yapmak için, sürücü projeniz için uygun özellik sayfasına aşağıdaki ön işlemci tanımını ekleyin:

    C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

  • DriverEntry (veya eşdeğeri) yordamınıza aşağıdaki işlev çağrısını ekleyin:

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);

    Bu çağrı, sürücü NonPagedPool havuz türünü kullanan ayırmalar yapmadan veya ExInitializeNPagedLookasideList yordamına herhangi bir çağrı yapmadan önce gerçekleşmelidir. ExInitializeDriverRuntime bir satır içi zorlama işlevidir ve Windows'un Windows 8 veya sonraki sürümlerinde çağrılabilir.

Çoğu sürücü için bu iki görev, tek sürücü ikili dosyası için kabul mekanizmasını etkinleştirmek için yeterlidir.

Uygulama ayrıntıları

POOL_NX_OPTIN, NonPagedPoolExDefaultNonPagedPoolTypegenel bir POOL_TYPE değişkeniyle değiştirerek çalışır. Bu değişken, NonPagedPoolNx (Windows'un 8 ve sonraki sürümleri için) veya NonPagedPoolExecute (Windows'un önceki sürümleri için) için başlatılır. Bu kabul etme mekanizması, çekirdek modu sürücünüzün NX havuzunun gelişmiş korumasıyla windows 8'de ve NX havuzunu desteklemeyen Windows'un önceki sürümlerinde çalışmasını sağlar. NonPagedPool sabit adının örneklerini NonPagedPoolNx dönüştüren makro, NonPagedPoolCacheAligned örneklerini de NonPagedPoolNxCacheAligned dönüştürür.

Statik kitaplıklar için destek (.lib projeleri)

.lib projesi için POOL_NX_OPTIN kabul mekanizmasını kullanabilirsiniz, ancak .lib'e bağlanan projelerin de genellikle POOL_NX_OPTIN kullanması gerekir. En azından, DriverEntry yordamını uygulayan projenin aşağıdaki işlev çağrısını içermesi gerekir:

ExInitializeDriverRuntime(DrvRtPoolNxOptIn);