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