1 /***********************************************************************\
2 * accctrl.d *
3 * *
4 * Windows API header module *
5 * *
6 * Translated from MinGW Windows headers *
7 * by Stewart Gordon *
8 * *
9 * Placed into public domain *
10 \***********************************************************************/
11 module win32.accctrl;
12 version(Windows):
13
14 private import win32.basetyps, win32.w32api, win32.winbase, win32.windef;
15
16 // FIXME: check types and grouping of constants
17 // FIXME: check Windows version support
18
19 alias LocalFree AccFree;
20
21 const uint
22 ACTRL_RESERVED = 0x00000000,
23 ACTRL_ACCESS_PROTECTED = 0x00000001,
24 ACTRL_ACCESS_ALLOWED = 0x00000001,
25 ACTRL_ACCESS_DENIED = 0x00000002,
26 ACTRL_AUDIT_SUCCESS = 0x00000004,
27 ACTRL_AUDIT_FAILURE = 0x00000008,
28 ACTRL_SYSTEM_ACCESS = 0x04000000,
29 ACTRL_DELETE = 0x08000000,
30 ACTRL_READ_CONTROL = 0x10000000,
31 ACTRL_CHANGE_ACCESS = 0x20000000,
32 ACTRL_CHANGE_OWNER = 0x40000000,
33 ACTRL_SYNCHRONIZE = 0x80000000,
34 ACTRL_STD_RIGHTS_ALL = 0xf8000000;
35
36 const uint
37 ACTRL_FILE_READ = 0x00000001,
38 ACTRL_FILE_WRITE = 0x00000002,
39 ACTRL_FILE_APPEND = 0x00000004,
40 ACTRL_FILE_READ_PROP = 0x00000008,
41 ACTRL_FILE_WRITE_PROP = 0x00000010,
42 ACTRL_FILE_EXECUTE = 0x00000020,
43 ACTRL_FILE_READ_ATTRIB = 0x00000080,
44 ACTRL_FILE_WRITE_ATTRIB = 0x00000100,
45 ACTRL_FILE_CREATE_PIPE = 0x00000200;
46
47 const uint
48 ACTRL_DIR_LIST = 0x00000001,
49 ACTRL_DIR_CREATE_OBJECT = 0x00000002,
50 ACTRL_DIR_CREATE_CHILD = 0x00000004,
51 ACTRL_DIR_DELETE_CHILD = 0x00000040,
52 ACTRL_DIR_TRAVERSE = 0x00000020;
53
54 const uint
55 ACTRL_KERNEL_TERMINATE = 0x00000001,
56 ACTRL_KERNEL_THREAD = 0x00000002,
57 ACTRL_KERNEL_VM = 0x00000004,
58 ACTRL_KERNEL_VM_READ = 0x00000008,
59 ACTRL_KERNEL_VM_WRITE = 0x00000010,
60 ACTRL_KERNEL_DUP_HANDLE = 0x00000020,
61 ACTRL_KERNEL_PROCESS = 0x00000040,
62 ACTRL_KERNEL_SET_INFO = 0x00000080,
63 ACTRL_KERNEL_GET_INFO = 0x00000100,
64 ACTRL_KERNEL_CONTROL = 0x00000200,
65 ACTRL_KERNEL_ALERT = 0x00000400,
66 ACTRL_KERNEL_GET_CONTEXT = 0x00000800,
67 ACTRL_KERNEL_SET_CONTEXT = 0x00001000,
68 ACTRL_KERNEL_TOKEN = 0x00002000,
69 ACTRL_KERNEL_IMPERSONATE = 0x00004000,
70 ACTRL_KERNEL_DIMPERSONATE = 0x00008000;
71
72 const uint
73 ACTRL_PRINT_SADMIN = 0x00000001,
74 ACTRL_PRINT_SLIST = 0x00000002,
75 ACTRL_PRINT_PADMIN = 0x00000004,
76 ACTRL_PRINT_PUSE = 0x00000008,
77 ACTRL_PRINT_JADMIN = 0x00000010;
78
79 const uint
80 ACTRL_SVC_GET_INFO = 0x00000001,
81 ACTRL_SVC_SET_INFO = 0x00000002,
82 ACTRL_SVC_STATUS = 0x00000004,
83 ACTRL_SVC_LIST = 0x00000008,
84 ACTRL_SVC_START = 0x00000010,
85 ACTRL_SVC_STOP = 0x00000020,
86 ACTRL_SVC_PAUSE = 0x00000040,
87 ACTRL_SVC_INTERROGATE = 0x00000080,
88 ACTRL_SVC_UCONTROL = 0x00000100;
89
90 const uint
91 ACTRL_REG_QUERY = 0x00000001,
92 ACTRL_REG_SET = 0x00000002,
93 ACTRL_REG_CREATE_CHILD = 0x00000004,
94 ACTRL_REG_LIST = 0x00000008,
95 ACTRL_REG_NOTIFY = 0x00000010,
96 ACTRL_REG_LINK = 0x00000020;
97
98 const uint
99 ACTRL_WIN_CLIPBRD = 0x00000001,
100 ACTRL_WIN_GLOBAL_ATOMS = 0x00000002,
101 ACTRL_WIN_CREATE = 0x00000004,
102 ACTRL_WIN_LIST_DESK = 0x00000008,
103 ACTRL_WIN_LIST = 0x00000010,
104 ACTRL_WIN_READ_ATTRIBS = 0x00000020,
105 ACTRL_WIN_WRITE_ATTRIBS = 0x00000040,
106 ACTRL_WIN_SCREEN = 0x00000080,
107 ACTRL_WIN_EXIT = 0x00000100;
108
109 enum : uint {
110 ACTRL_ACCESS_NO_OPTIONS = 0x00000000,
111 ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001
112 }
113
114 const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider";
115
116 const uint
117 TRUSTEE_ACCESS_ALLOWED = 0x00000001,
118 TRUSTEE_ACCESS_READ = 0x00000002,
119 TRUSTEE_ACCESS_WRITE = 0x00000004,
120 TRUSTEE_ACCESS_EXPLICIT = 0x00000001,
121 TRUSTEE_ACCESS_READ_WRITE = 0x00000006,
122 TRUSTEE_ACCESS_ALL = 0xFFFFFFFF;
123
124 const uint
125 NO_INHERITANCE = 0x0,
126 SUB_OBJECTS_ONLY_INHERIT = 0x1,
127 SUB_CONTAINERS_ONLY_INHERIT = 0x2,
128 SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3,
129 INHERIT_NO_PROPAGATE = 0x4,
130 INHERIT_ONLY = 0x8,
131 INHERITED_ACCESS_ENTRY = 0x10,
132 INHERITED_PARENT = 0x10000000,
133 INHERITED_GRANDPARENT = 0x20000000;
134
135 alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS;
136 alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS;
137
138 enum ACCESS_MODE {
139 NOT_USED_ACCESS,
140 GRANT_ACCESS,
141 SET_ACCESS,
142 DENY_ACCESS,
143 REVOKE_ACCESS,
144 SET_AUDIT_SUCCESS,
145 SET_AUDIT_FAILURE
146 }
147
148 enum SE_OBJECT_TYPE {
149 SE_UNKNOWN_OBJECT_TYPE,
150 SE_FILE_OBJECT,
151 SE_SERVICE,
152 SE_PRINTER,
153 SE_REGISTRY_KEY,
154 SE_LMSHARE,
155 SE_KERNEL_OBJECT,
156 SE_WINDOW_OBJECT,
157 SE_DS_OBJECT,
158 SE_DS_OBJECT_ALL,
159 SE_PROVIDER_DEFINED_OBJECT,
160 SE_WMIGUID_OBJECT,
161 SE_REGISTRY_WOW64_32KEY
162 }
163
164 enum TRUSTEE_TYPE {
165 TRUSTEE_IS_UNKNOWN,
166 TRUSTEE_IS_USER,
167 TRUSTEE_IS_GROUP,
168 TRUSTEE_IS_DOMAIN,
169 TRUSTEE_IS_ALIAS,
170 TRUSTEE_IS_WELL_KNOWN_GROUP,
171 TRUSTEE_IS_DELETED,
172 TRUSTEE_IS_INVALID,
173 TRUSTEE_IS_COMPUTER
174 }
175
176 enum TRUSTEE_FORM {
177 TRUSTEE_IS_SID,
178 TRUSTEE_IS_NAME,
179 TRUSTEE_BAD_FORM,
180 TRUSTEE_IS_OBJECTS_AND_SID,
181 TRUSTEE_IS_OBJECTS_AND_NAME
182 }
183
184 enum MULTIPLE_TRUSTEE_OPERATION {
185 NO_MULTIPLE_TRUSTEE,
186 TRUSTEE_IS_IMPERSONATE
187 }
188
189 struct TRUSTEE_A {
190 TRUSTEE_A* pMultipleTrustee;
191 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
192 TRUSTEE_FORM TrusteeForm;
193 TRUSTEE_TYPE TrusteeType;
194 LPSTR ptstrName;
195 }
196 alias TRUSTEE_A TRUSTEEA;
197 alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA;
198
199 struct TRUSTEE_W {
200 TRUSTEE_W* pMultipleTrustee;
201 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
202 TRUSTEE_FORM TrusteeForm;
203 TRUSTEE_TYPE TrusteeType;
204 LPWSTR ptstrName;
205 }
206 alias TRUSTEE_W TRUSTEEW;
207 alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW;
208
209 struct ACTRL_ACCESS_ENTRYA {
210 TRUSTEE_A Trustee;
211 ULONG fAccessFlags;
212 ACCESS_RIGHTS Access;
213 ACCESS_RIGHTS ProvSpecificAccess;
214 INHERIT_FLAGS Inheritance;
215 LPCSTR lpInheritProperty;
216 }
217 alias ACTRL_ACCESS_ENTRYA* PACTRL_ACCESS_ENTRYA;
218
219 struct ACTRL_ACCESS_ENTRYW {
220 TRUSTEE_W Trustee;
221 ULONG fAccessFlags;
222 ACCESS_RIGHTS Access;
223 ACCESS_RIGHTS ProvSpecificAccess;
224 INHERIT_FLAGS Inheritance;
225 LPCWSTR lpInheritProperty;
226 }
227 alias ACTRL_ACCESS_ENTRYW* PACTRL_ACCESS_ENTRYW;
228
229 struct ACTRL_ACCESS_ENTRY_LISTA {
230 ULONG cEntries;
231 ACTRL_ACCESS_ENTRYA* pAccessList;
232 }
233 alias ACTRL_ACCESS_ENTRY_LISTA* PACTRL_ACCESS_ENTRY_LISTA;
234
235 struct ACTRL_ACCESS_ENTRY_LISTW {
236 ULONG cEntries;
237 ACTRL_ACCESS_ENTRYW* pAccessList;
238 }
239 alias ACTRL_ACCESS_ENTRY_LISTW* PACTRL_ACCESS_ENTRY_LISTW;
240
241 struct ACTRL_PROPERTY_ENTRYA {
242 LPCSTR lpProperty;
243 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
244 ULONG fListFlags;
245 }
246 alias ACTRL_PROPERTY_ENTRYA* PACTRL_PROPERTY_ENTRYA;
247
248 struct ACTRL_PROPERTY_ENTRYW {
249 LPCWSTR lpProperty;
250 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
251 ULONG fListFlags;
252 }
253 alias ACTRL_PROPERTY_ENTRYW* PACTRL_PROPERTY_ENTRYW;
254
255 struct ACTRL_ACCESSA {
256 ULONG cEntries;
257 PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
258 }
259 alias ACTRL_ACCESSA ACTRL_AUDITA;
260 alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA;
261
262 struct ACTRL_ACCESSW {
263 ULONG cEntries;
264 PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
265 }
266 alias ACTRL_ACCESSW ACTRL_AUDITW;
267 alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW;
268
269 struct TRUSTEE_ACCESSA {
270 LPSTR lpProperty;
271 ACCESS_RIGHTS Access;
272 ULONG fAccessFlags;
273 ULONG fReturnedAccess;
274 }
275 alias TRUSTEE_ACCESSA* PTRUSTEE_ACCESSA;
276
277 struct TRUSTEE_ACCESSW {
278 LPWSTR lpProperty;
279 ACCESS_RIGHTS Access;
280 ULONG fAccessFlags;
281 ULONG fReturnedAccess;
282 }
283 alias TRUSTEE_ACCESSW* PTRUSTEE_ACCESSW;
284
285 struct ACTRL_OVERLAPPED {
286 union {
287 PVOID Provider;
288 ULONG Reserved1;
289 }
290 ULONG Reserved2;
291 HANDLE hEvent;
292 }
293 alias ACTRL_OVERLAPPED* PACTRL_OVERLAPPED;
294
295 struct ACTRL_ACCESS_INFOA {
296 ULONG fAccessPermission;
297 LPSTR lpAccessPermissionName;
298 }
299 alias ACTRL_ACCESS_INFOA* PACTRL_ACCESS_INFOA;
300
301 struct ACTRL_ACCESS_INFOW {
302 ULONG fAccessPermission;
303 LPWSTR lpAccessPermissionName;
304 }
305 alias ACTRL_ACCESS_INFOW* PACTRL_ACCESS_INFOW;
306
307 struct ACTRL_CONTROL_INFOA {
308 LPSTR lpControlId;
309 LPSTR lpControlName;
310 }
311 alias ACTRL_CONTROL_INFOA* PACTRL_CONTROL_INFOA;
312
313 struct ACTRL_CONTROL_INFOW {
314 LPWSTR lpControlId;
315 LPWSTR lpControlName;
316 }
317 alias ACTRL_CONTROL_INFOW* PACTRL_CONTROL_INFOW;
318
319 struct EXPLICIT_ACCESS_A {
320 DWORD grfAccessPermissions;
321 ACCESS_MODE grfAccessMode;
322 DWORD grfInheritance;
323 TRUSTEE_A Trustee;
324 }
325 alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA;
326 alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA;
327
328 struct EXPLICIT_ACCESS_W {
329 DWORD grfAccessPermissions;
330 ACCESS_MODE grfAccessMode;
331 DWORD grfInheritance;
332 TRUSTEE_W Trustee;
333 }
334 alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW;
335 alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW;
336
337 struct OBJECTS_AND_SID {
338 DWORD ObjectsPresent;
339 GUID ObjectTypeGuid;
340 GUID InheritedObjectTypeGuid;
341 SID* pSid;
342 }
343 alias OBJECTS_AND_SID* POBJECTS_AND_SID;
344
345 struct OBJECTS_AND_NAME_A {
346 DWORD ObjectsPresent;
347 SE_OBJECT_TYPE ObjectType;
348 LPSTR ObjectTypeName;
349 LPSTR InheritedObjectTypeName;
350 LPSTR ptstrName;
351 }
352 alias OBJECTS_AND_NAME_A* POBJECTS_AND_NAME_A;
353
354 struct OBJECTS_AND_NAME_W {
355 DWORD ObjectsPresent;
356 SE_OBJECT_TYPE ObjectType;
357 LPWSTR ObjectTypeName;
358 LPWSTR InheritedObjectTypeName;
359 LPWSTR ptstrName;
360 }
361 alias OBJECTS_AND_NAME_W* POBJECTS_AND_NAME_W;
362
363 static if (_WIN32_WINNT >= 0x501) {
364 struct INHERITED_FROMA {
365 LONG GenerationGap;
366 LPSTR AncestorName;
367 }
368 alias INHERITED_FROMA* PINHERITED_FROMA;
369
370 struct INHERITED_FROMW {
371 LONG GenerationGap;
372 LPWSTR AncestorName;
373 }
374 alias INHERITED_FROMW* PINHERITED_FROMW;
375 }
376
377 version (Unicode) {
378 alias TRUSTEEW TRUSTEE;
379 alias ACTRL_ACCESSW ACTRL_ACCESS;
380 alias ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST;
381 alias ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO;
382 alias ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY;
383 alias ACTRL_AUDITW ACTRL_AUDIT;
384 alias ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO;
385 alias EXPLICIT_ACCESSW EXPLICIT_ACCESS;
386 alias TRUSTEE_ACCESSW TRUSTEE_ACCESS;
387 alias OBJECTS_AND_NAME_W OBJECTS_AND_NAME_;
388 static if (_WIN32_WINNT >= 0x501) {
389 alias INHERITED_FROMW INHERITED_FROM;
390 }
391 } else {
392 alias TRUSTEEA TRUSTEE;
393 alias ACTRL_ACCESSA ACTRL_ACCESS;
394 alias ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST;
395 alias ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO;
396 alias ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY;
397 alias ACTRL_AUDITA ACTRL_AUDIT;
398 alias ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO;
399 alias EXPLICIT_ACCESSA EXPLICIT_ACCESS;
400 alias TRUSTEE_ACCESSA TRUSTEE_ACCESS;
401 alias OBJECTS_AND_NAME_A OBJECTS_AND_NAME_;
402 static if (_WIN32_WINNT >= 0x501) {
403 alias INHERITED_FROMA INHERITED_FROM;
404 }
405 }
406
407 alias TRUSTEE TRUSTEE_;
408 alias TRUSTEE* PTRUSTEE, PTRUSTEE_;
409 alias ACTRL_ACCESS* PACTRL_ACCESS;
410 alias ACTRL_ACCESS_ENTRY_LIST* PACTRL_ACCESS_ENTRY_LIST;
411 alias ACTRL_ACCESS_INFO* PACTRL_ACCESS_INFO;
412 alias ACTRL_ACCESS_ENTRY* PACTRL_ACCESS_ENTRY;
413 alias ACTRL_AUDIT* PACTRL_AUDIT;
414 alias ACTRL_CONTROL_INFO* PACTRL_CONTROL_INFO;
415 alias EXPLICIT_ACCESS EXPLICIT_ACCESS_;
416 alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_;
417 alias TRUSTEE_ACCESS* PTRUSTEE_ACCESS;
418 alias OBJECTS_AND_NAME_* POBJECTS_AND_NAME_;
419 static if (_WIN32_WINNT >= 0x501) {
420 alias INHERITED_FROM* PINHERITED_FROM;
421 }