MmLockPagableSectionByHandle 함수(ntddk.h)
MmLockPagableSectionByHandle 루틴은 핸들의 참조 수를 섹션으로 증가시켜 페이징 가능한 코드 또는 데이터 섹션을 시스템 메모리에 잠급니다.
통사론
void MmLockPagableSectionByHandle(
[in] PVOID ImageSectionHandle
);
매개 변수
[in] ImageSectionHandle
페이지 가능 코드 또는 데이터 섹션에 대한 핸들입니다. 호출자는 MmLockPagableCodeSection 또는 MmLockPagableDataSection 루틴에 대한 이전 호출에서 이 핸들을 얻었습니다.
반환 값
없음
발언
드라이버는 처음에 MmLockPagableCodeSection 또는 MmLockPagableDataSection 호출하여 페이지 가능한 코드 또는 데이터 섹션에 대한 핸들을 가져옵니다. 그 후 드라이버는 MmLockPagableSectionByHandle 호출하고 mmUnlockPagableImageSection 핸들의 참조 수를 증가시키고 감소할 수 있습니다.
MmLockPagableCodeSection 또는 MmLockPagableDataSection 호출은 페이징 가능한 섹션을 시스템 메모리로 잠그고, 섹션에 대한 핸들을 반환하고, 핸들의 참조 횟수를 1로 초기화합니다. MmLockPagableSectionByHandle 참조 수를 1씩 증가시키고, MmUnlockPagableImageSection 참조 수를 1씩 줄입니다.
핸들의 참조 수가 0이 아닌 경우 페이저블 섹션이 잠깁니다. 참조 수가 0이면 섹션의 잠금이 해제됩니다.
드라이버가 메모리에 로드된 상태로 유지되는 한 페이지 가능 섹션에 대한 핸들은 유효한 상태로 유지됩니다. 드라이버는 동일한 핸들을 사용하여 섹션을 반복적으로 잠그고 잠금을 해제할 수 있습니다. 즉, 드라이버는 참조 수가 0인 핸들을 다시 사용할 수 있습니다. MmLockPagableSectionByHandle 참조된 섹션이 호출자의 주소 공간에 상주하는지 확인하고, 있는 경우 섹션의 참조 횟수를 증가하기만 하면 됩니다. 섹션이 상주하지 않으면 MmLockPagableSectionByHandle은 섹션의 페이지를 시스템 공간에서 잠그고 참조 수를 1로 설정합니다.
시스템 메모리 누수를 방지하려면 드라이버가 메모리에서 언로드될 때 핸들의 참조 수가 0이어야 합니다. 그렇지 않으면 드라이버가 언로드된 후 페이지 가능 섹션이 시스템 메모리에 잠깁니다.
드라이버가 언로드를 준비하고 핸들의 참조 수가 0이 아닌 경우 드라이버는 MmUnlockPagableImageSection 호출하여 언로드가 발생하기 전에 개수를 0으로 줄여야 합니다.
드라이버는 MmLockPagableSectionByHandle 호출하여 IRP에 전달된 사용자 버퍼를 잠글 수 없습니다. 대신 MmProbeAndLockPages 사용합니다.
코드 및 데이터 페이징에 대한 자세한 내용은 드라이버 페이징 가능만들기를 참조하세요.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 사용할 수 있습니다. |
대상 플랫폼 | 보편적 |
헤더 | ntddk.h(Ntddk.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= APC_LEVEL |
DDI 규정 준수 규칙 | HwStorPortProhibitedDDIs(storport), IrqlMmApcLte(wdm) |