1 | /* $Id: exceptions.h,v 1.1 1999-05-24 20:19:06 ktk 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_WAIT_0 0x00000000
|
---|
22 | #define STATUS_ABANDONED_WAIT_0 0x00000080
|
---|
23 | #define STATUS_USER_APC 0x000000C0
|
---|
24 | #define STATUS_TIMEOUT 0x00000102
|
---|
25 | #define STATUS_PENDING 0x00000103
|
---|
26 | #define STATUS_DATATYPE_MISALIGNMENT 0x80000002
|
---|
27 | #define STATUS_BREAKPOINT 0x80000003
|
---|
28 | #define STATUS_SINGLE_STEP 0x80000004
|
---|
29 | #define STATUS_ACCESS_VIOLATION 0xC0000005
|
---|
30 | #define STATUS_IN_PAGE_ERROR 0xC0000006
|
---|
31 | #define STATUS_NO_MEMORY 0xC0000017
|
---|
32 | #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
|
---|
33 | #define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
|
---|
34 | #define STATUS_INVALID_DISPOSITION 0xC0000026
|
---|
35 | #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
|
---|
36 | #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
|
---|
37 | #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
|
---|
38 | #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
|
---|
39 | #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
|
---|
40 | #define STATUS_FLOAT_OVERFLOW 0xC0000091
|
---|
41 | #define STATUS_FLOAT_STACK_CHECK 0xC0000092
|
---|
42 | #define STATUS_FLOAT_UNDERFLOW 0xC0000093
|
---|
43 | #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
|
---|
44 | #define STATUS_INTEGER_OVERFLOW 0xC0000095
|
---|
45 | #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
|
---|
46 | #define STATUS_STACK_OVERFLOW 0xC00000FD
|
---|
47 | #define STATUS_CONTROL_C_EXIT 0xC000013A
|
---|
48 |
|
---|
49 | #define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
|
---|
50 | #define EXCEPTION_DATATYPE_MISALIGNMENT STATUS_DATATYPE_MISALIGNMENT
|
---|
51 | #define EXCEPTION_BREAKPOINT STATUS_BREAKPOINT
|
---|
52 | #define EXCEPTION_SINGLE_STEP STATUS_SINGLE_STEP
|
---|
53 | #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED STATUS_ARRAY_BOUNDS_EXCEEDED
|
---|
54 | #define EXCEPTION_FLT_DENORMAL_OPERAND STATUS_FLOAT_DENORMAL_OPERAND
|
---|
55 | #define EXCEPTION_FLT_DIVIDE_BY_ZERO STATUS_FLOAT_DIVIDE_BY_ZERO
|
---|
56 | #define EXCEPTION_FLT_INEXACT_RESULT STATUS_FLOAT_INEXACT_RESULT
|
---|
57 | #define EXCEPTION_FLT_INVALID_OPERATION STATUS_FLOAT_INVALID_OPERATION
|
---|
58 | #define EXCEPTION_FLT_OVERFLOW STATUS_FLOAT_OVERFLOW
|
---|
59 | #define EXCEPTION_FLT_STACK_CHECK STATUS_FLOAT_STACK_CHECK
|
---|
60 | #define EXCEPTION_FLT_UNDERFLOW STATUS_FLOAT_UNDERFLOW
|
---|
61 | #define EXCEPTION_INT_DIVIDE_BY_ZERO STATUS_INTEGER_DIVIDE_BY_ZERO
|
---|
62 | #define EXCEPTION_INT_OVERFLOW STATUS_INTEGER_OVERFLOW
|
---|
63 | #define EXCEPTION_PRIV_INSTRUCTION STATUS_PRIVILEGED_INSTRUCTION
|
---|
64 | #define EXCEPTION_IN_PAGE_ERROR STATUS_IN_PAGE_ERROR
|
---|
65 | #define EXCEPTION_ILLEGAL_INSTRUCTION STATUS_ILLEGAL_INSTRUCTION
|
---|
66 | #define EXCEPTION_NONCONTINUABLE_EXCEPTION STATUS_NONCONTINUABLE_EXCEPTION
|
---|
67 | #define EXCEPTION_STACK_OVERFLOW STATUS_STACK_OVERFLOW
|
---|
68 | #define EXCEPTION_INVALID_DISPOSITION STATUS_INVALID_DISPOSITION
|
---|
69 | #define EXCEPTION_GUARD_PAGE STATUS_GUARD_PAGE_VIOLATION
|
---|
70 | #define EXCEPTION_INVALID_HANDLE STATUS_INVALID_HANDLE
|
---|
71 | #define CONTROL_C_EXIT STATUS_CONTROL_C_EXIT
|
---|
72 |
|
---|
73 | #define MAXIMUM_WAIT_OBJECTS 64
|
---|
74 | #define MAXIMUM_SUSPEND_COUNT 127
|
---|
75 |
|
---|
76 | #define WINCONTEXT_i386 0x00010000
|
---|
77 | #define WINCONTEXT_i486 WINCONTEXT_i386
|
---|
78 | #define WINCONTEXT_CONTROL (WINCONTEXT_i386 | 0x0001)
|
---|
79 | #define WINCONTEXT_INTEGER (WINCONTEXT_i386 | 0x0002)
|
---|
80 | #define WINCONTEXT_SEGMENTS (WINCONTEXT_i386 | 0x0004)
|
---|
81 | #define WINCONTEXT_FLOATING_POINT (WINCONTEXT_i386 | 0x0008L)
|
---|
82 | #define WINCONTEXT_DEBUG_REGISTERS (WINCONTEXT_i386 | 0x0010L)
|
---|
83 | #define WINCONTEXT_FULL (WINCONTEXT_CONTROL | WINCONTEXT_INTEGER | WINCONTEXT_SEGMENTS)
|
---|
84 |
|
---|
85 | #define SIZE_OF_80387_REGISTERS 80
|
---|
86 |
|
---|
87 | typedef struct
|
---|
88 | {
|
---|
89 | DWORD ControlWord;
|
---|
90 | DWORD StatusWord;
|
---|
91 | DWORD TagWord;
|
---|
92 | DWORD ErrorOffset;
|
---|
93 | DWORD ErrorSelector;
|
---|
94 | DWORD DataOffset;
|
---|
95 | DWORD DataSelector;
|
---|
96 | BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
|
---|
97 | DWORD Cr0NpxState;
|
---|
98 | } FLOATING_SAVE_AREA;
|
---|
99 |
|
---|
100 | typedef struct
|
---|
101 | {
|
---|
102 | DWORD ContextFlags;
|
---|
103 |
|
---|
104 | DWORD Dr0;
|
---|
105 | DWORD Dr1;
|
---|
106 | DWORD Dr2;
|
---|
107 | DWORD Dr3;
|
---|
108 | DWORD Dr6;
|
---|
109 | DWORD Dr7;
|
---|
110 |
|
---|
111 | FLOATING_SAVE_AREA FloatSave;
|
---|
112 |
|
---|
113 | DWORD SegGs;
|
---|
114 | DWORD SegFs;
|
---|
115 | DWORD SegEs;
|
---|
116 | DWORD SegDs;
|
---|
117 |
|
---|
118 | DWORD Edi;
|
---|
119 | DWORD Esi;
|
---|
120 | DWORD Ebx;
|
---|
121 | DWORD Edx;
|
---|
122 | DWORD Ecx;
|
---|
123 | DWORD Eax;
|
---|
124 |
|
---|
125 | DWORD Ebp;
|
---|
126 | DWORD Eip;
|
---|
127 | DWORD SegCs;
|
---|
128 | DWORD EFlags;
|
---|
129 | DWORD Esp;
|
---|
130 | DWORD SegSs;
|
---|
131 | } WINCONTEXT, *PWINCONTEXT;
|
---|
132 |
|
---|
133 |
|
---|
134 | #define WINEXCEPTION_NONCONTINUABLE 0x1
|
---|
135 | #define WINEXCEPTION_MAXIMUM_PARAMETERS 15
|
---|
136 |
|
---|
137 | typedef struct _WINEXCEPTION_RECORD {
|
---|
138 | DWORD ExceptionCode;
|
---|
139 | DWORD ExceptionFlags;
|
---|
140 | struct _WINEXCEPTION_RECORD *ExceptionRecord;
|
---|
141 | PVOID ExceptionAddress;
|
---|
142 | DWORD NumberParameters;
|
---|
143 | DWORD ExceptionInformation[WINEXCEPTION_MAXIMUM_PARAMETERS];
|
---|
144 | } WINEXCEPTION_RECORD;
|
---|
145 | typedef WINEXCEPTION_RECORD *PWINEXCEPTION_RECORD;
|
---|
146 |
|
---|
147 | typedef struct _WINEXCEPTION_POINTERS {
|
---|
148 | PWINEXCEPTION_RECORD ExceptionRecord;
|
---|
149 | PWINCONTEXT ContextRecord;
|
---|
150 | } WINEXCEPTION_POINTERS, *PWINEXCEPTION_POINTERS;
|
---|
151 |
|
---|
152 | //forward declaration
|
---|
153 | struct __EXCEPTION_FRAME;
|
---|
154 |
|
---|
155 | typedef DWORD (* WIN32API PEXCEPTION_HANDLER)(PWINEXCEPTION_RECORD,
|
---|
156 | struct _WINEXCEPTION_FRAME *,
|
---|
157 | PWINCONTEXT, LPVOID);
|
---|
158 |
|
---|
159 | typedef struct _WINEXCEPTION_FRAME
|
---|
160 | {
|
---|
161 | struct _WINEXCEPTION_FRAME *Prev;
|
---|
162 | PEXCEPTION_HANDLER Handler;
|
---|
163 | } WINEXCEPTION_FRAME, *PWINEXCEPTION_FRAME;
|
---|
164 |
|
---|
165 | /*
|
---|
166 | * Return values from the actual exception handlers
|
---|
167 | */
|
---|
168 |
|
---|
169 | #define ExceptionContinueExecution 0
|
---|
170 | #define ExceptionContinueSearch 1
|
---|
171 | #define ExceptionNestedException 2
|
---|
172 | #define ExceptionCollidedUnwind 3
|
---|
173 |
|
---|
174 | typedef PWINCONTEXT LPWINCONTEXT;
|
---|
175 | typedef PWINEXCEPTION_RECORD LPWINEXCEPTION_RECORD;
|
---|
176 | typedef PWINEXCEPTION_POINTERS LPWINEXCEPTION_POINTERS;
|
---|
177 |
|
---|
178 | typedef LONG (* WIN32API PTOP_LEVEL_EXCEPTION_FILTER)(struct _WINEXCEPTION_POINTERS *ExceptionInfo);
|
---|
179 |
|
---|
180 | typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
|
---|
181 |
|
---|
182 |
|
---|
183 | /*
|
---|
184 | * Return values from filters in except() and from UnhandledExceptionFilter
|
---|
185 | */
|
---|
186 |
|
---|
187 | #define WINEXCEPTION_EXECUTE_HANDLER 1
|
---|
188 | #define WINEXCEPTION_CONTINUE_SEARCH 0
|
---|
189 | #define WINEXCEPTION_CONTINUE_EXECUTION -1
|
---|
190 |
|
---|
191 | #define STATUS_INVALID_DISPOSITION 0xC0000026
|
---|
192 |
|
---|
193 | #pragma pack()
|
---|
194 |
|
---|
195 | #endif
|
---|