VirtualQueryEx 함수(memoryapi.h)

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

구문

SIZE_T VirtualQueryEx(
  [in]           HANDLE                    hProcess,
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

매개 변수

[in] hProcess

메모리 정보를 쿼리하는 프로세스에 대한 핸들입니다. 핸들을 사용하여 프로세스 개체에서 정보를 읽을 수 있도록 하는 PROCESS_QUERY_INFORMATION 액세스 권한으로 핸들을 열어야 합니다. 자세한 내용은 프로세스 보안 및 액세스 권한을 참조하세요.

[in, optional] lpAddress

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

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

[out] lpBuffer

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

[in] dwLength

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

반환 값

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

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

설명

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

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

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

요구 사항

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

참고 항목

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

메모리 관리 함수

가상 메모리 함수

VirtualAllocEx

VirtualProtectEx