Share via


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
HeapCompatibilityInformation
0
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

Vea también

GetProcessHeap

Funciones del montón

MontónCrear

HeapSetInformation

Funciones de administración de memoria