HeapValidate

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

HeapValidate函数尝试验证指定的堆。该函数扫描堆中的所有内存块,并验证操作系统的堆管理器维护的堆控制结构是否处于一致状态。您也可以使用HeapValidate函数来验证指定堆中的单个内存块,而不检查整个堆的有效性。

BOOL HeapValidate(

HANDLE 【hHeap】,//处理感兴趣的堆
DWORD 【dwFlags中】,//在功能操作期间控制堆访问的位标志
LPCVOID 【Lpmen】//可选指针到单个内存块进行验证
); 

参数

【hHeap】

处理感兴趣的堆。HeapValidate函数尝试验证此堆或此堆内的单个内存块。

【dwFlags中】

在功能操作期间控制堆访问的一组位标志。以下位标志有意义:

含义
HEAP_NO_SERIALIZE如果设置了此标志,则HeapValidate函数访问堆时,堆访问不会被序列化;堆访问不是互斥的。只能在有限的特定情况下设置此标志是安全的。有关这些情况和堆序列化的一般讨论,请参阅HeapCreate的备注部分。

如果这个标志是清楚的,堆访问被序列化,而HeapValidate访问堆;堆访问是互斥的。这是安全和简单的默认条件。


【Lpmen】

指向指定堆内的内存块。此参数可能为NULL。

如果此参数为NULL,该函数将尝试验证【hHeap】指定的整个堆。

如果此参数不为NULL,则该函数尝试验证【Lpmen】指向的内存块。它不会尝试验证堆的其余部分。

返回值

如果指定的堆或内存块有效,则返回值不为零。

如果指定的堆或内存块无效,返回值为零。在设置用于调试的系统上,HeapValidate功能显示调试消息,描述堆或内存块的一部分无效,并停止在硬编码的断点,以便您可以检查系统以确定源的无效。HeapValidate函数不设置线程的最后一个错误值。

备注

堆中的每个内存块都有堆控制结构,整个堆也是堆控制结构。当您使用HeapValidate函数验证一个完整的堆时,它会检查所有这些控制结构的一致性。

当您使用HeapValidate验证堆内的单个内存块时,它仅检查与该元素相关的控制结构。HeapValidate只能验证分配的内存块。在释放的内存块上调用HeapValidate将返回FALSE,因为没有要验证的控制结构。

如果要验证HeapWalk函数枚举的堆元素,则只应在PROCESS_HEAP_ENTRY结构的wFlags成员中具有PROCESS_HEAP_ENTRY_BUSY位标志的元素调用HeapValidate.对于没有设置此位的所有堆元素,HeapValidate返回FALSE。

也可以看看

HeapCreate, HeapWalk, PROCESS_HEAP_ENTRY