VirtualLock 함수(memoryapi.h)

프로세스의 가상 주소 공간의 지정된 영역을 실제 메모리에 잠가서 해당 지역에 대한 후속 액세스에서 페이지 오류가 발생하지 않도록 합니다.

구문

BOOL VirtualLock(
  [in] LPVOID lpAddress,
  [in] SIZE_T dwSize
);

매개 변수

[in] lpAddress

잠글 페이지 영역의 기본 주소에 대한 포인터입니다.

[in] dwSize

잠글 영역의 크기(바이트)입니다. 영향을 받는 페이지의 영역에는 lpAddress 매개 변수 (lpAddress+dwSize)에서 에 이르는 범위에서 하나 이상의 바이트가 포함된 모든 페이지가 포함됩니다. 즉, 페이지 경계에 걸쳐 있는 2 바이트 범위로 인해 두 페이지가 모두 잠깁니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

지정된 지역의 모든 페이지를 커밋해야 합니다. PAGE_NOACCESS 보호된 메모리는 잠글 수 없습니다.

메모리에 페이지를 잠그면 사용 가능한 RAM을 줄이고 시스템에서 다른 중요한 페이지를 페이징 파일로 교체하도록 강요하여 시스템 성능이 저하할 수 있습니다. Windows의 각 버전에는 프로세스가 잠글 수 있는 최대 페이지 수에 제한이 있습니다. 이 제한은 심각한 성능 저하를 방지하기 위해 의도적으로 작습니다. 더 많은 수의 페이지를 잠가야 하는 애플리케이션은 먼저 SetProcessWorkingSetSize 함수를 호출하여 최소 및 최대 작업 집합 크기를 늘려야 합니다. 프로세스가 잠글 수 있는 최대 페이지 수는 최소 작업 집합의 페이지 수에서 작은 오버헤드를 뺀 값과 같습니다.

프로세스가 잠근 페이지는 프로세스가 잠금을 해제하거나 종료할 때까지 실제 메모리에 남아 있습니다. 이러한 페이지는 잠겨 있는 동안 페이지 파일에 기록되지 않도록 보장됩니다.

잠긴 페이지의 영역을 잠금 해제하려면 VirtualUnlock 함수를 사용합니다. 잠긴 페이지는 프로세스가 종료될 때 자동으로 잠금 해제됩니다.

이 함수는 잠금 횟수를 증가시키고 핸들을 포인터로 변환하지 않는다는 측면에서 GlobalLock 또는 LocalLock 함수와는 다릅니다. 가상 페이지에 대한 잠금 수는 없으므로 페이지 영역의 잠금을 해제하기 위해 VirtualUnlock 함수에 대한 여러 호출이 필요하지 않습니다.

예제

예제는 보호 페이지 만들기를 참조하세요.

요구 사항

   
지원되는 최소 클라이언트 Windows XP [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 memoryapi.h(Windows.h, Memoryapi.h 포함)
라이브러리 onecore.lib
DLL Kernel32.dll

참고 항목

메모리 관리 함수

SetProcessWorkingSetSize

가상 메모리 함수

VirtualUnlock