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 枚举类型的以下值。
值 | 含义 |
---|---|
|
指示已启用的堆功能。
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 |
标头 | heapapi.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |