다음을 통해 공유


단일 바이너리 옵트인: 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 변수인 ExDefaultNonPagedPoolType바꿔서 작동합니다. 이 변수는 NonPagedPoolNx (Windows 8 이상 버전의 경우) 또는 NonPagedPoolExecute (이전 버전의 Windows용)으로 초기화됩니다. 이 옵트인 메커니즘을 사용하면 NX 풀의 향상된 보호와 NX 풀을 지원하지 않는 이전 버전의 Windows에서 커널 모드 드라이버를 Windows 8에서 모두 실행할 수 있습니다. NonPagedPool 상수 이름의 인스턴스를 NonPagedPoolNx 변환하는 매크로는 NonPagedPoolCacheAligned 인스턴스를 nonPagedPoolNxCacheAligned 변환합니다.

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

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

ExInitializeDriverRuntime(DrvRtPoolNxOptIn);