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


Функция 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

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

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

[in] VmInformationLength

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

Если VmInformationClassVmPrefetchInformation, это должно быть sizeof (ULONG).

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

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

Замечания

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

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

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

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

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows 10 версии 1511.
целевая платформа Всеобщий
заголовка ntifs.h (include Ntddk.h)
библиотеки NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
правил соответствия DDI HwStorPortProhibitedDDIs, PowerIrpDDis