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 函数。 当进程终止时,锁定的页面会自动解锁。

此函数与 GlobalLockLocalLock 函数不一样,因为它不会递增锁计数并将句柄转换为指针。 虚拟页面没有锁计数,因此无需多次调用 VirtualUnlock 函数即可解锁页面区域。

示例

有关示例,请参阅 创建保护页

要求

   
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 memoryapi.h (包括 Windows.h、Memoryapi.h)
Library onecore.lib
DLL Kernel32.dll

另请参阅

内存管理函数

SetProcessWorkingSetSize

虚拟内存函数

VirtualUnlock