如何在 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_SUMMARY
的cb
成员。
关于cb
document中描述的问题,我会反馈给微软寻求解答。
我想从 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_SUMMARY
的cb
成员。
关于cb
document中描述的问题,我会反馈给微软寻求解答。