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) |