단일 이진 옵트인: POOL_NX_OPTIN

Windows 8 이전 버전의 Windows에서 실행되는 단일 드라이버 이진 파일을 빌드하려면 POOL_NX_OPTIN 옵트인 메커니즘을 사용합니다. 이는 여러 Windows 버전을 지원하기 위해 단일 드라이버 이진 파일을 제공하는 타사 하드웨어 공급업체를 위한 포팅 지원입니다.

이 옵트인 메커니즘을 사용하려면 다음을 수행합니다.

  • 옵트인하려는 모든 원본 파일에 대해 POOL_NX_OPTIN = 1을 정의합니다. 이렇게 하려면 드라이버 프로젝트의 적절한 속성 페이지에 다음 전처리기 정의를 포함합니다.

    C_DEFINES=$(C_DEFINES) -DPOOL_NX_OPTIN=1

  • DriverEntry(또는 동등한) 루틴에 다음 함수 호출을 포함합니다.

    ExInitializeDriverRuntime(DrvRtPoolNxOptIn);

    이 호출은 드라이버가 NonPagedPool 풀 형식을 사용하는 할당을 수행하거나 ExInitializeNPagedLookasideList 루틴을 호출하기 전에 발생해야 합니다. ExInitializeDriverRuntime은 힘 인라인 함수이며 Windows 8 이상 버전의 Windows에서 호출할 수 있습니다.

대부분의 드라이버에서 이러한 두 작업은 단일 드라이버 이진에 대한 옵트인 메커니즘을 사용하도록 설정하기에 충분합니다.

구현 세부 정보

POOL_NX_OPTIN NonPagedPool을 전역 POOL_TYPE 변수로 바꿔서 작동합니다. 이 변수ExDefaultNonPagedPoolTypeNonPagedPoolNx(Windows 8 이상 버전의 Windows용) 또는 NonPagedPoolExecute(이전 버전의 Windows용)로 초기화됩니다. 이 옵트인 메커니즘을 사용하면 커널 모드 드라이버가 NX 풀의 향상된 보호와 NX 풀을 지원하지 않는 이전 버전의 Windows에서 모두 Windows 8 실행할 수 있습니다. NonPagedPool 상수 이름의 인스턴스를 NonPagedPoolNx로 변환하는 매크로는 NonPagedPoolCacheAligned의 인스턴스를 NonPagedPoolNxCacheAligned로 변환합니다.

정적 라이브러리 지원(.lib 프로젝트)

.lib 프로젝트에 POOL_NX_OPTIN 옵트인 메커니즘을 사용할 수 있지만 일반적으로 .lib에 연결되는 프로젝트도 POOL_NX_OPTIN 사용해야 합니다. 최소한 DriverEntry 루틴을 구현하는 프로젝트에는 다음 함수 호출이 포함되어야 합니다.

ExInitializeDriverRuntime(DrvRtPoolNxOptIn);