VirtualQueryEx, fonction (memoryapi.h)
Récupère des informations sur une plage de pages dans l’espace d’adressage virtuel d’un processus spécifié.
Syntaxe
SIZE_T VirtualQueryEx(
[in] HANDLE hProcess,
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
Paramètres
[in] hProcess
Handle du processus dont les informations de mémoire sont interrogées. Le handle doit avoir été ouvert avec le droit d’accès PROCESS_QUERY_INFORMATION , ce qui permet d’utiliser le handle pour lire les informations de l’objet de processus. Pour plus d’informations, consultez Droits d’accès et de sécurité des processus.
[in, optional] lpAddress
Pointeur vers l’adresse de base de la région des pages à interroger. Cette valeur est arrondie à la limite de page suivante. Pour déterminer la taille d’une page sur l’ordinateur hôte, utilisez la fonction GetSystemInfo .
Si lpAddress spécifie une adresse au-dessus de l’adresse mémoire la plus élevée accessible au processus, la fonction échoue avec ERROR_INVALID_PARAMETER.
[out] lpBuffer
Pointeur vers une structure de MEMORY_BASIC_INFORMATION dans laquelle des informations sur la plage de pages spécifiée sont retournées.
[in] dwLength
Taille de la mémoire tampon pointée vers par le paramètre lpBuffer , en octets.
Valeur retournée
La valeur de retour est le nombre réel d’octets retournés dans la mémoire tampon d’informations.
Si la fonction échoue, la valeur de retour est égale à zéro. Pour obtenir des informations détaillées sur l’erreur, appelez GetLastError. Les valeurs d’erreur possibles incluent ERROR_INVALID_PARAMETER.
Notes
VirtualQueryEx fournit des informations sur une région de pages consécutives commençant à une adresse spécifiée qui partagent les attributs suivants :
- L’état de toutes les pages est le même (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED ou MEM_IMAGE).
- Si la page initiale n’est pas gratuite, toutes les pages de la région font partie de la même allocation initiale de pages créées par un seul appel à VirtualAlloc, MapViewOfFile ou l’une des versions étendues suivantes de ces fonctions : VirtualAllocEx, VirtualAllocExNuma, MapViewOfFileEx, MapViewOfFileExNuma.
- L’accès accordé à toutes les pages est le même (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD ou PAGE_NOCACHE).
Si une page de copie en écriture partagée est modifiée, elle devient privée pour le processus qui a modifié la page. Toutefois, la fonction VirtualQueryEx continuera à signaler des pages telles que MEM_MAPPED (pour les vues de données) ou MEM_IMAGE (pour les vues d’images exécutables) plutôt que MEM_PRIVATE. Pour détecter si la copie en écriture s’est produite pour une page spécifique, accédez à la page ou verrouillez-la à l’aide de la fonction VirtualLock pour vous assurer que la page réside en mémoire, puis utilisez la fonction QueryWorkingSet ou QueryWorkingSetEx pour case activée le bit partagé dans les informations du jeu de travail étendu de la page. Si le bit partagé est clair, la page est privée.
Spécifications
Client minimal pris en charge | Windows XP [applications de bureau | applications UWP] |
Serveur minimal pris en charge | Windows Server 2003 [applications de bureau | applications UWP] |
Plateforme cible | Windows |
En-tête | memoryapi.h (inclure Windows.h, Memoryapi.h) |
Bibliothèque | onecore.lib |
DLL | Kernel32.dll |
Voir aussi
Fonctions de gestion de la mémoire