VirtualAlloc 方法


第 1 个参数 lpAddress 是输入参数,指定分配的起始位置。如果要保留一段内存区域,那么函数会将其自动向最近的一个分配粒度(一般为 64K)对齐。如果内存已经被保存并且打算将其提交,那么函数将会向最近的一个页面对其。如果设为 NULL ,那么系统将自行决定在什么地方分配。

第 2 个参数 dwSize 是输入参数,指定要分配的内存区域的大小。

第 3 个参数 flAllocationType 是输入参数,表示分配的类型,决定了是保留一段内存区域,还是提交,还是两者同时完成。如果设置为 MEM_COMMIT ,那么将提交内存页面;如果设置为 MEM_RESERVE ,那么将保留页面;如果设置为 MEM_COMMIT | MEM_RESERVE 那么将直接从空闲页面提交为 “已提交的” 页面。

第 4 个参数 flProtect 是输入参数,表示内存的属性,其值可以如下:

PAGE_NOACCESS : 拒绝访问。
PAGE_READONLY : 只读。
PAGE_READWRITE : 可读写。
PAGE_WRITECOPY : 只读 或 写时拷贝(copy-on-write)一个文件映射对象。
PAGE_EXECUTE : 该区域包含可执行代码,拒绝对该区域读写。
PAGE_EXECUTE_READ :该区域包含可执行代码,也可读该区域。
PAGE_EXECUTE_READWRITE : 该区域包含可执行代码,并且可读写。
PAGE_EXECUTE_WRITECOPY :该区域包含可执行代码,只读,或写时拷贝。

函数返回 LPVOID 类型,表示分配到的内存的起始地址。如果返回 NULL 则表示函数执行失败,可用 GetLastError() 获取错误信息。

你可能感兴趣的:(VirtualAlloc 方法)