VirtualAllocEx 函式的作用是在指定進程的虛擬空間保留或提交記憶體區域,除非指定MEM_RESET參數,否則將該記憶體區域置0。
函式原形:
LPVOID VirtualAllocEx(
HANDLE hProcess,
LPVOID lpAddress,
SIZE_T dwSize,
DWORD flAllocationType,
DWORD flProtect
);
hProcess:
申請記憶體所在的進程句柄。
lpAddress:
保留頁面的記憶體地址;一般用NULL自動分配 。
dwSize:
欲分配的記憶體大小,位元組單位;注意實際分 配的記憶體大小是頁記憶體大小的整數倍
flAllocationType 可取下列值:
MEM_COMMIT:為特定的頁面區域分配記憶體中或磁碟的頁面檔案中的物理存儲
MEM_RESERVE:保留進程的虛擬地址空間,而不分配任何物理存儲。保留頁面可通過繼續調用VirtualAlloc()而被占用
MEM_RESET :指明在記憶體中由參數lpAddress和dwSize指定的數據無效
MEM_TOP_DOWN:在儘可能高的地址上分配記憶體(Windows 98忽略此標誌)
MEM_WRITE_WATCH:必須與MEM_RESERVE一起指定,使系統跟蹤那些被寫入分配區域的頁面(僅針對Windows 98)
flProtect可取下列值:
PAGE_READONLY: 該區域為唯讀。如果應用程式試圖訪問區域中的頁的時候,將會被拒絕訪
PAGE_READWRITE 區域可被應用程式讀寫
PAGE_EXECUTE: 區域包含可被系統執行的代碼。試圖讀寫該區域的操作將被拒絕。
PAGE_EXECUTE_READ :區域包含可執行代碼,應用程式可以讀該區域。
PAGE_EXECUTE_READWRITE: 區域包含可執行代碼,應用程式可以讀寫該區域。
PAGE_GUARD: 區域第一次被訪問時進入一個STATUS_GUARD_PAGE異常,這個標誌要和其他保護標誌合併使用,表明區域被第一次訪問的許可權
PAGE_NOACCESS: 任何訪問該區域的操作將被拒絕
PAGE_NOCACHE: RAM中的頁映射到該區域時將不會被微處理器快取(cached)
注:PAGE_GUARD和PAGE_NOCHACHE標誌可以和其他標誌合併使用以進一步指定頁的特徵。PAGE_GUARD標誌指定了一個防護頁(guard page),即當一個頁被提交時會因第一次被訪問而產生一個one-shot異常,接著取得指定的訪問許可權。PAGE_NOCACHE防止當它映射到虛擬頁的時候被微處理器快取。這個標誌方便設備驅動使用直接記憶體訪問方式(DMA)來共享記憶體塊。
返回值:
執行成功就返回分配記憶體的首地址,不成功就是NULL。