Función VirtualQueryEx (memoryapi.h)
Recupera información sobre un intervalo de páginas dentro del espacio de direcciones virtuales de un proceso especificado.
Sintaxis
SIZE_T VirtualQueryEx(
[in] HANDLE hProcess,
[in, optional] LPCVOID lpAddress,
[out] PMEMORY_BASIC_INFORMATION lpBuffer,
[in] SIZE_T dwLength
);
Parámetros
[in] hProcess
Identificador del proceso cuya información de memoria se consulta. El identificador debe haberse abierto con el derecho de acceso PROCESS_QUERY_INFORMATION , lo que permite usar el identificador para leer información del objeto de proceso. Para obtener más información, consulte Derechos de acceso y seguridad de procesos.
[in, optional] lpAddress
Puntero a la dirección base de la región de las páginas que se van a consultar. Este valor se redondea hacia abajo hasta el límite de la página siguiente. Para determinar el tamaño de una página en el equipo host, use la función GetSystemInfo .
Si lpAddress especifica una dirección por encima de la dirección de memoria más alta accesible para el proceso, se produce un error en la función con ERROR_INVALID_PARAMETER.
[out] lpBuffer
Puntero a una estructura MEMORY_BASIC_INFORMATION en la que se devuelve información sobre el intervalo de página especificado.
[in] dwLength
Tamaño del búfer al que apunta el parámetro lpBuffer , en bytes.
Valor devuelto
El valor devuelto es el número real de bytes devueltos en el búfer de información.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError. Entre los posibles valores de error se incluyen ERROR_INVALID_PARAMETER.
Comentarios
VirtualQueryEx proporciona información sobre una región de páginas consecutivas que comienza en una dirección especificada que comparte los siguientes atributos:
- El estado de todas las páginas es el mismo (MEM_COMMIT, MEM_RESERVE, MEM_FREE, MEM_PRIVATE, MEM_MAPPED o MEM_IMAGE).
- Si la página inicial no es gratuita, todas las páginas de la región forman parte de la misma asignación inicial de páginas creadas por una sola llamada a VirtualAlloc, MapViewOfFile o una de las siguientes versiones extendidas de estas funciones: VirtualAllocEx, VirtualAllocEx, MapViewOfFileEx, MapViewOfFileExuma.
- El acceso concedido a todas las páginas es el mismo (PAGE_READONLY, PAGE_READWRITE, PAGE_NOACCESS, PAGE_WRITECOPY, PAGE_EXECUTE, PAGE_EXECUTE_READ, PAGE_EXECUTE_READWRITE, PAGE_EXECUTE_WRITECOPY, PAGE_GUARD o PAGE_NOCACHE).
Si se modifica una página de copia en escritura compartida, se convierte en privada para el proceso que modificó la página. Sin embargo, la función VirtualQueryEx seguirá notificando páginas como MEM_MAPPED (para vistas de datos) o MEM_IMAGE (para vistas de imagen ejecutables) en lugar de MEM_PRIVATE. Para detectar si se ha producido una copia en escritura para una página específica, acceda a la página o bloqueela mediante la función VirtualLock para asegurarse de que la página está residente en memoria y, a continuación, use la función QueryWorkingSet o QueryWorkingSetEx para comprobar el bit Compartido en la información del conjunto de trabajo extendido de la página. Si el bit Compartido está claro, la página es privada.
Requisitos
Cliente mínimo compatible | Windows XP [aplicaciones de escritorio | aplicaciones para UWP] |
Servidor mínimo compatible | Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP] |
Plataforma de destino | Windows |
Encabezado | memoryapi.h (incluya Windows.h, Memoryapi.h) |
Library | onecore.lib |
Archivo DLL | Kernel32.dll |