다음을 통해 공유


MmLockPagableSectionByHandle 함수(ntddk.h)

MmLockPagableSectionByHandle 루틴은 핸들의 참조 횟수를 섹션으로 증가시켜 페이징 가능한 코드 또는 데이터 섹션을 시스템 메모리에 잠급니다.

구문

void MmLockPagableSectionByHandle(
  [in] PVOID ImageSectionHandle
);

매개 변수

[in] ImageSectionHandle

페이지가 지정 가능한 코드 또는 데이터 섹션에 대한 핸들입니다. 호출자는 MmLockPagableCodeSection 또는 MmLockPagableDataSection 루틴에 대한 이전 호출에서 이 핸들을 얻었습니다.

반환 값

없음

설명

드라이버는 처음에 MmLockPagableCodeSection 또는 MmLockPagableDataSection 을 호출하여 페이징 가능한 코드 또는 데이터 섹션에 대한 핸들을 가져옵니다. 그 후 드라이버는 MmLockPagableSectionByHandleMmUnlockPagableImageSection 을 호출하여 핸들의 참조 수를 증가시키고 감소할 수 있습니다.

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)

추가 정보

MmLockPagableCodeSection

MmLockPagableDataSection

MmPageEntireDriver

MmProbeAndLockPages

MmResetDriverPaging

MmUnlockPagableImageSection