Страница 1 из 1

апи фунуция MiniDumpWriteDump

Добавлено: 19 окт 2009, 21:11
александр1
здравствуйте!
я пишу программу одну и застопорился на 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
);
1) первый параметр HANDLE hProcess я так понял получается из функции

Код: Выделить всё

HANDLE d=OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
2) второй параметр это вроде 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
                        );
4) 4 параметр будет равен MiniDumpWithFullMemory
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;
}
Но она не компилируется,в чем ошибка не пойму :confused:
подскажите что не так?

Re: апи фунуция MiniDumpWriteDump

Добавлено: 19 окт 2009, 21:38
Romeo
1. Какой компилятор?
2. Какая операционная система?
3. Какая именно ошибка?

Re: апи фунуция MiniDumpWriteDump

Добавлено: 19 окт 2009, 22:19
александр1
пишу на WS 2008 под Windows Mobile 2005
в окно аут пут пишет:

1>------ Build started: Project: damp, Configuration: Debug Windows Mobile 5.0 Pocket PC SDK (ARMV4I) ------
1>Linking...
1>damp.obj : error LNK2019: unresolved external symbol MiniDumpWriteDump referenced in function wmain
1>Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug/damp.exe : fatal error LNK1120: 1 unresolved externals
1>Build log was saved at "file://c:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\damp\damp\Windows Mobile 5.0 Pocket PC SDK (ARMV4I)\Debug\BuildLog.htm"
1>damp - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
========== Deploy: 0 succeeded, 0 failed, 0 skipped ==========

Re: апи фунуция MiniDumpWriteDump

Добавлено: 20 окт 2009, 02:02
Romeo
Спецификацию функции MiniDumpWriteDump смотрел? Вот тут, например.

Там в требованиях стоит "DbgHelp.dll 5.1 or later". Для PC линейки нужная версия dll повилась только в Windows XP SP3, Windows 2003 Serv SP2. Очень сомневаюсь, что у тебя есть подходящая версия этой dll на Windows Mobile.

Re: апи фунуция MiniDumpWriteDump

Добавлено: 20 окт 2009, 07:09
александр1
а как тогда это можно реализовать на Windows Mobile?

Re: апи фунуция MiniDumpWriteDump

Добавлено: 20 окт 2009, 14:35
atavin-ta
&quot писал(а):а как тогда это можно реализовать на Windows Mobile?
Сопри дллку с Windows XP SP3, киннь её в каталог своей проги и попробуй, что получится. Вдруг поможет?