VirtualQuery-Funktion (memoryapi.h)

Ruft Informationen zu einem Seitenbereich im virtuellen Adressraum des aufrufenden Prozesses ab.

Verwenden Sie die VirtualQueryEx-Funktion , um Informationen zu einem Seitenbereich im Adressraum eines anderen Prozesses abzurufen.

Syntax

SIZE_T VirtualQuery(
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

Parameter

[in, optional] lpAddress

Ein Zeiger auf die Basisadresse des Bereichs der abzufragenden Seiten. Dieser Wert wird auf die nächste Seitengrenze gerundet. Verwenden Sie die GetSystemInfo-Funktion , um die Größe einer Seite auf dem Hostcomputer zu bestimmen.

Wenn lpAddress eine Adresse oberhalb der höchsten Speicheradresse angibt, die für den Prozess zugänglich ist, schlägt die Funktion mit ERROR_INVALID_PARAMETER fehl.

[out] lpBuffer

Ein Zeiger auf eine MEMORY_BASIC_INFORMATION-Struktur , in der Informationen zum angegebenen Seitenbereich zurückgegeben werden.

[in] dwLength

Die Größe des Puffers, auf den der lpBuffer-Parameter in Bytes verweist.

Rückgabewert

Der Rückgabewert ist die tatsächliche Anzahl von Bytes, die im Informationspuffer zurückgegeben werden.

Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie GetLastError auf. Mögliche Fehlerwerte sind ERROR_INVALID_PARAMETER.

Hinweise

VirtualQuery stellt Informationen zu einer Region aufeinanderfolgender Seiten bereit, die bei einer angegebenen Adresse beginnen und die die folgenden Attribute gemeinsam haben:

  • Der Zustand aller Seiten ist identisch (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED oder MEM_IMAGE).
  • Wenn die anfängliche Seite nicht frei ist, sind alle Seiten in der Region Teil derselben anfänglichen Zuordnung von Seiten, die durch einen einzelnen Aufruf von VirtualAlloc, MapViewOfFile oder einer der folgenden erweiterten Versionen dieser Funktionen erstellt wurden: VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileExNuma.
  • Der Zugriff auf alle Seiten ist identisch (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD oder PAGE_NOCACHE).

Die Funktion bestimmt die Attribute der ersten Seite im Bereich und scannt dann nachfolgende Seiten, bis sie den gesamten Seitenbereich überprüft oder bis eine Seite mit einem nicht übereinstimmenden Satz von Attributen gefunden wird. Die Funktion gibt die Attribute und die Größe des Bereichs von Seiten mit übereinstimmenden Attributen in Bytes zurück. Wenn beispielsweise ein Bereich mit 40 MB freiem Arbeitsspeicher vorhanden ist und VirtualQuery auf einer Seite mit 10 MB in der Region aufgerufen wird, erhält die Funktion den Status MEM_FREE und eine Größe von 30 MB.

Wenn eine freigegebene Seite zum Kopieren beim Schreiben geändert wird, wird sie für den Prozess privat, der die Seite geändert hat. Die VirtualQuery-Funktion meldet jedoch weiterhin Seiten wie MEM_MAPPED (für Datenansichten) oder MEM_IMAGE (für ausführbare Bildansichten) und nicht MEM_PRIVATE. Um zu erkennen, ob ein Kopiervorgang für eine bestimmte Seite erfolgt ist, greifen Sie entweder auf die Seite zu, oder sperren Sie sie mithilfe der VirtualLock-Funktion , um sicherzustellen, dass sich die Seite im Arbeitsspeicher befindet. Verwenden Sie dann die QueryWorkingSetEx-Funktion , um das Shared-Bit in den erweiterten Arbeitssatzinformationen für die Seite zu überprüfen. Wenn das Freigegebene Bit eindeutig ist, ist die Seite privat.

Diese Funktion meldet einen Bereich von Seiten im Arbeitsspeicher des aufrufenden Prozesses, und die VirtualQueryEx-Funktion meldet einen Bereich von Seiten im Arbeitsspeicher eines angegebenen Prozesses.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile memoryapi.h (einschließlich Windows.h, Memoryapi.h)
Bibliothek onecore.lib
DLL Kernel32.dll

Siehe auch

GetSystemInfo

MEMORY_BASIC_INFORMATION

MapViewOfFile

Speicherverwaltungsfunktionen

Funktionen des virtuellen Speichers

VirtualQueryEx

In VBS-Enclaves verfügbare Vertdll-APIs