aboutsummaryrefslogtreecommitdiff
path: root/libphobos/libdruntime/core/sys/windows/accctrl.d
blob: e28f5df73aad4f87f76321e8bc43f8ac455f04a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
/**
 * Windows API header module
 *
 * Translated from MinGW Windows headers
 *
 * Authors: Stewart Gordon
 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
 * Source: $(DRUNTIMESRC src/core/sys/windows/_accctrl.d)
 */
module core.sys.windows.accctrl;
version (Windows):

version (ANSI) {} else version = Unicode;

private import core.sys.windows.basetyps, core.sys.windows.w32api, core.sys.windows.winbase, core.sys.windows.windef;

// FIXME: check types and grouping of constants
// FIXME: check Windows version support

alias LocalFree AccFree;

enum uint
    ACTRL_RESERVED            = 0x00000000,
    ACTRL_ACCESS_PROTECTED    = 0x00000001,
    ACTRL_ACCESS_ALLOWED      = 0x00000001,
    ACTRL_ACCESS_DENIED       = 0x00000002,
    ACTRL_AUDIT_SUCCESS       = 0x00000004,
    ACTRL_AUDIT_FAILURE       = 0x00000008,
    ACTRL_SYSTEM_ACCESS       = 0x04000000,
    ACTRL_DELETE              = 0x08000000,
    ACTRL_READ_CONTROL        = 0x10000000,
    ACTRL_CHANGE_ACCESS       = 0x20000000,
    ACTRL_CHANGE_OWNER        = 0x40000000,
    ACTRL_SYNCHRONIZE         = 0x80000000,
    ACTRL_STD_RIGHTS_ALL      = 0xf8000000;

enum uint
    ACTRL_FILE_READ           = 0x00000001,
    ACTRL_FILE_WRITE          = 0x00000002,
    ACTRL_FILE_APPEND         = 0x00000004,
    ACTRL_FILE_READ_PROP      = 0x00000008,
    ACTRL_FILE_WRITE_PROP     = 0x00000010,
    ACTRL_FILE_EXECUTE        = 0x00000020,
    ACTRL_FILE_READ_ATTRIB    = 0x00000080,
    ACTRL_FILE_WRITE_ATTRIB   = 0x00000100,
    ACTRL_FILE_CREATE_PIPE    = 0x00000200;

enum uint
    ACTRL_DIR_LIST            = 0x00000001,
    ACTRL_DIR_CREATE_OBJECT   = 0x00000002,
    ACTRL_DIR_CREATE_CHILD    = 0x00000004,
    ACTRL_DIR_DELETE_CHILD    = 0x00000040,
    ACTRL_DIR_TRAVERSE        = 0x00000020;

enum uint
    ACTRL_KERNEL_TERMINATE    = 0x00000001,
    ACTRL_KERNEL_THREAD       = 0x00000002,
    ACTRL_KERNEL_VM           = 0x00000004,
    ACTRL_KERNEL_VM_READ      = 0x00000008,
    ACTRL_KERNEL_VM_WRITE     = 0x00000010,
    ACTRL_KERNEL_DUP_HANDLE   = 0x00000020,
    ACTRL_KERNEL_PROCESS      = 0x00000040,
    ACTRL_KERNEL_SET_INFO     = 0x00000080,
    ACTRL_KERNEL_GET_INFO     = 0x00000100,
    ACTRL_KERNEL_CONTROL      = 0x00000200,
    ACTRL_KERNEL_ALERT        = 0x00000400,
    ACTRL_KERNEL_GET_CONTEXT  = 0x00000800,
    ACTRL_KERNEL_SET_CONTEXT  = 0x00001000,
    ACTRL_KERNEL_TOKEN        = 0x00002000,
    ACTRL_KERNEL_IMPERSONATE  = 0x00004000,
    ACTRL_KERNEL_DIMPERSONATE = 0x00008000;

enum uint
    ACTRL_PRINT_SADMIN        = 0x00000001,
    ACTRL_PRINT_SLIST         = 0x00000002,
    ACTRL_PRINT_PADMIN        = 0x00000004,
    ACTRL_PRINT_PUSE          = 0x00000008,
    ACTRL_PRINT_JADMIN        = 0x00000010;

enum uint
    ACTRL_SVC_GET_INFO        = 0x00000001,
    ACTRL_SVC_SET_INFO        = 0x00000002,
    ACTRL_SVC_STATUS          = 0x00000004,
    ACTRL_SVC_LIST            = 0x00000008,
    ACTRL_SVC_START           = 0x00000010,
    ACTRL_SVC_STOP            = 0x00000020,
    ACTRL_SVC_PAUSE           = 0x00000040,
    ACTRL_SVC_INTERROGATE     = 0x00000080,
    ACTRL_SVC_UCONTROL        = 0x00000100;

enum uint
    ACTRL_REG_QUERY           = 0x00000001,
    ACTRL_REG_SET             = 0x00000002,
    ACTRL_REG_CREATE_CHILD    = 0x00000004,
    ACTRL_REG_LIST            = 0x00000008,
    ACTRL_REG_NOTIFY          = 0x00000010,
    ACTRL_REG_LINK            = 0x00000020;

enum uint
    ACTRL_WIN_CLIPBRD         = 0x00000001,
    ACTRL_WIN_GLOBAL_ATOMS    = 0x00000002,
    ACTRL_WIN_CREATE          = 0x00000004,
    ACTRL_WIN_LIST_DESK       = 0x00000008,
    ACTRL_WIN_LIST            = 0x00000010,
    ACTRL_WIN_READ_ATTRIBS    = 0x00000020,
    ACTRL_WIN_WRITE_ATTRIBS   = 0x00000040,
    ACTRL_WIN_SCREEN          = 0x00000080,
    ACTRL_WIN_EXIT            = 0x00000100;

enum : uint {
    ACTRL_ACCESS_NO_OPTIONS              = 0x00000000,
    ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001
}

const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider";

enum uint
    TRUSTEE_ACCESS_ALLOWED    = 0x00000001,
    TRUSTEE_ACCESS_READ       = 0x00000002,
    TRUSTEE_ACCESS_WRITE      = 0x00000004,
    TRUSTEE_ACCESS_EXPLICIT   = 0x00000001,
    TRUSTEE_ACCESS_READ_WRITE = 0x00000006,
    TRUSTEE_ACCESS_ALL        = 0xFFFFFFFF;

enum uint
    NO_INHERITANCE                     = 0x0,
    SUB_OBJECTS_ONLY_INHERIT           = 0x1,
    SUB_CONTAINERS_ONLY_INHERIT        = 0x2,
    SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3,
    INHERIT_NO_PROPAGATE               = 0x4,
    INHERIT_ONLY                       = 0x8,
    INHERITED_ACCESS_ENTRY             = 0x10,
    INHERITED_PARENT                   = 0x10000000,
    INHERITED_GRANDPARENT              = 0x20000000;

alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS;
alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS;

enum ACCESS_MODE {
    NOT_USED_ACCESS,
    GRANT_ACCESS,
    SET_ACCESS,
    DENY_ACCESS,
    REVOKE_ACCESS,
    SET_AUDIT_SUCCESS,
    SET_AUDIT_FAILURE
}

enum SE_OBJECT_TYPE {
    SE_UNKNOWN_OBJECT_TYPE,
    SE_FILE_OBJECT,
    SE_SERVICE,
    SE_PRINTER,
    SE_REGISTRY_KEY,
    SE_LMSHARE,
    SE_KERNEL_OBJECT,
    SE_WINDOW_OBJECT,
    SE_DS_OBJECT,
    SE_DS_OBJECT_ALL,
    SE_PROVIDER_DEFINED_OBJECT,
    SE_WMIGUID_OBJECT,
    SE_REGISTRY_WOW64_32KEY
}

enum TRUSTEE_TYPE {
    TRUSTEE_IS_UNKNOWN,
    TRUSTEE_IS_USER,
    TRUSTEE_IS_GROUP,
    TRUSTEE_IS_DOMAIN,
    TRUSTEE_IS_ALIAS,
    TRUSTEE_IS_WELL_KNOWN_GROUP,
    TRUSTEE_IS_DELETED,
    TRUSTEE_IS_INVALID,
    TRUSTEE_IS_COMPUTER
}

enum TRUSTEE_FORM {
    TRUSTEE_IS_SID,
    TRUSTEE_IS_NAME,
    TRUSTEE_BAD_FORM,
    TRUSTEE_IS_OBJECTS_AND_SID,
    TRUSTEE_IS_OBJECTS_AND_NAME
}

enum MULTIPLE_TRUSTEE_OPERATION {
    NO_MULTIPLE_TRUSTEE,
    TRUSTEE_IS_IMPERSONATE
}

struct TRUSTEE_A {
    TRUSTEE_A*                 pMultipleTrustee;
    MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
    TRUSTEE_FORM               TrusteeForm;
    TRUSTEE_TYPE               TrusteeType;
    LPSTR                      ptstrName;
}
alias TRUSTEE_A TRUSTEEA;
alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA;

struct TRUSTEE_W {
    TRUSTEE_W*                 pMultipleTrustee;
    MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation;
    TRUSTEE_FORM               TrusteeForm;
    TRUSTEE_TYPE               TrusteeType;
    LPWSTR                     ptstrName;
}
alias TRUSTEE_W TRUSTEEW;
alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW;

struct ACTRL_ACCESS_ENTRYA {
    TRUSTEE_A     Trustee;
    ULONG         fAccessFlags;
    ACCESS_RIGHTS Access;
    ACCESS_RIGHTS ProvSpecificAccess;
    INHERIT_FLAGS Inheritance;
    LPCSTR        lpInheritProperty;
}
alias ACTRL_ACCESS_ENTRYA* PACTRL_ACCESS_ENTRYA;

struct ACTRL_ACCESS_ENTRYW {
    TRUSTEE_W     Trustee;
    ULONG         fAccessFlags;
    ACCESS_RIGHTS Access;
    ACCESS_RIGHTS ProvSpecificAccess;
    INHERIT_FLAGS Inheritance;
    LPCWSTR       lpInheritProperty;
}
alias ACTRL_ACCESS_ENTRYW* PACTRL_ACCESS_ENTRYW;

struct ACTRL_ACCESS_ENTRY_LISTA {
    ULONG                cEntries;
    ACTRL_ACCESS_ENTRYA* pAccessList;
}
alias ACTRL_ACCESS_ENTRY_LISTA* PACTRL_ACCESS_ENTRY_LISTA;

struct ACTRL_ACCESS_ENTRY_LISTW {
    ULONG                cEntries;
    ACTRL_ACCESS_ENTRYW* pAccessList;
}
alias ACTRL_ACCESS_ENTRY_LISTW* PACTRL_ACCESS_ENTRY_LISTW;

struct ACTRL_PROPERTY_ENTRYA {
    LPCSTR                    lpProperty;
    PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList;
    ULONG                     fListFlags;
}
alias ACTRL_PROPERTY_ENTRYA* PACTRL_PROPERTY_ENTRYA;

struct ACTRL_PROPERTY_ENTRYW {
    LPCWSTR                   lpProperty;
    PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList;
    ULONG                     fListFlags;
}
alias ACTRL_PROPERTY_ENTRYW* PACTRL_PROPERTY_ENTRYW;

struct ACTRL_ACCESSA {
    ULONG                  cEntries;
    PACTRL_PROPERTY_ENTRYA pPropertyAccessList;
}
alias ACTRL_ACCESSA ACTRL_AUDITA;
alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA;

struct ACTRL_ACCESSW {
    ULONG                  cEntries;
    PACTRL_PROPERTY_ENTRYW pPropertyAccessList;
}
alias ACTRL_ACCESSW ACTRL_AUDITW;
alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW;

struct TRUSTEE_ACCESSA {
    LPSTR         lpProperty;
    ACCESS_RIGHTS Access;
    ULONG         fAccessFlags;
    ULONG         fReturnedAccess;
}
alias TRUSTEE_ACCESSA* PTRUSTEE_ACCESSA;

struct TRUSTEE_ACCESSW {
    LPWSTR        lpProperty;
    ACCESS_RIGHTS Access;
    ULONG         fAccessFlags;
    ULONG         fReturnedAccess;
}
alias TRUSTEE_ACCESSW* PTRUSTEE_ACCESSW;

struct ACTRL_OVERLAPPED {
    union {
        PVOID Provider;
        ULONG Reserved1;
    }
    ULONG     Reserved2;
    HANDLE    hEvent;
}
alias ACTRL_OVERLAPPED* PACTRL_OVERLAPPED;

struct ACTRL_ACCESS_INFOA {
    ULONG fAccessPermission;
    LPSTR lpAccessPermissionName;
}
alias ACTRL_ACCESS_INFOA* PACTRL_ACCESS_INFOA;

struct ACTRL_ACCESS_INFOW {
    ULONG  fAccessPermission;
    LPWSTR lpAccessPermissionName;
}
alias ACTRL_ACCESS_INFOW* PACTRL_ACCESS_INFOW;

struct ACTRL_CONTROL_INFOA {
    LPSTR lpControlId;
    LPSTR lpControlName;
}
alias ACTRL_CONTROL_INFOA* PACTRL_CONTROL_INFOA;

struct ACTRL_CONTROL_INFOW {
    LPWSTR lpControlId;
    LPWSTR lpControlName;
}
alias ACTRL_CONTROL_INFOW* PACTRL_CONTROL_INFOW;

struct EXPLICIT_ACCESS_A {
    DWORD       grfAccessPermissions;
    ACCESS_MODE grfAccessMode;
    DWORD       grfInheritance;
    TRUSTEE_A   Trustee;
}
alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA;
alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA;

struct EXPLICIT_ACCESS_W {
    DWORD       grfAccessPermissions;
    ACCESS_MODE grfAccessMode;
    DWORD       grfInheritance;
    TRUSTEE_W   Trustee;
}
alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW;
alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW;

struct OBJECTS_AND_SID {
    DWORD ObjectsPresent;
    GUID  ObjectTypeGuid;
    GUID  InheritedObjectTypeGuid;
    SID*  pSid;
}
alias OBJECTS_AND_SID* POBJECTS_AND_SID;

struct OBJECTS_AND_NAME_A {
    DWORD          ObjectsPresent;
    SE_OBJECT_TYPE ObjectType;
    LPSTR          ObjectTypeName;
    LPSTR          InheritedObjectTypeName;
    LPSTR          ptstrName;
}
alias OBJECTS_AND_NAME_A* POBJECTS_AND_NAME_A;

struct OBJECTS_AND_NAME_W {
    DWORD          ObjectsPresent;
    SE_OBJECT_TYPE ObjectType;
    LPWSTR         ObjectTypeName;
    LPWSTR         InheritedObjectTypeName;
    LPWSTR         ptstrName;
}
alias OBJECTS_AND_NAME_W* POBJECTS_AND_NAME_W;

static if (_WIN32_WINNT >= 0x501) {
    struct INHERITED_FROMA {
        LONG  GenerationGap;
        LPSTR AncestorName;
    }
    alias INHERITED_FROMA* PINHERITED_FROMA;

    struct INHERITED_FROMW {
        LONG   GenerationGap;
        LPWSTR AncestorName;
    }
    alias INHERITED_FROMW* PINHERITED_FROMW;
}

version (Unicode) {
    alias TRUSTEEW TRUSTEE;
    alias ACTRL_ACCESSW ACTRL_ACCESS;
    alias ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST;
    alias ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO;
    alias ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY;
    alias ACTRL_AUDITW ACTRL_AUDIT;
    alias ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO;
    alias EXPLICIT_ACCESSW EXPLICIT_ACCESS;
    alias TRUSTEE_ACCESSW TRUSTEE_ACCESS;
    alias OBJECTS_AND_NAME_W OBJECTS_AND_NAME_;
    static if (_WIN32_WINNT >= 0x501) {
        alias INHERITED_FROMW INHERITED_FROM;
    }
} else {
    alias TRUSTEEA TRUSTEE;
    alias ACTRL_ACCESSA ACTRL_ACCESS;
    alias ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST;
    alias ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO;
    alias ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY;
    alias ACTRL_AUDITA ACTRL_AUDIT;
    alias ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO;
    alias EXPLICIT_ACCESSA EXPLICIT_ACCESS;
    alias TRUSTEE_ACCESSA TRUSTEE_ACCESS;
    alias OBJECTS_AND_NAME_A OBJECTS_AND_NAME_;
    static if (_WIN32_WINNT >= 0x501) {
        alias INHERITED_FROMA INHERITED_FROM;
    }
}

alias TRUSTEE TRUSTEE_;
alias TRUSTEE* PTRUSTEE, PTRUSTEE_;
alias ACTRL_ACCESS* PACTRL_ACCESS;
alias ACTRL_ACCESS_ENTRY_LIST* PACTRL_ACCESS_ENTRY_LIST;
alias ACTRL_ACCESS_INFO* PACTRL_ACCESS_INFO;
alias ACTRL_ACCESS_ENTRY* PACTRL_ACCESS_ENTRY;
alias ACTRL_AUDIT* PACTRL_AUDIT;
alias ACTRL_CONTROL_INFO* PACTRL_CONTROL_INFO;
alias EXPLICIT_ACCESS EXPLICIT_ACCESS_;
alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_;
alias TRUSTEE_ACCESS* PTRUSTEE_ACCESS;
alias OBJECTS_AND_NAME_* POBJECTS_AND_NAME_;
static if (_WIN32_WINNT >= 0x501) {
    alias INHERITED_FROM* PINHERITED_FROM;
}