[DRWTSN32] Various improvements
[reactos.git] / base / applications / drwtsn32 / drwtsn32.h
1 /*
2 * PROJECT: Dr. Watson crash reporter
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Project header
5 * COPYRIGHT: Copyright 2017 Mark Jansen (mark.jansen@reactos.org)
6 */
7
8 #pragma once
9
10
11 struct ModuleData
12 {
13 std::string ModuleName;
14 void *BaseAddress;
15 DWORD Size;
16 bool Unloaded;
17
18
19 ModuleData(void* addr);
20 void Update(HANDLE hProcess);
21 };
22
23 struct ThreadData
24 {
25 HANDLE Handle;
26 CONTEXT Context;
27
28 ThreadData(HANDLE handle = NULL);
29
30 void Update();
31 };
32
33 typedef std::vector<ModuleData> ModuleList;
34 typedef std::map<DWORD, ThreadData> ThreadMap;
35
36 class DumpData
37 {
38 public:
39 std::wstring ProcessPath;
40 std::wstring ProcessName;
41 DWORD ProcessID;
42 DWORD ThreadID;
43 HANDLE ProcessHandle;
44 ModuleList Modules;
45 ThreadMap Threads;
46 EXCEPTION_DEBUG_INFO ExceptionInfo;
47 HANDLE Event;
48 bool FirstBPHit;
49
50 DumpData();
51 };
52
53 #define NEWLINE "\r\n"
54
55 /* main.cpp */
56 void xfprintf(FILE* stream, const char *fmt, ...);
57
58 /* drwtsn32.cpp */
59 bool UpdateFromEvent(DEBUG_EVENT& evt, DumpData& data);
60
61 /* sysinfo.cpp */
62 void PrintSystemInfo(FILE* output, DumpData& data);
63
64 /* stacktrace.cpp */
65 void BeginStackBacktrace(DumpData& data);
66 void PrintStackBacktrace(FILE* output, DumpData& data, ThreadData& thread);
67 void EndStackBacktrace(DumpData& data);
68