Fixed typo.
[wine/multimedia.git] / include / winnt.h
blobdb0e2bddc5687f79f10496d25c3ab14b08b0c0a5
1 /*
2 * Win32 definitions for Windows NT
4 * Copyright 1996 Alexandre Julliard
5 */
7 #ifndef __WINE_WINNT_H
8 #define __WINE_WINNT_H
10 #include "windef.h"
12 #include "pshpack1.h"
13 /* Defines */
15 /* Argument 1 passed to the DllEntryProc. */
16 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
17 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
18 #define DLL_THREAD_ATTACH 2 /* attach new thread */
19 #define DLL_THREAD_DETACH 3 /* detach thread */
22 /* u.x.wProcessorArchitecture (NT) */
23 #define PROCESSOR_ARCHITECTURE_INTEL 0
24 #define PROCESSOR_ARCHITECTURE_MIPS 1
25 #define PROCESSOR_ARCHITECTURE_ALPHA 2
26 #define PROCESSOR_ARCHITECTURE_PPC 3
27 #define PROCESSOR_ARCHITECTURE_SHX 4
28 #define PROCESSOR_ARCHITECTURE_ARM 5
29 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
31 /* dwProcessorType */
32 #define PROCESSOR_INTEL_386 386
33 #define PROCESSOR_INTEL_486 486
34 #define PROCESSOR_INTEL_PENTIUM 586
35 #define PROCESSOR_INTEL_860 860
36 #define PROCESSOR_MIPS_R2000 2000
37 #define PROCESSOR_MIPS_R3000 3000
38 #define PROCESSOR_MIPS_R4000 4000
39 #define PROCESSOR_ALPHA_21064 21064
40 #define PROCESSOR_PPC_601 601
41 #define PROCESSOR_PPC_603 603
42 #define PROCESSOR_PPC_604 604
43 #define PROCESSOR_PPC_620 620
44 #define PROCESSOR_HITACHI_SH3 10003
45 #define PROCESSOR_HITACHI_SH3E 10004
46 #define PROCESSOR_HITACHI_SH4 10005
47 #define PROCESSOR_MOTOROLA_821 821
48 #define PROCESSOR_SHx_SH3 103
49 #define PROCESSOR_SHx_SH4 104
50 #define PROCESSOR_STRONGARM 2577
51 #define PROCESSOR_ARM720 1824 /* 0x720 */
52 #define PROCESSOR_ARM820 2080 /* 0x820 */
53 #define PROCESSOR_ARM920 2336 /* 0x920 */
54 #define PROCESSOR_ARM_7TDMI 70001
56 #define ANYSIZE_ARRAY 1
58 #define MINCHAR 0x80
59 #define MAXCHAR 0x7f
60 #define MINSHORT 0x8000
61 #define MAXSHORT 0x7fff
62 #define MINLONG 0x80000000
63 #define MAXLONG 0x7fffffff
64 #define MAXBYTE 0xff
65 #define MAXWORD 0xffff
66 #define MAXDWORD 0xffffffff
68 #define FIELD_OFFSET(type, field) \
69 ((LONG)(INT)&(((type *)0)->field))
71 #define CONTAINING_RECORD(address, type, field) \
72 ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
74 /* Types */
76 /* TCHAR data types definitions for Winelib. */
77 /* These types are _not_ defined for the emulator, because they */
78 /* depend on the UNICODE macro that only exists in user's code. */
80 #ifndef __WINE__
81 # ifdef UNICODE
82 typedef LPWSTR LPTSTR;
83 typedef LPCWSTR LPCTSTR;
84 #define __TEXT(string) L##string /*probably wrong */
85 # else /* UNICODE */
86 typedef LPSTR LPTSTR;
87 typedef LPCSTR LPCTSTR;
88 #define __TEXT(string) string
89 # endif /* UNICODE */
90 #endif /* __WINE__ */
91 #define TEXT(quote) __TEXT(quote)
93 typedef BYTE BOOLEAN;
94 typedef BOOLEAN *PBOOLEAN;
96 typedef struct _LIST_ENTRY {
97 struct _LIST_ENTRY *Flink;
98 struct _LIST_ENTRY *Blink;
99 } LIST_ENTRY, *PLIST_ENTRY;
101 typedef struct _SINGLE_LIST_ENTRY {
102 struct _SINGLE_LIST_ENTRY *Next;
103 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
105 /* Heap flags */
107 #define HEAP_NO_SERIALIZE 0x00000001
108 #define HEAP_GROWABLE 0x00000002
109 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
110 #define HEAP_ZERO_MEMORY 0x00000008
111 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
112 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
113 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
114 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
115 #define HEAP_CREATE_ALIGN_16 0x00010000
116 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
117 #define HEAP_WINE_SEGPTR 0x01000000 /* Not a Win32 flag */
118 #define HEAP_WINE_CODESEG 0x02000000 /* Not a Win32 flag */
119 #define HEAP_WINE_CODE16SEG 0x04000000 /* Not a Win32 flag */
121 /* Processor feature flags. */
122 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
123 #define PF_FLOATING_POINT_EMULATED 1
124 #define PF_COMPARE_EXCHANGE_DOUBLE 2
125 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
126 #define PF_PPC_MOVEMEM_64BIT_OK 4
127 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
130 /* The Win32 register context */
132 /* CONTEXT is the CPU-dependent context; it should be used */
133 /* wherever a platform-specific context is needed (e.g. exception */
134 /* handling, Win32 register functions). */
136 /* CONTEXT86 is the i386-specific context; it should be used */
137 /* wherever only a 386 context makes sense (e.g. DOS interrupts, */
138 /* Win16 register functions), so that this code can be compiled */
139 /* on all platforms. */
141 #define SIZE_OF_80387_REGISTERS 80
143 typedef struct _FLOATING_SAVE_AREA
145 DWORD ControlWord;
146 DWORD StatusWord;
147 DWORD TagWord;
148 DWORD ErrorOffset;
149 DWORD ErrorSelector;
150 DWORD DataOffset;
151 DWORD DataSelector;
152 BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
153 DWORD Cr0NpxState;
154 } FLOATING_SAVE_AREA, *PFLOATING_SAVE_AREA;
156 typedef struct _CONTEXT86
158 DWORD ContextFlags;
160 /* These are selected by CONTEXT_DEBUG_REGISTERS */
161 DWORD Dr0;
162 DWORD Dr1;
163 DWORD Dr2;
164 DWORD Dr3;
165 DWORD Dr6;
166 DWORD Dr7;
168 /* These are selected by CONTEXT_FLOATING_POINT */
169 FLOATING_SAVE_AREA FloatSave;
171 /* These are selected by CONTEXT_SEGMENTS */
172 DWORD SegGs;
173 DWORD SegFs;
174 DWORD SegEs;
175 DWORD SegDs;
177 /* These are selected by CONTEXT_INTEGER */
178 DWORD Edi;
179 DWORD Esi;
180 DWORD Ebx;
181 DWORD Edx;
182 DWORD Ecx;
183 DWORD Eax;
185 /* These are selected by CONTEXT_CONTROL */
186 DWORD Ebp;
187 DWORD Eip;
188 DWORD SegCs;
189 DWORD EFlags;
190 DWORD Esp;
191 DWORD SegSs;
192 } CONTEXT86;
194 #define CONTEXT_X86 0x00010000
195 #define CONTEXT_i386 CONTEXT_X86
196 #define CONTEXT_i486 CONTEXT_X86
198 #define CONTEXT86_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
199 #define CONTEXT86_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
200 #define CONTEXT86_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
201 #define CONTEXT86_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
202 #define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
203 #define CONTEXT86_FULL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS)
205 /* i386 context definitions */
206 #ifdef __i386__
208 #define CONTEXT_CONTROL CONTEXT86_CONTROL
209 #define CONTEXT_INTEGER CONTEXT86_INTEGER
210 #define CONTEXT_SEGMENTS CONTEXT86_SEGMENTS
211 #define CONTEXT_FLOATING_POINT CONTEXT86_FLOATING_POINT
212 #define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
213 #define CONTEXT_FULL CONTEXT86_FULL
215 typedef CONTEXT86 CONTEXT;
217 #endif /* __i386__ */
219 /* Alpha context definitions */
220 #ifdef _ALPHA_
222 #define CONTEXT_ALPHA 0x00020000
224 #define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001L)
225 #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002L)
226 #define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004L)
227 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
229 typedef struct _CONTEXT
231 /* selected by CONTEXT_FLOATING_POINT */
232 ULONGLONG FltF0;
233 ULONGLONG FltF1;
234 ULONGLONG FltF2;
235 ULONGLONG FltF3;
236 ULONGLONG FltF4;
237 ULONGLONG FltF5;
238 ULONGLONG FltF6;
239 ULONGLONG FltF7;
240 ULONGLONG FltF8;
241 ULONGLONG FltF9;
242 ULONGLONG FltF10;
243 ULONGLONG FltF11;
244 ULONGLONG FltF12;
245 ULONGLONG FltF13;
246 ULONGLONG FltF14;
247 ULONGLONG FltF15;
248 ULONGLONG FltF16;
249 ULONGLONG FltF17;
250 ULONGLONG FltF18;
251 ULONGLONG FltF19;
252 ULONGLONG FltF20;
253 ULONGLONG FltF21;
254 ULONGLONG FltF22;
255 ULONGLONG FltF23;
256 ULONGLONG FltF24;
257 ULONGLONG FltF25;
258 ULONGLONG FltF26;
259 ULONGLONG FltF27;
260 ULONGLONG FltF28;
261 ULONGLONG FltF29;
262 ULONGLONG FltF30;
263 ULONGLONG FltF31;
265 /* selected by CONTEXT_INTEGER */
266 ULONGLONG IntV0;
267 ULONGLONG IntT0;
268 ULONGLONG IntT1;
269 ULONGLONG IntT2;
270 ULONGLONG IntT3;
271 ULONGLONG IntT4;
272 ULONGLONG IntT5;
273 ULONGLONG IntT6;
274 ULONGLONG IntT7;
275 ULONGLONG IntS0;
276 ULONGLONG IntS1;
277 ULONGLONG IntS2;
278 ULONGLONG IntS3;
279 ULONGLONG IntS4;
280 ULONGLONG IntS5;
281 ULONGLONG IntFp;
282 ULONGLONG IntA0;
283 ULONGLONG IntA1;
284 ULONGLONG IntA2;
285 ULONGLONG IntA3;
286 ULONGLONG IntA4;
287 ULONGLONG IntA5;
288 ULONGLONG IntT8;
289 ULONGLONG IntT9;
290 ULONGLONG IntT10;
291 ULONGLONG IntT11;
292 ULONGLONG IntRa;
293 ULONGLONG IntT12;
294 ULONGLONG IntAt;
295 ULONGLONG IntGp;
296 ULONGLONG IntSp;
297 ULONGLONG IntZero;
299 /* selected by CONTEXT_FLOATING_POINT */
300 ULONGLONG Fpcr;
301 ULONGLONG SoftFpcr;
303 /* selected by CONTEXT_CONTROL */
304 ULONGLONG Fir;
305 DWORD Psr;
306 DWORD ContextFlags;
307 DWORD Fill[4];
308 } CONTEXT;
310 #define _QUAD_PSR_OFFSET HighSoftFpcr
311 #define _QUAD_FLAGS_OFFSET HighFir
313 #endif /* _ALPHA_ */
315 /* Mips context definitions */
316 #ifdef _MIPS_
318 #define CONTEXT_R4000 0x00010000
320 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
321 #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
322 #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
324 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
326 typedef struct _CONTEXT
328 DWORD Argument[4];
329 /* These are selected by CONTEXT_FLOATING_POINT */
330 DWORD FltF0;
331 DWORD FltF1;
332 DWORD FltF2;
333 DWORD FltF3;
334 DWORD FltF4;
335 DWORD FltF5;
336 DWORD FltF6;
337 DWORD FltF7;
338 DWORD FltF8;
339 DWORD FltF9;
340 DWORD FltF10;
341 DWORD FltF11;
342 DWORD FltF12;
343 DWORD FltF13;
344 DWORD FltF14;
345 DWORD FltF15;
346 DWORD FltF16;
347 DWORD FltF17;
348 DWORD FltF18;
349 DWORD FltF19;
350 DWORD FltF20;
351 DWORD FltF21;
352 DWORD FltF22;
353 DWORD FltF23;
354 DWORD FltF24;
355 DWORD FltF25;
356 DWORD FltF26;
357 DWORD FltF27;
358 DWORD FltF28;
359 DWORD FltF29;
360 DWORD FltF30;
361 DWORD FltF31;
363 /* These are selected by CONTEXT_INTEGER */
364 DWORD IntZero;
365 DWORD IntAt;
366 DWORD IntV0;
367 DWORD IntV1;
368 DWORD IntA0;
369 DWORD IntA1;
370 DWORD IntA2;
371 DWORD IntA3;
372 DWORD IntT0;
373 DWORD IntT1;
374 DWORD IntT2;
375 DWORD IntT3;
376 DWORD IntT4;
377 DWORD IntT5;
378 DWORD IntT6;
379 DWORD IntT7;
380 DWORD IntS0;
381 DWORD IntS1;
382 DWORD IntS2;
383 DWORD IntS3;
384 DWORD IntS4;
385 DWORD IntS5;
386 DWORD IntS6;
387 DWORD IntS7;
388 DWORD IntT8;
389 DWORD IntT9;
390 DWORD IntK0;
391 DWORD IntK1;
392 DWORD IntGp;
393 DWORD IntSp;
394 DWORD IntS8;
395 DWORD IntRa;
396 DWORD IntLo;
397 DWORD IntHi;
399 /* These are selected by CONTEXT_FLOATING_POINT */
400 DWORD Fsr;
402 /* These are selected by CONTEXT_CONTROL */
403 DWORD Fir;
404 DWORD Psr;
406 DWORD ContextFlags;
407 DWORD Fill[2];
408 } CONTEXT;
410 #endif /* _MIPS_ */
412 /* PowerPC context definitions */
413 #ifdef __PPC__
415 #define CONTEXT_CONTROL 0x0001
416 #define CONTEXT_FLOATING_POINT 0x0002
417 #define CONTEXT_INTEGER 0x0004
418 #define CONTEXT_DEBUG_REGISTERS 0x0008
419 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
421 typedef struct
423 /* These are selected by CONTEXT_FLOATING_POINT */
424 double Fpr0;
425 double Fpr1;
426 double Fpr2;
427 double Fpr3;
428 double Fpr4;
429 double Fpr5;
430 double Fpr6;
431 double Fpr7;
432 double Fpr8;
433 double Fpr9;
434 double Fpr10;
435 double Fpr11;
436 double Fpr12;
437 double Fpr13;
438 double Fpr14;
439 double Fpr15;
440 double Fpr16;
441 double Fpr17;
442 double Fpr18;
443 double Fpr19;
444 double Fpr20;
445 double Fpr21;
446 double Fpr22;
447 double Fpr23;
448 double Fpr24;
449 double Fpr25;
450 double Fpr26;
451 double Fpr27;
452 double Fpr28;
453 double Fpr29;
454 double Fpr30;
455 double Fpr31;
456 double Fpscr;
458 /* These are selected by CONTEXT_INTEGER */
459 DWORD Gpr0;
460 DWORD Gpr1;
461 DWORD Gpr2;
462 DWORD Gpr3;
463 DWORD Gpr4;
464 DWORD Gpr5;
465 DWORD Gpr6;
466 DWORD Gpr7;
467 DWORD Gpr8;
468 DWORD Gpr9;
469 DWORD Gpr10;
470 DWORD Gpr11;
471 DWORD Gpr12;
472 DWORD Gpr13;
473 DWORD Gpr14;
474 DWORD Gpr15;
475 DWORD Gpr16;
476 DWORD Gpr17;
477 DWORD Gpr18;
478 DWORD Gpr19;
479 DWORD Gpr20;
480 DWORD Gpr21;
481 DWORD Gpr22;
482 DWORD Gpr23;
483 DWORD Gpr24;
484 DWORD Gpr25;
485 DWORD Gpr26;
486 DWORD Gpr27;
487 DWORD Gpr28;
488 DWORD Gpr29;
489 DWORD Gpr30;
490 DWORD Gpr31;
492 DWORD Cr;
493 DWORD Xer;
495 /* These are selected by CONTEXT_CONTROL */
496 DWORD Msr;
497 DWORD Iar;
498 DWORD Lr;
499 DWORD Ctr;
501 DWORD ContextFlags;
502 DWORD Fill[3];
504 /* These are selected by CONTEXT_DEBUG_REGISTERS */
505 DWORD Dr0;
506 DWORD Dr1;
507 DWORD Dr2;
508 DWORD Dr3;
509 DWORD Dr4;
510 DWORD Dr5;
511 DWORD Dr6;
512 DWORD Dr7;
513 } CONTEXT;
515 typedef struct _STACK_FRAME_HEADER
517 DWORD BackChain;
518 DWORD GlueSaved1;
519 DWORD GlueSaved2;
520 DWORD Reserved1;
521 DWORD Spare1;
522 DWORD Spare2;
524 DWORD Parameter0;
525 DWORD Parameter1;
526 DWORD Parameter2;
527 DWORD Parameter3;
528 DWORD Parameter4;
529 DWORD Parameter5;
530 DWORD Parameter6;
531 DWORD Parameter7;
532 } STACK_FRAME_HEADER,*PSTACK_FRAME_HEADER;
534 #endif /* __PPC__ */
536 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
537 #error You need to define a CONTEXT for your CPU
538 #endif
540 typedef CONTEXT *PCONTEXT;
541 typedef HANDLE *PHANDLE;
543 #ifdef __WINE__
545 /* Macros for easier access to i386 context registers */
547 #define EAX_reg(context) ((context)->Eax)
548 #define EBX_reg(context) ((context)->Ebx)
549 #define ECX_reg(context) ((context)->Ecx)
550 #define EDX_reg(context) ((context)->Edx)
551 #define ESI_reg(context) ((context)->Esi)
552 #define EDI_reg(context) ((context)->Edi)
553 #define EBP_reg(context) ((context)->Ebp)
555 #define CS_reg(context) ((context)->SegCs)
556 #define DS_reg(context) ((context)->SegDs)
557 #define ES_reg(context) ((context)->SegEs)
558 #define FS_reg(context) ((context)->SegFs)
559 #define GS_reg(context) ((context)->SegGs)
560 #define SS_reg(context) ((context)->SegSs)
562 #define EFL_reg(context) ((context)->EFlags)
563 #define EIP_reg(context) ((context)->Eip)
564 #define ESP_reg(context) ((context)->Esp)
566 #define AX_reg(context) (*(WORD*)&EAX_reg(context))
567 #define BX_reg(context) (*(WORD*)&EBX_reg(context))
568 #define CX_reg(context) (*(WORD*)&ECX_reg(context))
569 #define DX_reg(context) (*(WORD*)&EDX_reg(context))
570 #define SI_reg(context) (*(WORD*)&ESI_reg(context))
571 #define DI_reg(context) (*(WORD*)&EDI_reg(context))
572 #define BP_reg(context) (*(WORD*)&EBP_reg(context))
574 #define AL_reg(context) (*(BYTE*)&EAX_reg(context))
575 #define AH_reg(context) (*((BYTE*)&EAX_reg(context)+1))
576 #define BL_reg(context) (*(BYTE*)&EBX_reg(context))
577 #define BH_reg(context) (*((BYTE*)&EBX_reg(context)+1))
578 #define CL_reg(context) (*(BYTE*)&ECX_reg(context))
579 #define CH_reg(context) (*((BYTE*)&ECX_reg(context)+1))
580 #define DL_reg(context) (*(BYTE*)&EDX_reg(context))
581 #define DH_reg(context) (*((BYTE*)&EDX_reg(context)+1))
583 #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
584 #define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001)
585 #define SET_ZFLAG(context) (EFL_reg(context) |= 0x0040)
586 #define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040)
588 #define ISV86(context) (EFL_reg(context) & 0x00020000)
589 #define V86BASE(context) ((context)->Dr7) /* ugly */
591 #endif /* __WINE__ */
594 * Exception codes
597 #define STATUS_SUCCESS 0x00000000
598 #define STATUS_WAIT_0 0x00000000
599 #define STATUS_ABANDONED_WAIT_0 0x00000080
600 #define STATUS_USER_APC 0x000000C0
601 #define STATUS_TIMEOUT 0x00000102
602 #define STATUS_PENDING 0x00000103
603 #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
604 #define STATUS_DATATYPE_MISALIGNMENT 0x80000002
605 #define STATUS_BREAKPOINT 0x80000003
606 #define STATUS_SINGLE_STEP 0x80000004
607 #define STATUS_BUFFER_OVERFLOW 0x80000005
608 #define STATUS_UNSUCCESSFUL 0xC0000001
609 #define STATUS_ACCESS_VIOLATION 0xC0000005
610 #define STATUS_IN_PAGE_ERROR 0xC0000006
611 #define STATUS_INVALID_PARAMETER 0xC000000D
612 #define STATUS_NO_MEMORY 0xC0000017
613 #define STATUS_CONFLICTING_ADDRESSES 0xC0000018
614 #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
615 #define STATUS_BUFFER_TOO_SMALL 0xC0000023
616 #define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
617 #define STATUS_INVALID_DISPOSITION 0xC0000026
618 #define STATUS_UNWIND 0xC0000027
619 #define STATUS_BAD_STACK 0xC0000028
620 #define STATUS_INVALID_UNWIND_TARGET 0xC0000029
621 #define STATUS_UNKNOWN_REVISION 0xC0000058
622 #define STATUS_INVALID_SECURITY_DESCR 0xC0000079
623 #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
624 #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
625 #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
626 #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
627 #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
628 #define STATUS_FLOAT_OVERFLOW 0xC0000091
629 #define STATUS_FLOAT_STACK_CHECK 0xC0000092
630 #define STATUS_FLOAT_UNDERFLOW 0xC0000093
631 #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
632 #define STATUS_INTEGER_OVERFLOW 0xC0000095
633 #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
634 #define STATUS_INVALID_PARAMETER_2 0xC00000F0
635 #define STATUS_STACK_OVERFLOW 0xC00000FD
636 #define STATUS_CONTROL_C_EXIT 0xC000013A
638 #define MAXIMUM_WAIT_OBJECTS 64
639 #define MAXIMUM_SUSPEND_COUNT 127
643 * Return values from the actual exception handlers
646 #define ExceptionContinueExecution 0
647 #define ExceptionContinueSearch 1
648 #define ExceptionNestedException 2
649 #define ExceptionCollidedUnwind 3
652 * Return values from filters in except() and from UnhandledExceptionFilter
655 #define EXCEPTION_EXECUTE_HANDLER 1
656 #define EXCEPTION_CONTINUE_SEARCH 0
657 #define EXCEPTION_CONTINUE_EXECUTION -1
660 * From OS/2 2.0 exception handling
661 * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
664 #define EH_NONCONTINUABLE 0x01
665 #define EH_UNWINDING 0x02
666 #define EH_EXIT_UNWIND 0x04
667 #define EH_STACK_INVALID 0x08
668 #define EH_NESTED_CALL 0x10
670 #define EXCEPTION_CONTINUABLE 0
671 #define EXCEPTION_NONCONTINUABLE EH_NONCONTINUABLE
674 * The exception record used by Win32 to give additional information
675 * about exception to exception handlers.
678 #define EXCEPTION_MAXIMUM_PARAMETERS 15
680 typedef struct __EXCEPTION_RECORD
682 DWORD ExceptionCode;
683 DWORD ExceptionFlags;
684 struct __EXCEPTION_RECORD *ExceptionRecord;
686 LPVOID ExceptionAddress;
687 DWORD NumberParameters;
688 DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
689 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
692 * The exception pointers structure passed to exception filters
693 * in except() and the UnhandledExceptionFilter().
696 typedef struct _EXCEPTION_POINTERS
698 PEXCEPTION_RECORD ExceptionRecord;
699 PCONTEXT ContextRecord;
700 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
704 * The exception frame, used for registering exception handlers
705 * Win32 cares only about this, but compilers generally emit
706 * larger exception frames for their own use.
709 struct __EXCEPTION_FRAME;
711 typedef DWORD (CALLBACK *PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct __EXCEPTION_FRAME*,
712 PCONTEXT,struct __EXCEPTION_FRAME **);
714 typedef struct __EXCEPTION_FRAME
716 struct __EXCEPTION_FRAME *Prev;
717 PEXCEPTION_HANDLER Handler;
718 } EXCEPTION_FRAME, *PEXCEPTION_FRAME;
720 #include "poppack.h"
723 * function pointer to a exception filter
726 typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
727 typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
729 DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
730 LPTOP_LEVEL_EXCEPTION_FILTER
731 WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
733 /* status values for ContinueDebugEvent */
734 #define DBG_CONTINUE 0x00010002
735 #define DBG_TERMINATE_THREAD 0x40010003
736 #define DBG_TERMINATE_PROCESS 0x40010004
737 #define DBG_CONTROL_C 0x40010005
738 #define DBG_CONTROL_BREAK 0x40010008
739 #define DBG_EXCEPTION_NOT_HANDLED 0x80010001
741 struct _TEB;
743 #ifdef __WINE__
745 #if defined(__i386__)
746 static inline struct _TEB * WINE_UNUSED __get_teb(void)
748 struct _TEB *teb;
749 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
750 return teb;
752 #elif defined(HAVE__LWP_CREATE)
753 extern void *_lwp_getprivate(void);
754 static inline struct _TEB * WINE_UNUSED __get_teb(void)
756 return (struct _TEB *)_lwp_getprivate();
758 #else
759 #error NtCurrentTeb() not defined for this architecture!
760 #endif
762 #define NtCurrentTeb() __get_teb()
764 #else /* __WINE__ */
765 extern struct _TEB * WINAPI NtCurrentTeb(void);
766 #endif
769 * Here follows typedefs for security and tokens.
773 * First a constant for the following typdefs.
776 #define ANYSIZE_ARRAY 1
778 /* FIXME: Orphan. What does it point to? */
779 typedef PVOID PACCESS_TOKEN;
782 * TOKEN_INFORMATION_CLASS
785 typedef enum _TOKEN_INFORMATION_CLASS {
786 TokenUser = 1,
787 TokenGroups,
788 TokenPrivileges,
789 TokenOwner,
790 TokenPrimaryGroup,
791 TokenDefaultDacl,
792 TokenSource,
793 TokenType,
794 TokenImpersonationLevel,
795 TokenStatistics
796 } TOKEN_INFORMATION_CLASS;
798 #ifndef _SECURITY_DEFINED
799 #define _SECURITY_DEFINED
801 #include "pshpack1.h"
803 typedef DWORD ACCESS_MASK, *PACCESS_MASK;
805 typedef struct _GENERIC_MAPPING {
806 ACCESS_MASK GenericRead;
807 ACCESS_MASK GenericWrite;
808 ACCESS_MASK GenericExecute;
809 ACCESS_MASK GenericAll;
810 } GENERIC_MAPPING, *PGENERIC_MAPPING;
812 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
813 #define SID_IDENTIFIER_AUTHORITY_DEFINED
814 typedef struct {
815 BYTE Value[6];
816 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
817 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
819 #ifndef SID_DEFINED
820 #define SID_DEFINED
821 typedef struct _SID {
822 BYTE Revision;
823 BYTE SubAuthorityCount;
824 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
825 DWORD SubAuthority[1];
826 } SID,*PSID;
827 #endif /* !defined(SID_DEFINED) */
829 #define SID_REVISION (1) /* Current revision */
830 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
831 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
835 * ACL
838 typedef struct _ACL {
839 BYTE AclRevision;
840 BYTE Sbz1;
841 WORD AclSize;
842 WORD AceCount;
843 WORD Sbz2;
844 } ACL, *PACL;
846 /* SECURITY_DESCRIPTOR */
847 #define SECURITY_DESCRIPTOR_REVISION 1
848 #define SECURITY_DESCRIPTOR_REVISION1 1
851 #define SE_OWNER_DEFAULTED 0x0001
852 #define SE_GROUP_DEFAULTED 0x0002
853 #define SE_DACL_PRESENT 0x0004
854 #define SE_DACL_DEFAULTED 0x0008
855 #define SE_SACL_PRESENT 0x0010
856 #define SE_SACL_DEFAULTED 0x0020
857 #define SE_SELF_RELATIVE 0x8000
859 typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
860 typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
862 /* The security descriptor structure */
863 typedef struct {
864 BYTE Revision;
865 BYTE Sbz1;
866 SECURITY_DESCRIPTOR_CONTROL Control;
867 PSID Owner;
868 PSID Group;
869 PACL Sacl;
870 PACL Dacl;
871 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
873 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
875 #include "poppack.h"
877 #endif /* _SECURITY_DEFINED */
879 #include "pshpack1.h"
882 * SID_AND_ATTRIBUTES
885 typedef struct _SID_AND_ATTRIBUTES {
886 PSID Sid;
887 DWORD Attributes;
888 } SID_AND_ATTRIBUTES ;
891 * TOKEN_USER
894 typedef struct _TOKEN_USER {
895 SID_AND_ATTRIBUTES User;
896 } TOKEN_USER;
899 * TOKEN_GROUPS
902 typedef struct _TOKEN_GROUPS {
903 DWORD GroupCount;
904 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
905 } TOKEN_GROUPS;
908 * LUID_AND_ATTRIBUTES
911 typedef union _LARGE_INTEGER {
912 struct {
913 DWORD LowPart;
914 LONG HighPart;
915 } DUMMYSTRUCTNAME;
916 LONGLONG QuadPart;
917 } LARGE_INTEGER, *LPLARGE_INTEGER, *PLARGE_INTEGER;
919 typedef union _ULARGE_INTEGER {
920 struct {
921 DWORD LowPart;
922 LONG HighPart;
923 } DUMMYSTRUCTNAME;
924 LONGLONG QuadPart;
925 } ULARGE_INTEGER, *LPULARGE_INTEGER, *PULARGE_INTEGER;
928 * Locally Unique Identifier
931 typedef LARGE_INTEGER LUID,*PLUID;
933 typedef struct _LUID_AND_ATTRIBUTES {
934 LUID Luid;
935 DWORD Attributes;
936 } LUID_AND_ATTRIBUTES;
939 * PRIVILEGE_SET
942 typedef struct _PRIVILEGE_SET {
943 DWORD PrivilegeCount;
944 DWORD Control;
945 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
946 } PRIVILEGE_SET, *PPRIVILEGE_SET;
949 * TOKEN_PRIVILEGES
952 typedef struct _TOKEN_PRIVILEGES {
953 DWORD PrivilegeCount;
954 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
955 } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
958 * TOKEN_OWNER
961 typedef struct _TOKEN_OWNER {
962 PSID Owner;
963 } TOKEN_OWNER;
966 * TOKEN_PRIMARY_GROUP
969 typedef struct _TOKEN_PRIMARY_GROUP {
970 PSID PrimaryGroup;
971 } TOKEN_PRIMARY_GROUP;
975 * TOKEN_DEFAULT_DACL
978 typedef struct _TOKEN_DEFAULT_DACL {
979 PACL DefaultDacl;
980 } TOKEN_DEFAULT_DACL;
983 * TOKEN_SOURCEL
986 typedef struct _TOKEN_SOURCE {
987 char Sourcename[8];
988 LUID SourceIdentifier;
989 } TOKEN_SOURCE;
992 * TOKEN_TYPE
995 typedef enum tagTOKEN_TYPE {
996 TokenPrimary = 1,
997 TokenImpersonation
998 } TOKEN_TYPE;
1001 * SECURITY_IMPERSONATION_LEVEL
1004 typedef enum _SECURITY_IMPERSONATION_LEVEL {
1005 SecurityAnonymous,
1006 SecurityIdentification,
1007 SecurityImpersonation,
1008 SecurityDelegation
1009 } SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
1012 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
1013 * PSECURITY_CONTEXT_TRACKING_MODE;
1015 * Quality of Service
1018 typedef struct _SECURITY_QUALITY_OF_SERVICE {
1019 DWORD Length;
1020 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1021 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
1022 BOOL EffectiveOnly;
1023 } SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
1026 * TOKEN_STATISTICS
1029 typedef struct _TOKEN_STATISTICS {
1030 LUID TokenId;
1031 LUID AuthenticationId;
1032 LARGE_INTEGER ExpirationTime;
1033 TOKEN_TYPE TokenType;
1034 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
1035 DWORD DynamicCharged;
1036 DWORD DynamicAvailable;
1037 DWORD GroupCount;
1038 DWORD PrivilegeCount;
1039 LUID ModifiedId;
1040 } TOKEN_STATISTICS;
1043 * ACLs of NT
1046 #define ACL_REVISION 2
1048 #define ACL_REVISION1 1
1049 #define ACL_REVISION2 2
1051 /* ACEs, directly starting after an ACL */
1052 typedef struct _ACE_HEADER {
1053 BYTE AceType;
1054 BYTE AceFlags;
1055 WORD AceSize;
1056 } ACE_HEADER,*PACE_HEADER;
1058 /* AceType */
1059 #define ACCESS_ALLOWED_ACE_TYPE 0
1060 #define ACCESS_DENIED_ACE_TYPE 1
1061 #define SYSTEM_AUDIT_ACE_TYPE 2
1062 #define SYSTEM_ALARM_ACE_TYPE 3
1064 /* inherit AceFlags */
1065 #define OBJECT_INHERIT_ACE 0x01
1066 #define CONTAINER_INHERIT_ACE 0x02
1067 #define NO_PROPAGATE_INHERIT_ACE 0x04
1068 #define INHERIT_ONLY_ACE 0x08
1069 #define VALID_INHERIT_FLAGS 0x0F
1071 /* AceFlags mask for what events we (should) audit */
1072 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
1073 #define FAILED_ACCESS_ACE_FLAG 0x80
1075 /* different ACEs depending on AceType
1076 * SidStart marks the begin of a SID
1077 * so the thing finally looks like this:
1078 * 0: ACE_HEADER
1079 * 4: ACCESS_MASK
1080 * 8... : SID
1082 typedef struct _ACCESS_ALLOWED_ACE {
1083 ACE_HEADER Header;
1084 DWORD Mask;
1085 DWORD SidStart;
1086 } ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
1088 typedef struct _ACCESS_DENIED_ACE {
1089 ACE_HEADER Header;
1090 DWORD Mask;
1091 DWORD SidStart;
1092 } ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
1094 typedef struct _SYSTEM_AUDIT_ACE {
1095 ACE_HEADER Header;
1096 DWORD Mask;
1097 DWORD SidStart;
1098 } SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
1100 typedef struct _SYSTEM_ALARM_ACE {
1101 ACE_HEADER Header;
1102 DWORD Mask;
1103 DWORD SidStart;
1104 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
1106 typedef enum tagSID_NAME_USE {
1107 SidTypeUser = 1,
1108 SidTypeGroup,
1109 SidTypeDomain,
1110 SidTypeAlias,
1111 SidTypeWellKnownGroup,
1112 SidTypeDeletedAccount,
1113 SidTypeInvalid,
1114 SidTypeUnknown
1115 } SID_NAME_USE,*PSID_NAME_USE;
1117 /* Access rights */
1119 #define DELETE 0x00010000
1120 #define READ_CONTROL 0x00020000
1121 #define WRITE_DAC 0x00040000
1122 #define WRITE_OWNER 0x00080000
1123 #define SYNCHRONIZE 0x00100000
1124 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
1126 #define STANDARD_RIGHTS_READ READ_CONTROL
1127 #define STANDARD_RIGHTS_WRITE READ_CONTROL
1128 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
1130 #define STANDARD_RIGHTS_ALL 0x001f0000
1132 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
1134 #define GENERIC_READ 0x80000000
1135 #define GENERIC_WRITE 0x40000000
1136 #define GENERIC_EXECUTE 0x20000000
1137 #define GENERIC_ALL 0x10000000
1139 #define EVENT_MODIFY_STATE 0x0002
1140 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1142 #define SEMAPHORE_MODIFY_STATE 0x0002
1143 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1145 #define MUTEX_MODIFY_STATE 0x0001
1146 #define MUTEX_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1)
1148 #define PROCESS_TERMINATE 0x0001
1149 #define PROCESS_CREATE_THREAD 0x0002
1150 #define PROCESS_VM_OPERATION 0x0008
1151 #define PROCESS_VM_READ 0x0010
1152 #define PROCESS_VM_WRITE 0x0020
1153 #define PROCESS_DUP_HANDLE 0x0040
1154 #define PROCESS_CREATE_PROCESS 0x0080
1155 #define PROCESS_SET_QUOTA 0x0100
1156 #define PROCESS_SET_INFORMATION 0x0200
1157 #define PROCESS_QUERY_INFORMATION 0x0400
1158 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
1160 #define THREAD_TERMINATE 0x0001
1161 #define THREAD_SUSPEND_RESUME 0x0002
1162 #define THREAD_GET_CONTEXT 0x0008
1163 #define THREAD_SET_CONTEXT 0x0010
1164 #define THREAD_SET_INFORMATION 0x0020
1165 #define THREAD_QUERY_INFORMATION 0x0040
1166 #define THREAD_SET_THREAD_TOKEN 0x0080
1167 #define THREAD_IMPERSONATE 0x0100
1168 #define THREAD_DIRECT_IMPERSONATION 0x0200
1169 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
1171 #define THREAD_BASE_PRIORITY_LOWRT 15
1172 #define THREAD_BASE_PRIORITY_MAX 2
1173 #define THREAD_BASE_PRIORITY_MIN -2
1174 #define THREAD_BASE_PRIORITY_IDLE -15
1176 #define FILE_READ_DATA 0x0001 /* file & pipe */
1177 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
1178 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
1179 #define FILE_ADD_FILE 0x0002 /* directory */
1180 #define FILE_APPEND_DATA 0x0004 /* file */
1181 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
1182 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
1183 #define FILE_READ_EA 0x0008 /* file & directory */
1184 #define FILE_READ_PROPERTIES FILE_READ_EA
1185 #define FILE_WRITE_EA 0x0010 /* file & directory */
1186 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
1187 #define FILE_EXECUTE 0x0020 /* file */
1188 #define FILE_TRAVERSE 0x0020 /* directory */
1189 #define FILE_DELETE_CHILD 0x0040 /* directory */
1190 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
1191 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
1192 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
1194 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
1195 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
1196 SYNCHRONIZE)
1197 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
1198 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
1199 FILE_APPEND_DATA | SYNCHRONIZE)
1200 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
1201 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
1204 /* File attribute flags
1206 #define FILE_SHARE_READ 0x00000001L
1207 #define FILE_SHARE_WRITE 0x00000002L
1208 #define FILE_SHARE_DELETE 0x00000004L
1209 #define FILE_ATTRIBUTE_READONLY 0x00000001L
1210 #define FILE_ATTRIBUTE_HIDDEN 0x00000002L
1211 #define FILE_ATTRIBUTE_SYSTEM 0x00000004L
1212 #define FILE_ATTRIBUTE_LABEL 0x00000008L /* Not in Windows API */
1213 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010L
1214 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020L
1215 #define FILE_ATTRIBUTE_NORMAL 0x00000080L
1216 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100L
1217 #define FILE_ATTRIBUTE_ATOMIC_WRITE 0x00000200L
1218 #define FILE_ATTRIBUTE_XACTION_WRITE 0x00000400L
1219 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800L
1220 #define FILE_ATTRIBUTE_OFFLINE 0x00001000L
1222 /* File alignments (NT) */
1223 #define FILE_BYTE_ALIGNMENT 0x00000000
1224 #define FILE_WORD_ALIGNMENT 0x00000001
1225 #define FILE_LONG_ALIGNMENT 0x00000003
1226 #define FILE_QUAD_ALIGNMENT 0x00000007
1227 #define FILE_OCTA_ALIGNMENT 0x0000000f
1228 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1229 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1230 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1231 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1232 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1234 /* Registry security values */
1235 #define OWNER_SECURITY_INFORMATION 0x00000001
1236 #define GROUP_SECURITY_INFORMATION 0x00000002
1237 #define DACL_SECURITY_INFORMATION 0x00000004
1238 #define SACL_SECURITY_INFORMATION 0x00000008
1240 #include "poppack.h"
1242 #endif /* __WINE_WINNT_H */