Share via


Pages 작업

현재 컴퓨터에서 페이지의 크기를 확인하려면 GetSystemInfo 함수를 사용합니다.

VirtualQueryVirtualQueryEx 함수는 프로세스의 주소 공간에서 지정된 주소에서 시작하는 연속 페이지의 영역에 대한 정보를 반환합니다. VirtualQuery는 호출 프로세스의 메모리에 대한 정보를 반환합니다. VirtualQueryEx 는 지정된 프로세스의 메모리에 대한 정보를 반환하며 디버그되는 프로세스에 대한 정보가 필요한 디버거를 지원하는 데 사용됩니다. 페이지 영역은 가장 가까운 페이지 경계로 반올림된 지정된 주소로 제한됩니다. 다음 특성이 공통된 모든 후속 페이지를 통해 확장됩니다.

  • 커밋, 예약 또는 무료 등 모든 페이지의 상태는 동일합니다.
  • 초기 페이지가 무료가 아닌 경우 지역의 모든 페이지는 VirtualAlloc 호출에 의해 예약된 동일한 초기 페이지 할당의 일부입니다.
  • 모든 페이지의 액세스 보호는 동일합니다(즉, PAGE_READONLY, PAGE_READWRITE 또는 PAGE_NOACCESS).

VirtualLock 함수를 사용하면 프로세스에서 커밋된 메모리의 하나 이상의 페이지를 RAM(실제 메모리)에 잠글 수 있으며 시스템이 페이지를 페이징 파일로 교환하지 못하게 합니다. 디스크 액세스 없이 중요한 데이터에 액세스할 수 있도록 하는 데 사용할 수 있습니다. 메모리에 페이지를 잠그는 것은 시스템의 메모리 관리 기능을 제한하기 때문에 위험합니다. VirtualLock을 과도하게 사용하면 실행 코드가 페이징 파일로 교환되어 시스템 성능이 저하될 수 있습니다. VirtualUnlock 함수는 VirtualLock에 의해 잠긴 메모리의 잠금을 해제합니다.

VirtualProtect 함수를 사용하면 프로세스에서 프로세스의 주소 공간에서 커밋된 페이지의 액세스 보호를 수정할 수 있습니다. 예를 들어 프로세스는 중요한 데이터를 저장하기 위해 읽기/쓰기 페이지를 할당한 다음 실수로 덮어쓰기로부터 보호하기 위해 읽기 전용 또는 액세스 권한 없음으로 액세스를 변경할 수 있습니다. VirtualProtect 는 일반적으로 VirtualAlloc에서 할당한 페이지와 함께 사용되지만 다른 할당 함수에서 커밋된 페이지에서도 작동합니다. 그러나 VirtualProtect 는 전체 페이지의 보호를 변경하고 다른 함수에서 반환된 포인터가 반드시 페이지 경계에 정렬되지는 않습니다. VirtualProtectEx 함수는 지정된 프로세스에서 메모리 보호를 변경하는 것을 제외하고 VirtualProtect와 유사합니다. 보호를 변경하면 디버깅 중인 프로세스의 메모리에 액세스하는 디버거에 유용합니다.