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

Подпрограмма ZwSetInformationVirtualMemory выполняет операцию с указанным списком диапазонов адресов в адресном пространстве пользователя процесса.

Синтаксис

NTSYSAPI NTSTATUS ZwSetInformationVirtualMemory(
  [in] HANDLE                           ProcessHandle,
  [in] VIRTUAL_MEMORY_INFORMATION_CLASS VmInformationClass,
  [in] ULONG_PTR                        NumberOfEntries,
  [in] PMEMORY_RANGE_ENTRY              VirtualAddresses,
  [in] PVOID                            VmInformation,
  [in] ULONG                            VmInformationLength
);

Параметры

[in] ProcessHandle

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

[in] VmInformationClass

Указывает тип выполняемой операции. Задайте для значение VmPrefetchInformation , определенное в перечислении VIRTUAL_MEMORY_INFORMATION_CLASS , см. ntddk.h.

[in] NumberOfEntries

Количество записей в массиве, на которые указывает параметр VirtualAddresses . Этот параметр не может иметь значение 0.

[in] VirtualAddresses

Указатель на массив MEMORY_RANGE_ENTRY структур, в которых каждая запись указывает диапазон виртуальных адресов для обработки. Диапазоны виртуальных адресов могут охватывать любую часть адресного пространства процесса, доступную целевому процессу.

[in] VmInformation

Указатель на буфер, содержащий сведения о памяти. Формат и содержимое буфера зависят от указанного класса информации.

Если vmInformationClass имеет значение VmPrefetchInformation, этот параметр не может иметь значение NULL и должен указывать на переменную ULONG, которая имеет значение 0.

[in] VmInformationLength

Размер буфера, на который указывает VmInformation.

Если vmInformationClass имеет значение VmPrefetchInformation, это должно быть sizeof (ULONG)значение .

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

ZwSetInformationVirtualMemory возвращает STATUS_SUCCESS при успешном выполнении или соответствующий код ошибки NTSTATUS при сбое.

Комментарии

Подпрограмма ZwSetInformationVirtualMemory вызывается драйверами, которые знают набор адресов, к которым они будут обращаться. Если вполне вероятно, что эти адреса больше не находятся в памяти (т. е. они были выгружены на диск), вызов этой процедуры для этих диапазонов адресов перед доступом сокращает общую задержку, так как она эффективно переносит эти диапазоны адресов с диска с помощью больших одновременных запросов ввода-вывода, где это возможно.

ZwSetInformationVirtualMemory позволяет драйверам эффективно использовать дисковое оборудование, выполняя большие параллельные операции ввода-вывода, когда драйвер предоставляет список диапазонов адресов процесса, к которым будет осуществляться доступ. Даже для одного диапазона адресов (например, для сопоставления файлов) подпрограмма может обеспечить повышение производительности путем выпуска одного большого ввода-вывода, а не множества меньших операций ввода-вывода, которые будут выданы через сбой страницы.

Драйверы называют эту подпрограмму исключительно для оптимизации производительности: предварительная выборка не требуется для доступа к целевым диапазонам адресов. Предварительно выбранная память не добавляется в рабочий набор целевого процесса; он кэшируется в физической памяти. Когда целевой процесс обращается к предварительно подготовленным диапазонам адресов, они добавляются в рабочий набор.

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

Требования

Требование Значение
Минимальная версия клиента Windows 10 версии 1511.
Целевая платформа Универсальное
Верхняя часть ntifs.h (включая Ntddk.h)
Библиотека NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
Правила соответствия DDI HwStorPortProhibitedDIs, PowerIrpDDis