VirtualQuery 함수(memoryapi.h)

호출 프로세스의 가상 주소 공간에서 페이지 범위에 대한 정보를 검색합니다.

다른 프로세스의 주소 공간에서 페이지 범위에 대한 정보를 검색하려면 VirtualQueryEx 함수를 사용합니다.

구문

SIZE_T VirtualQuery(
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

매개 변수

[in, optional] lpAddress

쿼리할 페이지 영역의 기본 주소에 대한 포인터입니다. 이 값은 다음 페이지 경계로 반올림됩니다. 호스트 컴퓨터에서 페이지의 크기를 확인하려면 GetSystemInfo 함수를 사용합니다.

lpAddress가 프로세스에 액세스할 수 있는 가장 높은 메모리 주소 위에 주소를 지정하면 ERROR_INVALID_PARAMETER 함수가 실패합니다.

[out] lpBuffer

지정된 페이지 범위에 대한 정보가 반환되는 MEMORY_BASIC_INFORMATION 구조체에 대한 포인터입니다.

[in] dwLength

lpBuffer 매개 변수가 가리키는 버퍼의 크기(바이트)입니다.

반환 값

반환 값은 정보 버퍼에 반환된 실제 바이트 수입니다.

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

설명

VirtualQuery 는 다음 특성을 공유하는 지정된 주소에서 시작하는 연속 페이지 영역에 대한 정보를 제공합니다.

  • 모든 페이지의 상태는 동일합니다(MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED 또는 MEM_IMAGE).
  • 초기 페이지가 무료가 아닌 경우 지역의 모든 페이지는 VirtualAlloc, MapViewOfFile 또는 다음 확장 버전의 VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileEx, MapViewOfFileExNuma에 대한 단일 호출로 만든 페이지의 동일한 초기 할당의 일부입니다.
  • 모든 페이지에 부여된 액세스 권한은 동일합니다(PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD 또는 PAGE_NOCACHE).

함수는 지역에서 첫 번째 페이지의 특성을 확인한 다음 전체 페이지 범위를 검색하거나 일치하지 않는 특성 집합이 있는 페이지가 발생할 때까지 후속 페이지를 검색합니다. 함수는 일치하는 특성이 있는 페이지 영역의 특성 및 크기를 바이트 단위로 반환합니다. 예를 들어 사용 가능한 메모리의 40MB(메가바이트) 영역이 있고 지역에 10MB인 페이지에서 VirtualQuery 가 호출되는 경우 함수는 MEM_FREE 상태와 30MB 크기를 가져옵니다.

공유 쓰기 복사 페이지가 수정되면 페이지를 수정한 프로세스에 비공개가 됩니다. 그러나 VirtualQuery 함수는 MEM_PRIVATE 대신MEM_MAPPED(데이터 뷰의 경우) 또는 MEM_IMAGE(실행 파일 이미지 뷰의 경우)와 같은 페이지를 계속 보고합니다. 특정 페이지에 대해 쓰기 복사가 발생했는지 여부를 감지하려면 페이지에 액세스하거나 VirtualLock 함수를 사용하여 페이지를 잠그고 페이지가 메모리에 있는지 확인한 다음 QueryWorkingSetEx 함수를 사용하여 페이지에 대한 확장된 작업 집합 정보에서 공유 비트를 검사. 공유 비트가 명확하면 페이지가 비공개입니다.

이 함수는 호출 프로세스의 메모리에 있는 페이지 영역을 보고하고 VirtualQueryEx 함수는 지정된 프로세스의 메모리에 있는 페이지 영역에 대해 보고합니다.

요구 사항

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

참고 항목

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

메모리 관리 함수

가상 메모리 함수

VirtualQueryEx

VBS Enclave에서 사용할 수 있는 Vertdll API