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 |
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für