1 /**
2  * This file has no copyright assigned and is placed in the Public Domain.
3  * This file is part of the mingw-w64 runtime package.
4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5  */
6 #ifndef _INC_WERAPI
7 #define _INC_WERAPI
8 #if (_WIN32_WINNT >= 0x0600)
9 
10 #ifdef __cplusplus
11 extern "C" {
12 #endif
13 
14 typedef enum _WER_FILE_TYPE {
15   WerFileTypeMicrodump = 1,
16   WerFileTypeMinidump,
17   WerFileTypeHeapdump,
18   WerFileTypeUserDocument,
19   WerFileTypeOther,
20   WerFileTypeMax
21 } WER_FILE_TYPE;
22 
23 typedef enum _WER_REGISTER_FILE_TYPE {
24   WerRegFileTypeUserDocument = 1,
25   WerRegFileTypeOther,
26   WerRegFileTypeMax
27 } WER_REGISTER_FILE_TYPE;
28 
29 typedef enum _WER_DUMP_TYPE {
30   WerDumpTypeMicroDump = 1,
31   WerDumpTypeMiniDump,
32   WerDumpTypeHeapDump,
33   WerDumpTypeMax
34 } WER_DUMP_TYPE;
35 
36 typedef enum _WER_REPORT_UI {
37   WerUIAdditionalDataDlgHeader = 1,
38   WerUIIconFilePath,
39   WerUIConsentDlgHeader,
40   WerUIConsentDlgBody,
41   WerUIOnlineSolutionCheckText,
42   WerUIOfflineSolutionCheckText,
43   WerUICloseText,
44   WerUICloseDlgHeader,
45   WerUICloseDlgBody,
46   WerUICloseDlgButtonText,
47   WerUICustomActionButtonText,
48   WerUIMax
49 } WER_REPORT_UI;
50 
51 typedef enum _WER_CONSENT {
52   WerConsentNotAsked = 1,
53   WerConsentApproved,
54   WerConsentDenied,
55   WerConsentAlwaysPrompt,
56   WerConsentMax
57 } WER_CONSENT;
58 
59 typedef enum _WER_SUBMIT_RESULT {
60   WerReportQueued = 1,
61   WerReportUploaded,
62   WerReportDebug,
63   WerReportFailed,
64   WerDisabled,
65   WerReportCancelled,
66   WerDisabledQueue,
67   WerReportAsync,
68   WerCustomAction
69 } WER_SUBMIT_RESULT;
70 
71 typedef enum _WER_REPORT_TYPE {
72   WerReportNonCritical = 0,
73   WerReportCritical,
74   WerReportApplicationCrash,
75   WerReportApplicationHang,
76   WerReportKernel,
77   WerReportInvalid
78 } WER_REPORT_TYPE;
79 
80 typedef struct _WER_DUMP_CUSTOM_OPTIONS {
81   DWORD dwSize;
82   DWORD dwMask;
83   DWORD dwDumpFlags;
84   WINBOOL bOnlyThisThread;
85   DWORD dwExceptionThreadFlags;
86   DWORD dwOtherThreadFlags;
87   DWORD dwExceptionThreadExFlags;
88   DWORD dwOtherThreadExFlags;
89   DWORD dwPreferredModuleFlags;
90   DWORD dwOtherModuleFlags;
91   WCHAR wzPreferredModuleList[WER_MAX_PREFERRED_MODULES_BUFFER];
92 } WER_DUMP_CUSTOM_OPTIONS, *PWER_DUMP_CUSTOM_OPTIONS;
93 
94 typedef struct _WER_EXCEPTION_INFORMATION {
95   PEXCEPTION_POINTERS pExceptionPointers;
96   WINBOOL             bClientPointers;
97 } WER_EXCEPTION_INFORMATION, *PWER_EXCEPTION_INFORMATION;
98 
99 typedef struct _WER_REPORT_INFORMATION {
100   DWORD  dwSize;
101   HANDLE hProcess;
102   WCHAR  wzConsentKey[64];
103   WCHAR  wzFriendlyEventName[128];
104   WCHAR  wzApplicationName[128];
105   WCHAR  wzApplicationPath[MAX_PATH];
106   WCHAR  wzDescription[512];
107   HWND   hwndParent;
108 } WER_REPORT_INFORMATION, *PWER_REPORT_INFORMATION;
109 
110 HRESULT WINAPI WerAddExcludedApplication(PCWSTR pwzExeName,WINBOOL bAllUsers);
111 HRESULT WINAPI WerGetFlags(HANDLE hProcess,PDWORD pdwFlags);
112 HRESULT WINAPI WerRegisterFile(PCWSTR pwzFile,WER_REGISTER_FILE_TYPE regFileType,DWORD dwFlags);
113 HRESULT WINAPI WerRegisterMemoryBlock(PVOID pvAddress,DWORD dwSize);
114 HRESULT WINAPI WerRemoveExcludedApplication(PCWSTR pwzExeName,WINBOOL bAllUsers);
115 HRESULT WINAPI WerReportAddDump(HREPORT hReportHandle,HANDLE hProcess,HANDLE hThread,WER_DUMP_TYPE dumpType,PWER_EXCEPTION_INFORMATION pExceptionParam,PWER_DUMP_CUSTOM_OPTIONS pDumpCustomOptions,DWORD dwFlags);
116 HRESULT WINAPI WerReportAddFile(HREPORT hReportHandle,PCWSTR pwzPath,WER_FILE_TYPE repFileType,DWORD dwFileFlags);
117 HRESULT WINAPI WerReportCloseHandle(HREPORT hReportHandle);
118 HRESULT WINAPI WerReportCreate(PCWSTR pwzEventType,WER_REPORT_TYPE repType,PWER_REPORT_INFORMATION pReportInformation,HREPORT *phReportHandle);
119 HRESULT WINAPI WerReportHang(HWND hwndHungWindow,PCWSTR wszHungApplicationName);
120 HRESULT WINAPI WerReportSetParameter(HREPORT hReportHandle,DWORD dwparamID,PCWSTR pwzName,PCWSTR pwzValue);
121 HRESULT WINAPI WerReportSetUIOption(HREPORT hReportHandle,WER_REPORT_UI repUITypeID,PCWSTR pwzValue);
122 HRESULT WINAPI WerReportSubmit(HREPORT hReportHandle,WER_CONSENT consent,DWORD dwFlags,PWER_SUBMIT_RESULT pSubmitResult);
123 HRESULT WINAPI WerSetFlags(DWORD dwFlags);
124 HRESULT WINAPI WerUnregisterFile(PCWSTR pwzFilePath);
125 HRESULT WINAPI WerUnregisterMemoryBlock(PVOID pvAddress);
126 
127 #if (_WIN32_WINNT >= 0x0601)
128 typedef struct _WER_RUNTIME_EXCEPTION_INFORMATION {
129   DWORD            dwSize;
130   HANDLE           hProcess;
131   HANDLE           hThread;
132   EXCEPTION_RECORD exceptionRecord;
133   CONTEXT          context;
134   PCWSTR           pwszReportId;
135 } WER_RUNTIME_EXCEPTION_INFORMATION, *PWER_RUNTIME_EXCEPTION_INFORMATION;
136 
137 typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_EVENT)(
138   PVOID pContext,
139   const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
140   WINBOOL *pbOwnershipClaimed,
141   PWSTR pwszEventName,
142   PDWORD pchSize,
143   PDWORD pdwSignatureCount
144 );
145 
146 typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_DEBUGGER_LAUNCH)(
147   PVOID pContext,
148   const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
149   PBOOL pbIsCustomDebugger,
150   PWSTR pwszDebuggerLaunch,
151   PDWORD pchDebuggerLaunch,
152   PBOOL pbIsDebuggerAutolaunch
153 );
154 
155 typedef HRESULT (WINAPI *PFN_WER_RUNTIME_EXCEPTION_EVENT_SIGNATURE)(
156   PVOID pContext,
157   const PWER_RUNTIME_EXCEPTION_INFORMATION pExceptionInformation,
158   DWORD dwIndex,
159   PWSTR pwszName,
160   PDWORD pchName,
161   PWSTR pwszValue,
162   PDWORD pchValue
163 );
164 
165 HRESULT WINAPI WerRegisterRuntimeExceptionModule(
166   PCWSTR pwszOutOfProcessCallbackDll,
167   PVOID pContext
168 );
169 
170 HRESULT WINAPI WerUnregisterRuntimeExceptionModule(
171   PCWSTR pwszOutOfProcessCallbackDll,
172   PVOID pContext
173 );
174 
175 #endif /*(_WIN32_WINNT >= 0x0601)*/
176 
177 #ifdef __cplusplus
178 }
179 #endif
180 #endif /*(_WIN32_WINNT >= 0x0600)*/
181 #endif /*_INC_WERAPI*/
182