3 * Copyright 2012, 2013 MinGW.org project
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the "Software"),
7 * to deal in the Software without restriction, including without limitation
8 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9 * and/or sell copies of the Software, and to permit persons to whom the
10 * Software is furnished to do so, subject to the following conditions:
12 * The above copyright notice and this permission notice (including the next
13 * paragraph) shall be included in all copies or substantial portions of the
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
26 #pragma GCC system_header
33 #define AccFree LocalFree
34 #define ACTRL_RESERVED 0x00000000
35 #define ACTRL_ACCESS_PROTECTED 0x00000001
36 #define ACTRL_ACCESS_ALLOWED 0x00000001
37 #define ACTRL_ACCESS_DENIED 0x00000002
38 #define ACTRL_AUDIT_SUCCESS 0x00000004
39 #define ACTRL_AUDIT_FAILURE 0x00000008
40 #define ACTRL_SYSTEM_ACCESS 0x04000000
41 #define ACTRL_DELETE 0x08000000
42 #define ACTRL_READ_CONTROL 0x10000000
43 #define ACTRL_CHANGE_ACCESS 0x20000000
44 #define ACTRL_CHANGE_OWNER 0x40000000
45 #define ACTRL_SYNCHRONIZE 0x80000000
46 #define ACTRL_STD_RIGHTS_ALL 0xf8000000
48 #define ACTRL_FILE_READ 0x00000001
49 #define ACTRL_FILE_WRITE 0x00000002
50 #define ACTRL_FILE_APPEND 0x00000004
51 #define ACTRL_FILE_READ_PROP 0x00000008
52 #define ACTRL_FILE_WRITE_PROP 0x00000010
53 #define ACTRL_FILE_EXECUTE 0x00000020
54 #define ACTRL_FILE_READ_ATTRIB 0x00000080
55 #define ACTRL_FILE_WRITE_ATTRIB 0x00000100
56 #define ACTRL_FILE_CREATE_PIPE 0x00000200
57 #define ACTRL_DIR_LIST 0x00000001
58 #define ACTRL_DIR_CREATE_OBJECT 0x00000002
59 #define ACTRL_DIR_CREATE_CHILD 0x00000004
60 #define ACTRL_DIR_DELETE_CHILD 0x00000040
61 #define ACTRL_DIR_TRAVERSE 0x00000020
62 #define ACTRL_KERNEL_TERMINATE 0x00000001
63 #define ACTRL_KERNEL_THREAD 0x00000002
64 #define ACTRL_KERNEL_VM 0x00000004
65 #define ACTRL_KERNEL_VM_READ 0x00000008
66 #define ACTRL_KERNEL_VM_WRITE 0x00000010
67 #define ACTRL_KERNEL_DUP_HANDLE 0x00000020
68 #define ACTRL_KERNEL_PROCESS 0x00000040
69 #define ACTRL_KERNEL_SET_INFO 0x00000080
70 #define ACTRL_KERNEL_GET_INFO 0x00000100
71 #define ACTRL_KERNEL_CONTROL 0x00000200
72 #define ACTRL_KERNEL_ALERT 0x00000400
73 #define ACTRL_KERNEL_GET_CONTEXT 0x00000800
74 #define ACTRL_KERNEL_SET_CONTEXT 0x00001000
75 #define ACTRL_KERNEL_TOKEN 0x00002000
76 #define ACTRL_KERNEL_IMPERSONATE 0x00004000
77 #define ACTRL_KERNEL_DIMPERSONATE 0x00008000
78 #define ACTRL_PRINT_SADMIN 0x00000001
79 #define ACTRL_PRINT_SLIST 0x00000002
80 #define ACTRL_PRINT_PADMIN 0x00000004
81 #define ACTRL_PRINT_PUSE 0x00000008
82 #define ACTRL_PRINT_JADMIN 0x00000010
83 #define ACTRL_SVC_GET_INFO 0x00000001
84 #define ACTRL_SVC_SET_INFO 0x00000002
85 #define ACTRL_SVC_STATUS 0x00000004
86 #define ACTRL_SVC_LIST 0x00000008
87 #define ACTRL_SVC_START 0x00000010
88 #define ACTRL_SVC_STOP 0x00000020
89 #define ACTRL_SVC_PAUSE 0x00000040
90 #define ACTRL_SVC_INTERROGATE 0x00000080
91 #define ACTRL_SVC_UCONTROL 0x00000100
92 #define ACTRL_REG_QUERY 0x00000001
93 #define ACTRL_REG_SET 0x00000002
94 #define ACTRL_REG_CREATE_CHILD 0x00000004
95 #define ACTRL_REG_LIST 0x00000008
96 #define ACTRL_REG_NOTIFY 0x00000010
97 #define ACTRL_REG_LINK 0x00000020
98 #define ACTRL_WIN_CLIPBRD 0x00000001
99 #define ACTRL_WIN_GLOBAL_ATOMS 0x00000002
100 #define ACTRL_WIN_CREATE 0x00000004
101 #define ACTRL_WIN_LIST_DESK 0x00000008
102 #define ACTRL_WIN_LIST 0x00000010
103 #define ACTRL_WIN_READ_ATTRIBS 0x00000020
104 #define ACTRL_WIN_WRITE_ATTRIBS 0x00000040
105 #define ACTRL_WIN_SCREEN 0x00000080
106 #define ACTRL_WIN_EXIT 0x00000100
107 #define ACTRL_ACCESS_NO_OPTIONS 0x00000000
108 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001
109 #define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider"
110 #define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider"
111 #define TRUSTEE_ACCESS_ALLOWED 0x00000001L
112 #define TRUSTEE_ACCESS_READ 0x00000002L
113 #define TRUSTEE_ACCESS_WRITE 0x00000004L
114 #define TRUSTEE_ACCESS_EXPLICIT 0x00000001L
115 #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE)
116 #define TRUSTEE_ACCESS_ALL 0xFFFFFFFFL
117 #define NO_INHERITANCE 0x0
118 #define SUB_OBJECTS_ONLY_INHERIT 0x1
119 #define SUB_CONTAINERS_ONLY_INHERIT 0x2
120 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3
121 #define INHERIT_NO_PROPAGATE 0x4
122 #define INHERIT_ONLY 0x8
123 #define INHERITED_ACCESS_ENTRY 0x10
124 #define INHERITED_PARENT 0x10000000
125 #define INHERITED_GRANDPARENT 0x20000000
127 typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS;
128 typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS;
130 typedef enum _ACCESS_MODE {
139 typedef enum _SE_OBJECT_TYPE {
140 SE_UNKNOWN_OBJECT_TYPE = 0,
150 SE_PROVIDER_DEFINED_OBJECT,
152 SE_REGISTRY_WOW64_32KEY
154 typedef enum _TRUSTEE_TYPE {
160 TRUSTEE_IS_WELL_KNOWN_GROUP,
165 typedef enum _TRUSTEE_FORM {
169 TRUSTEE_IS_OBJECTS_AND_SID,
170 TRUSTEE_IS_OBJECTS_AND_NAME
172 typedef enum _MULTIPLE_TRUSTEE_OPERATION {
174 TRUSTEE_IS_IMPERSONATE
175 } MULTIPLE_TRUSTEE_OPERATION;
176 typedef struct _TRUSTEE_A {
177 struct _TRUSTEE_A *pMultipleTrustee;
178 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
179 TRUSTEE_FORM TrusteeForm;
180 TRUSTEE_TYPE TrusteeType;
182 } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA;
183 typedef struct _TRUSTEE_W {
184 struct _TRUSTEE_W *pMultipleTrustee;
185 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
186 TRUSTEE_FORM TrusteeForm;
187 TRUSTEE_TYPE TrusteeType;
189 } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW;
190 typedef struct _ACTRL_ACCESS_ENTRYA {
193 ACCESS_RIGHTS Access;
194 ACCESS_RIGHTS ProvSpecificAccess;
195 INHERIT_FLAGS Inheritance;
196 LPCSTR lpInheritProperty;
197 } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA;
198 typedef struct _ACTRL_ACCESS_ENTRYW {
201 ACCESS_RIGHTS Access;
202 ACCESS_RIGHTS ProvSpecificAccess;
203 INHERIT_FLAGS Inheritance;
204 LPCWSTR lpInheritProperty;
205 } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW;
206 typedef struct _ACTRL_ACCESS_ENTRY_LISTA {
208 ACTRL_ACCESS_ENTRYA *pAccessList;
209 } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA;
210 typedef struct _ACTRL_ACCESS_ENTRY_LISTW {
212 ACTRL_ACCESS_ENTRYW *pAccessList;
213 } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW;
214 typedef struct _ACTRL_PROPERTY_ENTRYA {
216 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
218 } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA;
219 typedef struct _ACTRL_PROPERTY_ENTRYW {
221 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
223 } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW;
224 typedef struct _ACTRL_ALISTA {
226 PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
227 } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA;
228 typedef struct _ACTRL_ALISTW {
230 PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
231 } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW;
232 typedef struct _TRUSTEE_ACCESSA {
234 ACCESS_RIGHTS Access;
236 ULONG fReturnedAccess;
237 } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA;
238 typedef struct _TRUSTEE_ACCESSW {
240 ACCESS_RIGHTS Access;
242 ULONG fReturnedAccess;
243 } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW;
244 typedef struct _ACTRL_OVERLAPPED {
252 } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED;
253 typedef struct _ACTRL_ACCESS_INFOA {
254 ULONG fAccessPermission;
255 LPSTR lpAccessPermissionName;
256 } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA;
257 typedef struct _ACTRL_ACCESS_INFOW {
258 ULONG fAccessPermission;
259 LPWSTR lpAccessPermissionName;
260 } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW;
261 typedef struct _ACTRL_CONTROL_INFOA {
264 } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA;
265 typedef struct _ACTRL_CONTROL_INFOW {
267 LPWSTR lpControlName;
268 } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW;
269 typedef struct _EXPLICIT_ACCESS_A {
270 DWORD grfAccessPermissions;
271 ACCESS_MODE grfAccessMode;
272 DWORD grfInheritance;
274 } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA;
275 typedef struct _EXPLICIT_ACCESS_W {
276 DWORD grfAccessPermissions;
277 ACCESS_MODE grfAccessMode;
278 DWORD grfInheritance;
280 } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW;
281 typedef struct _OBJECTS_AND_SID {
282 DWORD ObjectsPresent;
284 GUID InheritedObjectTypeGuid;
286 } OBJECTS_AND_SID, *POBJECTS_AND_SID;
287 typedef struct _OBJECTS_AND_NAME_A {
288 DWORD ObjectsPresent;
289 SE_OBJECT_TYPE ObjectType;
290 LPSTR ObjectTypeName;
291 LPSTR InheritedObjectTypeName;
293 } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A;
294 typedef struct _OBJECTS_AND_NAME_W {
295 DWORD ObjectsPresent;
296 SE_OBJECT_TYPE ObjectType;
297 LPWSTR ObjectTypeName;
298 LPWSTR InheritedObjectTypeName;
300 } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W;
302 #define ACCCTRL_DEFAULT_PROVIDER __AW(ACCCTRL_DEFAULT_PROVIDER)
303 typedef __AW(TRUSTEE_) TRUSTEE_, *PTRUSTEE_;
304 typedef __AW(TRUSTEE) TRUSTEE, *PTRUSTEE;
305 typedef __AW(ACTRL_ACCESS) ACTRL_ACCESS, *PACTRL_ACCESS;
306 typedef __AW(ACTRL_ACCESS_ENTRY_LIST) ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST;
307 typedef __AW(ACTRL_ACCESS_INFO) ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO;
308 typedef __AW(ACTRL_ACCESS_ENTRY) ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY;
309 typedef __AW(ACTRL_AUDIT) ACTRL_AUDIT, *PACTRL_AUDIT;
310 typedef __AW(ACTRL_CONTROL_INFO) ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO;
311 typedef __AW(EXPLICIT_ACCESS_) EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_;
312 typedef __AW(EXPLICIT_ACCESS) EXPLICIT_ACCESS, *PEXPLICIT_ACCESS;
313 typedef __AW(TRUSTEE_ACCESS) TRUSTEE_ACCESS, *PTRUSTEE_ACCESS;
314 typedef __AW(OBJECTS_AND_NAME_) OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_;
316 #if (_WIN32_WINNT >= _WIN32_WINNT_WINXP)
320 } INHERITED_FROMA, *PINHERITED_FROMA;
324 } INHERITED_FROMW, *PINHERITED_FROMW;
326 typedef __AW(INHERITED_FROM) INHERITED_FROM, *PINHERITED_FROM;
327 #endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINXP) */