使用页面
若要确定当前计算机上的页面大小,请使用 GetSystemInfo 函数。
VirtualQuery 和 VirtualQueryEx 函数返回有关从进程地址空间中的指定地址开始的连续页区域的信息。 VirtualQuery 返回有关调用进程中内存的信息。 VirtualQueryEx 返回有关指定进程中的内存的信息,并用于支持需要有关正在调试的进程的信息的调试器。 页面区域由指定地址绑定,该地址向下舍入到最近的页边界。 它扩展到具有以下共同属性的所有后续页面:
- 所有页面的状态都相同:已提交、保留或免费。
- 如果初始页面不可用,则区域中的所有页面都是通过调用 VirtualAlloc 保留的相同页面初始分配的一部分。
- 所有页面的访问保护都与PAGE_READONLY、PAGE_READWRITE或PAGE_NOACCESS) 相同的 (。
VirtualLock 函数使进程能够将一个或多个已提交内存页锁定到物理内存 (RAM) ,从而防止系统将页面交换到分页文件。 它可用于确保无需磁盘访问即可访问关键数据。 将页面锁定到内存中很危险,因为这会限制系统管理内存的能力。 过多使用 VirtualLock 会导致可执行代码交换到分页文件,从而降低系统性能。 VirtualUnlock 函数解锁 VirtualLock 锁定的内存。
VirtualProtect 函数使进程能够修改进程地址空间中任何已提交页面的访问保护。 例如,进程可以分配读取/写入页来存储敏感数据,然后它可以将访问权限更改为只读或无访问权限,以防止意外覆盖。 VirtualProtect 通常用于 VirtualAlloc 分配的页面,但它也适用于任何其他分配函数提交的页面。 但是, VirtualProtect 会更改对整个页面的保护,其他函数返回的指针不一定在页面边界上对齐。 VirtualProtectEx 函数类似于 VirtualProtect,只是它更改了指定进程中的内存保护。 更改保护对调试器访问所调试进程的内存很有用。