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

Если 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