Как говорит @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
в разборке:
You can see that it compares the passed pointer with 14h (20)
, and push 57h (error 87)
if it is not equal.
So we need to pass in sizeof(HEAP_SUMMARY)
to the cb
member of HEAP_SUMMARY
.
Regarding the problem described in the документ для cb
, я сообщу об этом в Microsoft для ответов.