source: trunk/include/exceptions.h@ 4

Last change on this file since 4 was 4, checked in by ktk, 26 years ago

Import

File size: 6.5 KB
RevLine 
[4]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
87typedef 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
100typedef 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
137typedef 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;
145typedef WINEXCEPTION_RECORD *PWINEXCEPTION_RECORD;
146
147typedef struct _WINEXCEPTION_POINTERS {
148 PWINEXCEPTION_RECORD ExceptionRecord;
149 PWINCONTEXT ContextRecord;
150} WINEXCEPTION_POINTERS, *PWINEXCEPTION_POINTERS;
151
152//forward declaration
153struct __EXCEPTION_FRAME;
154
155typedef DWORD (* WIN32API PEXCEPTION_HANDLER)(PWINEXCEPTION_RECORD,
156 struct _WINEXCEPTION_FRAME *,
157 PWINCONTEXT, LPVOID);
158
159typedef 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
174typedef PWINCONTEXT LPWINCONTEXT;
175typedef PWINEXCEPTION_RECORD LPWINEXCEPTION_RECORD;
176typedef PWINEXCEPTION_POINTERS LPWINEXCEPTION_POINTERS;
177
178typedef LONG (* WIN32API PTOP_LEVEL_EXCEPTION_FILTER)(struct _WINEXCEPTION_POINTERS *ExceptionInfo);
179
180typedef 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
Note: See TracBrowser for help on using the repository browser.