Поделиться через


Функция VirtualLock (memoryapi.h)

Блокирует указанную область виртуального адресного пространства процесса в физической памяти, гарантируя, что последующий доступ к региону не приведет к сбою страницы.

Синтаксис

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

Параметры

[in] lpAddress

Указатель на базовый адрес области страниц, которые необходимо заблокировать.

[in] dwSize

Размер области для блокировки (в байтах). Область затронутых страниц включает все страницы, содержащие один или несколько байтов в диапазоне от параметра lpAddress до (lpAddress+dwSize). Это означает, что 2-байтовый диапазон, перестраивающий границу страницы, приводит к блокировке обеих страниц.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Все страницы в указанном регионе должны быть зафиксированы. Память, защищенную PAGE_NOACCESS , невозможно заблокировать.

Блокировка страниц в памяти может снизить производительность системы, уменьшив доступную ОЗУ и заставив систему переключить другие критически важные страницы на файл подкачки. Каждая версия Windows имеет ограничение на максимальное количество страниц, которое может заблокировать процесс. Это ограничение намеренно невелико, чтобы избежать серьезного снижения производительности. Приложения, которым необходимо заблокировать большее количество страниц, должны сначала вызвать функцию SetProcessWorkingSetSize , чтобы увеличить минимальный и максимальный размер рабочего набора. Максимальное количество страниц, которое может заблокировать процесс, равно количеству страниц в его минимальном рабочем наборе за вычетом небольших накладных расходов.

Страницы, заблокированные процессом, остаются в физической памяти до тех пор, пока процесс не разблокирует их или не завершит работу. Эти страницы гарантированно не будут записаны в файл подкачки, пока они заблокированы.

Чтобы разблокировать область заблокированных страниц, используйте функцию VirtualUnlock . Заблокированные страницы автоматически разблокируются при завершении процесса.

Эта функция не похожа на функцию GlobalLock или LocalLock в том, что она не увеличивает количество блокировок и не преобразует дескриптор в указатель. Количество блокировок для виртуальных страниц отсутствует, поэтому для разблокировки области страниц не требуется несколько вызовов функции VirtualUnlock .

Примеры

Пример см. в разделе Создание страниц Guard.

Требования

   
Минимальная версия клиента Windows XP [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2003 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header memoryapi.h (включая Windows.h, Memoryapi.h)
Библиотека onecore.lib
DLL Kernel32.dll

См. также

Функции управления памятью

SetProcessWorkingSetSize

Функции виртуальной памяти

VirtualUnlock