Implemented _ConfirmWin16Lock (KERNEL32.96).
[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 "wintypes.h"
11
12 #pragma pack(1)
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_UNKNOWN  0xFFFF
28
29 /* dwProcessorType */
30 #define PROCESSOR_INTEL_386     386
31 #define PROCESSOR_INTEL_486     486
32 #define PROCESSOR_INTEL_PENTIUM 586
33 #define PROCESSOR_MIPS_R4000    4000
34 #define PROCESSOR_ALPHA_21064   21064
35
36
37 #define ANYSIZE_ARRAY 1
38
39 #define FIELD_OFFSET(type, field) \
40   ((LONG)(INT)&(((type *)0)->field))
41
42 #define CONTAINING_RECORD(address, type, field) \
43   ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
44
45 /* Types */
46
47 typedef BYTE     BOOLEAN;
48 typedef BOOLEAN *PBOOLEAN;
49
50 typedef struct _LIST_ENTRY {
51   struct _LIST_ENTRY *Flink;
52   struct _LIST_ENTRY *Blink;
53 } LIST_ENTRY, *PLIST_ENTRY;
54
55 typedef struct _SINGLE_LIST_ENTRY {
56   struct _SINGLE_LIST_ENTRY *Next;
57 } SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
58
59 /* Heap flags */
60
61 #define HEAP_NO_SERIALIZE               0x00000001
62 #define HEAP_GROWABLE                   0x00000002
63 #define HEAP_GENERATE_EXCEPTIONS        0x00000004
64 #define HEAP_ZERO_MEMORY                0x00000008
65 #define HEAP_REALLOC_IN_PLACE_ONLY      0x00000010
66 #define HEAP_TAIL_CHECKING_ENABLED      0x00000020
67 #define HEAP_FREE_CHECKING_ENABLED      0x00000040
68 #define HEAP_DISABLE_COALESCE_ON_FREE   0x00000080
69 #define HEAP_CREATE_ALIGN_16            0x00010000
70 #define HEAP_CREATE_ENABLE_TRACING      0x00020000
71 #define HEAP_WINE_SEGPTR                0x01000000  /* Not a Win32 flag */
72 #define HEAP_WINE_CODESEG               0x02000000  /* Not a Win32 flag */
73 #define HEAP_WINE_CODE16SEG             0x04000000  /* Not a Win32 flag */
74
75 /* Processor feature flags.  */
76 #define PF_FLOATING_POINT_PRECISION_ERRATA      0
77 #define PF_FLOATING_POINT_EMULATED              1
78 #define PF_COMPARE_EXCHANGE_DOUBLE              2
79 #define PF_MMX_INSTRUCTIONS_AVAILABLE           3
80 #define PF_PPC_MOVEMEM_64BIT_OK                 4
81 #define PF_ALPHA_BYTE_INSTRUCTIONS              5
82
83
84 /* The Win32 register context */
85
86 #define CONTEXT_i386      0x00010000
87 #define CONTEXT_i486      CONTEXT_i386
88 #define CONTEXT_CONTROL   (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
89 #define CONTEXT_INTEGER   (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
90 #define CONTEXT_SEGMENTS  (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
91 #define CONTEXT_FLOATING_POINT  (CONTEXT_i386 | 0x0008L) /* 387 state */
92 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
93 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
94
95 #define SIZE_OF_80387_REGISTERS      80
96
97 typedef struct
98 {
99     DWORD   ControlWord;
100     DWORD   StatusWord;
101     DWORD   TagWord;    
102     DWORD   ErrorOffset;
103     DWORD   ErrorSelector;
104     DWORD   DataOffset;
105     DWORD   DataSelector;    
106     BYTE    RegisterArea[SIZE_OF_80387_REGISTERS];
107     DWORD   Cr0NpxState;
108 } FLOATING_SAVE_AREA;
109
110 typedef struct
111 {
112     DWORD   ContextFlags;
113
114     /* These are selected by CONTEXT_DEBUG_REGISTERS */
115     DWORD   Dr0;
116     DWORD   Dr1;
117     DWORD   Dr2;
118     DWORD   Dr3;
119     DWORD   Dr6;
120     DWORD   Dr7;
121
122     /* These are selected by CONTEXT_FLOATING_POINT */
123     FLOATING_SAVE_AREA FloatSave;
124
125     /* These are selected by CONTEXT_SEGMENTS */
126     DWORD   SegGs;
127     DWORD   SegFs;
128     DWORD   SegEs;
129     DWORD   SegDs;    
130
131     /* These are selected by CONTEXT_INTEGER */
132     DWORD   Edi;
133     DWORD   Esi;
134     DWORD   Ebx;
135     DWORD   Edx;    
136     DWORD   Ecx;
137     DWORD   Eax;
138
139     /* These are selected by CONTEXT_CONTROL */
140     DWORD   Ebp;    
141     DWORD   Eip;
142     DWORD   SegCs;
143     DWORD   EFlags;
144     DWORD   Esp;
145     DWORD   SegSs;
146 } CONTEXT, *PCONTEXT;
147
148 typedef HANDLE *PHANDLE;
149
150 #ifdef __WINE__
151
152 /* Macros for easier access to context registers */
153
154 #define EAX_reg(context)     ((context)->Eax)
155 #define EBX_reg(context)     ((context)->Ebx)
156 #define ECX_reg(context)     ((context)->Ecx)
157 #define EDX_reg(context)     ((context)->Edx)
158 #define ESI_reg(context)     ((context)->Esi)
159 #define EDI_reg(context)     ((context)->Edi)
160 #define EBP_reg(context)     ((context)->Ebp)
161
162 #define CS_reg(context)      ((context)->SegCs)
163 #define DS_reg(context)      ((context)->SegDs)
164 #define ES_reg(context)      ((context)->SegEs)
165 #define FS_reg(context)      ((context)->SegFs)
166 #define GS_reg(context)      ((context)->SegGs)
167 #define SS_reg(context)      ((context)->SegSs)
168
169 #define EFL_reg(context)     ((context)->EFlags)
170 #define EIP_reg(context)     ((context)->Eip)
171 #define ESP_reg(context)     ((context)->Esp)
172
173 #define AX_reg(context)      (*(WORD*)&EAX_reg(context))
174 #define BX_reg(context)      (*(WORD*)&EBX_reg(context))
175 #define CX_reg(context)      (*(WORD*)&ECX_reg(context))
176 #define DX_reg(context)      (*(WORD*)&EDX_reg(context))
177 #define SI_reg(context)      (*(WORD*)&ESI_reg(context))
178 #define DI_reg(context)      (*(WORD*)&EDI_reg(context))
179 #define BP_reg(context)      (*(WORD*)&EBP_reg(context))
180
181 #define AL_reg(context)      (*(BYTE*)&EAX_reg(context))
182 #define AH_reg(context)      (*((BYTE*)&EAX_reg(context)+1))
183 #define BL_reg(context)      (*(BYTE*)&EBX_reg(context))
184 #define BH_reg(context)      (*((BYTE*)&EBX_reg(context)+1))
185 #define CL_reg(context)      (*(BYTE*)&ECX_reg(context))
186 #define CH_reg(context)      (*((BYTE*)&ECX_reg(context)+1))
187 #define DL_reg(context)      (*(BYTE*)&EDX_reg(context))
188 #define DH_reg(context)      (*((BYTE*)&EDX_reg(context)+1))
189                             
190 #define IP_reg(context)      (*(WORD*)&EIP_reg(context))
191 #define SP_reg(context)      (*(WORD*)&ESP_reg(context))
192                             
193 #define FL_reg(context)      (*(WORD*)&EFL_reg(context))
194
195 #define SET_CFLAG(context)   (EFL_reg(context) |= 0x0001)
196 #define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001)
197 #define SET_ZFLAG(context)   (EFL_reg(context) |= 0x0040)
198 #define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040)
199
200 #define ISV86(context)       (EFL_reg(context) & 0x00020000)
201 #define V86BASE(context)     ((context)->Dr7) /* ugly */
202
203 #endif  /* __WINE__ */
204
205 /*
206  * Exception codes
207  */
208  
209 #define STATUS_WAIT_0                    0x00000000
210 #define STATUS_ABANDONED_WAIT_0          0x00000080
211 #define STATUS_USER_APC                  0x000000C0
212 #define STATUS_TIMEOUT                   0x00000102
213 #define STATUS_PENDING                   0x00000103
214 #define STATUS_DATATYPE_MISALIGNMENT     0x80000002
215 #define STATUS_BREAKPOINT                0x80000003
216 #define STATUS_SINGLE_STEP               0x80000004
217 #define STATUS_ACCESS_VIOLATION          0xC0000005
218 #define STATUS_IN_PAGE_ERROR             0xC0000006
219 #define STATUS_NO_MEMORY                 0xC0000017
220 #define STATUS_ILLEGAL_INSTRUCTION       0xC000001D
221 #define STATUS_NONCONTINUABLE_EXCEPTION  0xC0000025
222 #define STATUS_INVALID_DISPOSITION       0xC0000026
223 #define STATUS_ARRAY_BOUNDS_EXCEEDED     0xC000008C
224 #define STATUS_FLOAT_DENORMAL_OPERAND    0xC000008D
225 #define STATUS_FLOAT_DIVIDE_BY_ZERO      0xC000008E
226 #define STATUS_FLOAT_INEXACT_RESULT      0xC000008F
227 #define STATUS_FLOAT_INVALID_OPERATION   0xC0000090
228 #define STATUS_FLOAT_OVERFLOW            0xC0000091
229 #define STATUS_FLOAT_STACK_CHECK         0xC0000092
230 #define STATUS_FLOAT_UNDERFLOW           0xC0000093
231 #define STATUS_INTEGER_DIVIDE_BY_ZERO    0xC0000094
232 #define STATUS_INTEGER_OVERFLOW          0xC0000095
233 #define STATUS_PRIVILEGED_INSTRUCTION    0xC0000096
234 #define STATUS_STACK_OVERFLOW            0xC00000FD
235 #define STATUS_CONTROL_C_EXIT            0xC000013A
236
237 #define EXCEPTION_ACCESS_VIOLATION          STATUS_ACCESS_VIOLATION
238 #define EXCEPTION_DATATYPE_MISALIGNMENT     STATUS_DATATYPE_MISALIGNMENT
239 #define EXCEPTION_BREAKPOINT                STATUS_BREAKPOINT
240 #define EXCEPTION_SINGLE_STEP               STATUS_SINGLE_STEP
241 #define EXCEPTION_ARRAY_BOUNDS_EXCEEDED     STATUS_ARRAY_BOUNDS_EXCEEDED
242 #define EXCEPTION_FLT_DENORMAL_OPERAND      STATUS_FLOAT_DENORMAL_OPERAND
243 #define EXCEPTION_FLT_DIVIDE_BY_ZERO        STATUS_FLOAT_DIVIDE_BY_ZERO
244 #define EXCEPTION_FLT_INEXACT_RESULT        STATUS_FLOAT_INEXACT_RESULT
245 #define EXCEPTION_FLT_INVALID_OPERATION     STATUS_FLOAT_INVALID_OPERATION
246 #define EXCEPTION_FLT_OVERFLOW              STATUS_FLOAT_OVERFLOW
247 #define EXCEPTION_FLT_STACK_CHECK           STATUS_FLOAT_STACK_CHECK
248 #define EXCEPTION_FLT_UNDERFLOW             STATUS_FLOAT_UNDERFLOW
249 #define EXCEPTION_INT_DIVIDE_BY_ZERO        STATUS_INTEGER_DIVIDE_BY_ZERO
250 #define EXCEPTION_INT_OVERFLOW              STATUS_INTEGER_OVERFLOW
251 #define EXCEPTION_PRIV_INSTRUCTION          STATUS_PRIVILEGED_INSTRUCTION
252 #define EXCEPTION_IN_PAGE_ERROR             STATUS_IN_PAGE_ERROR
253 #define EXCEPTION_ILLEGAL_INSTRUCTION       STATUS_ILLEGAL_INSTRUCTION
254 #define EXCEPTION_NONCONTINUABLE_EXCEPTION  STATUS_NONCONTINUABLE_EXCEPTION
255 #define EXCEPTION_STACK_OVERFLOW            STATUS_STACK_OVERFLOW
256 #define EXCEPTION_INVALID_DISPOSITION       STATUS_INVALID_DISPOSITION
257 #define EXCEPTION_GUARD_PAGE                STATUS_GUARD_PAGE_VIOLATION
258 #define EXCEPTION_INVALID_HANDLE            STATUS_INVALID_HANDLE
259 #define CONTROL_C_EXIT                      STATUS_CONTROL_C_EXIT
260
261 #define MAXIMUM_WAIT_OBJECTS 64
262 #define MAXIMUM_SUSPEND_COUNT 127
263
264
265 /*
266  * Return values from the actual exception handlers
267  */
268
269 #define ExceptionContinueExecution 0
270 #define ExceptionContinueSearch    1
271 #define ExceptionNestedException   2
272 #define ExceptionCollidedUnwind    3
273  
274 /*
275  * Return values from filters in except() and from UnhandledExceptionFilter
276  */
277  
278 #define EXCEPTION_EXECUTE_HANDLER        1
279 #define EXCEPTION_CONTINUE_SEARCH        0
280 #define EXCEPTION_CONTINUE_EXECUTION    -1
281
282 /*
283  * From OS/2 2.0 exception handling
284  * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
285  */
286
287 #define EH_NONCONTINUABLE   0x01
288 #define EH_UNWINDING        0x02
289 #define EH_EXIT_UNWIND      0x04
290 #define EH_STACK_INVALID    0x08
291 #define EH_NESTED_CALL      0x10
292
293 #define EXCEPTION_CONTINUABLE        0
294 #define EXCEPTION_NONCONTINUABLE     EH_NONCONTINUABLE
295  
296 /*
297  * The exception record used by Win32 to give additional information 
298  * about exception to exception handlers.
299  */
300
301 #define EXCEPTION_MAXIMUM_PARAMETERS 15
302
303 typedef struct __EXCEPTION_RECORD
304 {
305     DWORD    ExceptionCode;
306     DWORD    ExceptionFlags;
307     struct __EXCEPTION_RECORD *ExceptionRecord;
308
309     LPVOID   ExceptionAddress;
310     DWORD    NumberParameters;
311     DWORD    ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
312 } EXCEPTION_RECORD, *PEXCEPTION_RECORD;
313
314 /*
315  * The exception pointers structure passed to exception filters
316  * in except() and the UnhandledExceptionFilter().
317  */
318  
319 typedef struct _EXCEPTION_POINTERS 
320 {
321   PEXCEPTION_RECORD  ExceptionRecord;
322   PCONTEXT           ContextRecord;
323 } EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
324
325
326 #pragma pack(4)
327 /*
328  * function pointer to a exception filter
329  */
330
331 typedef LONG (CALLBACK *PTOP_LEVEL_EXCEPTION_FILTER)(PEXCEPTION_POINTERS ExceptionInfo);
332 typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER;
333
334 DWORD WINAPI UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers );
335 LPTOP_LEVEL_EXCEPTION_FILTER
336 WINAPI SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter );
337
338 /*
339  * Here follows typedefs for security and tokens.
340  */ 
341
342 /*
343  * First a constant for the following typdefs.
344  */
345
346 #define ANYSIZE_ARRAY   1
347
348 /*
349  * TOKEN_INFORMATION_CLASS
350  */
351
352 typedef enum _TOKEN_INFORMATION_CLASS {
353   TokenUser = 1, 
354   TokenGroups, 
355   TokenPrivileges, 
356   TokenOwner, 
357   TokenPrimaryGroup, 
358   TokenDefaultDacl, 
359   TokenSource, 
360   TokenType, 
361   TokenImpersonationLevel, 
362   TokenStatistics 
363 } TOKEN_INFORMATION_CLASS; 
364
365 #ifndef _SECURITY_DEFINED
366 #define _SECURITY_DEFINED
367
368 #pragma pack (1)
369
370 typedef struct {
371     BYTE Value[6];
372 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
373
374 typedef struct _SID {
375     BYTE Revision;
376     BYTE SubAuthorityCount;
377     SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
378     DWORD SubAuthority[1];
379 } SID,*PSID;
380
381 #define SID_REVISION                    (1)     /* Current revision */
382 #define SID_MAX_SUB_AUTHORITIES         (15)    /* current max subauths */
383 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)     /* recommended subauths */
384
385
386 /* 
387  * ACL 
388  */
389
390 typedef struct _ACL {
391     BYTE AclRevision;
392     BYTE Sbz1;
393     WORD AclSize;
394     WORD AceCount;
395     WORD Sbz2;
396 } ACL, *PACL;
397
398 /* SECURITY_DESCRIPTOR */
399 #define SECURITY_DESCRIPTOR_REVISION    1
400 #define SECURITY_DESCRIPTOR_REVISION1   1
401
402
403 #define SE_OWNER_DEFAULTED      0x0001
404 #define SE_GROUP_DEFAULTED      0x0002
405 #define SE_DACL_PRESENT         0x0004
406 #define SE_DACL_DEFAULTED       0x0008
407 #define SE_SACL_PRESENT         0x0010
408 #define SE_SACL_DEFAULTED       0x0020
409 #define SE_SELF_RELATIVE        0x8000
410
411 typedef DWORD SECURITY_INFORMATION;
412 typedef WORD SECURITY_DESCRIPTOR_CONTROL;
413
414 /* The security descriptor structure */
415 typedef struct {
416     BYTE Revision;
417     BYTE Sbz1;
418     SECURITY_DESCRIPTOR_CONTROL Control;
419     PSID Owner;
420     PSID Group;
421     PACL Sacl;
422     PACL Dacl;
423 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
424
425 #define SECURITY_DESCRIPTOR_MIN_LENGTH   (sizeof(SECURITY_DESCRIPTOR)) 
426
427 #endif /* _SECURITY_DEFINED */
428
429 /* 
430  * SID_AND_ATTRIBUTES
431  */
432
433 typedef struct _SID_AND_ATTRIBUTES {
434   PSID  Sid; 
435   DWORD Attributes; 
436 } SID_AND_ATTRIBUTES ; 
437  
438 /*
439  * TOKEN_USER
440  */
441
442 typedef struct _TOKEN_USER {
443   SID_AND_ATTRIBUTES User; 
444 } TOKEN_USER; 
445
446 /*
447  * TOKEN_GROUPS
448  */
449
450 typedef struct _TOKEN_GROUPS  {
451   DWORD GroupCount; 
452   SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; 
453 } TOKEN_GROUPS; 
454
455 /*
456  * LUID_AND_ATTRIBUTES
457  */
458
459 typedef struct _LARGE_INTEGER
460 {
461     DWORD    LowPart;
462     LONG     HighPart;
463 } LARGE_INTEGER,*PLARGE_INTEGER;
464
465 typedef struct _ULARGE_INTEGER
466 {
467     DWORD    LowPart;
468     DWORD    HighPart;
469 } ULARGE_INTEGER,*PULARGE_INTEGER;
470
471 typedef LARGE_INTEGER LUID,*PLUID; /* locally unique ids */
472
473 typedef struct _LUID_AND_ATTRIBUTES {
474   LUID   Luid; 
475   DWORD  Attributes; 
476 } LUID_AND_ATTRIBUTES; 
477
478 /*
479  * TOKEN_PRIVILEGES
480  */
481
482 typedef struct _TOKEN_PRIVILEGES {
483   DWORD PrivilegeCount; 
484   LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; 
485 } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; 
486
487 /*
488  * TOKEN_OWNER
489  */
490
491 typedef struct _TOKEN_OWNER {
492   PSID Owner; 
493 } TOKEN_OWNER; 
494
495 /*
496  * TOKEN_PRIMARY_GROUP
497  */
498
499 typedef struct _TOKEN_PRIMARY_GROUP {
500   PSID PrimaryGroup; 
501 } TOKEN_PRIMARY_GROUP; 
502
503 /*
504  * TOKEN_DEFAULT_DACL
505  */
506
507 typedef struct _TOKEN_DEFAULT_DACL { 
508   PACL DefaultDacl; 
509 } TOKEN_DEFAULT_DACL; 
510
511 /*
512  * TOKEN_SOURCEL
513  */
514
515 typedef struct _TOKEN_SOURCE {
516   char Sourcename[8]; 
517   LUID SourceIdentifier; 
518 } TOKEN_SOURCE; 
519
520 /*
521  * TOKEN_TYPE
522  */
523
524 typedef enum tagTOKEN_TYPE {
525   TokenPrimary = 1, 
526   TokenImpersonation 
527 } TOKEN_TYPE; 
528
529 /*
530  * SECURITY_IMPERSONATION_LEVEL
531  */
532
533 typedef enum _SECURITY_IMPERSONATION_LEVEL {
534   SecurityAnonymous, 
535   SecurityIdentification, 
536   SecurityImpersonation, 
537   SecurityDelegation 
538 } SECURITY_IMPERSONATION_LEVEL; 
539
540
541
542 /*
543  * TOKEN_STATISTICS
544  */
545
546 typedef struct _TOKEN_STATISTICS {
547   LUID  TokenId; 
548   LUID  AuthenticationId; 
549   LARGE_INTEGER ExpirationTime; 
550   TOKEN_TYPE    TokenType; 
551   SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 
552   DWORD DynamicCharged; 
553   DWORD DynamicAvailable; 
554   DWORD GroupCount; 
555   DWORD PrivilegeCount; 
556   LUID  ModifiedId; 
557 } TOKEN_STATISTICS; 
558
559 /* 
560  *      ACLs of NT 
561  */
562
563 #define ACL_REVISION    2
564
565 #define ACL_REVISION1   1
566 #define ACL_REVISION2   2
567
568 /* ACEs, directly starting after an ACL */
569 typedef struct _ACE_HEADER {
570         BYTE    AceType;
571         BYTE    AceFlags;
572         WORD    AceSize;
573 } ACE_HEADER,*PACE_HEADER;
574
575 /* AceType */
576 #define ACCESS_ALLOWED_ACE_TYPE         0
577 #define ACCESS_DENIED_ACE_TYPE          1
578 #define SYSTEM_AUDIT_ACE_TYPE           2
579 #define SYSTEM_ALARM_ACE_TYPE           3
580
581 /* inherit AceFlags */
582 #define OBJECT_INHERIT_ACE              0x01
583 #define CONTAINER_INHERIT_ACE           0x02
584 #define NO_PROPAGATE_INHERIT_ACE        0x04
585 #define INHERIT_ONLY_ACE                0x08
586 #define VALID_INHERIT_FLAGS             0x0F
587
588 /* AceFlags mask for what events we (should) audit */
589 #define SUCCESSFUL_ACCESS_ACE_FLAG      0x40
590 #define FAILED_ACCESS_ACE_FLAG          0x80
591
592 /* different ACEs depending on AceType 
593  * SidStart marks the begin of a SID
594  * so the thing finally looks like this:
595  * 0: ACE_HEADER
596  * 4: ACCESS_MASK
597  * 8... : SID
598  */
599 typedef struct _ACCESS_ALLOWED_ACE {
600         ACE_HEADER      Header;
601         DWORD           Mask;
602         DWORD           SidStart;
603 } ACCESS_ALLOWED_ACE,*PACCESS_ALLOWED_ACE;
604
605 typedef struct _ACCESS_DENIED_ACE {
606         ACE_HEADER      Header;
607         DWORD           Mask;
608         DWORD           SidStart;
609 } ACCESS_DENIED_ACE,*PACCESS_DENIED_ACE;
610
611 typedef struct _SYSTEM_AUDIT_ACE {
612         ACE_HEADER      Header;
613         DWORD           Mask;
614         DWORD           SidStart;
615 } SYSTEM_AUDIT_ACE,*PSYSTEM_AUDIT_ACE;
616
617 typedef struct _SYSTEM_ALARM_ACE {
618         ACE_HEADER      Header;
619         DWORD           Mask;
620         DWORD           SidStart;
621 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
622
623 typedef enum tagSID_NAME_USE {
624         SidTypeUser = 1,
625         SidTypeGroup,
626         SidTypeDomain,
627         SidTypeAlias,
628         SidTypeWellKnownGroup,
629         SidTypeDeletedAccount,
630         SidTypeInvalid,
631         SidTypeUnknown
632 } SID_NAME_USE,*PSID_NAME_USE;
633
634 /* Access rights */
635
636 #define DELETE                     0x00010000
637 #define READ_CONTROL               0x00020000
638 #define WRITE_DAC                  0x00040000
639 #define WRITE_OWNER                0x00080000
640 #define SYNCHRONIZE                0x00100000
641 #define STANDARD_RIGHTS_REQUIRED   0x000f0000
642
643 #define STANDARD_RIGHTS_READ       READ_CONTROL
644 #define STANDARD_RIGHTS_WRITE      READ_CONTROL
645 #define STANDARD_RIGHTS_EXECUTE    READ_CONTROL
646
647 #define STANDARD_RIGHTS_ALL        0x001f0000
648
649 #define SPECIFIC_RIGHTS_ALL        0x0000ffff
650
651 #define GENERIC_READ               0x80000000
652 #define GENERIC_WRITE              0x40000000
653 #define GENERIC_EXECUTE            0x20000000
654 #define GENERIC_ALL                0x10000000
655
656 #define EVENT_MODIFY_STATE         0x0002
657 #define EVENT_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
658
659 #define SEMAPHORE_MODIFY_STATE     0x0002
660 #define SEMAPHORE_ALL_ACCESS       (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
661
662 #define MUTEX_MODIFY_STATE         0x0001
663 #define MUTEX_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1)
664
665 #define PROCESS_TERMINATE          0x0001
666 #define PROCESS_CREATE_THREAD      0x0002
667 #define PROCESS_VM_OPERATION       0x0008
668 #define PROCESS_VM_READ            0x0010
669 #define PROCESS_VM_WRITE           0x0020
670 #define PROCESS_DUP_HANDLE         0x0040
671 #define PROCESS_CREATE_PROCESS     0x0080
672 #define PROCESS_SET_QUOTA          0x0100
673 #define PROCESS_SET_INFORMATION    0x0200
674 #define PROCESS_QUERY_INFORMATION  0x0400
675 #define PROCESS_ALL_ACCESS         (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
676
677 #define THREAD_TERMINATE           0x0001
678 #define THREAD_SUSPEND_RESUME      0x0002
679 #define THREAD_GET_CONTEXT         0x0008
680 #define THREAD_SET_CONTEXT         0x0010
681 #define THREAD_SET_INFORMATION     0x0020
682 #define THREAD_QUERY_INFORMATION   0x0040
683 #define THREAD_SET_THREAD_TOKEN    0x0080
684 #define THREAD_IMPERSONATE         0x0100
685 #define THREAD_DIRECT_IMPERSONATION 0x0200
686 #define THREAD_ALL_ACCESS          (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
687
688 #define FILE_READ_DATA            0x0001    /* file & pipe */
689 #define FILE_LIST_DIRECTORY       0x0001    /* directory */
690 #define FILE_WRITE_DATA           0x0002    /* file & pipe */
691 #define FILE_ADD_FILE             0x0002    /* directory */
692 #define FILE_APPEND_DATA          0x0004    /* file */
693 #define FILE_ADD_SUBDIRECTORY     0x0004    /* directory */
694 #define FILE_CREATE_PIPE_INSTANCE 0x0004    /* named pipe */
695 #define FILE_READ_EA              0x0008    /* file & directory */
696 #define FILE_READ_PROPERTIES      FILE_READ_EA
697 #define FILE_WRITE_EA             0x0010    /* file & directory */
698 #define FILE_WRITE_PROPERTIES     FILE_WRITE_EA
699 #define FILE_EXECUTE              0x0020    /* file */
700 #define FILE_TRAVERSE             0x0020    /* directory */
701 #define FILE_DELETE_CHILD         0x0040    /* directory */
702 #define FILE_READ_ATTRIBUTES      0x0080    /* all */
703 #define FILE_WRITE_ATTRIBUTES     0x0100    /* all */
704 #define FILE_ALL_ACCESS           (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
705
706 #define FILE_GENERIC_READ         (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
707                                    FILE_READ_ATTRIBUTES | FILE_READ_EA | \
708                                    SYNCHRONIZE)
709 #define FILE_GENERIC_WRITE        (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
710                                    FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
711                                    FILE_APPEND_DATA | SYNCHRONIZE)
712 #define FILE_GENERIC_EXECUTE      (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
713                                    FILE_READ_ATTRIBUTES | SYNCHRONIZE)
714
715
716 /* File attribute flags
717  */
718 #define FILE_SHARE_READ                 0x00000001L
719 #define FILE_SHARE_WRITE                0x00000002L
720 #define FILE_SHARE_DELETE               0x00000004L
721 #define FILE_ATTRIBUTE_READONLY         0x00000001L
722 #define FILE_ATTRIBUTE_HIDDEN           0x00000002L
723 #define FILE_ATTRIBUTE_SYSTEM           0x00000004L
724 #define FILE_ATTRIBUTE_LABEL            0x00000008L  /* Not in Windows API */
725 #define FILE_ATTRIBUTE_DIRECTORY        0x00000010L
726 #define FILE_ATTRIBUTE_ARCHIVE          0x00000020L
727 #define FILE_ATTRIBUTE_NORMAL           0x00000080L
728 #define FILE_ATTRIBUTE_TEMPORARY        0x00000100L
729 #define FILE_ATTRIBUTE_ATOMIC_WRITE     0x00000200L
730 #define FILE_ATTRIBUTE_XACTION_WRITE    0x00000400L
731 #define FILE_ATTRIBUTE_COMPRESSED       0x00000800L
732 #define FILE_ATTRIBUTE_OFFLINE          0x00001000L
733
734 /* File alignments (NT) */
735 #define FILE_BYTE_ALIGNMENT             0x00000000
736 #define FILE_WORD_ALIGNMENT             0x00000001
737 #define FILE_LONG_ALIGNMENT             0x00000003
738 #define FILE_QUAD_ALIGNMENT             0x00000007
739 #define FILE_OCTA_ALIGNMENT             0x0000000f
740 #define FILE_32_BYTE_ALIGNMENT          0x0000001f
741 #define FILE_64_BYTE_ALIGNMENT          0x0000003f
742 #define FILE_128_BYTE_ALIGNMENT         0x0000007f
743 #define FILE_256_BYTE_ALIGNMENT         0x000000ff
744 #define FILE_512_BYTE_ALIGNMENT         0x000001ff
745
746 /* Registry security values */
747 #define OWNER_SECURITY_INFORMATION  0x00000001
748 #define GROUP_SECURITY_INFORMATION  0x00000002
749 #define DACL_SECURITY_INFORMATION   0x00000004
750 #define SACL_SECURITY_INFORMATION   0x00000008
751
752 #endif  /* __WINE_WINNT_H */