Función HeapQueryInformation (heapapi.h)
Recupera información sobre el montón especificado.
Sintaxis
BOOL HeapQueryInformation(
[in, optional] HANDLE HeapHandle,
[in] HEAP_INFORMATION_CLASS HeapInformationClass,
[out] PVOID HeapInformation,
[in] SIZE_T HeapInformationLength,
[out, optional] PSIZE_T ReturnLength
);
Parámetros
[in, optional] HeapHandle
Identificador del montón cuya información se va a recuperar. La función HeapCreate o GetProcessHeap devuelve este identificador.
[in] HeapInformationClass
Clase de información que se va a recuperar. Este parámetro puede ser el siguiente valor del tipo de enumeración HEAP_INFORMATION_CLASS .
Valor | Significado |
---|---|
|
Indica las características del montón que están habilitadas.
El parámetro HeapInformation es un puntero a una variable ULONG . Si HeapInformation es 0, el montón es un montón estándar que no admite listas de búsqueda. Si HeapInformation es 1, el montón admite listas de búsqueda a un lado. Para obtener más información, vea la sección Comentarios. Si HeapInformation es 2, el montón de fragmentación baja (LFH) se ha habilitado para el montón. Al habilitar LFH, se deshabilitan las listas de búsqueda. |
[out] HeapInformation
Puntero a un búfer que recibe la información del montón. El formato de estos datos depende del valor del parámetro HeapInformationClass .
[in] HeapInformationLength
Tamaño de la información del montón que se consulta, en bytes.
[out, optional] ReturnLength
Puntero a una variable que recibe la longitud de los datos escritos en el búfer HeapInformation . Si el búfer es demasiado pequeño, se produce un error en la función y ReturnLength especifica el tamaño mínimo necesario para el búfer.
Si no desea recibir esta información, especifique NULL.
Valor devuelto
Si la función se realiza correctamente, el valor devuelto es distinto de cero.
Si la función no se realiza correctamente, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Comentarios
Para habilitar el LFH o la característica terminate-on-corruption, use la función HeapSetInformation .
Windows XP y Windows Server 2003: Una lista de búsqueda es un mecanismo de asignación de memoria rápida que solo contiene bloques de tamaño fijo. Las listas de búsqueda a parte están habilitadas de forma predeterminada para los montones que los admiten. A partir de Windows Vista, las listas de búsqueda no se usan y el LFH está habilitado de forma predeterminada.
Las listas de búsqueda son más rápidas que las asignaciones generales del grupo que varían en tamaño, ya que el sistema no busca memoria libre que se ajuste a la asignación. Además, el acceso a las listas de búsqueda se sincroniza generalmente mediante instrucciones rápidas de intercambio de procesador atómico en lugar de exclusión mutua o interbloqueos. Las listas de búsqueda se pueden crear mediante el sistema o los controladores. Se pueden asignar desde un grupo paginado o no paginado.
Ejemplos
En el ejemplo siguiente se usa GetProcessHeap para obtener un identificador del montón de procesos predeterminado y HeapQueryInformation para recuperar información sobre el montón.
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#define HEAP_STANDARD 0
#define HEAP_LAL 1
#define HEAP_LFH 2
int __cdecl _tmain()
{
BOOL bResult;
HANDLE hHeap;
ULONG HeapInformation;
//
// Get a handle to the default process heap.
//
hHeap = GetProcessHeap();
if (hHeap == NULL) {
_tprintf(TEXT("Failed to retrieve default process heap with LastError %d.\n"),
GetLastError());
return 1;
}
//
// Query heap features that are enabled.
//
bResult = HeapQueryInformation(hHeap,
HeapCompatibilityInformation,
&HeapInformation,
sizeof(HeapInformation),
NULL);
if (bResult == FALSE) {
_tprintf(TEXT("Failed to retrieve heap features with LastError %d.\n"),
GetLastError());
return 1;
}
//
// Print results of the query.
//
_tprintf(TEXT("HeapCompatibilityInformation is %d.\n"), HeapInformation);
switch(HeapInformation)
{
case HEAP_STANDARD:
_tprintf(TEXT("The default process heap is a standard heap.\n"));
break;
case HEAP_LAL:
_tprintf(TEXT("The default process heap supports look-aside lists.\n"));
break;
case HEAP_LFH:
_tprintf(TEXT("The default process heap has the low-fragmentation ") \
TEXT("heap enabled.\n"));
break;
default:
_tprintf(TEXT("Unrecognized HeapInformation reported for the default ") \
TEXT("process heap.\n"));
break;
}
return 0;
}
Requisitos
Requisito | Value |
---|---|
Cliente mínimo compatible | Windows XP [solo aplicaciones de escritorio] |
Servidor mínimo compatible | Windows Server 2003 [solo aplicaciones de escritorio] |
Plataforma de destino | Windows |
Encabezado | heapapi.h (incluya Windows.h) |
Library | Kernel32.lib |
Archivo DLL | Kernel32.dll |