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).
La función VirtualQueryEx determina los atributos de la primera página de la región y, a continuación, examina las páginas posteriores hasta que examina todo el intervalo de páginas, o hasta que encuentra una página con un conjunto de atributos no coincidentes. La función devuelve los atributos y el tamaño de la región de las páginas con atributos coincidentes, en bytes. Por ejemplo, si hay una región de 40 megabytes (MB) de memoria libre y se llama a VirtualQueryEx en una página de 10 MB en la región, la función obtendrá un estado de MEM_FREE y un tamaño de 30 MB.

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

Vea también

Getsysteminfo

MEMORY_BASIC_INFORMATION

MapViewOfFileEx

Funciones de administración de memoria

Funciones de memoria virtual

VirtualAllocEx

VirtualProtectEx