Freigeben über


ZwSetInformationVirtualMemory-Funktion (ntifs.h)

Die ZwSetInformationVirtualMemory Routine führt einen Vorgang für eine angegebene Liste von Adressbereichen im Benutzeradressraum eines Prozesses aus.

Syntax

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
);

Parameter

[in] ProcessHandle

Gibt ein geöffnetes Handle für den Prozess im Kontext an, in dem der Vorgang ausgeführt werden soll. Dieses Handle kann nicht ungültig sein. Verwenden Sie das NtCurrentProcess Makro, das in Ntddk.h definiert ist, um den aktuellen Prozess anzugeben.

[in] VmInformationClass

Gibt den Auszuführenden Vorgangstyp an. Legen Sie diesen Wert auf VmPrefetchInformation fest, in der VIRTUAL_MEMORY_INFORMATION_CLASS-Aufzählung definiert ist, siehe ntddk.h.

[in] NumberOfEntries

Die Anzahl der Einträge im Array, auf die durch den parameter VirtualAddresses verwiesen wird. Dieser Parameter darf nicht 0 sein.

[in] VirtualAddresses

Zeiger auf ein Array von MEMORY_RANGE_ENTRY Strukturen, in denen jeder Eintrag einen virtuellen Adressbereich angibt, der verarbeitet werden soll. Die virtuellen Adressbereiche können jeden Teil des Prozessadressraums abdecken, auf den der Zielprozess zugreifen kann.

[in] VmInformation

Ein Zeiger auf einen Puffer, der Speicherinformationen enthält. Das Format und der Inhalt des Puffers hängen von der angegebenen Informationsklasse ab.

Wenn VmInformationClassVmPrefetchInformationist, kann dieser Parameter nicht NULL sein und muss auf eine ULONG-Variable verweisen, die auf 0 festgelegt ist.

[in] VmInformationLength

Die Größe des Puffers, auf den VmInformationverweist.

Wenn VmInformationClassvmPrefetchInformationist, muss dies sizeof (ULONG)sein.

Rückgabewert

ZwSetInformationVirtualMemory gibt bei Erfolg STATUS_SUCCESS oder den entsprechenden NTSTATUS-Fehlercode beim Fehler zurück.

Bemerkungen

Die ZwSetInformationVirtualMemory Routine wird von Treibern aufgerufen, die den Satz von Adressen kennen, auf die sie zugreifen werden. Wenn sich diese Adressen wahrscheinlich nicht mehr im Arbeitsspeicher befinden (d. h. sie wurden auf den Datenträger ausgelagert), reduziert der Zugriff diese Routine auf diesen Adressbereichen, bevor der Zugriff die Gesamtlatenz verringert, da diese Adressbereiche effizient von einem Datenträger mit großen, gleichzeitigen E/A-Anforderungen verwendet werden, wenn möglich.

ZwSetInformationVirtualMemory ermöglicht Treibern die effiziente Nutzung der Datenträgerhardware, indem sie möglichst große, gleichzeitige E/A ausstellen, wenn der Treiber eine Liste der Prozessadressbereiche bereitstellt, auf die zugegriffen werden soll. Selbst für einen einzelnen Adressbereich (z. B. eine Dateizuordnung) kann die Routine Leistungsverbesserungen bereitstellen, indem eine einzelne große E/A ausgegeben wird, anstatt die vielen kleineren E/A,, die über Seitenfehler ausgegeben würden.

Treiber rufen diese Routine ausschließlich zur Leistungsoptimierung auf: Das Vorabrufen ist für den Zugriff auf die Zieladressenbereiche nicht erforderlich. Der vordefinierte Speicher wird nicht zum Arbeitssatz des Zielprozesses hinzugefügt. sie wird im physischen Speicher zwischengespeichert. Wenn auf die vordefinierten Adressbereiche durch den Zielprozess zugegriffen wird, werden sie dem Arbeitssatz hinzugefügt.

Da dieser Aufruf für den korrekten Betrieb des Treibers nicht erforderlich ist, wird er vom System als starker Hinweis behandelt und unterliegt üblichen physischen Speichereinschränkungen, bei denen er unter Bedingungen mit geringem Arbeitsspeicher vollständig oder teilweise fehlschlagen kann. Es kann auch Speicherdruck erzeugen, wenn er mit großen Adressbereichen aufgerufen wird, sodass Anwendungen nur Adressbereiche vorab abrufen sollten, die sie tatsächlich verwenden.

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows 10, Version 1511.
Zielplattform- Universal
Header- ntifs.h (include Ntddk.h)
Library NtosKrnl.lib
DLL- NtosKrnl.exe
IRQL- PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs, PowerIrpDDis