ZwSetInformationVirtualMemory-Funktion (ntifs.h)

Die ZwSetInformationVirtualMemory-Routine führt einen Vorgang in einer angegebenen Liste von Adressbereichen im Benutzeradressenbereich 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 einen geöffneten 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 in Ntddk.h definierte NtCurrentProcess-Makro , um den aktuellen Prozess anzugeben.

[in] VmInformationClass

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

[in] NumberOfEntries

Die Anzahl der Einträge im Array, auf die der Parameter "VirtualAddresses " verweist. Dieser Parameter kann nicht 0 sein.

[in] VirtualAddresses

Zeiger auf ein Array von MEMORY_RANGE_ENTRY Strukturen, in denen jeder Eintrag einen zu verarbeitenden virtuellen Adressbereich angibt. Die virtuellen Adressbereiche können einen beliebigen Teil des Prozessadressenbereichs abdecken, der durch den Zielprozess zugänglich ist.

[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 VmInformationClassvmPrefetchInformation ist, 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 vmInformation verweist.

Wenn vmInformationClassvmPrefetchInformation ist, muss dies sein sizeof (ULONG).

Rückgabewert

ZwSetInformationVirtualMemory gibt STATUS_SUCCESS bei Erfolg 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. Wenn es wahrscheinlich ist, dass diese Adressen nicht mehr im Arbeitsspeicher vorhanden sind (d. h. sie wurden auf den Datenträger ausgelagert), reduziert der Zugriff diese Routine auf diesen Adressbereichen, bevor der Zugriff die Gesamtlatenz reduziert, da diese Adressbereiche effizient von einem großen, gleichzeitigen E/A-Anforderungen verwendet werden, wenn möglich.

ZwSetInformationVirtualMemory ermöglicht Treibern die effiziente Verwendung von Datenträgerhardware, indem sie große, gleichzeitige I/Os ausgeben, wenn der Treiber eine Liste der Prozessadressebereiche 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 I/O ausgegeben wird, anstatt die vielen kleineren I/Os, die über Seitenfehler ausgegeben würden.

Treiber rufen diese Routine ausschließlich zur Leistungsoptimierung auf: Das Vorabfetching ist nicht erforderlich, um auf die Zieladressenbereiche zuzugreifen. Der vordefinierte Arbeitsspeicher wird nicht zum Arbeitssatz des Zielprozesses hinzugefügt; es 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. Sie kann auch Speicherdruck erzeugen, wenn sie mit großen Adressbereichen aufgerufen werden, daher sollten Anwendungen nur Adressbereiche vorfetchen, die tatsächlich verwendet werden.

Anforderungen

   
Unterstützte Mindestversion (Client) Ab Windows 10, Version 1511, verfügbar.
Zielplattform Universell
Header ntifs.h (include Ntddk.h)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs, PowerIrpDDis