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 함수는 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 |