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 */ 10 module nulib.system.win32.accctrl; 11 12 13 version (ANSI) {} else version = Unicode; 14 15 import nulib.system.win32.basetyps, nulib.system.win32.w32api, nulib.system.win32.winbase, nulib.system.win32.windef; 16 17 // FIXME: check types and grouping of constants 18 // FIXME: check Windows version support 19 20 alias AccFree = LocalFree; 21 22 enum 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 37 enum 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 48 enum 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 55 enum 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 73 enum 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 80 enum 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 91 enum 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 99 enum 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 110 enum : uint { 111 ACTRL_ACCESS_NO_OPTIONS = 0x00000000, 112 ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001 113 } 114 115 const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider"; 116 117 enum 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 125 enum 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 136 alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS; 137 alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS; 138 139 enum 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 149 enum 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 165 enum 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 177 enum 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 185 enum MULTIPLE_TRUSTEE_OPERATION { 186 NO_MULTIPLE_TRUSTEE, 187 TRUSTEE_IS_IMPERSONATE 188 } 189 190 struct TRUSTEE_A { 191 TRUSTEE_A* pMultipleTrustee; 192 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 193 TRUSTEE_FORM TrusteeForm; 194 TRUSTEE_TYPE TrusteeType; 195 LPSTR ptstrName; 196 } 197 alias TRUSTEEA = TRUSTEE_A; 198 alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA; 199 200 struct TRUSTEE_W { 201 TRUSTEE_W* pMultipleTrustee; 202 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 203 TRUSTEE_FORM TrusteeForm; 204 TRUSTEE_TYPE TrusteeType; 205 LPWSTR ptstrName; 206 } 207 alias TRUSTEEW = TRUSTEE_W; 208 alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW; 209 210 struct 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 } 218 alias PACTRL_ACCESS_ENTRYA = ACTRL_ACCESS_ENTRYA*; 219 220 struct 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 } 228 alias PACTRL_ACCESS_ENTRYW = ACTRL_ACCESS_ENTRYW*; 229 230 struct ACTRL_ACCESS_ENTRY_LISTA { 231 ULONG cEntries; 232 ACTRL_ACCESS_ENTRYA* pAccessList; 233 } 234 alias PACTRL_ACCESS_ENTRY_LISTA = ACTRL_ACCESS_ENTRY_LISTA*; 235 236 struct ACTRL_ACCESS_ENTRY_LISTW { 237 ULONG cEntries; 238 ACTRL_ACCESS_ENTRYW* pAccessList; 239 } 240 alias PACTRL_ACCESS_ENTRY_LISTW = ACTRL_ACCESS_ENTRY_LISTW*; 241 242 struct ACTRL_PROPERTY_ENTRYA { 243 LPCSTR lpProperty; 244 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; 245 ULONG fListFlags; 246 } 247 alias PACTRL_PROPERTY_ENTRYA = ACTRL_PROPERTY_ENTRYA*; 248 249 struct ACTRL_PROPERTY_ENTRYW { 250 LPCWSTR lpProperty; 251 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; 252 ULONG fListFlags; 253 } 254 alias PACTRL_PROPERTY_ENTRYW = ACTRL_PROPERTY_ENTRYW*; 255 256 struct ACTRL_ACCESSA { 257 ULONG cEntries; 258 PACTRL_PROPERTY_ENTRYA pPropertyAccessList; 259 } 260 alias ACTRL_AUDITA = ACTRL_ACCESSA; 261 alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA; 262 263 struct ACTRL_ACCESSW { 264 ULONG cEntries; 265 PACTRL_PROPERTY_ENTRYW pPropertyAccessList; 266 } 267 alias ACTRL_AUDITW = ACTRL_ACCESSW; 268 alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW; 269 270 struct TRUSTEE_ACCESSA { 271 LPSTR lpProperty; 272 ACCESS_RIGHTS Access; 273 ULONG fAccessFlags; 274 ULONG fReturnedAccess; 275 } 276 alias PTRUSTEE_ACCESSA = TRUSTEE_ACCESSA*; 277 278 struct TRUSTEE_ACCESSW { 279 LPWSTR lpProperty; 280 ACCESS_RIGHTS Access; 281 ULONG fAccessFlags; 282 ULONG fReturnedAccess; 283 } 284 alias PTRUSTEE_ACCESSW = TRUSTEE_ACCESSW*; 285 286 struct ACTRL_OVERLAPPED { 287 union { 288 PVOID Provider; 289 ULONG Reserved1; 290 } 291 ULONG Reserved2; 292 HANDLE hEvent; 293 } 294 alias PACTRL_OVERLAPPED = ACTRL_OVERLAPPED*; 295 296 struct ACTRL_ACCESS_INFOA { 297 ULONG fAccessPermission; 298 LPSTR lpAccessPermissionName; 299 } 300 alias PACTRL_ACCESS_INFOA = ACTRL_ACCESS_INFOA*; 301 302 struct ACTRL_ACCESS_INFOW { 303 ULONG fAccessPermission; 304 LPWSTR lpAccessPermissionName; 305 } 306 alias PACTRL_ACCESS_INFOW = ACTRL_ACCESS_INFOW*; 307 308 struct ACTRL_CONTROL_INFOA { 309 LPSTR lpControlId; 310 LPSTR lpControlName; 311 } 312 alias PACTRL_CONTROL_INFOA = ACTRL_CONTROL_INFOA*; 313 314 struct ACTRL_CONTROL_INFOW { 315 LPWSTR lpControlId; 316 LPWSTR lpControlName; 317 } 318 alias PACTRL_CONTROL_INFOW = ACTRL_CONTROL_INFOW*; 319 320 struct EXPLICIT_ACCESS_A { 321 DWORD grfAccessPermissions; 322 ACCESS_MODE grfAccessMode; 323 DWORD grfInheritance; 324 TRUSTEE_A Trustee; 325 } 326 alias EXPLICIT_ACCESSA = EXPLICIT_ACCESS_A; 327 alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA; 328 329 struct EXPLICIT_ACCESS_W { 330 DWORD grfAccessPermissions; 331 ACCESS_MODE grfAccessMode; 332 DWORD grfInheritance; 333 TRUSTEE_W Trustee; 334 } 335 alias EXPLICIT_ACCESSW = EXPLICIT_ACCESS_W; 336 alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW; 337 338 struct OBJECTS_AND_SID { 339 DWORD ObjectsPresent; 340 GUID ObjectTypeGuid; 341 GUID InheritedObjectTypeGuid; 342 SID* pSid; 343 } 344 alias POBJECTS_AND_SID = OBJECTS_AND_SID*; 345 346 struct OBJECTS_AND_NAME_A { 347 DWORD ObjectsPresent; 348 SE_OBJECT_TYPE ObjectType; 349 LPSTR ObjectTypeName; 350 LPSTR InheritedObjectTypeName; 351 LPSTR ptstrName; 352 } 353 alias POBJECTS_AND_NAME_A = OBJECTS_AND_NAME_A*; 354 355 struct OBJECTS_AND_NAME_W { 356 DWORD ObjectsPresent; 357 SE_OBJECT_TYPE ObjectType; 358 LPWSTR ObjectTypeName; 359 LPWSTR InheritedObjectTypeName; 360 LPWSTR ptstrName; 361 } 362 alias POBJECTS_AND_NAME_W = OBJECTS_AND_NAME_W*; 363 364 static if (_WIN32_WINNT >= 0x501) { 365 struct INHERITED_FROMA { 366 LONG GenerationGap; 367 LPSTR AncestorName; 368 } 369 alias PINHERITED_FROMA = INHERITED_FROMA*; 370 371 struct INHERITED_FROMW { 372 LONG GenerationGap; 373 LPWSTR AncestorName; 374 } 375 alias PINHERITED_FROMW = INHERITED_FROMW*; 376 } 377 378 version (Unicode) { 379 alias TRUSTEE = TRUSTEEW; 380 alias ACTRL_ACCESS = ACTRL_ACCESSW; 381 alias ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTW; 382 alias ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOW; 383 alias ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYW; 384 alias ACTRL_AUDIT = ACTRL_AUDITW; 385 alias ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOW; 386 alias EXPLICIT_ACCESS = EXPLICIT_ACCESSW; 387 alias TRUSTEE_ACCESS = TRUSTEE_ACCESSW; 388 alias OBJECTS_AND_NAME_ = OBJECTS_AND_NAME_W; 389 static if (_WIN32_WINNT >= 0x501) { 390 alias INHERITED_FROM = INHERITED_FROMW; 391 } 392 } else { 393 alias TRUSTEE = TRUSTEEA; 394 alias ACTRL_ACCESS = ACTRL_ACCESSA; 395 alias ACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LISTA; 396 alias ACTRL_ACCESS_INFO = ACTRL_ACCESS_INFOA; 397 alias ACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRYA; 398 alias ACTRL_AUDIT = ACTRL_AUDITA; 399 alias ACTRL_CONTROL_INFO = ACTRL_CONTROL_INFOA; 400 alias EXPLICIT_ACCESS = EXPLICIT_ACCESSA; 401 alias TRUSTEE_ACCESS = TRUSTEE_ACCESSA; 402 alias OBJECTS_AND_NAME_ = OBJECTS_AND_NAME_A; 403 static if (_WIN32_WINNT >= 0x501) { 404 alias INHERITED_FROM = INHERITED_FROMA; 405 } 406 } 407 408 alias TRUSTEE_ = TRUSTEE; 409 alias TRUSTEE* PTRUSTEE, PTRUSTEE_; 410 alias PACTRL_ACCESS = ACTRL_ACCESS*; 411 alias PACTRL_ACCESS_ENTRY_LIST = ACTRL_ACCESS_ENTRY_LIST*; 412 alias PACTRL_ACCESS_INFO = ACTRL_ACCESS_INFO*; 413 alias PACTRL_ACCESS_ENTRY = ACTRL_ACCESS_ENTRY*; 414 alias PACTRL_AUDIT = ACTRL_AUDIT*; 415 alias PACTRL_CONTROL_INFO = ACTRL_CONTROL_INFO*; 416 alias EXPLICIT_ACCESS_ = EXPLICIT_ACCESS; 417 alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_; 418 alias PTRUSTEE_ACCESS = TRUSTEE_ACCESS*; 419 alias POBJECTS_AND_NAME_ = OBJECTS_AND_NAME_*; 420 static if (_WIN32_WINNT >= 0x501) { 421 alias PINHERITED_FROM = INHERITED_FROM*; 422 }