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 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 Typ des auszuführenden Vorgangs an. Legen Sie auf VmPrefetchInformation fest, die in der VIRTUAL_MEMORY_INFORMATION_CLASS-Enumeration definiert ist. Weitere Informationen finden Sie unter ntddk.h.

[in] NumberOfEntries

Anzahl der Einträge im Array, auf das der VirtualAddresses-Parameter verweist. Dieser Parameter darf 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 jeden Teil des Prozessadressraums abdecken, auf den der Zielprozess zugreifen kann.

[in] VmInformation

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

Wenn VmInformationClassvmPrefetchInformation ist, darf 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 bei Einem Fehler zurück.

Hinweise

Die ZwSetInformationVirtualMemory-Routine wird von Treibern aufgerufen, die den Adresssatz kennen, auf den 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 das Aufrufen dieser Routine für diese Adressbereiche vor dem Zugriff die Gesamtlatenz, da diese Adressbereiche effizient vom Datenträger mit großen, gleichzeitigen E/A-Anforderungen nach Möglichkeit integriert werden.

ZwSetInformationVirtualMemory ermöglicht Treibern die effiziente Nutzung der Datenträgerhardware, indem nach Möglichkeit große gleichzeitige E/A-Vorgänge ausgegeben werden, wenn der Treiber eine Liste von Prozessadressbereichen bereitstellt, auf die zugegriffen werden soll. Selbst für einen einzelnen Adressbereich (z. B. eine Dateizuordnung) kann die Routine Leistungsverbesserungen erzielen, indem eine einzelne große E/A anstelle der vielen kleineren E/A-Vorgänge ausgegeben wird, die durch Seitenfehler ausgegeben würden.

Treiber rufen diese Routine rein zur Leistungsoptimierung auf: Ein Vorabruf ist für den Zugriff auf die Zieladressbereiche nicht erforderlich. Der vorab abgerufene Arbeitsspeicher wird dem Arbeitssatz des Zielprozesses nicht hinzugefügt. sie wird im physischen Arbeitsspeicher zwischengespeichert. Wenn der Zielprozess auf die vorab abgerufenen Adressbereiche zugreift, werden sie dem Arbeitssatz hinzugefügt.

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

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 10, Version 1511.
Zielplattform Universell
Header ntifs.h (ntddk.h einschließen)
Bibliothek NtosKrnl.lib
DLL NtosKrnl.exe
IRQL PASSIVE_LEVEL
DDI-Complianceregeln HwStorPortProhibitedDIs, PowerIrpDDis