1/** 2 * Windows API header module 3 * 4 * Translated from MinGW Windows headers 5 * 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) 9 */ 10module core.sys.windows.accctrl; 11version (Windows): 12 13version (ANSI) {} else version = Unicode; 14 15import core.sys.windows.basetyps, core.sys.windows.w32api, core.sys.windows.winbase, core.sys.windows.windef; 16 17// FIXME: check types and grouping of constants 18// FIXME: check Windows version support 19 20alias LocalFree AccFree; 21 22enum uint 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; 36 37enum uint 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; 47 48enum uint 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; 54 55enum uint 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; 72 73enum uint 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; 79 80enum uint 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; 90 91enum uint 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; 98 99enum uint 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; 109 110enum : uint { 111 ACTRL_ACCESS_NO_OPTIONS = 0x00000000, 112 ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001 113} 114 115const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider"; 116 117enum uint 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; 124 125enum uint 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, 131 INHERIT_ONLY = 0x8, 132 INHERITED_ACCESS_ENTRY = 0x10, 133 INHERITED_PARENT = 0x10000000, 134 INHERITED_GRANDPARENT = 0x20000000; 135 136alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS; 137alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS; 138 139enum ACCESS_MODE { 140 NOT_USED_ACCESS, 141 GRANT_ACCESS, 142 SET_ACCESS, 143 DENY_ACCESS, 144 REVOKE_ACCESS, 145 SET_AUDIT_SUCCESS, 146 SET_AUDIT_FAILURE 147} 148 149enum SE_OBJECT_TYPE { 150 SE_UNKNOWN_OBJECT_TYPE, 151 SE_FILE_OBJECT, 152 SE_SERVICE, 153 SE_PRINTER, 154 SE_REGISTRY_KEY, 155 SE_LMSHARE, 156 SE_KERNEL_OBJECT, 157 SE_WINDOW_OBJECT, 158 SE_DS_OBJECT, 159 SE_DS_OBJECT_ALL, 160 SE_PROVIDER_DEFINED_OBJECT, 161 SE_WMIGUID_OBJECT, 162 SE_REGISTRY_WOW64_32KEY 163} 164 165enum TRUSTEE_TYPE { 166 TRUSTEE_IS_UNKNOWN, 167 TRUSTEE_IS_USER, 168 TRUSTEE_IS_GROUP, 169 TRUSTEE_IS_DOMAIN, 170 TRUSTEE_IS_ALIAS, 171 TRUSTEE_IS_WELL_KNOWN_GROUP, 172 TRUSTEE_IS_DELETED, 173 TRUSTEE_IS_INVALID, 174 TRUSTEE_IS_COMPUTER 175} 176 177enum TRUSTEE_FORM { 178 TRUSTEE_IS_SID, 179 TRUSTEE_IS_NAME, 180 TRUSTEE_BAD_FORM, 181 TRUSTEE_IS_OBJECTS_AND_SID, 182 TRUSTEE_IS_OBJECTS_AND_NAME 183} 184 185enum MULTIPLE_TRUSTEE_OPERATION { 186 NO_MULTIPLE_TRUSTEE, 187 TRUSTEE_IS_IMPERSONATE 188} 189 190struct TRUSTEE_A { 191 TRUSTEE_A* pMultipleTrustee; 192 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 193 TRUSTEE_FORM TrusteeForm; 194 TRUSTEE_TYPE TrusteeType; 195 LPSTR ptstrName; 196} 197alias TRUSTEE_A TRUSTEEA; 198alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA; 199 200struct TRUSTEE_W { 201 TRUSTEE_W* pMultipleTrustee; 202 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 203 TRUSTEE_FORM TrusteeForm; 204 TRUSTEE_TYPE TrusteeType; 205 LPWSTR ptstrName; 206} 207alias TRUSTEE_W TRUSTEEW; 208alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW; 209 210struct ACTRL_ACCESS_ENTRYA { 211 TRUSTEE_A Trustee; 212 ULONG fAccessFlags; 213 ACCESS_RIGHTS Access; 214 ACCESS_RIGHTS ProvSpecificAccess; 215 INHERIT_FLAGS Inheritance; 216 LPCSTR lpInheritProperty; 217} 218alias ACTRL_ACCESS_ENTRYA* PACTRL_ACCESS_ENTRYA; 219 220struct ACTRL_ACCESS_ENTRYW { 221 TRUSTEE_W Trustee; 222 ULONG fAccessFlags; 223 ACCESS_RIGHTS Access; 224 ACCESS_RIGHTS ProvSpecificAccess; 225 INHERIT_FLAGS Inheritance; 226 LPCWSTR lpInheritProperty; 227} 228alias ACTRL_ACCESS_ENTRYW* PACTRL_ACCESS_ENTRYW; 229 230struct ACTRL_ACCESS_ENTRY_LISTA { 231 ULONG cEntries; 232 ACTRL_ACCESS_ENTRYA* pAccessList; 233} 234alias ACTRL_ACCESS_ENTRY_LISTA* PACTRL_ACCESS_ENTRY_LISTA; 235 236struct ACTRL_ACCESS_ENTRY_LISTW { 237 ULONG cEntries; 238 ACTRL_ACCESS_ENTRYW* pAccessList; 239} 240alias ACTRL_ACCESS_ENTRY_LISTW* PACTRL_ACCESS_ENTRY_LISTW; 241 242struct ACTRL_PROPERTY_ENTRYA { 243 LPCSTR lpProperty; 244 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; 245 ULONG fListFlags; 246} 247alias ACTRL_PROPERTY_ENTRYA* PACTRL_PROPERTY_ENTRYA; 248 249struct ACTRL_PROPERTY_ENTRYW { 250 LPCWSTR lpProperty; 251 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; 252 ULONG fListFlags; 253} 254alias ACTRL_PROPERTY_ENTRYW* PACTRL_PROPERTY_ENTRYW; 255 256struct ACTRL_ACCESSA { 257 ULONG cEntries; 258 PACTRL_PROPERTY_ENTRYA pPropertyAccessList; 259} 260alias ACTRL_ACCESSA ACTRL_AUDITA; 261alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA; 262 263struct ACTRL_ACCESSW { 264 ULONG cEntries; 265 PACTRL_PROPERTY_ENTRYW pPropertyAccessList; 266} 267alias ACTRL_ACCESSW ACTRL_AUDITW; 268alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW; 269 270struct TRUSTEE_ACCESSA { 271 LPSTR lpProperty; 272 ACCESS_RIGHTS Access; 273 ULONG fAccessFlags; 274 ULONG fReturnedAccess; 275} 276alias TRUSTEE_ACCESSA* PTRUSTEE_ACCESSA; 277 278struct TRUSTEE_ACCESSW { 279 LPWSTR lpProperty; 280 ACCESS_RIGHTS Access; 281 ULONG fAccessFlags; 282 ULONG fReturnedAccess; 283} 284alias TRUSTEE_ACCESSW* PTRUSTEE_ACCESSW; 285 286struct ACTRL_OVERLAPPED { 287 union { 288 PVOID Provider; 289 ULONG Reserved1; 290 } 291 ULONG Reserved2; 292 HANDLE hEvent; 293} 294alias ACTRL_OVERLAPPED* PACTRL_OVERLAPPED; 295 296struct ACTRL_ACCESS_INFOA { 297 ULONG fAccessPermission; 298 LPSTR lpAccessPermissionName; 299} 300alias ACTRL_ACCESS_INFOA* PACTRL_ACCESS_INFOA; 301 302struct ACTRL_ACCESS_INFOW { 303 ULONG fAccessPermission; 304 LPWSTR lpAccessPermissionName; 305} 306alias ACTRL_ACCESS_INFOW* PACTRL_ACCESS_INFOW; 307 308struct ACTRL_CONTROL_INFOA { 309 LPSTR lpControlId; 310 LPSTR lpControlName; 311} 312alias ACTRL_CONTROL_INFOA* PACTRL_CONTROL_INFOA; 313 314struct ACTRL_CONTROL_INFOW { 315 LPWSTR lpControlId; 316 LPWSTR lpControlName; 317} 318alias ACTRL_CONTROL_INFOW* PACTRL_CONTROL_INFOW; 319 320struct EXPLICIT_ACCESS_A { 321 DWORD grfAccessPermissions; 322 ACCESS_MODE grfAccessMode; 323 DWORD grfInheritance; 324 TRUSTEE_A Trustee; 325} 326alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA; 327alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA; 328 329struct EXPLICIT_ACCESS_W { 330 DWORD grfAccessPermissions; 331 ACCESS_MODE grfAccessMode; 332 DWORD grfInheritance; 333 TRUSTEE_W Trustee; 334} 335alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW; 336alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW; 337 338struct OBJECTS_AND_SID { 339 DWORD ObjectsPresent; 340 GUID ObjectTypeGuid; 341 GUID InheritedObjectTypeGuid; 342 SID* pSid; 343} 344alias OBJECTS_AND_SID* POBJECTS_AND_SID; 345 346struct OBJECTS_AND_NAME_A { 347 DWORD ObjectsPresent; 348 SE_OBJECT_TYPE ObjectType; 349 LPSTR ObjectTypeName; 350 LPSTR InheritedObjectTypeName; 351 LPSTR ptstrName; 352} 353alias OBJECTS_AND_NAME_A* POBJECTS_AND_NAME_A; 354 355struct OBJECTS_AND_NAME_W { 356 DWORD ObjectsPresent; 357 SE_OBJECT_TYPE ObjectType; 358 LPWSTR ObjectTypeName; 359 LPWSTR InheritedObjectTypeName; 360 LPWSTR ptstrName; 361} 362alias OBJECTS_AND_NAME_W* POBJECTS_AND_NAME_W; 363 364static if (_WIN32_WINNT >= 0x501) { 365 struct INHERITED_FROMA { 366 LONG GenerationGap; 367 LPSTR AncestorName; 368 } 369 alias INHERITED_FROMA* PINHERITED_FROMA; 370 371 struct INHERITED_FROMW { 372 LONG GenerationGap; 373 LPWSTR AncestorName; 374 } 375 alias INHERITED_FROMW* PINHERITED_FROMW; 376} 377 378version (Unicode) { 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; 391 } 392} else { 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; 405 } 406} 407 408alias TRUSTEE TRUSTEE_; 409alias TRUSTEE* PTRUSTEE, PTRUSTEE_; 410alias ACTRL_ACCESS* PACTRL_ACCESS; 411alias ACTRL_ACCESS_ENTRY_LIST* PACTRL_ACCESS_ENTRY_LIST; 412alias ACTRL_ACCESS_INFO* PACTRL_ACCESS_INFO; 413alias ACTRL_ACCESS_ENTRY* PACTRL_ACCESS_ENTRY; 414alias ACTRL_AUDIT* PACTRL_AUDIT; 415alias ACTRL_CONTROL_INFO* PACTRL_CONTROL_INFO; 416alias EXPLICIT_ACCESS EXPLICIT_ACCESS_; 417alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_; 418alias TRUSTEE_ACCESS* PTRUSTEE_ACCESS; 419alias OBJECTS_AND_NAME_* POBJECTS_AND_NAME_; 420static if (_WIN32_WINNT >= 0x501) { 421 alias INHERITED_FROM* PINHERITED_FROM; 422} 423