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