source: trunk/include/exceptions.h@ 3124

Last change on this file since 3124 was 3124, checked in by sandervl, 25 years ago

header updates

File size: 7.3 KB
Line 
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
100typedef 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
113typedef 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
150typedef 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;
158typedef WINEXCEPTION_RECORD *PWINEXCEPTION_RECORD;
159
160typedef struct _WINEXCEPTION_POINTERS {
161 PWINEXCEPTION_RECORD ExceptionRecord;
162 PWINCONTEXT ContextRecord;
163} WINEXCEPTION_POINTERS, *PWINEXCEPTION_POINTERS;
164
165//forward declaration
166struct __EXCEPTION_FRAME;
167
168typedef DWORD (* WIN32API PEXCEPTION_HANDLER)(PWINEXCEPTION_RECORD,
169 struct _WINEXCEPTION_FRAME *,
170 PWINCONTEXT, LPVOID);
171
172typedef 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
187typedef PWINCONTEXT LPWINCONTEXT;
188typedef PWINEXCEPTION_RECORD LPWINEXCEPTION_RECORD;
189typedef PWINEXCEPTION_POINTERS LPWINEXCEPTION_POINTERS;
190
191typedef LONG (* WIN32API PTOP_LEVEL_EXCEPTION_FILTER)(struct _WINEXCEPTION_POINTERS *ExceptionInfo);
192
193typedef 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
208DWORD RtlDispatchException(WINEXCEPTION_RECORD *pRecord, WINCONTEXT *pContext);
209
210#endif
Note: See TracBrowser for help on using the repository browser.