2 * Win32 definitions for Windows NT
4 * Copyright 1996 Alexandre Julliard
15 /* Argument 1 passed to the DllEntryProc. */
16 #define DLL_PROCESS_DETACH 0 /* detach process (unload library) */
17 #define DLL_PROCESS_ATTACH 1 /* attach process (load library) */
18 #define DLL_THREAD_ATTACH 2 /* attach new thread */
19 #define DLL_THREAD_DETACH 3 /* detach thread */
22 /* u.x.wProcessorArchitecture (NT) */
23 #define PROCESSOR_ARCHITECTURE_INTEL 0
24 #define PROCESSOR_ARCHITECTURE_MIPS 1
25 #define PROCESSOR_ARCHITECTURE_ALPHA 2
26 #define PROCESSOR_ARCHITECTURE_PPC 3
27 #define PROCESSOR_ARCHITECTURE_SHX 4
28 #define PROCESSOR_ARCHITECTURE_ARM 5
29 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
32 #define PROCESSOR_INTEL_386 386
33 #define PROCESSOR_INTEL_486 486
34 #define PROCESSOR_INTEL_PENTIUM 586
35 #define PROCESSOR_INTEL_860 860
36 #define PROCESSOR_MIPS_R2000 2000
37 #define PROCESSOR_MIPS_R3000 3000
38 #define PROCESSOR_MIPS_R4000 4000
39 #define PROCESSOR_ALPHA_21064 21064
40 #define PROCESSOR_PPC_601 601
41 #define PROCESSOR_PPC_603 603
42 #define PROCESSOR_PPC_604 604
43 #define PROCESSOR_PPC_620 620
44 #define PROCESSOR_HITACHI_SH3 10003
45 #define PROCESSOR_HITACHI_SH3E 10004
46 #define PROCESSOR_HITACHI_SH4 10005
47 #define PROCESSOR_MOTOROLA_821 821
48 #define PROCESSOR_SHx_SH3 103
49 #define PROCESSOR_SHx_SH4 104
50 #define PROCESSOR_STRONGARM 2577
51 #define PROCESSOR_ARM720 1824 /* 0x720 */
52 #define PROCESSOR_ARM820 2080 /* 0x820 */
53 #define PROCESSOR_ARM920 2336 /* 0x920 */
54 #define PROCESSOR_ARM_7TDMI 70001
56 #define ANYSIZE_ARRAY 1
60 #define MINSHORT 0x8000
61 #define MAXSHORT 0x7fff
62 #define MINLONG 0x80000000
63 #define MAXLONG 0x7fffffff
65 #define MAXWORD 0xffff
66 #define MAXDWORD 0xffffffff
68 #define FIELD_OFFSET(type, field) \
69 ((LONG)(INT)&(((type *)0)->field))
71 #define CONTAINING_RECORD(address, type, field) \
72 ((type *)((PCHAR)(address) - (PCHAR)(&((type *)0)->field)))
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. */
82 typedef LPWSTR LPTSTR
;
83 typedef LPCWSTR LPCTSTR
;
84 #define __TEXT(string) L##string /*probably wrong */
87 typedef LPCSTR LPCTSTR
;
88 #define __TEXT(string) string
91 #define TEXT(quote) __TEXT(quote)
94 typedef BOOLEAN
*PBOOLEAN
;
96 typedef struct _LIST_ENTRY
{
97 struct _LIST_ENTRY
*Flink
;
98 struct _LIST_ENTRY
*Blink
;
99 } LIST_ENTRY
, *PLIST_ENTRY
;
101 typedef struct _SINGLE_LIST_ENTRY
{
102 struct _SINGLE_LIST_ENTRY
*Next
;
103 } SINGLE_LIST_ENTRY
, *PSINGLE_LIST_ENTRY
;
107 #define HEAP_NO_SERIALIZE 0x00000001
108 #define HEAP_GROWABLE 0x00000002
109 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
110 #define HEAP_ZERO_MEMORY 0x00000008
111 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
112 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
113 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
114 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
115 #define HEAP_CREATE_ALIGN_16 0x00010000
116 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
117 #define HEAP_WINE_SEGPTR 0x01000000 /* Not a Win32 flag */
118 #define HEAP_WINE_CODESEG 0x02000000 /* Not a Win32 flag */
119 #define HEAP_WINE_CODE16SEG 0x04000000 /* Not a Win32 flag */
121 /* Processor feature flags. */
122 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
123 #define PF_FLOATING_POINT_EMULATED 1
124 #define PF_COMPARE_EXCHANGE_DOUBLE 2
125 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
126 #define PF_PPC_MOVEMEM_64BIT_OK 4
127 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
130 /* The Win32 register context */
132 /* CONTEXT is the CPU-dependent context; it should be used */
133 /* wherever a platform-specific context is needed (e.g. exception */
134 /* handling, Win32 register functions). */
136 /* CONTEXT86 is the i386-specific context; it should be used */
137 /* wherever only a 386 context makes sense (e.g. DOS interrupts, */
138 /* Win16 register functions), so that this code can be compiled */
139 /* on all platforms. */
141 #define SIZE_OF_80387_REGISTERS 80
143 typedef struct _FLOATING_SAVE_AREA
152 BYTE RegisterArea
[SIZE_OF_80387_REGISTERS
];
154 } FLOATING_SAVE_AREA
, *PFLOATING_SAVE_AREA
;
156 typedef struct _CONTEXT86
160 /* These are selected by CONTEXT_DEBUG_REGISTERS */
168 /* These are selected by CONTEXT_FLOATING_POINT */
169 FLOATING_SAVE_AREA FloatSave
;
171 /* These are selected by CONTEXT_SEGMENTS */
177 /* These are selected by CONTEXT_INTEGER */
185 /* These are selected by CONTEXT_CONTROL */
194 #define CONTEXT_X86 0x00010000
195 #define CONTEXT_i386 CONTEXT_X86
196 #define CONTEXT_i486 CONTEXT_X86
198 #define CONTEXT86_CONTROL (CONTEXT_i386 | 0x0001) /* SS:SP, CS:IP, FLAGS, BP */
199 #define CONTEXT86_INTEGER (CONTEXT_i386 | 0x0002) /* AX, BX, CX, DX, SI, DI */
200 #define CONTEXT86_SEGMENTS (CONTEXT_i386 | 0x0004) /* DS, ES, FS, GS */
201 #define CONTEXT86_FLOATING_POINT (CONTEXT_i386 | 0x0008L) /* 387 state */
202 #define CONTEXT86_DEBUG_REGISTERS (CONTEXT_i386 | 0x0010L) /* DB 0-3,6,7 */
203 #define CONTEXT86_FULL (CONTEXT86_CONTROL | CONTEXT86_INTEGER | CONTEXT86_SEGMENTS)
205 /* i386 context definitions */
208 #define CONTEXT_CONTROL CONTEXT86_CONTROL
209 #define CONTEXT_INTEGER CONTEXT86_INTEGER
210 #define CONTEXT_SEGMENTS CONTEXT86_SEGMENTS
211 #define CONTEXT_FLOATING_POINT CONTEXT86_FLOATING_POINT
212 #define CONTEXT_DEBUG_REGISTERS CONTEXT86_DEBUG_REGISTERS
213 #define CONTEXT_FULL CONTEXT86_FULL
215 typedef CONTEXT86 CONTEXT
;
217 #endif /* __i386__ */
219 /* Alpha context definitions */
222 #define CONTEXT_ALPHA 0x00020000
224 #define CONTEXT_CONTROL (CONTEXT_ALPHA | 0x00000001L)
225 #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA | 0x00000002L)
226 #define CONTEXT_INTEGER (CONTEXT_ALPHA | 0x00000004L)
227 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
229 typedef struct _CONTEXT
231 /* selected by CONTEXT_FLOATING_POINT */
265 /* selected by CONTEXT_INTEGER */
299 /* selected by CONTEXT_FLOATING_POINT */
303 /* selected by CONTEXT_CONTROL */
310 #define _QUAD_PSR_OFFSET HighSoftFpcr
311 #define _QUAD_FLAGS_OFFSET HighFir
315 /* Mips context definitions */
318 #define CONTEXT_R4000 0x00010000
320 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001)
321 #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002)
322 #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004)
324 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
326 typedef struct _CONTEXT
329 /* These are selected by CONTEXT_FLOATING_POINT */
363 /* These are selected by CONTEXT_INTEGER */
399 /* These are selected by CONTEXT_FLOATING_POINT */
402 /* These are selected by CONTEXT_CONTROL */
412 /* PowerPC context definitions */
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)
423 /* These are selected by CONTEXT_FLOATING_POINT */
458 /* These are selected by CONTEXT_INTEGER */
495 /* These are selected by CONTEXT_CONTROL */
504 /* These are selected by CONTEXT_DEBUG_REGISTERS */
515 typedef struct _STACK_FRAME_HEADER
532 } STACK_FRAME_HEADER
,*PSTACK_FRAME_HEADER
;
536 #if !defined(CONTEXT_FULL) && !defined(RC_INVOKED)
537 #error You need to define a CONTEXT for your CPU
540 typedef CONTEXT
*PCONTEXT
;
541 typedef HANDLE
*PHANDLE
;
545 /* Macros for easier access to i386 context registers */
547 #define EAX_reg(context) ((context)->Eax)
548 #define EBX_reg(context) ((context)->Ebx)
549 #define ECX_reg(context) ((context)->Ecx)
550 #define EDX_reg(context) ((context)->Edx)
551 #define ESI_reg(context) ((context)->Esi)
552 #define EDI_reg(context) ((context)->Edi)
553 #define EBP_reg(context) ((context)->Ebp)
555 #define CS_reg(context) ((context)->SegCs)
556 #define DS_reg(context) ((context)->SegDs)
557 #define ES_reg(context) ((context)->SegEs)
558 #define FS_reg(context) ((context)->SegFs)
559 #define GS_reg(context) ((context)->SegGs)
560 #define SS_reg(context) ((context)->SegSs)
562 #define EFL_reg(context) ((context)->EFlags)
563 #define EIP_reg(context) ((context)->Eip)
564 #define ESP_reg(context) ((context)->Esp)
566 #define AX_reg(context) (*(WORD*)&EAX_reg(context))
567 #define BX_reg(context) (*(WORD*)&EBX_reg(context))
568 #define CX_reg(context) (*(WORD*)&ECX_reg(context))
569 #define DX_reg(context) (*(WORD*)&EDX_reg(context))
570 #define SI_reg(context) (*(WORD*)&ESI_reg(context))
571 #define DI_reg(context) (*(WORD*)&EDI_reg(context))
572 #define BP_reg(context) (*(WORD*)&EBP_reg(context))
574 #define AL_reg(context) (*(BYTE*)&EAX_reg(context))
575 #define AH_reg(context) (*((BYTE*)&EAX_reg(context)+1))
576 #define BL_reg(context) (*(BYTE*)&EBX_reg(context))
577 #define BH_reg(context) (*((BYTE*)&EBX_reg(context)+1))
578 #define CL_reg(context) (*(BYTE*)&ECX_reg(context))
579 #define CH_reg(context) (*((BYTE*)&ECX_reg(context)+1))
580 #define DL_reg(context) (*(BYTE*)&EDX_reg(context))
581 #define DH_reg(context) (*((BYTE*)&EDX_reg(context)+1))
583 #define SET_CFLAG(context) (EFL_reg(context) |= 0x0001)
584 #define RESET_CFLAG(context) (EFL_reg(context) &= ~0x0001)
585 #define SET_ZFLAG(context) (EFL_reg(context) |= 0x0040)
586 #define RESET_ZFLAG(context) (EFL_reg(context) &= ~0x0040)
588 #define ISV86(context) (EFL_reg(context) & 0x00020000)
589 #define V86BASE(context) ((context)->Dr7) /* ugly */
591 #endif /* __WINE__ */
597 #define STATUS_SUCCESS 0x00000000
598 #define STATUS_WAIT_0 0x00000000
599 #define STATUS_ABANDONED_WAIT_0 0x00000080
600 #define STATUS_USER_APC 0x000000C0
601 #define STATUS_TIMEOUT 0x00000102
602 #define STATUS_PENDING 0x00000103
603 #define STATUS_GUARD_PAGE_VIOLATION 0x80000001
604 #define STATUS_DATATYPE_MISALIGNMENT 0x80000002
605 #define STATUS_BREAKPOINT 0x80000003
606 #define STATUS_SINGLE_STEP 0x80000004
607 #define STATUS_BUFFER_OVERFLOW 0x80000005
608 #define STATUS_UNSUCCESSFUL 0xC0000001
609 #define STATUS_ACCESS_VIOLATION 0xC0000005
610 #define STATUS_IN_PAGE_ERROR 0xC0000006
611 #define STATUS_INVALID_PARAMETER 0xC000000D
612 #define STATUS_NO_MEMORY 0xC0000017
613 #define STATUS_CONFLICTING_ADDRESSES 0xC0000018
614 #define STATUS_ILLEGAL_INSTRUCTION 0xC000001D
615 #define STATUS_BUFFER_TOO_SMALL 0xC0000023
616 #define STATUS_NONCONTINUABLE_EXCEPTION 0xC0000025
617 #define STATUS_INVALID_DISPOSITION 0xC0000026
618 #define STATUS_UNWIND 0xC0000027
619 #define STATUS_BAD_STACK 0xC0000028
620 #define STATUS_INVALID_UNWIND_TARGET 0xC0000029
621 #define STATUS_UNKNOWN_REVISION 0xC0000058
622 #define STATUS_INVALID_SECURITY_DESCR 0xC0000079
623 #define STATUS_ARRAY_BOUNDS_EXCEEDED 0xC000008C
624 #define STATUS_FLOAT_DENORMAL_OPERAND 0xC000008D
625 #define STATUS_FLOAT_DIVIDE_BY_ZERO 0xC000008E
626 #define STATUS_FLOAT_INEXACT_RESULT 0xC000008F
627 #define STATUS_FLOAT_INVALID_OPERATION 0xC0000090
628 #define STATUS_FLOAT_OVERFLOW 0xC0000091
629 #define STATUS_FLOAT_STACK_CHECK 0xC0000092
630 #define STATUS_FLOAT_UNDERFLOW 0xC0000093
631 #define STATUS_INTEGER_DIVIDE_BY_ZERO 0xC0000094
632 #define STATUS_INTEGER_OVERFLOW 0xC0000095
633 #define STATUS_PRIVILEGED_INSTRUCTION 0xC0000096
634 #define STATUS_INVALID_PARAMETER_2 0xC00000F0
635 #define STATUS_STACK_OVERFLOW 0xC00000FD
636 #define STATUS_CONTROL_C_EXIT 0xC000013A
638 #define MAXIMUM_WAIT_OBJECTS 64
639 #define MAXIMUM_SUSPEND_COUNT 127
643 * Return values from the actual exception handlers
646 #define ExceptionContinueExecution 0
647 #define ExceptionContinueSearch 1
648 #define ExceptionNestedException 2
649 #define ExceptionCollidedUnwind 3
652 * Return values from filters in except() and from UnhandledExceptionFilter
655 #define EXCEPTION_EXECUTE_HANDLER 1
656 #define EXCEPTION_CONTINUE_SEARCH 0
657 #define EXCEPTION_CONTINUE_EXECUTION -1
660 * From OS/2 2.0 exception handling
661 * Win32 seems to use the same flags as ExceptionFlags in an EXCEPTION_RECORD
664 #define EH_NONCONTINUABLE 0x01
665 #define EH_UNWINDING 0x02
666 #define EH_EXIT_UNWIND 0x04
667 #define EH_STACK_INVALID 0x08
668 #define EH_NESTED_CALL 0x10
670 #define EXCEPTION_CONTINUABLE 0
671 #define EXCEPTION_NONCONTINUABLE EH_NONCONTINUABLE
674 * The exception record used by Win32 to give additional information
675 * about exception to exception handlers.
678 #define EXCEPTION_MAXIMUM_PARAMETERS 15
680 typedef struct __EXCEPTION_RECORD
683 DWORD ExceptionFlags
;
684 struct __EXCEPTION_RECORD
*ExceptionRecord
;
686 LPVOID ExceptionAddress
;
687 DWORD NumberParameters
;
688 DWORD ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
689 } EXCEPTION_RECORD
, *PEXCEPTION_RECORD
;
692 * The exception pointers structure passed to exception filters
693 * in except() and the UnhandledExceptionFilter().
696 typedef struct _EXCEPTION_POINTERS
698 PEXCEPTION_RECORD ExceptionRecord
;
699 PCONTEXT ContextRecord
;
700 } EXCEPTION_POINTERS
, *PEXCEPTION_POINTERS
;
704 * The exception frame, used for registering exception handlers
705 * Win32 cares only about this, but compilers generally emit
706 * larger exception frames for their own use.
709 struct __EXCEPTION_FRAME
;
711 typedef DWORD (*PEXCEPTION_HANDLER
)(PEXCEPTION_RECORD
,struct __EXCEPTION_FRAME
*,
712 PCONTEXT
,struct __EXCEPTION_FRAME
**);
714 typedef struct __EXCEPTION_FRAME
716 struct __EXCEPTION_FRAME
*Prev
;
717 PEXCEPTION_HANDLER Handler
;
718 } EXCEPTION_FRAME
, *PEXCEPTION_FRAME
;
723 * function pointer to a exception filter
726 typedef LONG (CALLBACK
*PTOP_LEVEL_EXCEPTION_FILTER
)(PEXCEPTION_POINTERS ExceptionInfo
);
727 typedef PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER
;
729 DWORD WINAPI
UnhandledExceptionFilter( PEXCEPTION_POINTERS epointers
);
730 LPTOP_LEVEL_EXCEPTION_FILTER
731 WINAPI
SetUnhandledExceptionFilter( LPTOP_LEVEL_EXCEPTION_FILTER filter
);
733 /* status values for ContinueDebugEvent */
734 #define DBG_CONTINUE 0x00010002
735 #define DBG_TERMINATE_THREAD 0x40010003
736 #define DBG_TERMINATE_PROCESS 0x40010004
737 #define DBG_CONTROL_C 0x40010005
738 #define DBG_CONTROL_BREAK 0x40010008
739 #define DBG_EXCEPTION_NOT_HANDLED 0x80010001
745 #if defined(__i386__)
746 static inline struct _TEB
* WINE_UNUSED
__get_teb(void)
749 __asm__(".byte 0x64\n\tmovl (0x18),%0" : "=r" (teb
));
752 #elif defined(HAVE__LWP_CREATE)
753 extern void *_lwp_getprivate(void);
754 static inline struct _TEB
* WINE_UNUSED
__get_teb(void)
756 return (struct _TEB
*)_lwp_getprivate();
759 #error NtCurrentTeb() not defined for this architecture!
762 #define NtCurrentTeb() __get_teb()
765 extern struct _TEB
* WINAPI
NtCurrentTeb(void);
769 * Here follows typedefs for security and tokens.
773 * First a constant for the following typdefs.
776 #define ANYSIZE_ARRAY 1
778 /* FIXME: Orphan. What does it point to? */
779 typedef PVOID PACCESS_TOKEN
;
782 * TOKEN_INFORMATION_CLASS
785 typedef enum _TOKEN_INFORMATION_CLASS
{
794 TokenImpersonationLevel
,
796 } TOKEN_INFORMATION_CLASS
;
798 #ifndef _SECURITY_DEFINED
799 #define _SECURITY_DEFINED
801 #include "pshpack1.h"
803 typedef DWORD ACCESS_MASK
, *PACCESS_MASK
;
805 typedef struct _GENERIC_MAPPING
{
806 ACCESS_MASK GenericRead
;
807 ACCESS_MASK GenericWrite
;
808 ACCESS_MASK GenericExecute
;
809 ACCESS_MASK GenericAll
;
810 } GENERIC_MAPPING
, *PGENERIC_MAPPING
;
812 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
813 #define SID_IDENTIFIER_AUTHORITY_DEFINED
816 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
,*LPSID_IDENTIFIER_AUTHORITY
;
817 #endif /* !defined(SID_IDENTIFIER_AUTHORITY_DEFINED) */
821 typedef struct _SID
{
823 BYTE SubAuthorityCount
;
824 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
825 DWORD SubAuthority
[1];
827 #endif /* !defined(SID_DEFINED) */
829 #define SID_REVISION (1) /* Current revision */
830 #define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
831 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
838 typedef struct _ACL
{
846 /* SECURITY_DESCRIPTOR */
847 #define SECURITY_DESCRIPTOR_REVISION 1
848 #define SECURITY_DESCRIPTOR_REVISION1 1
851 #define SE_OWNER_DEFAULTED 0x0001
852 #define SE_GROUP_DEFAULTED 0x0002
853 #define SE_DACL_PRESENT 0x0004
854 #define SE_DACL_DEFAULTED 0x0008
855 #define SE_SACL_PRESENT 0x0010
856 #define SE_SACL_DEFAULTED 0x0020
857 #define SE_SELF_RELATIVE 0x8000
859 typedef DWORD SECURITY_INFORMATION
, *PSECURITY_INFORMATION
;
860 typedef WORD SECURITY_DESCRIPTOR_CONTROL
, *PSECURITY_DESCRIPTOR_CONTROL
;
862 /* The security descriptor structure */
866 SECURITY_DESCRIPTOR_CONTROL Control
;
871 } SECURITY_DESCRIPTOR
, *PSECURITY_DESCRIPTOR
;
873 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
877 #endif /* _SECURITY_DEFINED */
879 #include "pshpack1.h"
885 typedef struct _SID_AND_ATTRIBUTES
{
888 } SID_AND_ATTRIBUTES
;
894 typedef struct _TOKEN_USER
{
895 SID_AND_ATTRIBUTES User
;
902 typedef struct _TOKEN_GROUPS
{
904 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
908 * LUID_AND_ATTRIBUTES
911 typedef union _LARGE_INTEGER
{
917 } LARGE_INTEGER
, *LPLARGE_INTEGER
, *PLARGE_INTEGER
;
919 typedef union _ULARGE_INTEGER
{
925 } ULARGE_INTEGER
, *LPULARGE_INTEGER
, *PULARGE_INTEGER
;
928 * Locally Unique Identifier
931 typedef LARGE_INTEGER LUID
,*PLUID
;
933 typedef struct _LUID_AND_ATTRIBUTES
{
936 } LUID_AND_ATTRIBUTES
;
942 typedef struct _PRIVILEGE_SET
{
943 DWORD PrivilegeCount
;
945 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
946 } PRIVILEGE_SET
, *PPRIVILEGE_SET
;
952 typedef struct _TOKEN_PRIVILEGES
{
953 DWORD PrivilegeCount
;
954 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
955 } TOKEN_PRIVILEGES
, *PTOKEN_PRIVILEGES
;
961 typedef struct _TOKEN_OWNER
{
966 * TOKEN_PRIMARY_GROUP
969 typedef struct _TOKEN_PRIMARY_GROUP
{
971 } TOKEN_PRIMARY_GROUP
;
978 typedef struct _TOKEN_DEFAULT_DACL
{
980 } TOKEN_DEFAULT_DACL
;
986 typedef struct _TOKEN_SOURCE
{
988 LUID SourceIdentifier
;
995 typedef enum tagTOKEN_TYPE
{
1001 * SECURITY_IMPERSONATION_LEVEL
1004 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
1006 SecurityIdentification
,
1007 SecurityImpersonation
,
1009 } SECURITY_IMPERSONATION_LEVEL
, *PSECURITY_IMPERSONATION_LEVEL
;
1012 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,
1013 * PSECURITY_CONTEXT_TRACKING_MODE
;
1015 * Quality of Service
1018 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
1020 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
1021 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
1023 } SECURITY_QUALITY_OF_SERVICE
, *PSECURITY_QUALITY_OF_SERVICE
;
1029 typedef struct _TOKEN_STATISTICS
{
1031 LUID AuthenticationId
;
1032 LARGE_INTEGER ExpirationTime
;
1033 TOKEN_TYPE TokenType
;
1034 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
1035 DWORD DynamicCharged
;
1036 DWORD DynamicAvailable
;
1038 DWORD PrivilegeCount
;
1046 #define ACL_REVISION 2
1048 #define ACL_REVISION1 1
1049 #define ACL_REVISION2 2
1051 /* ACEs, directly starting after an ACL */
1052 typedef struct _ACE_HEADER
{
1056 } ACE_HEADER
,*PACE_HEADER
;
1059 #define ACCESS_ALLOWED_ACE_TYPE 0
1060 #define ACCESS_DENIED_ACE_TYPE 1
1061 #define SYSTEM_AUDIT_ACE_TYPE 2
1062 #define SYSTEM_ALARM_ACE_TYPE 3
1064 /* inherit AceFlags */
1065 #define OBJECT_INHERIT_ACE 0x01
1066 #define CONTAINER_INHERIT_ACE 0x02
1067 #define NO_PROPAGATE_INHERIT_ACE 0x04
1068 #define INHERIT_ONLY_ACE 0x08
1069 #define VALID_INHERIT_FLAGS 0x0F
1071 /* AceFlags mask for what events we (should) audit */
1072 #define SUCCESSFUL_ACCESS_ACE_FLAG 0x40
1073 #define FAILED_ACCESS_ACE_FLAG 0x80
1075 /* different ACEs depending on AceType
1076 * SidStart marks the begin of a SID
1077 * so the thing finally looks like this:
1082 typedef struct _ACCESS_ALLOWED_ACE
{
1086 } ACCESS_ALLOWED_ACE
,*PACCESS_ALLOWED_ACE
;
1088 typedef struct _ACCESS_DENIED_ACE
{
1092 } ACCESS_DENIED_ACE
,*PACCESS_DENIED_ACE
;
1094 typedef struct _SYSTEM_AUDIT_ACE
{
1098 } SYSTEM_AUDIT_ACE
,*PSYSTEM_AUDIT_ACE
;
1100 typedef struct _SYSTEM_ALARM_ACE
{
1104 } SYSTEM_ALARM_ACE
,*PSYSTEM_ALARM_ACE
;
1106 typedef enum tagSID_NAME_USE
{
1111 SidTypeWellKnownGroup
,
1112 SidTypeDeletedAccount
,
1115 } SID_NAME_USE
,*PSID_NAME_USE
;
1119 #define DELETE 0x00010000
1120 #define READ_CONTROL 0x00020000
1121 #define WRITE_DAC 0x00040000
1122 #define WRITE_OWNER 0x00080000
1123 #define SYNCHRONIZE 0x00100000
1124 #define STANDARD_RIGHTS_REQUIRED 0x000f0000
1126 #define STANDARD_RIGHTS_READ READ_CONTROL
1127 #define STANDARD_RIGHTS_WRITE READ_CONTROL
1128 #define STANDARD_RIGHTS_EXECUTE READ_CONTROL
1130 #define STANDARD_RIGHTS_ALL 0x001f0000
1132 #define SPECIFIC_RIGHTS_ALL 0x0000ffff
1134 #define GENERIC_READ 0x80000000
1135 #define GENERIC_WRITE 0x40000000
1136 #define GENERIC_EXECUTE 0x20000000
1137 #define GENERIC_ALL 0x10000000
1139 #define EVENT_MODIFY_STATE 0x0002
1140 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1142 #define SEMAPHORE_MODIFY_STATE 0x0002
1143 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
1145 #define MUTEX_MODIFY_STATE 0x0001
1146 #define MUTEX_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1)
1148 #define PROCESS_TERMINATE 0x0001
1149 #define PROCESS_CREATE_THREAD 0x0002
1150 #define PROCESS_VM_OPERATION 0x0008
1151 #define PROCESS_VM_READ 0x0010
1152 #define PROCESS_VM_WRITE 0x0020
1153 #define PROCESS_DUP_HANDLE 0x0040
1154 #define PROCESS_CREATE_PROCESS 0x0080
1155 #define PROCESS_SET_QUOTA 0x0100
1156 #define PROCESS_SET_INFORMATION 0x0200
1157 #define PROCESS_QUERY_INFORMATION 0x0400
1158 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xfff)
1160 #define THREAD_TERMINATE 0x0001
1161 #define THREAD_SUSPEND_RESUME 0x0002
1162 #define THREAD_GET_CONTEXT 0x0008
1163 #define THREAD_SET_CONTEXT 0x0010
1164 #define THREAD_SET_INFORMATION 0x0020
1165 #define THREAD_QUERY_INFORMATION 0x0040
1166 #define THREAD_SET_THREAD_TOKEN 0x0080
1167 #define THREAD_IMPERSONATE 0x0100
1168 #define THREAD_DIRECT_IMPERSONATION 0x0200
1169 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3ff)
1171 #define THREAD_BASE_PRIORITY_LOWRT 15
1172 #define THREAD_BASE_PRIORITY_MAX 2
1173 #define THREAD_BASE_PRIORITY_MIN -2
1174 #define THREAD_BASE_PRIORITY_IDLE -15
1176 #define FILE_READ_DATA 0x0001 /* file & pipe */
1177 #define FILE_LIST_DIRECTORY 0x0001 /* directory */
1178 #define FILE_WRITE_DATA 0x0002 /* file & pipe */
1179 #define FILE_ADD_FILE 0x0002 /* directory */
1180 #define FILE_APPEND_DATA 0x0004 /* file */
1181 #define FILE_ADD_SUBDIRECTORY 0x0004 /* directory */
1182 #define FILE_CREATE_PIPE_INSTANCE 0x0004 /* named pipe */
1183 #define FILE_READ_EA 0x0008 /* file & directory */
1184 #define FILE_READ_PROPERTIES FILE_READ_EA
1185 #define FILE_WRITE_EA 0x0010 /* file & directory */
1186 #define FILE_WRITE_PROPERTIES FILE_WRITE_EA
1187 #define FILE_EXECUTE 0x0020 /* file */
1188 #define FILE_TRAVERSE 0x0020 /* directory */
1189 #define FILE_DELETE_CHILD 0x0040 /* directory */
1190 #define FILE_READ_ATTRIBUTES 0x0080 /* all */
1191 #define FILE_WRITE_ATTRIBUTES 0x0100 /* all */
1192 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x1ff)
1194 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | \
1195 FILE_READ_ATTRIBUTES | FILE_READ_EA | \
1197 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | \
1198 FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | \
1199 FILE_APPEND_DATA | SYNCHRONIZE)
1200 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_EXECUTE | \
1201 FILE_READ_ATTRIBUTES | SYNCHRONIZE)
1204 /* File attribute flags
1206 #define FILE_SHARE_READ 0x00000001L
1207 #define FILE_SHARE_WRITE 0x00000002L
1208 #define FILE_SHARE_DELETE 0x00000004L
1209 #define FILE_ATTRIBUTE_READONLY 0x00000001L
1210 #define FILE_ATTRIBUTE_HIDDEN 0x00000002L
1211 #define FILE_ATTRIBUTE_SYSTEM 0x00000004L
1212 #define FILE_ATTRIBUTE_LABEL 0x00000008L /* Not in Windows API */
1213 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010L
1214 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020L
1215 #define FILE_ATTRIBUTE_NORMAL 0x00000080L
1216 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100L
1217 #define FILE_ATTRIBUTE_ATOMIC_WRITE 0x00000200L
1218 #define FILE_ATTRIBUTE_XACTION_WRITE 0x00000400L
1219 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800L
1220 #define FILE_ATTRIBUTE_OFFLINE 0x00001000L
1222 /* File alignments (NT) */
1223 #define FILE_BYTE_ALIGNMENT 0x00000000
1224 #define FILE_WORD_ALIGNMENT 0x00000001
1225 #define FILE_LONG_ALIGNMENT 0x00000003
1226 #define FILE_QUAD_ALIGNMENT 0x00000007
1227 #define FILE_OCTA_ALIGNMENT 0x0000000f
1228 #define FILE_32_BYTE_ALIGNMENT 0x0000001f
1229 #define FILE_64_BYTE_ALIGNMENT 0x0000003f
1230 #define FILE_128_BYTE_ALIGNMENT 0x0000007f
1231 #define FILE_256_BYTE_ALIGNMENT 0x000000ff
1232 #define FILE_512_BYTE_ALIGNMENT 0x000001ff
1234 /* Registry security values */
1235 #define OWNER_SECURITY_INFORMATION 0x00000001
1236 #define GROUP_SECURITY_INFORMATION 0x00000002
1237 #define DACL_SECURITY_INFORMATION 0x00000004
1238 #define SACL_SECURITY_INFORMATION 0x00000008
1240 #include "poppack.h"
1242 #endif /* __WINE_WINNT_H */