NtAllocateVirtualMemory是一種計算機函式,功能是能在指定進程的虛擬空間中申請一塊記憶體,該塊記憶體將以64kb大小對齊。
函式原型,參數說明,ProcessHandle,BaseAddress,ZeroBits,RegionSize,AllocationType,Protect,返回值,備註,
函式原型
NTSYSAPI NTSTATUS NTAPI NtAllocateVirtualMemory(
IN HANDLE ProcessHandle,
IN OUT PVOID *BaseAddress,
IN ULONG ZeroBits,
IN OUT PULONG RegionSize,
IN ULONG AllocationType,
IN ULONG Protect
);
參數說明
ProcessHandle
目標進程句柄。
該句柄應具有PROCESS_VM_OPERATION訪問許可權。
BaseAddress
期望記憶體基址指針。
當該值非零時,系統將計算此值的頁對齊地址,嘗試按照此地址申請記憶體塊。
當該值等於零時,系統將尋找第一個未使用記憶體塊。
當函式調用成功時,此參數亦將接收實際基址。
ZeroBits
基址高位零位數量。
當該值為零時,此參數將被忽略。
當該值大於零小於32時,將被認為是基址的高位零位數量,此時,32-63位默認為零,以兼容64位作業系統。
當該值大於32時,將被認為是掩蓋位MASK,系統將計算此值高位零位數量,以充當參數。
RegionSize
期望大小。
系統將計算實際基址與該值的頁對齊邊界,以獲得實際分配大小。
當函式調用成功時,此參數亦將接收實際分配大小。
AllocationType
分配類型 | 類型說明 |
---|---|
MEM_COMMIT | 為特定的頁面區域分配記憶體中或磁碟的頁面檔案中的物理存儲 |
MEM_PHYSICAL | 分配物理記憶體(僅用於地址視窗擴展記憶體) |
MEM_RESERVE | 保留進程的虛擬地址空間,而不分配任何物理存儲。 |
MEM_RESET | 指明在記憶體中由參數BaseAddress和RegionSize指定的數據無效 |
MEM_TOP_DOWN | 在儘可能高的地址上分配記憶體(Windows 98忽略此標誌) |
MEM_WRITE_WATCH | 必須與MEM_RESERVE一起指定,使系統跟蹤那些被寫入分配區域的頁面(僅針對Windows 98) |
Protect
保護屬性 | 描述 |
---|---|
PAGE_NOACCESS | 試圖讀取頁面、寫入頁面或執行頁面中的代碼將引發訪問違規 |
PAGE_READONLY | 試圖寫入頁面或執行頁面中的代碼將引發訪問違規 |
PAGE_READWRITE | 試圖執行頁面中的代碼將引發訪問違規 |
PAGE_EXECUTE | 試圖讀取頁面或寫入頁面將引發訪問違規 |
PAGE_EXECUTE_READ | 試圖寫入頁面將引發訪問違規 |
PAGE_EXECUTE_READWRITE | 對頁面執行任何操作都不會引發訪問違規 |
PAGE_WRITECOPY | 試圖執行頁面中的代碼將引發訪問違規。試圖寫入頁面將使系統為進程單獨創建一份該頁面的私有副本(以頁交換檔案為後備存儲器) |
PAGE_EXECUTE_WRITECOPY | 對頁面執行任何操作都不會引發訪問違規。試圖寫入頁面將使系統為進程單獨創建一份該頁面的私有副本(以頁交換檔案為後備存儲器) |