root/trunk/win32/accctrl.d

Revision 201, 12.4 kB (checked in by smjg, 1 year ago)

Fixed a few version-dependent compile errors

Line 
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 }
Note: See TracBrowser for help on using the browser.