Release 980301
[wine] / include / ntdll.h
1 #ifndef __WINE_NTDLL_H
2 #define __WINE_NTDLL_H
3 /* ntdll.h 
4  *
5  * contains NT internal defines that don't show on the Win32 API level
6  *
7  * Copyright 1997 Marcus Meissner
8  */
9
10 /* assumes windows.h already included */
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15
16 /* Security Ids of NT */
17
18 typedef struct {
19         BYTE    Value[6];
20 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
21
22 typedef struct _SID {
23         BYTE    Revision;
24         BYTE    SubAuthorityCount;
25         SID_IDENTIFIER_AUTHORITY        IdentifierAuthority;
26         DWORD   SubAuthority[1];        /* more than one */
27 } SID,*PSID,*LPSID;
28
29 #define SID_REVISION                    (1)     /* Current revision */
30 #define SID_MAX_SUB_AUTHORITIES         (15)    /* current max subauths */
31 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)     /* recommended subauths */
32
33 /* ACLs of NT */
34
35 #define ACL_REVISION    2
36
37 #define ACL_REVISION1   1
38 #define ACL_REVISION2   2
39
40 typedef struct _ACL {
41         BYTE    AclRevision;
42         BYTE    Sbz1;
43         WORD    AclSize;
44         WORD    AceCount;
45         WORD    Sbz2;
46 } ACL,*LPACL;
47
48 /* ACEs, directly starting after an ACL */
49 typedef struct _ACE_HEADER {
50         BYTE    AceType;
51         BYTE    AceFlags;
52         WORD    AceSize;
53 } ACE_HEADER,*LPACE_HEADER;
54
55 /* AceType */
56 #define ACCESS_ALLOWED_ACE_TYPE         0
57 #define ACCESS_DENIED_ACE_TYPE          1
58 #define SYSTEM_AUDIT_ACE_TYPE           2
59 #define SYSTEM_ALARM_ACE_TYPE           3
60
61 /* inherit AceFlags */
62 #define OBJECT_INHERIT_ACE              0x01
63 #define CONTAINER_INHERIT_ACE           0x02
64 #define NO_PROPAGATE_INHERIT_ACE        0x04
65 #define INHERIT_ONLY_ACE                0x08
66 #define VALID_INHERIT_FLAGS             0x0F
67
68 /* AceFlags mask for what events we (should) audit */
69 #define SUCCESSFUL_ACCESS_ACE_FLAG      0x40
70 #define FAILED_ACCESS_ACE_FLAG          0x80
71
72 /* different ACEs depending on AceType 
73  * SidStart marks the begin of a SID
74  * so the thing finally looks like this:
75  * 0: ACE_HEADER
76  * 4: ACCESS_MASK
77  * 8... : SID
78  */
79 typedef struct _ACCESS_ALLOWED_ACE {
80         ACE_HEADER      Header;
81         DWORD           Mask;
82         DWORD           SidStart;
83 } ACCESS_ALLOWED_ACE,*LPACCESS_ALLOWED_ACE;
84
85 typedef struct _ACCESS_DENIED_ACE {
86         ACE_HEADER      Header;
87         DWORD           Mask;
88         DWORD           SidStart;
89 } ACCESS_DENIED_ACE,*LPACCESS_DENIED_ACE;
90
91 typedef struct _SYSTEM_AUDIT_ACE {
92         ACE_HEADER      Header;
93         DWORD           Mask;
94         DWORD           SidStart;
95 } SYSTEM_AUDIT_ACE,*LPSYSTEM_AUDIT_ACE;
96
97 typedef struct _SYSTEM_ALARM_ACE {
98         ACE_HEADER      Header;
99         DWORD           Mask;
100         DWORD           SidStart;
101 } SYSTEM_ALARM_ACE,*LPSYSTEM_ALARM_ACE;
102
103 #define SECURITY_DESCRIPTOR_REVISION    1
104 #define SECURITY_DESCRIPTOR_REVISION1   1
105
106 typedef WORD SECURITY_DESCRIPTOR_CONTROL;
107
108 #define SE_OWNER_DEFAULTED      0x0001
109 #define SE_GROUP_DEFAULTED      0x0002
110 #define SE_DACL_PRESENT         0x0004
111 #define SE_DACL_DEFAULTED       0x0008
112 #define SE_SACL_PRESENT         0x0010
113 #define SE_SACL_DEFAULTED       0x0020
114 #define SE_SELF_RELATIVE        0x8000
115
116 typedef struct {
117         BYTE    Revision;
118         BYTE    Sbz1;
119         SECURITY_DESCRIPTOR_CONTROL Control;
120         LPSID   Owner;
121         LPSID   Group;
122         LPACL   Sacl;
123         LPACL   Dacl;
124 } SECURITY_DESCRIPTOR,*PSECURITY_DESCRIPTOR,*LPSECURITY_DESCRIPTOR;
125
126 typedef enum tagSID_NAME_USE {
127         SidTypeUser = 1,
128         SidTypeGroup,
129         SidTypeDomain,
130         SidTypeAlias,
131         SidTypeWellKnownGroup,
132         SidTypeDeletedAccount,
133         SidTypeInvalid,
134         SidTypeUnknown
135 } SID_NAME_USE,*PSID_NAME_USE,*LPSID_NAME_USE;
136
137 /* NT lowlevel Strings (handled by Rtl* functions in NTDLL)
138  * If they are zero terminated, Length does not include the terminating 0.
139  */
140
141 typedef struct _STRING {
142         UINT16  Length;
143         UINT16  MaximumLength;
144         LPSTR   Buffer;
145 } STRING,*LPSTRING,ANSI_STRING,*LPANSI_STRING;
146
147 typedef struct _CSTRING {
148         UINT16  Length;
149         UINT16  MaximumLength;
150         LPCSTR  Buffer;
151 } CSTRING,*LPCSTRING;
152
153 typedef struct _UNICODE_STRING {
154         UINT16  Length;         /* bytes */
155         UINT16  MaximumLength;  /* bytes */
156         LPWSTR  Buffer;
157 } UNICODE_STRING,*LPUNICODE_STRING;
158
159
160 BOOL32 WINAPI IsValidSid(LPSID);
161 BOOL32 WINAPI EqualSid(LPSID,LPSID);
162 BOOL32 WINAPI EqualPrefixSid(LPSID,LPSID);
163 DWORD  WINAPI GetSidLengthRequired(BYTE);
164 BOOL32 WINAPI AllocateAndInitializeSid(LPSID_IDENTIFIER_AUTHORITY,BYTE,DWORD,
165                                        DWORD,DWORD,DWORD,DWORD,DWORD,DWORD,
166                                        DWORD,LPSID*);
167 VOID*  WINAPI FreeSid(LPSID);
168 BOOL32 WINAPI InitializeSecurityDescriptor(SECURITY_DESCRIPTOR*,DWORD);
169 BOOL32 WINAPI InitializeSid(LPSID,LPSID_IDENTIFIER_AUTHORITY,BYTE);
170 DWORD* WINAPI GetSidSubAuthority(LPSID,DWORD);
171 BYTE * WINAPI GetSidSubAuthorityCount(LPSID);
172 DWORD  WINAPI GetLengthSid(LPSID);
173 BOOL32 WINAPI CopySid(DWORD,LPSID,LPSID);
174 BOOL32 WINAPI LookupAccountSid32A(LPCSTR,PSID,LPCSTR,LPDWORD,LPCSTR,LPDWORD,
175                                   PSID_NAME_USE);
176 BOOL32 WINAPI LookupAccountSid32W(LPCWSTR,PSID,LPCWSTR,LPDWORD,LPCWSTR,LPDWORD,
177                                   PSID_NAME_USE);
178 LPSID_IDENTIFIER_AUTHORITY WINAPI GetSidIdentifierAuthority(LPSID);
179
180 #ifdef __cplusplus
181 }
182 #endif
183
184 #endif  /* __WINE_NTDLL_H */