이번에는 메모리 동적 할당에 대해 알아보겠습니다.
Ring3에서는 동적으로 메모리를 할당할 때 malloc이나 HeapAlloc 같은 함수를 사용해보셨을겁니다.
그러나 드라이버에서는 이 함수를 사용할 수 없습니다.
그럼 어떻게 동적 메모리를 생성할 수 있을까요?
커널엔 메모리 풀이라는 것이 있는데 이것이 커널모드 힙입니다.
커널에서 힙을 할당하기 위해선 ExAllocatePool 이라는 함수를 사용합니다.
주목해볼만한건 인자로 NonPagedPool을 주었는데요. 인자 값으로 아래 두가지가 있습니다.
NonPagedPool : 항상 메모리에 존재
PagedPool : 페이지 아웃 혹은 인이 될 수 있음
페이지 아웃이 되면 공포의 BSoD가 뜨겠죠? 그것을 방지하기 위해서 NonPagedPool을 인자로 주어야 합니다.
잘 뜹니다~
주의하실 점은 동적 메모리를 반드시 해제해 주어야 합니다. 안그러면 커널 메모리에서 둥둥 떠다닙니다~
'Windows > WDK' 카테고리의 다른 글
드라이버 숨기기 (LDR_DATA_TABLE_ENTRY) (0) | 2020.10.13 |
---|---|
코드서명 없이 WDK 드라이버 실행하기 (Windows 10 64비트) (3) | 2020.03.19 |
[64비트] Visual Studio 2010 + WDK + MASM 개발 환경 구축하기 (2) | 2014.08.28 |
WDK 왕초보를 위한 개발 가이드 #3 - 문자열 사용 (0) | 2014.04.08 |
WDK 왕초보를 위한 개발 가이드 #1 (2) | 2014.04.02 |