source: trunk/include/win/winnt.h@ 1036

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

Import

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