Поделиться через


Функция HeapQueryInformation (heapapi.h)

Извлекает сведения об указанной куче.

Синтаксис

BOOL HeapQueryInformation(
  [in, optional]  HANDLE                 HeapHandle,
  [in]            HEAP_INFORMATION_CLASS HeapInformationClass,
  [out]           PVOID                  HeapInformation,
  [in]            SIZE_T                 HeapInformationLength,
  [out, optional] PSIZE_T                ReturnLength
);

Параметры

[in, optional] HeapHandle

Дескриптор кучи, сведения о которой необходимо извлечь. Этот дескриптор возвращается функцией HeapCreate или GetProcessHeap .

[in] HeapInformationClass

Класс извлекаемой информации. Этот параметр может быть следующим значением из типа перечисления HEAP_INFORMATION_CLASS .

Значение Значение
HeapCompatibilityInformation
0
Указывает включенные функции кучи.

Параметр HeapInformation является указателем на переменную ULONG .

Если HeapInformation имеет значение 0, куча — это стандартная куча, которая не поддерживает списки взгляда в сторону.

Если heapInformation имеет значение 1, куча поддерживает списки взгляда в сторону. Дополнительные сведения см. в подразделе "Примечания".

Если значение HeapInformation равно 2, для кучи с низким уровнем фрагментации (LFH) включена. Включение LFH отключает список взгляда в сторону.

[out] HeapInformation

Указатель на буфер, получающий сведения о куче. Формат этих данных зависит от значения параметра HeapInformationClass .

[in] HeapInformationLength

Размер запрашиваемой информации кучи в байтах.

[out, optional] ReturnLength

Указатель на переменную, получающую длину данных, записываемых в буфер HeapInformation . Если буфер слишком мал, функция завершается сбоем и ReturnLength указывает минимальный размер, необходимый для буфера.

Если вы не хотите получать эти сведения, укажите ЗНАЧЕНИЕ NULL.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.

Комментарии

Чтобы включить функцию LFH или завершения при повреждении, используйте функцию HeapSetInformation .

Windows XP и Windows Server 2003: Список взгляда в сторону — это механизм быстрого выделения памяти, содержащий только блоки фиксированного размера. Списки взгляда в сторону включены по умолчанию для кучи, которые их поддерживают. Начиная с Windows Vista списки взгляда в сторону не используются, а LFH включен по умолчанию.

Поиск в сторону списков выполняется быстрее, чем общие выделения пулов, которые различаются по размеру, так как система не ищет свободную память, которая соответствует выделению. Кроме того, доступ к спискам взгляда в сторону обычно синхронизируется с помощью быстрых инструкций обмена атомарным процессором вместо мьютексов или спин-блокировок. Списки взгляда в сторону могут создаваться системой или драйверами. Их можно выделить из страничного или непагированного пула.

Примеры

В следующем примере getProcessHeap используется для получения дескриптора кучи процесса по умолчанию и HeapQueryInformation для получения сведений о куче.

#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;
}

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header heapapi.h (включая Windows.h)
Библиотека Kernel32.lib
DLL Kernel32.dll

См. также

GetProcessHeap

Функции кучи

HeapCreate

HeapSetInformation

Функции управления памятью