2 * Windows API header module
4 * Translated from MinGW Windows headers
6 * Authors: Stewart Gordon
7 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
8 * Source: $(DRUNTIMESRC core/sys/windows/_accctrl.d)
10 module core
.sys
.windows
.accctrl
;
13 version (ANSI
) {} else version = Unicode
;
15 import core
.sys
.windows
.basetyps
, core
.sys
.windows
.w32api
, core
.sys
.windows
.winbase
, core
.sys
.windows
.windef
;
17 // FIXME: check types and grouping of constants
18 // FIXME: check Windows version support
20 alias LocalFree AccFree
;
23 ACTRL_RESERVED
= 0x00000000,
24 ACTRL_ACCESS_PROTECTED
= 0x00000001,
25 ACTRL_ACCESS_ALLOWED
= 0x00000001,
26 ACTRL_ACCESS_DENIED
= 0x00000002,
27 ACTRL_AUDIT_SUCCESS
= 0x00000004,
28 ACTRL_AUDIT_FAILURE
= 0x00000008,
29 ACTRL_SYSTEM_ACCESS
= 0x04000000,
30 ACTRL_DELETE
= 0x08000000,
31 ACTRL_READ_CONTROL
= 0x10000000,
32 ACTRL_CHANGE_ACCESS
= 0x20000000,
33 ACTRL_CHANGE_OWNER
= 0x40000000,
34 ACTRL_SYNCHRONIZE
= 0x80000000,
35 ACTRL_STD_RIGHTS_ALL
= 0xf8000000;
38 ACTRL_FILE_READ
= 0x00000001,
39 ACTRL_FILE_WRITE
= 0x00000002,
40 ACTRL_FILE_APPEND
= 0x00000004,
41 ACTRL_FILE_READ_PROP
= 0x00000008,
42 ACTRL_FILE_WRITE_PROP
= 0x00000010,
43 ACTRL_FILE_EXECUTE
= 0x00000020,
44 ACTRL_FILE_READ_ATTRIB
= 0x00000080,
45 ACTRL_FILE_WRITE_ATTRIB
= 0x00000100,
46 ACTRL_FILE_CREATE_PIPE
= 0x00000200;
49 ACTRL_DIR_LIST
= 0x00000001,
50 ACTRL_DIR_CREATE_OBJECT
= 0x00000002,
51 ACTRL_DIR_CREATE_CHILD
= 0x00000004,
52 ACTRL_DIR_DELETE_CHILD
= 0x00000040,
53 ACTRL_DIR_TRAVERSE
= 0x00000020;
56 ACTRL_KERNEL_TERMINATE
= 0x00000001,
57 ACTRL_KERNEL_THREAD
= 0x00000002,
58 ACTRL_KERNEL_VM
= 0x00000004,
59 ACTRL_KERNEL_VM_READ
= 0x00000008,
60 ACTRL_KERNEL_VM_WRITE
= 0x00000010,
61 ACTRL_KERNEL_DUP_HANDLE
= 0x00000020,
62 ACTRL_KERNEL_PROCESS
= 0x00000040,
63 ACTRL_KERNEL_SET_INFO
= 0x00000080,
64 ACTRL_KERNEL_GET_INFO
= 0x00000100,
65 ACTRL_KERNEL_CONTROL
= 0x00000200,
66 ACTRL_KERNEL_ALERT
= 0x00000400,
67 ACTRL_KERNEL_GET_CONTEXT
= 0x00000800,
68 ACTRL_KERNEL_SET_CONTEXT
= 0x00001000,
69 ACTRL_KERNEL_TOKEN
= 0x00002000,
70 ACTRL_KERNEL_IMPERSONATE
= 0x00004000,
71 ACTRL_KERNEL_DIMPERSONATE
= 0x00008000;
74 ACTRL_PRINT_SADMIN
= 0x00000001,
75 ACTRL_PRINT_SLIST
= 0x00000002,
76 ACTRL_PRINT_PADMIN
= 0x00000004,
77 ACTRL_PRINT_PUSE
= 0x00000008,
78 ACTRL_PRINT_JADMIN
= 0x00000010;
81 ACTRL_SVC_GET_INFO
= 0x00000001,
82 ACTRL_SVC_SET_INFO
= 0x00000002,
83 ACTRL_SVC_STATUS
= 0x00000004,
84 ACTRL_SVC_LIST
= 0x00000008,
85 ACTRL_SVC_START
= 0x00000010,
86 ACTRL_SVC_STOP
= 0x00000020,
87 ACTRL_SVC_PAUSE
= 0x00000040,
88 ACTRL_SVC_INTERROGATE
= 0x00000080,
89 ACTRL_SVC_UCONTROL
= 0x00000100;
92 ACTRL_REG_QUERY
= 0x00000001,
93 ACTRL_REG_SET
= 0x00000002,
94 ACTRL_REG_CREATE_CHILD
= 0x00000004,
95 ACTRL_REG_LIST
= 0x00000008,
96 ACTRL_REG_NOTIFY
= 0x00000010,
97 ACTRL_REG_LINK
= 0x00000020;
100 ACTRL_WIN_CLIPBRD
= 0x00000001,
101 ACTRL_WIN_GLOBAL_ATOMS
= 0x00000002,
102 ACTRL_WIN_CREATE
= 0x00000004,
103 ACTRL_WIN_LIST_DESK
= 0x00000008,
104 ACTRL_WIN_LIST
= 0x00000010,
105 ACTRL_WIN_READ_ATTRIBS
= 0x00000020,
106 ACTRL_WIN_WRITE_ATTRIBS
= 0x00000040,
107 ACTRL_WIN_SCREEN
= 0x00000080,
108 ACTRL_WIN_EXIT
= 0x00000100;
111 ACTRL_ACCESS_NO_OPTIONS
= 0x00000000,
112 ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES
= 0x00000001
115 const TCHAR
[] ACCCTRL_DEFAULT_PROVIDER
= "Windows NT Access Provider";
118 TRUSTEE_ACCESS_ALLOWED
= 0x00000001,
119 TRUSTEE_ACCESS_READ
= 0x00000002,
120 TRUSTEE_ACCESS_WRITE
= 0x00000004,
121 TRUSTEE_ACCESS_EXPLICIT
= 0x00000001,
122 TRUSTEE_ACCESS_READ_WRITE
= 0x00000006,
123 TRUSTEE_ACCESS_ALL
= 0xFFFFFFFF;
126 NO_INHERITANCE
= 0x0,
127 SUB_OBJECTS_ONLY_INHERIT
= 0x1,
128 SUB_CONTAINERS_ONLY_INHERIT
= 0x2,
129 SUB_CONTAINERS_AND_OBJECTS_INHERIT
= 0x3,
130 INHERIT_NO_PROPAGATE
= 0x4,
132 INHERITED_ACCESS_ENTRY
= 0x10,
133 INHERITED_PARENT
= 0x10000000,
134 INHERITED_GRANDPARENT
= 0x20000000;
136 alias ULONG INHERIT_FLAGS
, ACCESS_RIGHTS
;
137 alias ULONG
* PINHERIT_FLAGS
, PACCESS_RIGHTS
;
149 enum SE_OBJECT_TYPE
{
150 SE_UNKNOWN_OBJECT_TYPE
,
160 SE_PROVIDER_DEFINED_OBJECT
,
162 SE_REGISTRY_WOW64_32KEY
171 TRUSTEE_IS_WELL_KNOWN_GROUP
,
181 TRUSTEE_IS_OBJECTS_AND_SID
,
182 TRUSTEE_IS_OBJECTS_AND_NAME
185 enum MULTIPLE_TRUSTEE_OPERATION
{
187 TRUSTEE_IS_IMPERSONATE
191 TRUSTEE_A
* pMultipleTrustee
;
192 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation
;
193 TRUSTEE_FORM TrusteeForm
;
194 TRUSTEE_TYPE TrusteeType
;
197 alias TRUSTEE_A TRUSTEEA
;
198 alias TRUSTEE_A
* PTRUSTEE_A
, PTRUSTEEA
;
201 TRUSTEE_W
* pMultipleTrustee
;
202 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation
;
203 TRUSTEE_FORM TrusteeForm
;
204 TRUSTEE_TYPE TrusteeType
;
207 alias TRUSTEE_W TRUSTEEW
;
208 alias TRUSTEEW
* PTRUSTEE_W
, PTRUSTEEW
;
210 struct ACTRL_ACCESS_ENTRYA
{
213 ACCESS_RIGHTS Access
;
214 ACCESS_RIGHTS ProvSpecificAccess
;
215 INHERIT_FLAGS Inheritance
;
216 LPCSTR lpInheritProperty
;
218 alias ACTRL_ACCESS_ENTRYA
* PACTRL_ACCESS_ENTRYA
;
220 struct ACTRL_ACCESS_ENTRYW
{
223 ACCESS_RIGHTS Access
;
224 ACCESS_RIGHTS ProvSpecificAccess
;
225 INHERIT_FLAGS Inheritance
;
226 LPCWSTR lpInheritProperty
;
228 alias ACTRL_ACCESS_ENTRYW
* PACTRL_ACCESS_ENTRYW
;
230 struct ACTRL_ACCESS_ENTRY_LISTA
{
232 ACTRL_ACCESS_ENTRYA
* pAccessList
;
234 alias ACTRL_ACCESS_ENTRY_LISTA
* PACTRL_ACCESS_ENTRY_LISTA
;
236 struct ACTRL_ACCESS_ENTRY_LISTW
{
238 ACTRL_ACCESS_ENTRYW
* pAccessList
;
240 alias ACTRL_ACCESS_ENTRY_LISTW
* PACTRL_ACCESS_ENTRY_LISTW
;
242 struct ACTRL_PROPERTY_ENTRYA
{
244 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList
;
247 alias ACTRL_PROPERTY_ENTRYA
* PACTRL_PROPERTY_ENTRYA
;
249 struct ACTRL_PROPERTY_ENTRYW
{
251 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList
;
254 alias ACTRL_PROPERTY_ENTRYW
* PACTRL_PROPERTY_ENTRYW
;
256 struct ACTRL_ACCESSA
{
258 PACTRL_PROPERTY_ENTRYA pPropertyAccessList
;
260 alias ACTRL_ACCESSA ACTRL_AUDITA
;
261 alias ACTRL_ACCESSA
* PACTRL_ACCESSA
, PACTRL_AUDITA
;
263 struct ACTRL_ACCESSW
{
265 PACTRL_PROPERTY_ENTRYW pPropertyAccessList
;
267 alias ACTRL_ACCESSW ACTRL_AUDITW
;
268 alias ACTRL_ACCESSW
* PACTRL_ACCESSW
, PACTRL_AUDITW
;
270 struct TRUSTEE_ACCESSA
{
272 ACCESS_RIGHTS Access
;
274 ULONG fReturnedAccess
;
276 alias TRUSTEE_ACCESSA
* PTRUSTEE_ACCESSA
;
278 struct TRUSTEE_ACCESSW
{
280 ACCESS_RIGHTS Access
;
282 ULONG fReturnedAccess
;
284 alias TRUSTEE_ACCESSW
* PTRUSTEE_ACCESSW
;
286 struct ACTRL_OVERLAPPED
{
294 alias ACTRL_OVERLAPPED
* PACTRL_OVERLAPPED
;
296 struct ACTRL_ACCESS_INFOA
{
297 ULONG fAccessPermission
;
298 LPSTR lpAccessPermissionName
;
300 alias ACTRL_ACCESS_INFOA
* PACTRL_ACCESS_INFOA
;
302 struct ACTRL_ACCESS_INFOW
{
303 ULONG fAccessPermission
;
304 LPWSTR lpAccessPermissionName
;
306 alias ACTRL_ACCESS_INFOW
* PACTRL_ACCESS_INFOW
;
308 struct ACTRL_CONTROL_INFOA
{
312 alias ACTRL_CONTROL_INFOA
* PACTRL_CONTROL_INFOA
;
314 struct ACTRL_CONTROL_INFOW
{
316 LPWSTR lpControlName
;
318 alias ACTRL_CONTROL_INFOW
* PACTRL_CONTROL_INFOW
;
320 struct EXPLICIT_ACCESS_A
{
321 DWORD grfAccessPermissions
;
322 ACCESS_MODE grfAccessMode
;
323 DWORD grfInheritance
;
326 alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA
;
327 alias EXPLICIT_ACCESS_A
* PEXPLICIT_ACCESS_A
, PEXPLICIT_ACCESSA
;
329 struct EXPLICIT_ACCESS_W
{
330 DWORD grfAccessPermissions
;
331 ACCESS_MODE grfAccessMode
;
332 DWORD grfInheritance
;
335 alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW
;
336 alias EXPLICIT_ACCESS_W
* PEXPLICIT_ACCESS_W
, PEXPLICIT_ACCESSW
;
338 struct OBJECTS_AND_SID
{
339 DWORD ObjectsPresent
;
341 GUID InheritedObjectTypeGuid
;
344 alias OBJECTS_AND_SID
* POBJECTS_AND_SID
;
346 struct OBJECTS_AND_NAME_A
{
347 DWORD ObjectsPresent
;
348 SE_OBJECT_TYPE ObjectType
;
349 LPSTR ObjectTypeName
;
350 LPSTR InheritedObjectTypeName
;
353 alias OBJECTS_AND_NAME_A
* POBJECTS_AND_NAME_A
;
355 struct OBJECTS_AND_NAME_W
{
356 DWORD ObjectsPresent
;
357 SE_OBJECT_TYPE ObjectType
;
358 LPWSTR ObjectTypeName
;
359 LPWSTR InheritedObjectTypeName
;
362 alias OBJECTS_AND_NAME_W
* POBJECTS_AND_NAME_W
;
364 static if (_WIN32_WINNT
>= 0x501) {
365 struct INHERITED_FROMA
{
369 alias INHERITED_FROMA
* PINHERITED_FROMA
;
371 struct INHERITED_FROMW
{
375 alias INHERITED_FROMW
* PINHERITED_FROMW
;
379 alias TRUSTEEW TRUSTEE
;
380 alias ACTRL_ACCESSW ACTRL_ACCESS
;
381 alias ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST
;
382 alias ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO
;
383 alias ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY
;
384 alias ACTRL_AUDITW ACTRL_AUDIT
;
385 alias ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO
;
386 alias EXPLICIT_ACCESSW EXPLICIT_ACCESS
;
387 alias TRUSTEE_ACCESSW TRUSTEE_ACCESS
;
388 alias OBJECTS_AND_NAME_W OBJECTS_AND_NAME_
;
389 static if (_WIN32_WINNT
>= 0x501) {
390 alias INHERITED_FROMW INHERITED_FROM
;
393 alias TRUSTEEA TRUSTEE
;
394 alias ACTRL_ACCESSA ACTRL_ACCESS
;
395 alias ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST
;
396 alias ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO
;
397 alias ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY
;
398 alias ACTRL_AUDITA ACTRL_AUDIT
;
399 alias ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO
;
400 alias EXPLICIT_ACCESSA EXPLICIT_ACCESS
;
401 alias TRUSTEE_ACCESSA TRUSTEE_ACCESS
;
402 alias OBJECTS_AND_NAME_A OBJECTS_AND_NAME_
;
403 static if (_WIN32_WINNT
>= 0x501) {
404 alias INHERITED_FROMA INHERITED_FROM
;
408 alias TRUSTEE TRUSTEE_
;
409 alias TRUSTEE
* PTRUSTEE
, PTRUSTEE_
;
410 alias ACTRL_ACCESS
* PACTRL_ACCESS
;
411 alias ACTRL_ACCESS_ENTRY_LIST
* PACTRL_ACCESS_ENTRY_LIST
;
412 alias ACTRL_ACCESS_INFO
* PACTRL_ACCESS_INFO
;
413 alias ACTRL_ACCESS_ENTRY
* PACTRL_ACCESS_ENTRY
;
414 alias ACTRL_AUDIT
* PACTRL_AUDIT
;
415 alias ACTRL_CONTROL_INFO
* PACTRL_CONTROL_INFO
;
416 alias EXPLICIT_ACCESS EXPLICIT_ACCESS_
;
417 alias EXPLICIT_ACCESS
* PEXPLICIT_ACCESS
, PEXPLICIT_ACCESS_
;
418 alias TRUSTEE_ACCESS
* PTRUSTEE_ACCESS
;
419 alias OBJECTS_AND_NAME_
* POBJECTS_AND_NAME_
;
420 static if (_WIN32_WINNT
>= 0x501) {
421 alias INHERITED_FROM
* PINHERITED_FROM
;