HeapWalk函数枚举指定堆中的内存块。
BOOL HeapWalk(
HANDLE 【hHeap】, | //处理堆以枚举 |
LPPROCESS_HEAP_ENTRY 【lpEntry】 | //指向维护枚举状态信息的结构 |
); |
参数
【hHeap】
处理到要记录的内存块的堆中。
【dwFlags中】
指向维护特定堆枚举的状态信息的PROCESS_HEAP_ENTRY 结构。
如果HeapWalk函数成功,则返回值TRUE,此结构的成员包含堆中下一个内存块的信息。
要启动堆枚举,请将PROCESS_HEAP_ENTRY结构的的lpData字段设置为NULL。要继续进行特定的堆枚举,请重复调用HeapWalk函数,而不会更改【hHeap】,【lpEntry】或PROCESS_HEAP_ENTRY结构的任何成员。
返回值
如果函数成功,返回值不为零。
如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError.
如果堆枚举通过到达堆的末尾而成功终止,则函数返回FALSE,GetLastError返回错误代码ERROR_NO_MORE_ITEMS。
备注
要启动堆枚举,请使用【lpEntry】 指定的PROCESS_HEAP_ENTRY PROCESS_HEAP_ENTRY结构的的lpData字段设置为NULL来调用HeapWalk.
要继续堆计数,请使用相同的【hHeap】和【lpEntry】值调用HeapWalk,并将PROCESS_HEAP_ENTRY结构与上一次调用不变,即HeapWalk.重复此过程,直到您不需要进一步枚举,或者直到该函数返回FALSE 和GetLastError返回ERROR_NO_MORE_ITEMS,表示已经枚举了所有堆的内存块。
由于在PROCESS_HEAP_ENTRY结构的内容之外没有维护枚举状态数据,所以不需要特殊的HeapWalk来终止堆枚举。
如果在堆枚举期间未锁定堆,则多线程应用程序中的HeapWalk可能会失败。在堆枚举期间使用HeapLock和HeapUnlock函数来控制堆锁定。
也可以看看