Как правильно вызвать HeapSummary API в Win32? - PullRequest
1 голос
/ 05 августа 2020

Я хотел бы вызвать функцию HeapSummary из Win32 API:

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

1 Ответ

3 голосов
/ 05 августа 2020

Как говорит @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 в разборке: enter image description here

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 для ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...