드라이버를 페이지 가능으로 만들기
기본적으로 링커는 드라이버 이미지 파일의 코드 및 데이터 섹션에 ".text" 및 ".data"와 같은 이름을 할당합니다. 드라이버가 로드되면 I/O 관리자가 이러한 섹션을 페이징되지 않은 것으로 만듭니다. 페이지가 지정되지 않은 섹션은 항상 메모리 상주입니다.
드라이버 개발자는 Windows가 사용하지 않을 때 이러한 부분을 페이징 파일로 이동할 수 있도록 드라이버의 지정된 부분을 페이징할 수 있도록 할 수 있습니다. 코드 또는 데이터 섹션을 페이인할 수 있도록 드라이버 개발자는 섹션에 "PAGE"로 시작하는 이름을 할당합니다. I/O 관리자는 드라이버를 로드할 때 섹션의 이름을 확인합니다. 섹션 이름이 "PAGE"로 시작하는 경우 I/O 관리자는 섹션을 페이지로 만들 수 있습니다.
IRQL >= DISPATCH_LEVEL 실행되는 코드는 메모리 상주여야 합니다. 즉, 이 코드는 페이지가 묶일 수 없는 세그먼트 또는 메모리에 잠겨 있는 페이지 가능 세그먼트에 있어야 합니다. IRQL >= DISPATCH_LEVEL 실행되는 코드로 인해 페이지 오류가 발생하면 버그 검사 발생합니다. 드라이버는 PAGED_CODE 매크로를 사용하여 페이지 가능한 함수가 적절한 IRQL에서만 호출되는지 확인할 수 있습니다.
코드 또는 데이터 섹션을 페이징할 수 있는 경우 드라이버는 MmLockPagableCodeSection 또는 MmLockPagableDataSection 루틴을 호출하여 메모리의 섹션을 잠글 수 있습니다. 드라이버가 MmUnlockPagableImageSection 루틴을 호출하여 잠금을 해제할 때까지 섹션은 잠긴 상태로 유지됩니다. 페이지가 지정 가능한 섹션이 잠겨 있는 동안 페이지가 없는 섹션과 동일하게 동작합니다.
코드 및 데이터 섹션에 이름을 할당하는 방법에 대한 자세한 내용은 MmLockPagableCodeSection 및 MmLockPagableDataSection을 참조하세요.
이 단원에 포함된 항목은 다음과 같습니다.