я пишу программу одну и застопорился на 1 месте
мне необходимо снять дамп одного системного .процесса, напрмер explorer.exe и выгрузить его в файл. всю инфу о процессе я знаю, id и др.
Код: Выделить всё
HANDLE hProcessSnap;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return false;
pe32.dwSize = sizeof(PROCESSENTRY32);
вот ее описание:
Код: Выделить всё
BOOL MiniDumpWriteDump(
HANDLE hProcess,
DWORD ProcessId,
HANDLE hFile,
MINIDUMP_TYPE DumpType,
PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam,
PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam,
PMINIDUMP_CALLBACK_INFORMATION CallbackParam
);
Код: Выделить всё
HANDLE d=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
3)получаем 3й параметр:
Код: Выделить всё
char block[_MAX_PATH];
SYSTEMTIME st;
GetLocalTime(&st);
_snprintf(block, _MAX_PATH, "CrashDump-%04d%02d%02d%02d%02d%02d%03d.dmp", st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
HANDLE hFile = CreateFile(
block,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
5,6 и 7 параметры наверно будут равны NULL
Итого вот текст программы
Код: Выделить всё
// damp.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <dbghelp.h>
#include <fstream>
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE hProcessSnap,d, pH = NULL;
PROCESSENTRY32 pe32;
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE)
return false;
pe32.dwSize = sizeof(PROCESSENTRY32);
Process32First(hProcessSnap,&pe32);
pH = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe32.th32ProcessID);
MODULEENTRY32 mo = {sizeof(mo)};
Module32First(pH,&mo);
d=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
char block[_MAX_PATH];
SYSTEMTIME st;
GetLocalTime(&st);
_snprintf(block, _MAX_PATH, "CrashDump-%04d%02d%02d%02d%02d%02d%03d.dmp",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
HANDLE hProc = GetCurrentProcess();
HANDLE hFile = CreateFile(
(LPCWSTR)block,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
BOOL ret = MiniDumpWriteDump(
d,
pe32.th32ProcessID,
hFile,
MiniDumpWithFullMemory,
NULL,
NULL,NULL);
return 0;
}

подскажите что не так?