MiniDumpWriteDump завершается с ошибкой «MiniDumpWithFullMemory» - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь получить дамп процесса.Но когда я использую флаг MiniDumpWithFullMemory, функция падает.Может быть, я использую DuplicateHandle неправильно ... я не знаю.

Является ли MiniDumpWithFullMemory необходимым флагом для получения общей информации, или я могу использовать только другие флаги (как в приведенном ниже листинге кода) ??Мне нужно получить дамп, чтобы отправить его в VirusTotal ...

Вот код:

#include <iostream>
#include <windows.h>
using namespace std;
#pragma comment(lib, "dbghelp.lib")
#include <dbghelp.h>
#include <stdio.h>


void WriteFullDump(wchar_t* path_to_dump, HANDLE hProc)
{
    const DWORD Flags = MiniDumpWithHandleData| 
        MiniDumpWithHandleData|
        MiniDumpWithDataSegs|
        MiniDumpScanMemory |
        MiniDumpFilterMemory|
        MiniDumpNormal|
        MiniDumpWithUnloadedModules|
        MiniDumpWithThreadInfo;

    HANDLE hFile = CreateFile(path_to_dump, GENERIC_WRITE, 0, nullptr,CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, nullptr);
    BOOL Result = MiniDumpWriteDump(hProc,
            GetProcessId(hProc),
            hFile,
            (MINIDUMP_TYPE)Flags,
            nullptr,
            nullptr,
            nullptr);

        CloseHandle(hFile);

        if (!Result)
        {
            cout << Result << endl;
            std::cerr << "Looks like an error: MiniDumpWriteDump failed" << endl;
            cout << GetLastError() << endl;
        }
        CloseHandle(hFile);
    return;
}

int main()
{
    wchar_t* path = L"C:\\C++\\122332.txt";
    int pid;
    cin >> pid;
    HANDLE proc = OpenProcess(PROCESS_DUP_HANDLE, 1, pid);
    HANDLE pseudoproc;
    HANDLE my = GetCurrentProcess();
    DuplicateHandle(proc, proc, my, &pseudoproc, PROCESS_QUERY_INFORMATION, 1, DUPLICATE_SAME_ACCESS);

    WriteFullDump(path,proc);
    CloseHandle(proc);
    cout << "Finished!" << endl;
    char g;
    cin >> g;
    return 0;

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