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