Функция ZwFlushVirtualMemory (ntifs.h)

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

Синтаксис

NTSYSAPI NTSTATUS ZwFlushVirtualMemory(
  [in]      HANDLE           ProcessHandle,
  [in, out] PVOID            *BaseAddress,
  [in, out] PSIZE_T          RegionSize,
  [out]     PIO_STATUS_BLOCK IoStatus
);

Параметры

[in] ProcessHandle

Открытый дескриптор для процесса, в контексте которого находятся страницы для очистки. Используйте макрос NtCurrentProcess , определенный в ntddk.h, чтобы указать текущий процесс.

[in, out] BaseAddress

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

При входе этот параметр указывает указатель на начальное значение базового адреса области страниц для очистки.

При возврате этот параметр предоставляет указатель на переменную, которая получит базовый адрес области очистки.

[in, out] RegionSize

Размер диапазона виртуальных адресов в байтах.

При вводе этот параметр указывает указатель на начальное значение размера в байтах области страниц для записи на диск. Этот аргумент округляется до следующей границы размера страницы узла с помощью ZwFlushVirtualMemory. Если это значение указано как ноль, сопоставленный диапазон от базового адреса до конца диапазона сбрасывается.

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

[out] IoStatus

Указатель на структуру IO_STATUS_BLOCK . В этой структуре значение состояния ввода-вывода для последней попытки операции ввода-вывода хранится в выходных данных.

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

ZwFlushVirtualMemory возвращает STATUS_SUCCESS или код состояния ошибки. Возможные коды состояния ошибок:

Код возврата Описание
STATUS_ACCESS_DENIED Указанный параметр ProcessHandle не является допустимым дескриптором процесса.
STATUS_INSUFFICIENT_RESOURCES Дополнительные ресурсы, необходимые для этой функции, были недоступны.
STATUS_INVALID_PARAMETER_2 Указанный baseAddress был недопустимым адресом в виртуальном адресном пространстве или Значение RegionSize было недопустимым.
STATUS_INVALID_HANDLE Указанный параметр ProcessHandle не является допустимым дескриптором процесса.
STATUS_NOT_MAPPED_VIEW Дескриптор виртуального адресного пространства не может быть найден для предоставленного baseAddress.
STATUS_PROCESS_IS_TERMINATING Процесс и связанное виртуальное адресное пространство были удалены.
STATUS_FILE_LOCK_CONFLICT В файловой системе обнаружен конфликт блокировки.

Комментарии

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

Дополнительные сведения о поддержке управления памятью для драйверов в режиме ядра см. в разделе Управление памятью для драйверов Windows.

Примечание

Если вызов функции ZwFlushVirtualMemory происходит в пользовательском режиме, следует использовать имя NtFlushVirtualMemory вместо ZwFlushVirtualMemory.

Для вызовов из драйверов режима ядра версии NtXxx и ZwXxx подпрограммы собственных системных служб Windows могут вести себя по-разному, так как они обрабатывают и интерпретируют входные параметры. Дополнительные сведения о связи между версиями процедуры NtXxx и ZwXxx см. в разделе Использование версий Nt и Zw для процедур собственных системных служб.

Требования

Требование Значение
Минимальная версия клиента Windows XP
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntifs.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL

См. также раздел

ZwAllocateVirtualMemory