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).
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 |