我想从Win32 API调用HeapSummary函数:
https://docs.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapsummary
似乎缺少dwFlags参数的可能选项的列表。我尝试了没有标志,但GetLastError()返回The parameter is incorrect错误消息。

    HEAP_SUMMARY heap_summary;
    HeapSummary(GetProcessHeap(), 0, &heap_summary); // Error: The parameter is incorrect

最佳答案

就像@Jonathan Potter所说的,我们应该将cb成员设置为sizeof(HEAP_SUMMARY)
我创建一个样本来查找原因:

#include <windows.h>
#include <heapapi.h>

int main(int argc, const char* argv[])
{
    HEAP_SUMMARY heap_summary;
    memset(&heap_summary, 0, sizeof(heap_summary));
    HANDLE h = GetProcessHeap();
    HeapSummary(h, 0, &heap_summary); // Error: The parameter is incorrect
    DWORD err = GetLastError();
    return 0;
}
然后进入反汇编中的HeapSummary:
c&#43;&#43; - 如何在Win32中正确调用HeapSummary API?-LMLPHP
您可以看到它会将传递的指针与14h (20)进行比较,如果不相等,则按57h (error 87)
因此,我们需要将sizeof(HEAP_SUMMARY)传递给cbHEAP_SUMMARY成员。
关于cbdocument中描述的问题,我将向Microsoft报告以获取答案。

关于c++ - 如何在Win32中正确调用HeapSummary API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63258679/

10-09 19:23