Fonction VirtualQuery (memoryapi.h)
Récupère des informations sur une plage de pages dans l’espace d’adressage virtuel du processus appelant.
Pour récupérer des informations sur une plage de pages dans l’espace d’adressage d’un autre processus, utilisez la fonction VirtualQueryEx .
Syntaxe
SIZE_T VirtualQuery(
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
Paramètres
[in, optional] lpAddress
Pointeur vers l’adresse de base de la région des pages à interroger. Cette valeur est arrondie à la limite de la 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 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.
Remarques
VirtualQuery 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).
La fonction détermine les attributs de la première page de la région, puis analyse les pages suivantes jusqu’à ce qu’elle analyse toute la plage de pages ou jusqu’à ce qu’elle rencontre une page avec un ensemble d’attributs non correspondant. La fonction retourne les attributs et la taille de la région de pages avec des attributs correspondants, en octets. Par exemple, s’il existe une région de 40 mégaoctets (Mo) de mémoire libre et que VirtualQuery est appelé sur une page de 10 Mo dans la région, la fonction obtient un état de MEM_FREE et une taille de 30 Mo.
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 VirtualQuery continue de 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 dans la mémoire, puis utilisez la fonction QueryWorkingSetEx pour case activée le bit partagé dans les informations de l’ensemble de travail étendu de la page. Si le bit partagé est clair, la page est privée.
Cette fonction signale une région de pages dans la mémoire du processus appelant, et la fonction VirtualQueryEx signale une région de pages dans la mémoire d’un processus spécifié.
Configuration requise
Condition requise | Valeur |
---|---|
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