Implemented and fixed several ACL and SD functions.
[reactos.git] / reactos / include / ntos / security.h
1 #ifndef __INCLUDE_SECURITY_H
2 #define __INCLUDE_SECURITY_H
3
4 #include <ntos/ntdef.h>
5 #include <ntos/types.h>
6
7 /* SID Auhority */
8 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
9 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
10 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
11 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
12 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
13 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
14
15 /* SID */
16 #define SECURITY_NULL_RID (0L)
17 #define SECURITY_WORLD_RID (0L)
18 #define SECURITY_LOCAL_RID (0L)
19 #define SECURITY_CREATOR_OWNER_RID (0L)
20 #define SECURITY_CREATOR_GROUP_RID (0x1L)
21 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x2L)
22 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x3L)
23 #define SECURITY_DIALUP_RID (0x1L)
24 #define SECURITY_NETWORK_RID (0x2L)
25 #define SECURITY_BATCH_RID (0x3L)
26 #define SECURITY_INTERACTIVE_RID (0x4L)
27 #define SECURITY_LOGON_IDS_RID (0x5L)
28 #define SECURITY_LOGON_IDS_RID_COUNT (0x3L)
29 #define SECURITY_SERVICE_RID (0x6L)
30 #define SECURITY_ANONYMOUS_LOGON_RID (0x7L)
31 #define SECURITY_PROXY_RID (0x8L)
32 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x9L)
33 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
34 #define SECURITY_PRINCIPAL_SELF_RID (0xAL)
35 #define SECURITY_AUTHENTICATED_USER_RID (0xBL)
36 #define SECURITY_RESTRICTED_CODE_RID (0xCL)
37 #define SECURITY_LOCAL_SYSTEM_RID (0x12L)
38 #define SECURITY_NT_NON_UNIQUE_RID (0x15L)
39 #define SECURITY_BUILTIN_DOMAIN_RID (0x20L)
40 #define DOMAIN_USER_RID_ADMIN (0x1F4L)
41 #define DOMAIN_USER_RID_GUEST (0x1F5L)
42 #define DOMAIN_GROUP_RID_ADMINS (0x200L)
43 #define DOMAIN_GROUP_RID_USERS (0x201L)
44 #define DOMAIN_ALIAS_RID_ADMINS (0x220L)
45 #define DOMAIN_ALIAS_RID_USERS (0x221L)
46 #define DOMAIN_ALIAS_RID_GUESTS (0x222L)
47 #define DOMAIN_ALIAS_RID_POWER_USERS (0x223L)
48 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x224L)
49 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x225L)
50 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x226L)
51 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x227L)
52 #define DOMAIN_ALIAS_RID_REPLICATOR (0x228L)
53
54 /* Privileges */
55 #define SE_MIN_WELL_KNOWN_PRIVILEGE (2L)
56 #define SE_CREATE_TOKEN_PRIVILEGE (2L)
57 #define SE_ASSIGNPRIMARYTOKEN_PRIVILEGE (3L)
58 #define SE_LOCK_MEMORY_PRIVILEGE (4L)
59 #define SE_INCREASE_QUOTA_PRIVILEGE (5L)
60 #define SE_UNSOLICITED_INPUT_PRIVILEGE (6L) /* unused */
61 #define SE_MACHINE_ACCOUNT_PRIVILEGE (6L)
62 #define SE_TCB_PRIVILEGE (7L)
63 #define SE_SECURITY_PRIVILEGE (8L)
64 #define SE_TAKE_OWNERSHIP_PRIVILEGE (9L)
65 #define SE_LOAD_DRIVER_PRIVILEGE (10L)
66 #define SE_SYSTEM_PROFILE_PRIVILEGE (11L)
67 #define SE_SYSTEMTIME_PRIVILEGE (12L)
68 #define SE_PROF_SINGLE_PROCESS_PRIVILEGE (13L)
69 #define SE_INC_BASE_PRIORITY_PRIVILEGE (14L)
70 #define SE_CREATE_PAGEFILE_PRIVILEGE (15L)
71 #define SE_CREATE_PERMANENT_PRIVILEGE (16L)
72 #define SE_BACKUP_PRIVILEGE (17L)
73 #define SE_RESTORE_PRIVILEGE (18L)
74 #define SE_SHUTDOWN_PRIVILEGE (19L)
75 #define SE_DEBUG_PRIVILEGE (20L)
76 #define SE_AUDIT_PRIVILEGE (21L)
77 #define SE_SYSTEM_ENVIRONMENT_PRIVILEGE (22L)
78 #define SE_CHANGE_NOTIFY_PRIVILEGE (23L)
79 #define SE_REMOTE_SHUTDOWN_PRIVILEGE (24L)
80 #define SE_MAX_WELL_KNOWN_PRIVILEGE SE_REMOTE_SHUTDOWN_PRIVILEGE
81
82 #if 0
83 /* Security descriptor control. */
84 #define SECURITY_DESCRIPTOR_REVISION (1)
85 #define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
86 #define SE_OWNER_DEFAULTED (1)
87 #define SE_GROUP_DEFAULTED (2)
88 #define SE_DACL_PRESENT (4)
89 #define SE_DACL_DEFAULTED (8)
90 #define SE_SACL_PRESENT (16)
91 #define SE_SACL_DEFAULTED (32)
92 #define SE_SELF_RELATIVE (32768)
93 #endif
94
95 /* ACCESS_MASK */
96 #define MAXIMUM_ALLOWED (0x2000000L)
97 #define GENERIC_ALL (0x10000000L)
98 #define GENERIC_EXECUTE (0x20000000L)
99
100 #define SECURITY_STATIC_TRACKING (0)
101 #define SECURITY_DYNAMIC_TRACKING (1)
102
103 /* Standard rights */
104 #define STANDARD_RIGHTS_REQUIRED (0xf0000L)
105 #define STANDARD_RIGHTS_WRITE (0x20000L)
106 #define STANDARD_RIGHTS_READ (0x20000L)
107 #define STANDARD_RIGHTS_EXECUTE (0x20000L)
108 #define STANDARD_RIGHTS_ALL (0x1f0000L)
109 #define SPECIFIC_RIGHTS_ALL (0xffffL)
110
111 /* Token rights */
112 #define TOKEN_ASSIGN_PRIMARY (0x0001L)
113 #define TOKEN_DUPLICATE (0x0002L)
114 #define TOKEN_IMPERSONATE (0x0004L)
115 #define TOKEN_QUERY (0x0008L)
116 #define TOKEN_QUERY_SOURCE (0x0010L)
117 #define TOKEN_ADJUST_PRIVILEGES (0x0020L)
118 #define TOKEN_ADJUST_GROUPS (0x0040L)
119 #define TOKEN_ADJUST_DEFAULT (0x0080L)
120
121 #define TOKEN_ALL_ACCESS (0xf00ffL)
122 #define TOKEN_READ (0x20008L)
123 #define TOKEN_WRITE (0x200e0L)
124 #define TOKEN_EXECUTE (0x20000L)
125
126 typedef BOOL SECURITY_CONTEXT_TRACKING_MODE;
127
128 typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
129
130 typedef enum _TOKEN_INFORMATION_CLASS
131 {
132 TokenUser = 1,
133 TokenGroups,
134 TokenPrivileges,
135 TokenOwner,
136 TokenPrimaryGroup,
137 TokenDefaultDacl,
138 TokenSource,
139 TokenType,
140 TokenImpersonationLevel,
141 TokenStatistics
142 } TOKEN_INFORMATION_CLASS;
143
144 typedef ULONG SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
145
146 #define SecurityAnonymous ((SECURITY_IMPERSONATION_LEVEL)1)
147 #define SecurityIdentification ((SECURITY_IMPERSONATION_LEVEL)2)
148 #define SecurityImpersonation ((SECURITY_IMPERSONATION_LEVEL)3)
149 #define SecurityDelegation ((SECURITY_IMPERSONATION_LEVEL)4)
150
151 typedef ULONG TOKEN_TYPE, *PTOKEN_TYPE;
152
153 #define TokenPrimary ((TOKEN_TYPE)1)
154 #define TokenImpersonation ((TOKEN_TYPE)2)
155
156 //typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
157
158 //#define SECURITY_DYNAMIC_TRACKING (TRUE)
159 //#define SECURITY_STATIC_TRACKING (FALSE)
160
161 typedef ULONG ACCESS_MASK, *PACCESS_MASK;
162 typedef ULONG ACCESS_MODE, *PACCESS_MODE;
163
164 typedef struct _SECURITY_QUALITY_OF_SERVICE
165 {
166 ULONG Length;
167 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
168 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
169 BOOLEAN EffectiveOnly;
170 } SECURITY_QUALITY_OF_SERVICE;
171
172 typedef SECURITY_QUALITY_OF_SERVICE* PSECURITY_QUALITY_OF_SERVICE;
173
174 typedef struct _ACE_HEADER
175 {
176 CHAR AceType;
177 CHAR AceFlags;
178 USHORT AceSize;
179 ACCESS_MASK AccessMask;
180 } ACE_HEADER, *PACE_HEADER;
181
182 typedef struct
183 {
184 ACE_HEADER Header;
185 } ACE, *PACE;
186
187 typedef struct _SID_IDENTIFIER_AUTHORITY
188 {
189 BYTE Value[6];
190 } SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
191
192 typedef struct _SID
193 {
194 UCHAR Revision;
195 UCHAR SubAuthorityCount;
196 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
197 ULONG SubAuthority[1];
198 } SID, *PSID;
199
200 typedef struct _ACL
201 {
202 UCHAR AclRevision;
203 UCHAR Sbz1;
204 USHORT AclSize;
205 USHORT AceCount;
206 USHORT Sbz2;
207 } ACL, *PACL;
208
209 typedef struct _ACL_REVISION_INFORMATION
210 {
211 ULONG AclRevision;
212 } ACL_REVISION_INFORMATION, *PACL_REVISION_INFORMATION;
213
214 typedef struct _ACL_SIZE_INFORMATION
215 {
216 ULONG AceCount;
217 ULONG AclBytesInUse;
218 ULONG AclBytesFree;
219 } ACL_SIZE_INFORMATION, *PACL_SIZE_INFORMATION;
220
221 typedef enum _ACL_INFORMATION_CLASS
222 {
223 AclRevisionInformation = 1,
224 AclSizeInformation
225 } ACL_INFORMATION_CLASS;
226
227 typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
228
229 typedef struct _SECURITY_DESCRIPTOR_CONTEXT
230 {
231 } SECURITY_DESCRIPTOR_CONTEXT, *PSECURITY_DESCRIPTOR_CONTEXT;
232
233 typedef LARGE_INTEGER LUID, *PLUID;
234
235 typedef struct _SECURITY_DESCRIPTOR
236 {
237 UCHAR Revision;
238 UCHAR Sbz1;
239 SECURITY_DESCRIPTOR_CONTROL Control;
240 PSID Owner;
241 PSID Group;
242 PACL Sacl;
243 PACL Dacl;
244 } SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
245
246 typedef struct _LUID_AND_ATTRIBUTES
247 {
248 LUID Luid;
249 DWORD Attributes;
250 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
251
252 typedef struct _TOKEN_SOURCE
253 {
254 CHAR SourceName[8];
255 LUID SourceIdentifier;
256 } TOKEN_SOURCE, *PTOKEN_SOURCE;
257
258 typedef struct _TOKEN_CONTROL
259 {
260 LUID TokenId;
261 LUID AuthenticationId;
262 LUID ModifiedId;
263 TOKEN_SOURCE TokenSource;
264 } TOKEN_CONTROL, *PTOKEN_CONTROL;
265
266 typedef struct _SID_AND_ATTRIBUTES
267 {
268 PSID Sid;
269 DWORD Attributes;
270 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
271
272 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
273 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
274
275 typedef struct _TOKEN_USER
276 {
277 SID_AND_ATTRIBUTES User;
278 } TOKEN_USER, *PTOKEN_USER;
279
280 typedef struct _TOKEN_PRIMARY_GROUP
281 {
282 PSID PrimaryGroup;
283 } TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
284
285 typedef struct _TOKEN_GROUPS
286 {
287 DWORD GroupCount;
288 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
289 } TOKEN_GROUPS, *PTOKEN_GROUPS, *LPTOKEN_GROUPS;
290
291 typedef struct _TOKEN_PRIVILEGES
292 {
293 DWORD PrivilegeCount;
294 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
295 } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES, *LPTOKEN_PRIVILEGES;
296
297 typedef struct _TOKEN_OWNER
298 {
299 PSID Owner;
300 } TOKEN_OWNER, *PTOKEN_OWNER;
301
302 typedef struct _TOKEN_DEFAULT_DACL
303 {
304 PACL DefaultDacl;
305 } TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
306
307 typedef struct _TOKEN_STATISTICS
308 {
309 LUID TokenId;
310 LUID AuthenticationId;
311 LARGE_INTEGER ExpirationTime;
312 TOKEN_TYPE TokenType;
313 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
314 DWORD DynamicCharged;
315 DWORD DynamicAvailable;
316 DWORD GroupCount;
317 DWORD PrivilegeCount;
318 LUID ModifiedId;
319 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
320
321 typedef struct _GENERIC_MAPPING
322 {
323 ACCESS_MASK GenericRead;
324 ACCESS_MASK GenericWrite;
325 ACCESS_MASK GenericExecute;
326 ACCESS_MASK GenericAll;
327 } GENERIC_MAPPING, *PGENERIC_MAPPING;
328
329 typedef struct _PRIVILEGE_SET
330 {
331 DWORD PrivilegeCount;
332 DWORD Control;
333 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
334 } PRIVILEGE_SET, *PPRIVILEGE_SET, *LPPRIVILEGE_SET;
335
336 typedef struct _SECURITY_ATTRIBUTES
337 {
338 DWORD nLength;
339 LPVOID lpSecurityDescriptor;
340 BOOL bInheritHandle;
341 } SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
342
343
344 #endif /* __INCLUDE_SECURITY_H */