Compile advapi32 using w32api.
[reactos.git] / reactos / include / accctrl.h
1 /*
2 * Copyright (C) 2002 Alexandre Julliard
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 *
14 * You should have received a copy of the GNU Lesser General Public
15 * License along with this library; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19 #ifdef __USE_W32API
20 #include_next <accctrl.h>
21 #else
22
23 #ifndef __WINE_ACCCTRL_H
24 #define __WINE_ACCCTRL_H
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 typedef enum _SE_OBJECT_TYPE
31 {
32 SE_UNKNOWN_OBJECT_TYPE = 0,
33 SE_FILE_OBJECT,
34 SE_SERVICE,
35 SE_PRINTER,
36 SE_REGISTRY_KEY,
37 SE_LMSHARE,
38 SE_KERNEL_OBJECT,
39 SE_WINDOW_OBJECT,
40 SE_DS_OBJECT,
41 SE_DS_OBJECT_ALL,
42 SE_PROVIDER_DEFINED_OBJECT,
43 SE_WMIGUID_OBJECT,
44 SE_REGISTRY_WOW64_32KEY
45 } SE_OBJECT_TYPE;
46
47 typedef enum _TRUSTEE_TYPE
48 {
49 TRUSTEE_IS_UNKNOWN,
50 TRUSTEE_IS_USER,
51 TRUSTEE_IS_GROUP,
52 TRUSTEE_IS_DOMAIN,
53 TRUSTEE_IS_ALIAS,
54 TRUSTEE_IS_WELL_KNOWN_GROUP,
55 TRUSTEE_IS_DELETED,
56 TRUSTEE_IS_INVALID,
57 TRUSTEE_IS_COMPUTER
58 } TRUSTEE_TYPE;
59
60 typedef enum _TRUSTEE_FORM
61 {
62 TRUSTEE_IS_SID,
63 TRUSTEE_IS_NAME,
64 TRUSTEE_BAD_FORM,
65 TRUSTEE_IS_OBJECTS_AND_SID,
66 TRUSTEE_IS_OBJECTS_AND_NAME
67 } TRUSTEE_FORM;
68
69 typedef enum _MULTIPLE_TRUSTEE_OPERATION
70 {
71 NO_MULTIPLE_TRUSTEE,
72 TRUSTEE_IS_IMPERSONATE,
73 } MULTIPLE_TRUSTEE_OPERATION;
74
75 typedef struct _OBJECTS_AND_SID
76 {
77 DWORD ObjectsPresent;
78 GUID ObjectTypeGuid;
79 GUID InheritedObjectTypeGuid;
80 SID *pSid;
81 } OBJECTS_AND_SID, *POBJECTS_AND_SID;
82
83 typedef struct _OBJECTS_AND_NAME_A
84 {
85 DWORD ObjectsPresent;
86 SE_OBJECT_TYPE ObjectType;
87 LPSTR ObjectTypeName;
88 LPSTR InheritedObjectTypeName;
89 LPSTR ptstrName;
90 } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
91
92 typedef struct _OBJECTS_AND_NAME_W
93 {
94 DWORD ObjectsPresent;
95 SE_OBJECT_TYPE ObjectType;
96 LPWSTR ObjectTypeName;
97 LPWSTR InheritedObjectTypeName;
98 LPWSTR ptstrName;
99 } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
100
101 typedef_tident(OBJECTS_AND_NAME_)
102 typedef_tident(POBJECTS_AND_NAME_)
103
104 typedef struct _TRUSTEE_A
105 {
106 struct _TRUSTEE_A *pMultipleTrustee;
107 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
108 TRUSTEE_FORM TrusteeForm;
109 TRUSTEE_TYPE TrusteeType;
110 LPSTR ptstrName;
111 } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
112
113 typedef struct _TRUSTEE_W
114 {
115 struct _TRUSTEE_W *pMultipleTrustee;
116 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
117 TRUSTEE_FORM TrusteeForm;
118 TRUSTEE_TYPE TrusteeType;
119 LPWSTR ptstrName;
120 } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
121
122 typedef_tident(TRUSTEE_)
123 typedef_tident(PTRUSTEE_)
124 typedef_tident(TRUSTEE)
125 typedef_tident(PTRUSTEE)
126
127 typedef enum _ACCESS_MODE
128 {
129 NOT_USED_ACCESS = 0,
130 GRANT_ACCESS,
131 SET_ACCESS,
132 DENY_ACCESS,
133 REVOKE_ACCESS,
134 SET_AUDIT_SUCCESS,
135 SET_AUDIT_FAILURE
136 } ACCESS_MODE;
137
138 #define NO_INHERITANCE 0x0
139 #define SUB_OBJECTS_ONLY_INHERIT 0x1
140 #define SUB_CONTAINERS_ONLY_INHERIT 0x2
141 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
142 #define INHERIT_NO_PROPAGATE 0x4
143 #define INHERIT_ONLY 0x8
144 #define INHERITED_ACCESS_ENTRY 0x10
145 #define INHERITED_PARENT 0x10000000
146 #define INHERITED_GRANDPARENT 0x20000000
147
148 typedef struct _EXPLICIT_ACCESS_A
149 {
150 DWORD grfAccessPermissions;
151 ACCESS_MODE grfAccessMode;
152 DWORD grfInheritance;
153 TRUSTEE_A Trustee;
154 } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
155
156 typedef struct _EXPLICIT_ACCESS_W
157 {
158 DWORD grfAccessPermissions;
159 ACCESS_MODE grfAccessMode;
160 DWORD grfInheritance;
161 TRUSTEE_W Trustee;
162 } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
163
164 typedef_tident(EXPLICIT_ACCESS_)
165 typedef_tident(PEXPLICIT_ACCESS_)
166 typedef_tident(EXPLICIT_ACCESS)
167 typedef_tident(PEXPLICIT_ACCESS)
168
169 typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
170 typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
171
172 typedef struct _ACTRL_ACCESS_ENTRYA
173 {
174 TRUSTEE_A Trustee;
175 ULONG fAccessFlags;
176 ACCESS_RIGHTS Access;
177 ACCESS_RIGHTS ProvSpecificAccess;
178 INHERIT_FLAGS Inheritance;
179 LPSTR lpInheritProperty;
180 } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
181
182 typedef struct _ACTRL_ACCESS_ENTRYW
183 {
184 TRUSTEE_W Trustee;
185 ULONG fAccessFlags;
186 ACCESS_RIGHTS Access;
187 ACCESS_RIGHTS ProvSpecificAccess;
188 INHERIT_FLAGS Inheritance;
189 LPWSTR lpInheritProperty;
190 } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
191
192 typedef_tident(ACTRL_ACCESS_ENTRY)
193 typedef_tident(PACTRL_ACCESS_ENTRY)
194
195
196 typedef struct _ACTRL_ACCESS_ENTRY_LISTA
197 {
198 ULONG cEntries;
199 ACTRL_ACCESS_ENTRYA *pAccessList;
200 } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
201
202 typedef struct _ACTRL_ACCESS_ENTRY_LISTW
203 {
204 ULONG cEntries;
205 ACTRL_ACCESS_ENTRYW *pAccessList;
206 } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
207
208 typedef_tident(ACTRL_ACCESS_ENTRY_LIST)
209 typedef_tident(PACTRL_ACCESS_ENTRY_LIST)
210
211 typedef struct _ACTRL_PROPERTY_ENTRYA
212 {
213 LPSTR lpProperty;
214 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
215 ULONG fListFlags;
216 } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
217
218 typedef struct _ACTRL_PROPERTY_ENTRYW
219 {
220 LPWSTR lpProperty;
221 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
222 ULONG fListFlags;
223 } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
224
225 typedef_tident(ACTRL_PROPERTY_ENTRY)
226 typedef_tident(PACTRL_PROPERTY_ENTRY)
227
228 typedef struct _ACTRL_ALISTA
229 {
230 ULONG cEntries;
231 PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
232 } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
233
234 typedef struct _ACTRL_ALISTW
235 {
236 ULONG cEntries;
237 PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
238 } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
239
240 typedef_tident(ACTRL_ACCESS)
241 typedef_tident(PACTRL_ACCESS)
242 typedef_tident(ACTRL_AUDIT)
243 typedef_tident(PACTRL_AUDIT)
244
245 #define TRUSTEE_ACCESS_ALLOWED 0x00000001
246 #define TRUSTEE_ACCESS_READ 0x00000002
247 #define TRUSTEE_ACCESS_WRITE 0x00000004
248
249 #define TRUSTEE_ACCESS_EXPLICIT 0x00000001
250 #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ|TRUSTEE_ACCESS_WRITE)
251 #define TRUSTEE_ACCESS_ALL 0xFFFFFFFF
252
253 typedef struct _TRUSTEE_ACCESSA
254 {
255 LPSTR lpProperty;
256 ACCESS_RIGHTS Access;
257 ULONG fAccessFlags;
258 ULONG fReturnedAccess;
259 } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
260
261 typedef struct _TRUSTEE_ACCESSW
262 {
263 LPWSTR lpProperty;
264 ACCESS_RIGHTS Access;
265 ULONG fAccessFlags;
266 ULONG fReturnedAccess;
267 } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
268
269 typedef_tident(TRUSTEE_ACCESS)
270 typedef_tident(PTRUSTEE_ACCESS)
271
272 #define ACTRL_RESERVED 0x00000000
273 #define ACTRL_PERM_1 0x00000001
274 #define ACTRL_PERM_2 0x00000002
275 #define ACTRL_PERM_3 0x00000004
276 #define ACTRL_PERM_4 0x00000008
277 #define ACTRL_PERM_5 0x00000010
278 #define ACTRL_PERM_6 0x00000020
279 #define ACTRL_PERM_7 0x00000040
280 #define ACTRL_PERM_8 0x00000080
281 #define ACTRL_PERM_9 0x00000100
282 #define ACTRL_PERM_10 0x00000200
283 #define ACTRL_PERM_11 0x00000400
284 #define ACTRL_PERM_12 0x00000800
285 #define ACTRL_PERM_13 0x00001000
286 #define ACTRL_PERM_14 0x00002000
287 #define ACTRL_PERM_15 0x00004000
288 #define ACTRL_PERM_16 0x00008000
289 #define ACTRL_PERM_17 0x00010000
290 #define ACTRL_PERM_18 0x00020000
291 #define ACTRL_PERM_19 0x00040000
292 #define ACTRL_PERM_20 0x00080000
293
294 #define ACTRL_ACCESS_ALLOWED 0x00000001
295 #define ACTRL_ACCESS_DENIED 0x00000002
296 #define ACTRL_AUDIT_SUCCESS 0x00000004
297 #define ACTRL_AUDIT_FAILURE 0x00000008
298
299 #define ACTRL_ACCESS_PROTECTED 0x00000001
300
301 #define ACTRL_SYSTEM_ACCESS 0x04000000
302 #define ACTRL_DELETE 0x08000000
303 #define ACTRL_READ_CONTROL 0x10000000
304 #define ACTRL_CHANGE_ACCESS 0x20000000
305 #define ACTRL_CHANGE_OWNER 0x40000000
306 #define ACTRL_SYNCHRONIZE 0x80000000
307 #define ACTRL_STD_RIGHTS_ALL 0xf8000000
308 #define ACTRL_STD_RIGHT_REQUIRED (ACTRL_STD_RIGHTS_ALL & ~ACTRL_SYNCHRONIZE)
309
310 #define ACTRL_DS_OPEN ACTRL_RESERVED
311 #define ACTRL_DS_CREATE_CHILD ACTRL_PERM_1
312 #define ACTRL_DS_DELETE_CHILD ACTRL_PERM_2
313 #define ACTRL_DS_LIST ACTRL_PERM_3
314 #define ACTRL_DS_SELF ACTRL_PERM_4
315 #define ACTRL_DS_READ_PROP ACTRL_PERM_5
316 #define ACTRL_DS_WRITE_PROP ACTRL_PERM_6
317 #define ACTRL_DS_DELETE_TREE ACTRL_PERM_7
318 #define ACTRL_DS_LIST_OBJECT ACTRL_PERM_8
319 #define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9
320
321 #define ACTRL_FILE_READ ACTRL_PERM_1
322 #define ACTRL_FILE_WRITE ACTRL_PERM_2
323 #define ACTRL_FILE_APPEND ACTRL_PERM_3
324 #define ACTRL_FILE_READ_PROP ACTRL_PERM_4
325 #define ACTRL_FILE_WRITE_PROP ACTRL_PERM_5
326 #define ACTRL_FILE_EXECUTE ACTRL_PERM_6
327 #define ACTRL_FILE_READ_ATTRIB ACTRL_PERM_8
328 #define ACTRL_FILE_WRITE_ATTRIB ACTRL_PERM_9
329 #define ACTRL_FILE_CREATE_PIPE ACTRL_PERM_10
330 #define ACTRL_DIR_LIST ACTRL_PERM_1
331 #define ACTRL_DIR_CREATE_OBJECT ACTRL_PERM_2
332 #define ACTRL_DIR_CREATE_CHILD ACTRL_PERM_3
333 #define ACTRL_DIR_DELETE_CHILD ACTRL_PERM_7
334 #define ACTRL_DIR_TRAVERSE ACTRL_PERM_6
335 #define ACTRL_KERNEL_TERMINATE ACTRL_PERM_1
336 #define ACTRL_KERNEL_THREAD ACTRL_PERM_2
337 #define ACTRL_KERNEL_VM ACTRL_PERM_3
338 #define ACTRL_KERNEL_VM_READ ACTRL_PERM_4
339 #define ACTRL_KERNEL_VM_WRITE ACTRL_PERM_5
340 #define ACTRL_KERNEL_DUP_HANDLE ACTRL_PERM_6
341 #define ACTRL_KERNEL_PROCESS ACTRL_PERM_7
342 #define ACTRL_KERNEL_SET_INFO ACTRL_PERM_8
343 #define ACTRL_KERNEL_GET_INFO ACTRL_PERM_9
344 #define ACTRL_KERNEL_CONTROL ACTRL_PERM_10
345 #define ACTRL_KERNEL_ALERT ACTRL_PERM_11
346 #define ACTRL_KERNEL_GET_CONTEXT ACTRL_PERM_12
347 #define ACTRL_KERNEL_SET_CONTEXT ACTRL_PERM_13
348 #define ACTRL_KERNEL_TOKEN ACTRL_PERM_14
349 #define ACTRL_KERNEL_IMPERSONATE ACTRL_PERM_15
350 #define ACTRL_KERNEL_DIMPERSONATE ACTRL_PERM_16
351 #define ACTRL_PRINT_SADMIN ACTRL_PERM_1
352 #define ACTRL_PRINT_SLIST ACTRL_PERM_2
353 #define ACTRL_PRINT_PADMIN ACTRL_PERM_3
354 #define ACTRL_PRINT_PUSE ACTRL_PERM_4
355 #define ACTRL_PRINT_JADMIN ACTRL_PERM_5
356 #define ACTRL_SVC_GET_INFO ACTRL_PERM_1
357 #define ACTRL_SVC_SET_INFO ACTRL_PERM_2
358 #define ACTRL_SVC_STATUS ACTRL_PERM_3
359 #define ACTRL_SVC_LIST ACTRL_PERM_4
360 #define ACTRL_SVC_START ACTRL_PERM_5
361 #define ACTRL_SVC_STOP ACTRL_PERM_6
362 #define ACTRL_SVC_PAUSE ACTRL_PERM_7
363 #define ACTRL_SVC_INTERROGATE ACTRL_PERM_8
364 #define ACTRL_SVC_UCONTROL ACTRL_PERM_9
365 #define ACTRL_REG_QUERY ACTRL_PERM_1
366 #define ACTRL_REG_SET ACTRL_PERM_2
367 #define ACTRL_REG_CREATE_CHILD ACTRL_PERM_3
368 #define ACTRL_REG_LIST ACTRL_PERM_4
369 #define ACTRL_REG_NOTIFY ACTRL_PERM_5
370 #define ACTRL_REG_LINK ACTRL_PERM_6
371 #define ACTRL_WIN_CLIPBRD ACTRL_PERM_1
372 #define ACTRL_WIN_GLOBAL_ATOMS ACTRL_PERM_2
373 #define ACTRL_WIN_CREATE ACTRL_PERM_3
374 #define ACTRL_WIN_LIST_DESK ACTRL_PERM_4
375 #define ACTRL_WIN_LIST ACTRL_PERM_5
376 #define ACTRL_WIN_READ_ATTRIBS ACTRL_PERM_6
377 #define ACTRL_WIN_WRITE_ATTRIBS ACTRL_PERM_7
378 #define ACTRL_WIN_SCREEN ACTRL_PERM_8
379 #define ACTRL_WIN_EXIT ACTRL_PERM_9
380
381 #define ACTRL_ACCESS_NO_OPTIONS 0x00000000
382 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
383
384 typedef struct _ACTRL_OVERLAPPED
385 {
386 union {
387 PVOID Provider;
388 ULONG Reserved1;
389 } DUMMYUNIONNAME;
390 ULONG Reserved2;
391 HANDLE hEvent;
392 } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
393
394 typedef struct _ACTRL_ACCESS_INFOA
395 {
396 ULONG fAccessPermission;
397 LPSTR lpAccessPermissionName;
398 } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
399
400 typedef struct _ACTRL_ACCESS_INFOW
401 {
402 ULONG fAccessPermission;
403 LPWSTR lpAccessPermissionName;
404 } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
405
406 typedef_tident(ACTRL_ACCESS_INFO)
407 typedef_tident(PACTRL_ACCESS_INFO)
408
409 typedef struct _ACTRL_CONTROL_INFOA
410 {
411 LPSTR lpControlId;
412 LPSTR lpControlName;
413 } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
414
415 typedef struct _ACTRL_CONTROL_INFOW
416 {
417 LPWSTR lpControlId;
418 LPWSTR lpControlName;
419 } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
420
421 typedef_tident(ACTRL_CONTROL_INFO)
422 typedef_tident(PACTRL_CONTROL_INFO)
423
424 typedef enum _PROGRESS_INVOKE_SETTING {
425 ProgressInvokeNever = 1,
426 ProgressInvokeEveryObject,
427 ProgressInvokeOnError,
428 ProgressCancelOperation,
429 ProgressRetryOperation
430 } PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING;
431
432 typedef struct _INHERITED_FROMA
433 {
434 LONG GenerationGap;
435 LPSTR AncestorName;
436 } INHERITED_FROMA, *PINHERITED_FROMA;
437
438 typedef struct _INHERITED_FROMW
439 {
440 LONG GenerationGap;
441 LPWSTR AncestorName;
442 } INHERITED_FROMW, *PINHERITED_FROMW;
443
444 typedef_tident(INHERITED_FROM)
445 typedef_tident(PINHERITED_FROM)
446
447 #define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
448 #define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"
449
450 #ifndef _DISABLE_TIDENTS
451 #ifdef UNICODE
452 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW
453 #else
454 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA
455 #endif
456 #endif
457
458 typedef struct _FN_OBJECT_MGR_FUNCTIONS
459 {
460 ULONG Placeholder;
461 } FN_OBJECT_MGR_FUNCTS, *PFN_OBJECT_MGR_FUNCTS;
462
463 #define AccFree LocalFree
464
465 #ifdef __cplusplus
466 }
467 #endif
468
469 #endif /* __WINE_ACCCTRL_H */
470
471 #endif /* __USE_W32API */