如何在 Win32 中正确调用 HeapSummary API?

How to correctly call the HeapSummary API in Win32?

我想从 Win32 调用 HeapSummary 函数 API:

https://docs.microsoft.com/en-us/windows/win32/api/heapapi/nf-heapapi-heapsummary

似乎缺少 dwFlags 参数的可能选项列表。我试过没有标志但 GetLastError() returns 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;
}

然后在Disassembly中进入HeapSummary

可以看到它把传过来的指针和14h (20)进行比较,不相等就压入57h (error 87)

所以我们需要将sizeof(HEAP_SUMMARY)传递给HEAP_SUMMARYcb成员。

关于cbdocument中描述的问题,我会反馈给微软寻求解答。