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

另请参阅

内存管理函数

SetProcessWorkingSetSize

虚拟内存函数

VirtualUnlock