LPVOID VirtualAlloc( LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect );
LPVOID VirtualAllocEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect );
함수 원형에서 확인 가능하듯이 차이점은 프로세스 핸들이 인자로 들어가느냐 안들어가느냐에 있다.
다시말해 VirtualAlloc 함수는 내 프로세스에, VirtualAllocEx 함수는 타 프로세스에도 메모리 공간을 할당할 수 있다.
[인자 설명]
LPVOID lpAddress
-
할당할 메모리의 절대주소
-
NULL을 인자로 주면 시스템에서 알아서 할당
SIZE_T dwSize
-
할당할 메모리의 크기
-
NULL을 인자로 주면 하나의 페이지 크기만큼 할당
DWORD flAllocationType
-
할당 방법 지정
-
MEM_COMMIT : 물리 메모리의 할당을 확정
-
MEM_RESERVE : 물리 메모리의 할당 없이 예약만 한다
-
ETC : 나머지 옵션은 MSDN
DWORD flProtect
-
할당한 메모리의 옵션 설정 ( Read / Write / eXecute …)
-
기본적으로 RWX 모두 사용(PAGE_EXECUTE_READWRITE)
Return Value
-
성공시 할당한 메모리 주소를 반환
-
실패시 NULL 반환
'C&C++' 카테고리의 다른 글
WINAPI CreateProcess Suspend State (0) | 2019.07.11 |
---|---|
Incremental Linking (0) | 2019.07.10 |
Features And Uses Of STL Container In C++ (0) | 2018.11.04 |
Modern C++ (1) | 2018.10.02 |
WINAPI How To Load Windows Tray Icon (0) | 2018.09.08 |