1 | /* $Id: exceptions.h,v 1.5 2000-03-16 19:16:35 sandervl Exp $ */
|
---|
2 |
|
---|
3 | #ifndef __EXCEPTIONS_H__
|
---|
4 | #define __EXCEPTIONS_H__
|
---|
5 |
|
---|
6 | #include "win32type.h"
|
---|
7 | #include "misc.h"
|
---|
8 |
|
---|
9 | #pragma pack(1)
|
---|
10 |
|
---|
11 | //SetErrorMode flags
|
---|
12 | #define SEM_FAILCRITICALERRORS 0x0001
|
---|
13 | #define SEM_NOGPFAULTERRORBOX 0x0002
|
---|
14 | #define SEM_NOALIGNMENTFAULTEXCEPT 0x0004
|
---|
15 | #define SEM_NOOPENFILEERRORBOX 0x8000
|
---|
16 |
|
---|
17 | /*
|
---|
18 | * Exception codes
|
---|
19 | */
|
---|
20 |
|
---|
21 | #define STATUS_SUCCESS 0x00000000
|
---|
22 | #define STATUS_WAIT_0 0x00000000
|
---|
23 | #define STATUS_ABANDONED_WAIT_0 0x00000080
|
---|
24 | #define STATUS_USER_APC 0x000000C0
|
---|
25 | #define STATUS_TIMEOUT 0x00000102
|
---|
26 | #define STATUS_PENDING 0x00000103
|
---|
27 | #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
|
---|
28 | #define STATUS_DATATYPE_MISALIGNMENT 0x80000002
|
---|
29 | #define STATUS_BREAKPOINT 0x80000003
|
---|
30 | #define STATUS_SINGLE_STEP 0x80000004
|
---|
31 | #define STATUS_BUFFER_OVERFLOW 0x80000005
|
---|
32 | #define STATUS_UNSUCCESSFUL 0xC0000001
|
---|
33 | #define STATUS_ACCESS_VIOLATION 0xC0000005
|
---|
34 | #define STATUS_IN_PAGE_ERROR 0xC0000006
|
---|
35 | #define STATUS_INVALID_PARAMETER 0xC000000D
|
---|
36 | #define STATUS_NO_MEMORY 0xC0000017
|
---|
37 | #define STATUS_CONFLICTING_ADDRESSES 0xC0000018
|
---|
38 | #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
|
---|
39 | #define STATUS_BUFFER_TOO_SMALL 0xC0000023
|
---|
40 | #define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
|
---|
41 | #define STATUS_INVALID_DISPOSITION 0xC0000026
|
---|
42 | #define STATUS_UNWIND 0xC0000027
|
---|
43 | #define STATUS_BAD_STACK 0xC0000028
|
---|
44 | #define STATUS_INVALID_UNWIND_TARGET 0xC0000029
|
---|
45 | #define STATUS_UNKNOWN_REVISION 0xC0000058
|
---|
46 | #define STATUS_INVALID_SECURITY_DESCR 0xC0000079
|
---|
47 | #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
|
---|
48 | #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
|
---|
49 | #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
|
---|
50 | #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
|
---|
51 | #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
|
---|
52 | #define STATUS_FLOAT_OVERFLOW 0xC0000091
|
---|
53 | #define STATUS_FLOAT_STACK_CHECK 0xC0000092
|
---|
54 | #define STATUS_FLOAT_UNDERFLOW 0xC0000093
|
---|
55 | #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
|
---|
56 | #define STATUS_INTEGER_OVERFLOW 0xC0000095
|
---|
57 | #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
|
---|
58 | #define STATUS_INVALID_PARAMETER_2 0xC00000F0
|
---|
59 | #define STATUS_STACK_OVERFLOW 0xC00000FD
|
---|
60 | #define STATUS_CONTROL_C_EXIT 0xC000013A
|
---|
61 |
|
---|
62 | #define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
|
---|
63 | #define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
|
---|
64 | #define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
|
---|
65 | #define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
|
---|
66 | #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
|
---|
67 | #define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
|
---|
68 | #define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
|
---|
69 | #define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
|
---|
70 | #define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
|
---|
71 | #define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
|
---|
72 | #define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
|
---|
73 | #define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
|
---|
74 | #define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
|
---|
75 | #define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
|
---|
76 | #define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
|
---|
77 | #define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
|
---|
78 | #define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
|
---|
79 | #define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
|
---|
80 | #define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
|
---|
81 | #define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
|
---|
82 | #define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
|
---|
83 | #define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
|
---|
84 | #define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
|
---|
85 |
|
---|
86 | #define MAXIMUM_WAIT_OBJECTS 64
|
---|
87 | #define MAXIMUM_SUSPEND_COUNT 127
|
---|
88 |
|
---|
89 | #define WINCONTEXT_i386 0x00010000
|
---|
90 | #define WINCONTEXT_i486 WINCONTEXT_i386
|
---|
91 | #define WINCONTEXT_CONTROL (WINCONTEXT_i386 | 0x0001)
|
---|
92 | #define WINCONTEXT_INTEGER (WINCONTEXT_i386 | 0x0002)
|
---|
93 | #define WINCONTEXT_SEGMENTS (WINCONTEXT_i386 | 0x0004)
|
---|
94 | #define WINCONTEXT_FLOATING_POINT (WINCONTEXT_i386 | 0x0008L)
|
---|
95 | #define WINCONTEXT_DEBUG_REGISTERS (WINCONTEXT_i386 | 0x0010L)
|
---|
96 | #define WINCONTEXT_FULL (WINCONTEXT_CONTROL | WINCONTEXT_INTEGER | WINCONTEXT_SEGMENTS)
|
---|
97 |
|
---|
98 | #define SIZE_OF_80387_REGISTERS 80
|
---|
99 |
|
---|
100 | typedef struct
|
---|
101 | {
|
---|
102 | DWORD ControlWord;
|
---|
103 | DWORD StatusWord;
|
---|
104 | DWORD TagWord;
|
---|
105 | DWORD ErrorOffset;
|
---|
106 | DWORD ErrorSelector;
|
---|
107 | DWORD DataOffset;
|
---|
108 | DWORD DataSelector;
|
---|
109 | BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
|
---|
110 | DWORD Cr0NpxState;
|
---|
111 | } FLOATING_SAVE_AREA_WIN;
|
---|
112 |
|
---|
113 | typedef struct
|
---|
114 | {
|
---|
115 | DWORD ContextFlags;
|
---|
116 |
|
---|
117 | DWORD Dr0;
|
---|
118 | DWORD Dr1;
|
---|
119 | DWORD Dr2;
|
---|
120 | DWORD Dr3;
|
---|
121 | DWORD Dr6;
|
---|
122 | DWORD Dr7;
|
---|
123 |
|
---|
124 | FLOATING_SAVE_AREA_WIN FloatSave;
|
---|
125 |
|
---|
126 | DWORD SegGs;
|
---|
127 | DWORD SegFs;
|
---|
128 | DWORD SegEs;
|
---|
129 | DWORD SegDs;
|
---|
130 |
|
---|
131 | DWORD Edi;
|
---|
132 | DWORD Esi;
|
---|
133 | DWORD Ebx;
|
---|
134 | DWORD Edx;
|
---|
135 | DWORD Ecx;
|
---|
136 | DWORD Eax;
|
---|
137 |
|
---|
138 | DWORD Ebp;
|
---|
139 | DWORD Eip;
|
---|
140 | DWORD SegCs;
|
---|
141 | DWORD EFlags;
|
---|
142 | DWORD Esp;
|
---|
143 | DWORD SegSs;
|
---|
144 | } WINCONTEXT, *PWINCONTEXT;
|
---|
145 |
|
---|
146 |
|
---|
147 | #define WINEXCEPTION_NONCONTINUABLE 0x1
|
---|
148 | #define WINEXCEPTION_MAXIMUM_PARAMETERS 15
|
---|
149 |
|
---|
150 | typedef struct _WINEXCEPTION_RECORD {
|
---|
151 | DWORD ExceptionCode;
|
---|
152 | DWORD ExceptionFlags;
|
---|
153 | struct _WINEXCEPTION_RECORD *ExceptionRecord;
|
---|
154 | PVOID ExceptionAddress;
|
---|
155 | DWORD NumberParameters;
|
---|
156 | DWORD ExceptionInformation[WINEXCEPTION_MAXIMUM_PARAMETERS];
|
---|
157 | } WINEXCEPTION_RECORD;
|
---|
158 | typedef WINEXCEPTION_RECORD *PWINEXCEPTION_RECORD;
|
---|
159 |
|
---|
160 | typedef struct _WINEXCEPTION_POINTERS {
|
---|
161 | PWINEXCEPTION_RECORD ExceptionRecord;
|
---|
162 | PWINCONTEXT ContextRecord;
|
---|
163 | } WINEXCEPTION_POINTERS, *PWINEXCEPTION_POINTERS;
|
---|
164 |
|
---|
165 | //forward declaration
|
---|
166 | struct __EXCEPTION_FRAME;
|
---|
167 |
|
---|
168 | typedef DWORD (* WIN32API PEXCEPTION_HANDLER)(PWINEXCEPTION_RECORD,
|
---|
169 | struct _WINEXCEPTION_FRAME *,
|
---|
170 | PWINCONTEXT, LPVOID);
|
---|
171 |
|
---|
172 | typedef struct _WINEXCEPTION_FRAME
|
---|
173 | {
|
---|
174 | struct _WINEXCEPTION_FRAME *Prev;
|
---|
175 | PEXCEPTION_HANDLER Handler;
|
---|
176 | } WINEXCEPTION_FRAME, *PWINEXCEPTION_FRAME;
|
---|
177 |
|
---|
178 | /*
|
---|
179 | * Return values from the actual exception handlers
|
---|
180 | */
|
---|
181 |
|
---|
182 | #define ExceptionContinueExecution 0
|
---|
183 | #define ExceptionContinueSearch 1
|
---|
184 | #define ExceptionNestedException 2
|
---|
185 | #define ExceptionCollidedUnwind 3
|
---|
186 |
|
---|
187 | typedef PWINCONTEXT LPWINCONTEXT;
|
---|
188 | typedef PWINEXCEPTION_RECORD LPWINEXCEPTION_RECORD;
|
---|
189 | typedef PWINEXCEPTION_POINTERS LPWINEXCEPTION_POINTERS;
|
---|
190 |
|
---|
191 | typedef LONG (* WIN32API PTOP_LEVEL_EXCEPTION_FILTER)(struct _WINEXCEPTION_POINTERS *ExceptionInfo);
|
---|
192 |
|
---|
193 | typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
|
---|
194 |
|
---|
195 |
|
---|
196 | /*
|
---|
197 | * Return values from filters in except() and from UnhandledExceptionFilter
|
---|
198 | */
|
---|
199 |
|
---|
200 | #define WINEXCEPTION_EXECUTE_HANDLER 1
|
---|
201 | #define WINEXCEPTION_CONTINUE_SEARCH 0
|
---|
202 | #define WINEXCEPTION_CONTINUE_EXECUTION -1
|
---|
203 |
|
---|
204 | #define STATUS_INVALID_DISPOSITION 0xC0000026
|
---|
205 |
|
---|
206 | #pragma pack()
|
---|
207 |
|
---|
208 | #ifdef __cplusplus
|
---|
209 | extern "C" {
|
---|
210 | #endif
|
---|
211 |
|
---|
212 | DWORD RtlDispatchException(WINEXCEPTION_RECORD *pRecord, WINCONTEXT *pContext);
|
---|
213 |
|
---|
214 | #ifdef __cplusplus
|
---|
215 | } // extern "C"
|
---|
216 | #endif
|
---|
217 |
|
---|
218 | #endif
|
---|