No-Execute(NX) 비페이지 풀
모범 사례로, Windows 8 이상 버전의 Windows용 드라이버는 NX(실행 안 됨) 비페이징 풀에서 페이지가 없는 메모리의 대부분 또는 전부를 할당해야 합니다. NX 비페이지 풀에서 메모리를 할당하면 커널 모드 드라이버는 악성 소프트웨어가 이 메모리의 지침을 실행하지 못하도록 하여 보안을 향상시킵니다.
Windows 8 커널 모드 드라이버는 NX 비페이지 메모리 풀에서 메모리를 할당할 수 있습니다. 이 풀은 사용자 모드 Win32 힙 할당자와 유사하게 작동하는 범용 커널 모드 메모리 할당자에 의해 관리됩니다. 이 풀의 메모리는 NX이고 페이지가 지정되지 않습니다. x86, x64 및 Arm 프로세서 아키텍처를 사용하면 메모리 페이지를 NX로 지정하여 이러한 페이지에서 명령이 실행되지 않도록 할 수 있습니다. 일반적으로 커널 모드 드라이버는 비페이지 풀에서 할당된 메모리를 사용하여 데이터를 저장하며 이 메모리에서 명령을 실행할 수 있는 기능이 필요하지 않습니다.
레거시 드라이버 지원
Windows 7 및 이전 버전의 Windows에서는 페이지가 지정되지 않은 풀에서 할당된 모든 메모리가 실행 가능합니다. 이러한 드라이버의 포팅이 Windows 8 이상 버전의 Windows에서 NX 비페이지 풀을 사용하도록 장려하기 위해 Microsoft는 개발자가 최소한의 노력으로 드라이버를 업데이트할 수 있도록 몇 가지 옵트인 메커니즘을 제공합니다. 자세한 내용은 NX 풀 Opt-In 메커니즘을 참조하세요.
이전 버전과의 호환성을 위해 Windows 7 및 이전 버전의 Windows에서 실행되고 실행 파일이 없는 풀에서 메모리를 할당하는 드라이버 이진 파일은 수정 없이 Windows 8 이상 버전의 Windows에서 실행됩니다. 그러나 이러한 드라이버는 NX 비페이지 풀의 향상된 보안을 활용하지 않습니다.