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