VirtualLock 函数 (memoryapi.h)
将进程的虚拟地址空间的指定区域锁定到物理内存中,确保后续访问该区域不会产生页面错误。
语法
BOOL VirtualLock(
[in] LPVOID lpAddress,
[in] SIZE_T dwSize
);
parameters
[in] lpAddress
指向要锁定的页区域的基址的指针。
[in] dwSize
要锁定的区域的大小(以字节为单位)。 受影响页面的区域包括包含从 lpAddress 参数到 (lpAddress+dwSize)
范围内的一个或多个字节的所有页面。 这意味着跨页边界的 2 字节范围会导致两个页面被锁定。
返回值
如果该函数成功,则返回值为非零值。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
必须提交指定区域中的所有页面。 无法锁定受 PAGE_NOACCESS 保护的内存。
将页面锁定到内存中可能会降低系统的性能,方法是减少可用 RAM,并强制系统将其他关键页交换到分页文件。 每个版本的 Windows 对进程可锁定的最大页数都有限制。 此限制是特意较小的,以避免严重的性能下降。 需要锁定更多页的应用程序必须首先调用 SetProcessWorkingSetSize 函数,以增加其最小和最大工作集大小。 进程可锁定的最大页数等于其最小工作集中的页数减去少量开销。
进程锁定的页面将保留在物理内存中,直到进程解锁或终止。 保证这些页面在锁定时不会写入页面文件。
若要解锁锁定页面的区域,请使用 VirtualUnlock 函数。 当进程终止时,锁定的页面会自动解锁。
此函数与 GlobalLock 或 LocalLock 函数不一样,因为它不会递增锁计数并将句柄转换为指针。 虚拟页面没有锁计数,因此无需多次调用 VirtualUnlock 函数即可解锁页面区域。
示例
有关示例,请参阅 创建保护页。
要求
最低受支持的客户端 | Windows XP [桌面应用 | UWP 应用] |
最低受支持的服务器 | Windows Server 2003 [桌面应用 | UWP 应用] |
目标平台 | Windows |
标头 | memoryapi.h (包括 Windows.h、Memoryapi.h) |
Library | onecore.lib |
DLL | Kernel32.dll |