virtualLock 函式 (memoryapi.h)

將進程虛擬位址空間的指定區域鎖定為實體記憶體,確保後續存取區域不會產生分頁錯誤。

語法

BOOL VirtualLock(
  [in] LPVOID lpAddress,
  [in] SIZE_T dwSize
);

參數

[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)
程式庫 onecore.lib
DLL Kernel32.dll

另請參閱

記憶體管理功能

SetProcessWorkingSetSize

虛擬記憶體函式

VirtualUnlock