다음을 통해 공유


드라이버를 페이지 가능으로 만들기

기본적으로 링커는 드라이버 이미지 파일의 코드 및 데이터 섹션에 ".text" 및 ".data"와 같은 이름을 할당합니다. 드라이버가 로드되면 I/O 관리자가 이러한 섹션을 페이징되지 않은 것으로 만듭니다. 페이지가 지정되지 않은 섹션은 항상 메모리 상주입니다.

드라이버 개발자는 Windows가 사용하지 않을 때 이러한 부분을 페이징 파일로 이동할 수 있도록 드라이버의 지정된 부분을 페이징할 수 있도록 할 수 있습니다. 코드 또는 데이터 섹션을 페이인할 수 있도록 드라이버 개발자는 섹션에 "PAGE"로 시작하는 이름을 할당합니다. I/O 관리자는 드라이버를 로드할 때 섹션의 이름을 확인합니다. 섹션 이름이 "PAGE"로 시작하는 경우 I/O 관리자는 섹션을 페이지로 만들 수 있습니다.

IRQL >= DISPATCH_LEVEL 실행되는 코드는 메모리 상주여야 합니다. 즉, 이 코드는 페이지가 묶일 수 없는 세그먼트 또는 메모리에 잠겨 있는 페이지 가능 세그먼트에 있어야 합니다. IRQL >= DISPATCH_LEVEL 실행되는 코드로 인해 페이지 오류가 발생하면 버그 검사 발생합니다. 드라이버는 PAGED_CODE 매크로를 사용하여 페이지 가능한 함수가 적절한 IRQL에서만 호출되는지 확인할 수 있습니다.

코드 또는 데이터 섹션을 페이징할 수 있는 경우 드라이버는 MmLockPagableCodeSection 또는 MmLockPagableDataSection 루틴을 호출하여 메모리의 섹션을 잠글 있습니다. 드라이버가 MmUnlockPagableImageSection 루틴을 호출하여 잠금을 해제할 때까지 섹션은 잠긴 상태로 유지됩니다. 페이지가 지정 가능한 섹션이 잠겨 있는 동안 페이지가 없는 섹션과 동일하게 동작합니다.

코드 및 데이터 섹션에 이름을 할당하는 방법에 대한 자세한 내용은 MmLockPagableCodeSectionMmLockPagableDataSection을 참조하세요.

이 단원에 포함된 항목은 다음과 같습니다.

코드 및 데이터는 언제 페이지 가능해야 하나요?

드라이버 코드 또는 데이터를 페이지 가능으로 만들기