4 #pragma GCC system_header
11 #define AccFree LocalFree
12 #define ACTRL_RESERVED 0x00000000
13 #define ACTRL_ACCESS_PROTECTED 0x00000001
14 #define ACTRL_ACCESS_ALLOWED 0x00000001
15 #define ACTRL_ACCESS_DENIED 0x00000002
16 #define ACTRL_AUDIT_SUCCESS 0x00000004
17 #define ACTRL_AUDIT_FAILURE 0x00000008
18 #define ACTRL_SYSTEM_ACCESS 0x04000000
19 #define ACTRL_DELETE 0x08000000
20 #define ACTRL_READ_CONTROL 0x10000000
21 #define ACTRL_CHANGE_ACCESS 0x20000000
22 #define ACTRL_CHANGE_OWNER 0x40000000
23 #define ACTRL_SYNCHRONIZE 0x80000000
24 #define ACTRL_STD_RIGHTS_ALL 0xf8000000
26 #define ACTRL_FILE_READ 0x00000001
27 #define ACTRL_FILE_WRITE 0x00000002
28 #define ACTRL_FILE_APPEND 0x00000004
29 #define ACTRL_FILE_READ_PROP 0x00000008
30 #define ACTRL_FILE_WRITE_PROP 0x00000010
31 #define ACTRL_FILE_EXECUTE 0x00000020
32 #define ACTRL_FILE_READ_ATTRIB 0x00000080
33 #define ACTRL_FILE_WRITE_ATTRIB 0x00000100
34 #define ACTRL_FILE_CREATE_PIPE 0x00000200
35 #define ACTRL_DIR_LIST 0x00000001
36 #define ACTRL_DIR_CREATE_OBJECT 0x00000002
37 #define ACTRL_DIR_CREATE_CHILD 0x00000004
38 #define ACTRL_DIR_DELETE_CHILD 0x00000040
39 #define ACTRL_DIR_TRAVERSE 0x00000020
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 #define ACTRL_PRINT_SADMIN 0x00000001
57 #define ACTRL_PRINT_SLIST 0x00000002
58 #define ACTRL_PRINT_PADMIN 0x00000004
59 #define ACTRL_PRINT_PUSE 0x00000008
60 #define ACTRL_PRINT_JADMIN 0x00000010
61 #define ACTRL_SVC_GET_INFO 0x00000001
62 #define ACTRL_SVC_SET_INFO 0x00000002
63 #define ACTRL_SVC_STATUS 0x00000004
64 #define ACTRL_SVC_LIST 0x00000008
65 #define ACTRL_SVC_START 0x00000010
66 #define ACTRL_SVC_STOP 0x00000020
67 #define ACTRL_SVC_PAUSE 0x00000040
68 #define ACTRL_SVC_INTERROGATE 0x00000080
69 #define ACTRL_SVC_UCONTROL 0x00000100
70 #define ACTRL_REG_QUERY 0x00000001
71 #define ACTRL_REG_SET 0x00000002
72 #define ACTRL_REG_CREATE_CHILD 0x00000004
73 #define ACTRL_REG_LIST 0x00000008
74 #define ACTRL_REG_NOTIFY 0x00000010
75 #define ACTRL_REG_LINK 0x00000020
76 #define ACTRL_WIN_CLIPBRD 0x00000001
77 #define ACTRL_WIN_GLOBAL_ATOMS 0x00000002
78 #define ACTRL_WIN_CREATE 0x00000004
79 #define ACTRL_WIN_LIST_DESK 0x00000008
80 #define ACTRL_WIN_LIST 0x00000010
81 #define ACTRL_WIN_READ_ATTRIBS 0x00000020
82 #define ACTRL_WIN_WRITE_ATTRIBS 0x00000040
83 #define ACTRL_WIN_SCREEN 0x00000080
84 #define ACTRL_WIN_EXIT 0x00000100
85 #define ACTRL_ACCESS_NO_OPTIONS 0x00000000
86 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
87 #define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
88 #define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"
89 #define TRUSTEE_ACCESS_ALLOWED 0x00000001L
90 #define TRUSTEE_ACCESS_READ 0x00000002L
91 #define TRUSTEE_ACCESS_WRITE 0x00000004L
92 #define TRUSTEE_ACCESS_EXPLICIT 0x00000001L
93 #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE)
94 #define TRUSTEE_ACCESS_ALL 0xFFFFFFFFL
95 #define NO_INHERITANCE 0x0
96 #define SUB_OBJECTS_ONLY_INHERIT 0x1
97 #define SUB_CONTAINERS_ONLY_INHERIT 0x2
98 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
99 #define INHERIT_NO_PROPAGATE 0x4
100 #define INHERIT_ONLY 0x8
101 #define INHERITED_ACCESS_ENTRY 0x10
102 #define INHERITED_PARENT 0x10000000
103 #define INHERITED_GRANDPARENT 0x20000000
105 typedef ULONG INHERIT_FLAGS
, *PINHERIT_FLAGS
;
106 typedef ULONG ACCESS_RIGHTS
, *PACCESS_RIGHTS
;
108 typedef enum _ACCESS_MODE
{
117 typedef enum _SE_OBJECT_TYPE
{
118 SE_UNKNOWN_OBJECT_TYPE
= 0,
128 SE_PROVIDER_DEFINED_OBJECT
,
130 SE_REGISTRY_WOW64_32KEY
132 typedef enum _TRUSTEE_TYPE
{
138 TRUSTEE_IS_WELL_KNOWN_GROUP
,
143 typedef enum _TRUSTEE_FORM
{
147 TRUSTEE_IS_OBJECTS_AND_SID
,
148 TRUSTEE_IS_OBJECTS_AND_NAME
150 typedef enum _MULTIPLE_TRUSTEE_OPERATION
{
152 TRUSTEE_IS_IMPERSONATE
153 } MULTIPLE_TRUSTEE_OPERATION
;
154 typedef struct _TRUSTEE_A
{
155 struct _TRUSTEE_A
*pMultipleTrustee
;
156 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation
;
157 TRUSTEE_FORM TrusteeForm
;
158 TRUSTEE_TYPE TrusteeType
;
160 } TRUSTEE_A
, *PTRUSTEE_A
, TRUSTEEA
, *PTRUSTEEA
;
161 typedef struct _TRUSTEE_W
{
162 struct _TRUSTEE_W
*pMultipleTrustee
;
163 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation
;
164 TRUSTEE_FORM TrusteeForm
;
165 TRUSTEE_TYPE TrusteeType
;
167 } TRUSTEE_W
, *PTRUSTEE_W
, TRUSTEEW
, *PTRUSTEEW
;
168 typedef struct _ACTRL_ACCESS_ENTRYA
{
171 ACCESS_RIGHTS Access
;
172 ACCESS_RIGHTS ProvSpecificAccess
;
173 INHERIT_FLAGS Inheritance
;
174 LPCSTR lpInheritProperty
;
175 } ACTRL_ACCESS_ENTRYA
, *PACTRL_ACCESS_ENTRYA
;
176 typedef struct _ACTRL_ACCESS_ENTRYW
{
179 ACCESS_RIGHTS Access
;
180 ACCESS_RIGHTS ProvSpecificAccess
;
181 INHERIT_FLAGS Inheritance
;
182 LPCWSTR lpInheritProperty
;
183 } ACTRL_ACCESS_ENTRYW
, *PACTRL_ACCESS_ENTRYW
;
184 typedef struct _ACTRL_ACCESS_ENTRY_LISTA
{
186 ACTRL_ACCESS_ENTRYA
*pAccessList
;
187 } ACTRL_ACCESS_ENTRY_LISTA
, *PACTRL_ACCESS_ENTRY_LISTA
;
188 typedef struct _ACTRL_ACCESS_ENTRY_LISTW
{
190 ACTRL_ACCESS_ENTRYW
*pAccessList
;
191 } ACTRL_ACCESS_ENTRY_LISTW
, *PACTRL_ACCESS_ENTRY_LISTW
;
192 typedef struct _ACTRL_PROPERTY_ENTRYA
{
194 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList
;
196 } ACTRL_PROPERTY_ENTRYA
, *PACTRL_PROPERTY_ENTRYA
;
197 typedef struct _ACTRL_PROPERTY_ENTRYW
{
199 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList
;
201 } ACTRL_PROPERTY_ENTRYW
, *PACTRL_PROPERTY_ENTRYW
;
202 typedef struct _ACTRL_ALISTA
{
204 PACTRL_PROPERTY_ENTRYA pPropertyAccessList
;
205 } ACTRL_ACCESSA
, *PACTRL_ACCESSA
, ACTRL_AUDITA
, *PACTRL_AUDITA
;
206 typedef struct _ACTRL_ALISTW
{
208 PACTRL_PROPERTY_ENTRYW pPropertyAccessList
;
209 } ACTRL_ACCESSW
, *PACTRL_ACCESSW
, ACTRL_AUDITW
, *PACTRL_AUDITW
;
210 typedef struct _TRUSTEE_ACCESSA
{
212 ACCESS_RIGHTS Access
;
214 ULONG fReturnedAccess
;
215 } TRUSTEE_ACCESSA
, *PTRUSTEE_ACCESSA
;
216 typedef struct _TRUSTEE_ACCESSW
{
218 ACCESS_RIGHTS Access
;
220 ULONG fReturnedAccess
;
221 } TRUSTEE_ACCESSW
, *PTRUSTEE_ACCESSW
;
222 typedef struct _ACTRL_OVERLAPPED
{
230 } ACTRL_OVERLAPPED
, *PACTRL_OVERLAPPED
;
231 typedef struct _ACTRL_ACCESS_INFOA
{
232 ULONG fAccessPermission
;
233 LPSTR lpAccessPermissionName
;
234 } ACTRL_ACCESS_INFOA
, *PACTRL_ACCESS_INFOA
;
235 typedef struct _ACTRL_ACCESS_INFOW
{
236 ULONG fAccessPermission
;
237 LPWSTR lpAccessPermissionName
;
238 } ACTRL_ACCESS_INFOW
, *PACTRL_ACCESS_INFOW
;
239 typedef struct _ACTRL_CONTROL_INFOA
{
242 } ACTRL_CONTROL_INFOA
, *PACTRL_CONTROL_INFOA
;
243 typedef struct _ACTRL_CONTROL_INFOW
{
245 LPWSTR lpControlName
;
246 } ACTRL_CONTROL_INFOW
, *PACTRL_CONTROL_INFOW
;
247 typedef struct _EXPLICIT_ACCESS_A
{
248 DWORD grfAccessPermissions
;
249 ACCESS_MODE grfAccessMode
;
250 DWORD grfInheritance
;
252 } EXPLICIT_ACCESS_A
, *PEXPLICIT_ACCESS_A
, EXPLICIT_ACCESSA
, *PEXPLICIT_ACCESSA
;
253 typedef struct _EXPLICIT_ACCESS_W
{
254 DWORD grfAccessPermissions
;
255 ACCESS_MODE grfAccessMode
;
256 DWORD grfInheritance
;
258 } EXPLICIT_ACCESS_W
, *PEXPLICIT_ACCESS_W
, EXPLICIT_ACCESSW
, *PEXPLICIT_ACCESSW
;
259 typedef struct _OBJECTS_AND_SID
{
260 DWORD ObjectsPresent
;
262 GUID InheritedObjectTypeGuid
;
264 } OBJECTS_AND_SID
, *POBJECTS_AND_SID
;
265 typedef struct _OBJECTS_AND_NAME_A
{
266 DWORD ObjectsPresent
;
267 SE_OBJECT_TYPE ObjectType
;
268 LPSTR ObjectTypeName
;
269 LPSTR InheritedObjectTypeName
;
271 } OBJECTS_AND_NAME_A
, *POBJECTS_AND_NAME_A
;
272 typedef struct _OBJECTS_AND_NAME_W
{
273 DWORD ObjectsPresent
;
274 SE_OBJECT_TYPE ObjectType
;
275 LPWSTR ObjectTypeName
;
276 LPWSTR InheritedObjectTypeName
;
278 } OBJECTS_AND_NAME_W
, *POBJECTS_AND_NAME_W
;
279 #if (_WIN32_WINNT >= 0x0501)
283 } INHERITED_FROMA
, *PINHERITED_FROMA
;
287 } INHERITED_FROMW
, *PINHERITED_FROMW
;
288 #endif /* (_WIN32_WINNT >= 0x0501) */
291 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW
292 typedef TRUSTEE_W TRUSTEE_
, *PTRUSTEE_
;
293 typedef TRUSTEEW TRUSTEE
, *PTRUSTEE
;
294 typedef ACTRL_ACCESSW ACTRL_ACCESS
, *PACTRL_ACCESS
;
295 typedef ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST
, *PACTRL_ACCESS_ENTRY_LIST
;
296 typedef ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO
, *PACTRL_ACCESS_INFO
;
297 typedef ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY
, *PACTRL_ACCESS_ENTRY
;
298 typedef ACTRL_AUDITW ACTRL_AUDIT
, *PACTRL_AUDIT
;
299 typedef ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO
, *PACTRL_CONTROL_INFO
;
300 typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_
, *PEXPLICIT_ACCESS_
;
301 typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS
, *PEXPLICIT_ACCESS
;
302 typedef TRUSTEE_ACCESSW TRUSTEE_ACCESS
, *PTRUSTEE_ACCESS
;
303 typedef OBJECTS_AND_NAME_W OBJECTS_AND_NAME_
, *POBJECTS_AND_NAME_
;
304 #if (_WIN32_WINNT >= 0x0501)
305 typedef INHERITED_FROMW INHERITED_FROM
, *PINHERITED_FROM
;
308 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA
309 typedef TRUSTEE_A TRUSTEE_
, *PTRUSTEE_
;
310 typedef TRUSTEEA TRUSTEE
, *PTRUSTEE
;
311 typedef ACTRL_ACCESSA ACTRL_ACCESS
, *PACTRL_ACCESS
;
312 typedef ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST
, *PACTRL_ACCESS_ENTRY_LIST
;
313 typedef ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO
, *PACTRL_ACCESS_INFO
;
314 typedef ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY
, *PACTRL_ACCESS_ENTRY
;
315 typedef ACTRL_AUDITA ACTRL_AUDIT
, *PACTRL_AUDIT
;
316 typedef ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO
, *PACTRL_CONTROL_INFO
;
317 typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_
, *PEXPLICIT_ACCESS_
;
318 typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS
, *PEXPLICIT_ACCESS
;
319 typedef TRUSTEE_ACCESSA TRUSTEE_ACCESS
, *PTRUSTEE_ACCESS
;
320 typedef OBJECTS_AND_NAME_A OBJECTS_AND_NAME_
, *POBJECTS_AND_NAME_
;
321 #if (_WIN32_WINNT >= 0x0501)
322 typedef INHERITED_FROMA INHERITED_FROM
, *PINHERITED_FROM
;