HeapWalk

【勇芳软件工作室】汉化HomePreviousNext

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可能会失败。在堆枚举期间使用HeapLockHeapUnlock函数来控制堆锁定。

也可以看看

HeapLock, HeapUnlock, HeapValidate, PROCESS_HEAP_ENTRY