Udostępnij przez


Jedno binarne wyrażenie zgody: POOL_NX_OPTIN

Aby utworzyć plik binarny pojedynczego sterownika, który działa zarówno w systemie Windows 8, jak i we wcześniejszych wersjach systemu Windows, użyj mechanizmu POOL_NX_OPTIN zgody. Jest to pomoc dotycząca przenoszenia dla innych dostawców sprzętu, którzy dostarczają jeden plik binarny sterownika do obsługi wielu wersji systemu Windows.

Aby użyć tego mechanizmu zgody, wykonaj następujące czynności:

  • Zdefiniuj POOL_NX_OPTIN = 1 dla wszystkich plików źródłowych, które chcesz wyrazić zgodę. W tym celu uwzględnij następującą definicję preprocesora na odpowiedniej stronie właściwości projektu sterownika:

    C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

  • W procedurze DriverEntry (lub równoważnej) dołącz następujące wywołanie funkcji:

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);

    To wywołanie musi wystąpić przed wykonaniem przez sterownik wszelkich alokacji korzystających z typu puli NonPagedPool lub wykonuje dowolne wywołania ExInitializeNPagedLookasideList procedury. ExInitializeDriverRuntime jest funkcją wymuszenia wbudowanej i może być wywoływana w systemie Windows 8 lub nowszych wersjach systemu Windows.

W przypadku większości sterowników te dwa zadania są wystarczające, aby włączyć mechanizm zgody dla pojedynczego sterownika binarnego.

Szczegóły implementacji

POOL_NX_OPTIN działa przez zastąpienie NonPagedPool zmienną globalną POOL_TYPE, ExDefaultNonPagedPoolType, która została zainicjowana w celu NonPagedPoolNx (dla systemu Windows 8 lub nowszych wersji systemu Windows) lub NonPagedPoolExecute (w przypadku wcześniejszych wersji systemu Windows). Ten mechanizm zgody umożliwia sterownikowi trybu jądra uruchamianie zarówno w systemie Windows 8, z rozszerzoną ochroną puli NX, jak i we wcześniejszych wersjach systemu Windows, które nie obsługują puli NX. Makro, które konwertuje wystąpienia nonPagedPool stałej nazwy na NonPagedPoolNx również konwertuje wystąpienia NonPagedPoolCacheAligned na NonPagedPoolNxCacheAligned.

Obsługa bibliotek statycznych (projekty.lib)

Można użyć mechanizmu POOL_NX_OPTIN zgody dla projektu .lib, ale projekty, które łączą się z biblioteką .lib, zazwyczaj muszą również używać POOL_NX_OPTIN. Co najmniej projekt implementujący procedurę DriverEntry musi zawierać następujące wywołanie funkcji:

ExInitializeDriverRuntime(DrvRtPoolNxOptIn);