我想从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
:您可以看到它会将传递的指针与
14h (20)
进行比较,如果不相等,则按57h (error 87)
。因此,我们需要将
sizeof(HEAP_SUMMARY)
传递给cb
的HEAP_SUMMARY
成员。关于
cb
的document中描述的问题,我将向Microsoft报告以获取答案。关于c++ - 如何在Win32中正确调用HeapSummary API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63258679/