VirtualQueryEx-Funktion (memoryapi.h)

Ruft Informationen zu einem Seitenbereich innerhalb des virtuellen Adressraums eines angegebenen Prozesses ab.

Syntax

SIZE_T VirtualQueryEx(
  [in]           HANDLE                    hProcess,
  [in, optional] LPCVOID                   lpAddress,
  [out]          PMEMORY_BASIC_INFORMATION lpBuffer,
  [in]           SIZE_T                    dwLength
);

Parameter

[in] hProcess

Ein Handle für den Prozess, dessen Speicherinformationen abgefragt werden. Das Handle muss mit dem PROCESS_QUERY_INFORMATION-Zugriffsrecht geöffnet worden sein, wodurch das Handle zum Lesen von Informationen aus dem Prozessobjekt ermöglicht wird. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.

[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

VirtualQueryEx 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 VirtualQueryEx-Funktion bestimmt die Attribute der ersten Seite im Bereich und scannt dann nachfolgende Seiten, bis sie den gesamten Seitenbereich überprüft oder eine Seite mit einem nicht übereinstimmenden Satz von Attributen trifft. 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 VirtualQueryEx auf einer Seite aufgerufen wird, die 10 MB in der Region enthält, erhält die Funktion den Zustand 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 VirtualQueryEx-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 Copy-on-Write 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 die Seite sich im Arbeitsspeicher befindet. Verwenden Sie dann die Funktion QueryWorkingSet oder QueryWorkingSetEx , um das Bit Shared in den erweiterten Arbeitssatzinformationen für die Seite zu überprüfen. Wenn das Freigegebene Bit eindeutig ist, ist die Seite privat.

Anforderungen

   
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

MapViewOfFileEx

Speicherverwaltungsfunktionen

Funktionen des virtuellen Speichers

VirtualAllocEx

VirtualProtectEx