Bugfix: Exception handlers are *not* WINAPI.
[wine] / include / winnt.h
1 /*
2  * Win32 definitions for Windows NT
3  *
4  * Copyright 1996 Alexandre Julliard
5  */
6
7 #ifndef __WINE_WINNT_H
8 #define __WINE_WINNT_H
9
10 #include "windef.h"
11
12 #include "pshpack1.h"
13 /* Defines */
14
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 */
20
21
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
30
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
55
56 #define ANYSIZE_ARRAY 1
57
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
67
68 #define FIELD_OFFSET(type, field) \
69   ((LONG)(INT)&(((type *)0)->field))
70
71 #define CONTAINING_RECORD(address, type, field) \
72   ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
73
74 /* Types */
75
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. */
79
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)
92
93 typedef BYTE     BOOLEAN;
94 typedef BOOLEAN *PBOOLEAN;
95
96 typedef struct _LIST_ENTRY {
97   struct _LIST_ENTRY *Flink;
98   struct _LIST_ENTRY *Blink;
99 } LIST_ENTRY, *PLIST_ENTRY;
100
101 typedef struct _SINGLE_LIST_ENTRY {
102   struct _SINGLE_LIST_ENTRY *Next;
103 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
104
105 /* Heap flags */
106
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 */
120
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
128
129
130 /* The Win32 register context */
131
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). */
135
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. */
140
141 #define SIZE_OF_80387_REGISTERS      80
142
143 typedef struct _FLOATING_SAVE_AREA
144 {
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;
155
156 typedef struct _CONTEXT86
157 {
158     DWORD   ContextFlags;
159
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;
167
168     /* These are selected by CONTEXT_FLOATING_POINT */
169     FLOATING_SAVE_AREA FloatSave;
170
171     /* These are selected by CONTEXT_SEGMENTS */
172     DWORD   SegGs;
173     DWORD   SegFs;
174     DWORD   SegEs;
175     DWORD   SegDs;    
176
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;
184
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;
193
194 #define CONTEXT_X86       0x00010000
195 #define CONTEXT_i386      CONTEXT_X86
196 #define CONTEXT_i486      CONTEXT_X86
197
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)
204
205 /* i386 context definitions */
206 #ifdef __i386__
207
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
214
215 typedef CONTEXT86 CONTEXT;
216
217 #endif  /* __i386__ */
218
219 /* Alpha context definitions */
220 #ifdef _ALPHA_
221
222 #define CONTEXT_ALPHA   0x00020000
223  
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)
228
229 typedef struct _CONTEXT
230 {
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;
264
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;
298
299     /* selected by CONTEXT_FLOATING_POINT */
300     ULONGLONG Fpcr;
301     ULONGLONG SoftFpcr;
302
303     /* selected by CONTEXT_CONTROL */
304     ULONGLONG Fir;
305     DWORD Psr;
306     DWORD ContextFlags;
307     DWORD Fill[4];
308 } CONTEXT;
309
310 #define _QUAD_PSR_OFFSET   HighSoftFpcr
311 #define _QUAD_FLAGS_OFFSET HighFir
312
313 #endif  /* _ALPHA_ */
314
315 /* Mips context definitions */
316 #ifdef _MIPS_
317
318 #define CONTEXT_R4000   0x00010000
319
320 #define CONTEXT_CONTROL         (CONTEXT_R4000 | 0x00000001)
321 #define CONTEXT_FLOATING_POINT  (CONTEXT_R4000 | 0x00000002)
322 #define CONTEXT_INTEGER         (CONTEXT_R4000 | 0x00000004)
323
324 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
325
326 typedef struct _CONTEXT
327 {
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;
362
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;
398
399     /* These are selected by CONTEXT_FLOATING_POINT */
400     DWORD Fsr;
401
402     /* These are selected by CONTEXT_CONTROL */
403     DWORD Fir;
404     DWORD Psr;
405
406     DWORD ContextFlags;
407     DWORD Fill[2];
408 } CONTEXT;
409
410 #endif  /* _MIPS_ */
411
412 /* PowerPC context definitions */
413 #ifdef __PPC__
414
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)
420
421 typedef struct
422 {
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;
457
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;
491
492     DWORD Cr;
493     DWORD Xer;
494
495     /* These are selected by CONTEXT_CONTROL */
496     DWORD Msr;
497     DWORD Iar;
498     DWORD Lr;
499     DWORD Ctr;
500
501     DWORD ContextFlags;
502     DWORD Fill[3];
503
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;
514
515 typedef struct _STACK_FRAME_HEADER
516 {
517     DWORD BackChain;
518     DWORD GlueSaved1;
519     DWORD GlueSaved2;
520     DWORD Reserved1;
521     DWORD Spare1;
522     DWORD Spare2;
523
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;
533
534 #endif  /* __PPC__ */
535
536 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
537 #error You need to define a CONTEXT for your CPU
538 #endif
539
540 typedef CONTEXT *PCONTEXT;
541 typedef HANDLE *PHANDLE;
542
543 #ifdef __WINE__
544
545 /* Macros for easier access to i386 context registers */
546
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)
554
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)
561
562 #define EFL_reg(context)     ((context)->EFlags)
563 #define EIP_reg(context)     ((context)->Eip)
564 #define ESP_reg(context)     ((context)->Esp)
565
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))
573
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))
582                             
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)
587
588 #define ISV86(context)       (EFL_reg(context) & 0x00020000)
589 #define V86BASE(context)     ((context)->Dr7) /* ugly */
590
591 #endif  /* __WINE__ */
592
593 /*
594  * Exception codes
595  */
596  
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
637
638 #define MAXIMUM_WAIT_OBJECTS 64
639 #define MAXIMUM_SUSPEND_COUNT 127
640
641
642 /*
643  * Return values from the actual exception handlers
644  */
645
646 #define ExceptionContinueExecution 0
647 #define ExceptionContinueSearch    1
648 #define ExceptionNestedException   2
649 #define ExceptionCollidedUnwind    3
650  
651 /*
652  * Return values from filters in except() and from UnhandledExceptionFilter
653  */
654  
655 #define EXCEPTION_EXECUTE_HANDLER        1
656 #define EXCEPTION_CONTINUE_SEARCH        0
657 #define EXCEPTION_CONTINUE_EXECUTION    -1
658
659 /*
660  * From OS/2 2.0 exception handling
661  * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
662  */
663
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
669
670 #define EXCEPTION_CONTINUABLE        0
671 #define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE
672  
673 /*
674  * The exception record used by Win32 to give additional information 
675  * about exception to exception handlers.
676  */
677
678 #define EXCEPTION_MAXIMUM_PARAMETERS 15
679
680 typedef struct __EXCEPTION_RECORD
681 {
682     DWORD    ExceptionCode;
683     DWORD    ExceptionFlags;
684     struct __EXCEPTION_RECORD *ExceptionRecord;
685
686     LPVOID   ExceptionAddress;
687     DWORD    NumberParameters;
688     DWORD    ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
689 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
690
691 /*
692  * The exception pointers structure passed to exception filters
693  * in except() and the UnhandledExceptionFilter().
694  */
695  
696 typedef struct _EXCEPTION_POINTERS 
697 {
698   PEXCEPTION_RECORD  ExceptionRecord;
699   PCONTEXT           ContextRecord;
700 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
701
702
703 /*
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.
707  */
708
709 struct __EXCEPTION_FRAME;
710
711 typedef DWORD (*PEXCEPTION_HANDLER)(PEXCEPTION_RECORD,struct __EXCEPTION_FRAME*,
712                                     PCONTEXT,struct __EXCEPTION_FRAME **);
713
714 typedef struct __EXCEPTION_FRAME
715 {
716   struct __EXCEPTION_FRAME *Prev;
717   PEXCEPTION_HANDLER       Handler;
718 } EXCEPTION_FRAME, *PEXCEPTION_FRAME;
719
720 #include "poppack.h"
721
722 /*
723  * function pointer to a exception filter
724  */
725
726 typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
727 typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
728
729 DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
730 LPTOP_LEVEL_EXCEPTION_FILTER
731 WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
732
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
740
741 struct _TEB;
742
743 #ifdef __WINE__
744
745 #if defined(__i386__)
746 static inline struct _TEB * WINE_UNUSED __get_teb(void)
747 {
748     struct _TEB *teb;
749     __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb));
750     return teb;
751 }
752 #elif defined(HAVE__LWP_CREATE)
753 extern void *_lwp_getprivate(void);
754 static inline struct _TEB * WINE_UNUSED __get_teb(void)
755 {
756     return (struct _TEB *)_lwp_getprivate();
757 }
758 #else
759 #error NtCurrentTeb() not defined for this architecture!
760 #endif
761
762 #define NtCurrentTeb() __get_teb()
763
764 #else /* __WINE__ */
765 extern struct _TEB * WINAPI NtCurrentTeb(void);
766 #endif
767
768 /*
769  * Here follows typedefs for security and tokens.
770  */ 
771
772 /*
773  * First a constant for the following typdefs.
774  */
775
776 #define ANYSIZE_ARRAY   1
777
778 /* FIXME:  Orphan.  What does it point to? */
779 typedef PVOID PACCESS_TOKEN;
780
781 /*
782  * TOKEN_INFORMATION_CLASS
783  */
784
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; 
797
798 #ifndef _SECURITY_DEFINED
799 #define _SECURITY_DEFINED
800
801 #include "pshpack1.h"
802
803 typedef DWORD ACCESS_MASK, *PACCESS_MASK;
804
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;
811
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) */
818
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) */
828
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 */
832
833
834 /* 
835  * ACL 
836  */
837
838 typedef struct _ACL {
839     BYTE AclRevision;
840     BYTE Sbz1;
841     WORD AclSize;
842     WORD AceCount;
843     WORD Sbz2;
844 } ACL, *PACL;
845
846 /* SECURITY_DESCRIPTOR */
847 #define SECURITY_DESCRIPTOR_REVISION    1
848 #define SECURITY_DESCRIPTOR_REVISION1   1
849
850
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
858
859 typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
860 typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
861
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;
872
873 #define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR)) 
874
875 #include "poppack.h"
876
877 #endif /* _SECURITY_DEFINED */
878
879 #include "pshpack1.h"
880
881 /* 
882  * SID_AND_ATTRIBUTES
883  */
884
885 typedef struct _SID_AND_ATTRIBUTES {
886   PSID  Sid; 
887   DWORD Attributes; 
888 } SID_AND_ATTRIBUTES ; 
889  
890 /*
891  * TOKEN_USER
892  */
893
894 typedef struct _TOKEN_USER {
895   SID_AND_ATTRIBUTES User; 
896 } TOKEN_USER; 
897
898 /*
899  * TOKEN_GROUPS
900  */
901
902 typedef struct _TOKEN_GROUPS  {
903   DWORD GroupCount; 
904   SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; 
905 } TOKEN_GROUPS; 
906
907 /*
908  * LUID_AND_ATTRIBUTES
909  */
910
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;
918
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;
926
927 /*
928  * Locally Unique Identifier
929  */
930
931 typedef LARGE_INTEGER LUID,*PLUID;
932
933 typedef struct _LUID_AND_ATTRIBUTES {
934   LUID   Luid; 
935   DWORD  Attributes; 
936 } LUID_AND_ATTRIBUTES; 
937
938 /*
939  * PRIVILEGE_SET
940  */
941
942 typedef struct _PRIVILEGE_SET {
943     DWORD PrivilegeCount;
944     DWORD Control;
945     LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
946 } PRIVILEGE_SET, *PPRIVILEGE_SET;
947
948 /*
949  * TOKEN_PRIVILEGES
950  */
951
952 typedef struct _TOKEN_PRIVILEGES {
953   DWORD PrivilegeCount; 
954   LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; 
955 } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; 
956
957 /*
958  * TOKEN_OWNER
959  */
960
961 typedef struct _TOKEN_OWNER {
962   PSID Owner; 
963 } TOKEN_OWNER; 
964
965 /*
966  * TOKEN_PRIMARY_GROUP
967  */
968
969 typedef struct _TOKEN_PRIMARY_GROUP {
970   PSID PrimaryGroup; 
971 } TOKEN_PRIMARY_GROUP; 
972
973
974 /*
975  * TOKEN_DEFAULT_DACL
976  */
977
978 typedef struct _TOKEN_DEFAULT_DACL { 
979   PACL DefaultDacl; 
980 } TOKEN_DEFAULT_DACL; 
981
982 /*
983  * TOKEN_SOURCEL
984  */
985
986 typedef struct _TOKEN_SOURCE {
987   char Sourcename[8]; 
988   LUID SourceIdentifier; 
989 } TOKEN_SOURCE; 
990
991 /*
992  * TOKEN_TYPE
993  */
994
995 typedef enum tagTOKEN_TYPE {
996   TokenPrimary = 1, 
997   TokenImpersonation 
998 } TOKEN_TYPE; 
999
1000 /*
1001  * SECURITY_IMPERSONATION_LEVEL
1002  */
1003
1004 typedef enum _SECURITY_IMPERSONATION_LEVEL {
1005   SecurityAnonymous, 
1006   SecurityIdentification, 
1007   SecurityImpersonation, 
1008   SecurityDelegation 
1009 } SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL; 
1010
1011
1012 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,
1013         * PSECURITY_CONTEXT_TRACKING_MODE;
1014 /*
1015  *      Quality of Service
1016  */
1017
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;
1024
1025 /*
1026  * TOKEN_STATISTICS
1027  */
1028
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; 
1041
1042 /* 
1043  *      ACLs of NT 
1044  */
1045
1046 #define ACL_REVISION    2
1047
1048 #define ACL_REVISION1   1
1049 #define ACL_REVISION2   2
1050
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;
1057
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
1063
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
1070
1071 /* AceFlags mask for what events we (should) audit */
1072 #define SUCCESSFUL_ACCESS_ACE_FLAG      0x40
1073 #define FAILED_ACCESS_ACE_FLAG          0x80
1074
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
1081  */
1082 typedef struct _ACCESS_ALLOWED_ACE {
1083         ACE_HEADER      Header;
1084         DWORD           Mask;
1085         DWORD           SidStart;
1086 } ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
1087
1088 typedef struct _ACCESS_DENIED_ACE {
1089         ACE_HEADER      Header;
1090         DWORD           Mask;
1091         DWORD           SidStart;
1092 } ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
1093
1094 typedef struct _SYSTEM_AUDIT_ACE {
1095         ACE_HEADER      Header;
1096         DWORD           Mask;
1097         DWORD           SidStart;
1098 } SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
1099
1100 typedef struct _SYSTEM_ALARM_ACE {
1101         ACE_HEADER      Header;
1102         DWORD           Mask;
1103         DWORD           SidStart;
1104 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
1105
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;
1116
1117 /* Access rights */
1118
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
1125
1126 #define STANDARD_RIGHTS_READ       READ_CONTROL
1127 #define STANDARD_RIGHTS_WRITE      READ_CONTROL
1128 #define STANDARD_RIGHTS_EXECUTE    READ_CONTROL
1129
1130 #define STANDARD_RIGHTS_ALL        0x001f0000
1131
1132 #define SPECIFIC_RIGHTS_ALL        0x0000ffff
1133
1134 #define GENERIC_READ               0x80000000
1135 #define GENERIC_WRITE              0x40000000
1136 #define GENERIC_EXECUTE            0x20000000
1137 #define GENERIC_ALL                0x10000000
1138
1139 #define EVENT_MODIFY_STATE         0x0002
1140 #define EVENT_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1141
1142 #define SEMAPHORE_MODIFY_STATE     0x0002
1143 #define SEMAPHORE_ALL_ACCESS       (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1144
1145 #define MUTEX_MODIFY_STATE         0x0001
1146 #define MUTEX_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1)
1147
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)
1159
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)
1170
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
1175
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)
1193
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)
1202
1203
1204 /* File attribute flags
1205  */
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
1221
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
1233
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
1239
1240 #include "poppack.h"
1241
1242 #endif  /* __WINE_WINNT_H */