原文链接 -> 传送门
函数功能:
GetProcessHeaps 函数用于返回活动堆的数量并获取调用进程所有活动堆的句柄。
API 函数原型:
注释:_In_ 说明该参数是输入的,_Out_ 说明该参数是输出的。
DWORD WINAPI GetProcessHeaps( _In_ DWORD NumberOfHeaps, _Out_ PHANDLE ProcessHeaps );
参数解析:
|
参数 |
含义 |
|
NumberOfHeaps |
可以存储到 ProcessHeaps 参数指向的缓冲区的堆句柄最大数量 |
|
ProcessHeaps |
指向接收堆句柄数组缓冲区指针 |
返回值:
1. 返回值是调用进程活跃堆句柄的数量。
2. 如果返回值小于或等于 NumberOfHeaps,函数在 ProcessHeaps 指向的缓冲区存储找到的所有堆句柄。
3. 如果返回值大于 NumberOfHeaps,ProcessHeaps 指向的缓冲区太小而不能容纳调用进程所有堆句柄,那么函数存储 NumberOfHeaps 个句柄在该缓冲区。建议先调用该函数,通过其返回值来分配一个足够大缓冲区,以接收所有的句柄,并再次调用该函数存放所有找到的堆句柄。
4. 如果返回值是 0,说明函数已经调用失败。因为每个进程至少有一个活跃的默认堆。
若想获得更多的错误信息,请调用 GetLastError 函数。
备注:
1. GetProcessHeaps 函数除了获得调用进程的默认堆句柄,另外还附加该进程的其它线程通过调用 HeapCreate 函数创建的私有堆。
2. GetProcessHeaps 函数主要用于调试,因为一些由 GetProcessHeaps 函数获取的私有堆可能被正在运行进程中的其他代码创建,可能在 GetProcessHeaps 返回后就被销毁了。堆销毁堆后句柄自动无效,在应用程序中继续使用这些句柄会导致未定义的操作。堆内存管理函数只应该在调用进程的默认堆和该进程创建管理私有堆上调用。
3. 使用 GetProcessHeap 函数获得调用进程的进程堆句柄。
需求:
|
Minimum supported client |
Windows XP [桌面应用 | Windows 应用商店的应用] |
|
Minimum supported server |
Windows 2003 服务器版 [桌面应用程序 | Windows 应用商店的应用] |
|
Minimum supported phone |
Windows Phone 8 |
|
Header |
HeapApi.h (包含于 Windows.h); |
|
Library |
Kernel32.lib |
|
DLL |
Kernel32.dll |




