1 /** 2 * Windows API header module 3 * 4 * Translated from MinGW API for MS-Windows 3.12 5 * 6 * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0) 7 * Source: $(DRUNTIMESRC core/sys/windows/_winnt.d) 8 */ 9 module nulib.system.win32.winnt; 10 11 12 version (ANSI) {} else version = Unicode; 13 14 public import nulib.system.win32.basetsd, nulib.system.win32.windef, nulib.system.win32.winerror; 15 import nulib.system.win32.w32api; 16 17 /* Translation Notes: 18 The following macros are unneeded for D: 19 FIELD_OFFSET(t,f), CONTAINING_RECORD(address, type, field) 20 */ 21 22 alias VOID = void; 23 alias CHAR = char; 24 alias CCHAR = char; 25 alias WCHAR = wchar; 26 alias BOOLEAN = bool; 27 alias FCHAR = byte; 28 alias UCHAR = ubyte; 29 alias SHORT = short; 30 alias LANGID = ushort; 31 alias FSHORT = ushort; 32 alias LCID = uint; 33 alias FLONG = uint; 34 alias ACCESS_MASK = uint; 35 alias LONGLONG = long; 36 alias USN = long; 37 alias DWORDLONG = ulong; 38 alias ULONGLONG = ulong; 39 40 alias PVOID = void*; 41 alias LPVOID = void*; 42 alias PSZ = char*; 43 alias PCHAR = char*; 44 alias PCCHAR = char*; 45 alias LPCH = char*; 46 alias PCH = char*; 47 alias LPSTR = char*; 48 alias PSTR = char*; 49 alias PWCHAR = wchar*; 50 alias LPWCH = wchar*; 51 alias PWCH = wchar*; 52 alias LPWSTR = wchar*; 53 alias PWSTR = wchar*; 54 alias PBOOLEAN = bool*; 55 alias PUCHAR = ubyte*; 56 alias PSHORT = short*; 57 alias PLONG = int*; 58 alias PLCID = uint*; 59 alias PACCESS_MASK = uint*; 60 alias PLONGLONG = long*; 61 alias PDWORDLONG = ulong*; 62 alias PULONGLONG = ulong*; 63 64 // FIXME(MinGW) for __WIN64 65 alias PVOID64 = void*; 66 67 // const versions 68 alias PCCH = const(char)*; 69 alias LPCCH = const(char)*; 70 alias PCSTR = const(char)*; 71 alias LPCSTR = const(char)*; 72 alias LPCWCH = const(wchar)*; 73 alias PCWCH = const(wchar)*; 74 alias LPCWSTR = const(wchar)*; 75 alias PCWSTR = const(wchar)*; 76 77 alias PZPSTR = PSTR*; 78 alias PZPWSTR = PWSTR*; 79 80 version (Unicode) { 81 alias TCHAR = WCHAR; 82 alias _TCHAR = WCHAR; 83 } else { 84 alias TCHAR = CHAR; 85 alias _TCHAR = CHAR; 86 } 87 88 alias TBYTE = TCHAR; 89 alias PTCH = TCHAR*; 90 alias PTBYTE = TCHAR*; 91 alias LPTCH = TCHAR*; 92 alias PTSTR = TCHAR*; 93 alias LPTSTR = TCHAR*; 94 alias LP = TCHAR*; 95 alias PTCHAR = TCHAR*; 96 alias PCTCH = const(TCHAR)*; 97 alias LPCTCH = const(TCHAR)*; 98 alias PCTSTR = const(TCHAR)*; 99 alias LPCTSTR = const(TCHAR)*; 100 101 enum char ANSI_NULL = '\0'; 102 enum wchar UNICODE_NULL = '\0'; 103 104 enum APPLICATION_ERROR_MASK = 0x20000000; 105 enum ERROR_SEVERITY_SUCCESS = 0x00000000; 106 enum ERROR_SEVERITY_INFORMATIONAL = 0x40000000; 107 enum ERROR_SEVERITY_WARNING = 0x80000000; 108 enum ERROR_SEVERITY_ERROR = 0xC0000000; 109 110 // MinGW: also in ddk/ntifs.h 111 enum : USHORT { 112 COMPRESSION_FORMAT_NONE = 0x0000, 113 COMPRESSION_FORMAT_DEFAULT = 0x0001, 114 COMPRESSION_FORMAT_LZNT1 = 0x0002, 115 COMPRESSION_ENGINE_STANDARD = 0x0000, 116 COMPRESSION_ENGINE_MAXIMUM = 0x0100, 117 COMPRESSION_ENGINE_HIBER = 0x0200 118 } 119 120 // ACCESS_DENIED_OBJECT_ACE, etc 121 enum DWORD 122 ACE_OBJECT_TYPE_PRESENT = 0x00000001, 123 ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x00000002; 124 125 // ACE_HEADER.AceType 126 // also in ddk/ntifs.h 127 enum : BYTE { 128 ACCESS_ALLOWED_ACE_TYPE, 129 ACCESS_DENIED_ACE_TYPE, 130 SYSTEM_AUDIT_ACE_TYPE, 131 SYSTEM_ALARM_ACE_TYPE 132 } 133 134 // ACE_HEADER.AceFlags 135 enum BYTE 136 OBJECT_INHERIT_ACE = 0x01, 137 CONTAINER_INHERIT_ACE = 0x02, 138 NO_PROPAGATE_INHERIT_ACE = 0x04, 139 INHERIT_ONLY_ACE = 0x08, 140 INHERITED_ACE = 0x10, 141 VALID_INHERIT_FLAGS = 0x1F, 142 SUCCESSFUL_ACCESS_ACE_FLAG = 0x40, 143 FAILED_ACCESS_ACE_FLAG = 0x80; 144 145 // Access Mask Format 146 enum ACCESS_MASK 147 DELETE = 0x00010000, 148 READ_CONTROL = 0x00020000, 149 WRITE_DAC = 0x00040000, 150 WRITE_OWNER = 0x00080000, 151 SYNCHRONIZE = 0x00100000, 152 ACCESS_SYSTEM_SECURITY = 0x01000000, 153 MAXIMUM_ALLOWED = 0x02000000, 154 GENERIC_READ = 0x80000000, 155 GENERIC_WRITE = 0x40000000, 156 GENERIC_EXECUTE = 0x20000000, 157 GENERIC_ALL = 0x10000000, 158 STANDARD_RIGHTS_REQUIRED = 0x000F0000, 159 STANDARD_RIGHTS_READ = 0x00020000, 160 STANDARD_RIGHTS_WRITE = 0x00020000, 161 STANDARD_RIGHTS_EXECUTE = 0x00020000, 162 STANDARD_RIGHTS_ALL = 0x001F0000, 163 SPECIFIC_RIGHTS_ALL = 0x0000FFFF; 164 165 166 enum DWORD INVALID_FILE_ATTRIBUTES = -1; 167 168 // MinGW: Also in ddk/winddk.h 169 enum DWORD 170 FILE_LIST_DIRECTORY = 0x00000001, 171 FILE_READ_DATA = 0x00000001, 172 FILE_ADD_FILE = 0x00000002, 173 FILE_WRITE_DATA = 0x00000002, 174 FILE_ADD_SUBDIRECTORY = 0x00000004, 175 FILE_APPEND_DATA = 0x00000004, 176 FILE_CREATE_PIPE_INSTANCE = 0x00000004, 177 FILE_READ_EA = 0x00000008, 178 FILE_READ_PROPERTIES = 0x00000008, 179 FILE_WRITE_EA = 0x00000010, 180 FILE_WRITE_PROPERTIES = 0x00000010, 181 FILE_EXECUTE = 0x00000020, 182 FILE_TRAVERSE = 0x00000020, 183 FILE_DELETE_CHILD = 0x00000040, 184 FILE_READ_ATTRIBUTES = 0x00000080, 185 FILE_WRITE_ATTRIBUTES = 0x00000100; 186 187 enum DWORD 188 FILE_SHARE_READ = 0x00000001, 189 FILE_SHARE_WRITE = 0x00000002, 190 FILE_SHARE_DELETE = 0x00000004, 191 FILE_SHARE_VALID_FLAGS = 0x00000007; 192 193 enum DWORD 194 FILE_ATTRIBUTE_READONLY = 0x00000001, 195 FILE_ATTRIBUTE_HIDDEN = 0x00000002, 196 FILE_ATTRIBUTE_SYSTEM = 0x00000004, 197 FILE_ATTRIBUTE_DIRECTORY = 0x00000010, 198 FILE_ATTRIBUTE_ARCHIVE = 0x00000020, 199 FILE_ATTRIBUTE_DEVICE = 0x00000040, 200 FILE_ATTRIBUTE_NORMAL = 0x00000080, 201 FILE_ATTRIBUTE_TEMPORARY = 0x00000100, 202 FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200, 203 FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400, 204 FILE_ATTRIBUTE_COMPRESSED = 0x00000800, 205 FILE_ATTRIBUTE_OFFLINE = 0x00001000, 206 FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000, 207 FILE_ATTRIBUTE_ENCRYPTED = 0x00004000, 208 FILE_ATTRIBUTE_VALID_FLAGS = 0x00007fb7, 209 FILE_ATTRIBUTE_VALID_SET_FLAGS = 0x000031a7; 210 211 // These are not documented on MSDN 212 enum FILE_COPY_STRUCTURED_STORAGE = 0x00000041; 213 enum FILE_STRUCTURED_STORAGE = 0x00000441; 214 215 // Nor are these 216 enum FILE_VALID_OPTION_FLAGS = 0x00ffffff; 217 enum FILE_VALID_PIPE_OPTION_FLAGS = 0x00000032; 218 enum FILE_VALID_MAILSLOT_OPTION_FLAGS = 0x00000032; 219 enum FILE_VALID_SET_FLAGS = 0x00000036; 220 221 enum ULONG 222 FILE_SUPERSEDE = 0x00000000, 223 FILE_OPEN = 0x00000001, 224 FILE_CREATE = 0x00000002, 225 FILE_OPEN_IF = 0x00000003, 226 FILE_OVERWRITE = 0x00000004, 227 FILE_OVERWRITE_IF = 0x00000005, 228 FILE_MAXIMUM_DISPOSITION = 0x00000005; 229 230 enum ULONG 231 FILE_DIRECTORY_FILE = 0x00000001, 232 FILE_WRITE_THROUGH = 0x00000002, 233 FILE_SEQUENTIAL_ONLY = 0x00000004, 234 FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008, 235 FILE_SYNCHRONOUS_IO_ALERT = 0x00000010, 236 FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020, 237 FILE_NON_DIRECTORY_FILE = 0x00000040, 238 FILE_CREATE_TREE_CONNECTION = 0x00000080, 239 FILE_COMPLETE_IF_OPLOCKED = 0x00000100, 240 FILE_NO_EA_KNOWLEDGE = 0x00000200, 241 FILE_OPEN_FOR_RECOVERY = 0x00000400, 242 FILE_RANDOM_ACCESS = 0x00000800, 243 FILE_DELETE_ON_CLOSE = 0x00001000, 244 FILE_OPEN_BY_FILE_ID = 0x00002000, 245 FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000, 246 FILE_NO_COMPRESSION = 0x00008000, 247 FILE_RESERVE_OPFILTER = 0x00100000, 248 FILE_OPEN_REPARSE_POINT = 0x00200000, 249 FILE_OPEN_NO_RECALL = 0x00400000, 250 FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000; 251 252 253 enum ACCESS_MASK 254 FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x01FF, 255 FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES 256 | FILE_EXECUTE | SYNCHRONIZE, 257 FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA 258 | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE, 259 FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA 260 | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA 261 | SYNCHRONIZE; 262 263 // MinGW: end winddk.h 264 // MinGW: also in ddk/ntifs.h 265 enum DWORD 266 FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001, 267 FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002, 268 FILE_NOTIFY_CHANGE_NAME = 0x00000003, 269 FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004, 270 FILE_NOTIFY_CHANGE_SIZE = 0x00000008, 271 FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010, 272 FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020, 273 FILE_NOTIFY_CHANGE_CREATION = 0x00000040, 274 FILE_NOTIFY_CHANGE_EA = 0x00000080, 275 FILE_NOTIFY_CHANGE_SECURITY = 0x00000100, 276 FILE_NOTIFY_CHANGE_STREAM_NAME = 0x00000200, 277 FILE_NOTIFY_CHANGE_STREAM_SIZE = 0x00000400, 278 FILE_NOTIFY_CHANGE_STREAM_WRITE = 0x00000800, 279 FILE_NOTIFY_VALID_MASK = 0x00000fff; 280 281 enum DWORD 282 FILE_CASE_SENSITIVE_SEARCH = 0x00000001, 283 FILE_CASE_PRESERVED_NAMES = 0x00000002, 284 FILE_UNICODE_ON_DISK = 0x00000004, 285 FILE_PERSISTENT_ACLS = 0x00000008, 286 FILE_FILE_COMPRESSION = 0x00000010, 287 FILE_VOLUME_QUOTAS = 0x00000020, 288 FILE_SUPPORTS_SPARSE_FILES = 0x00000040, 289 FILE_SUPPORTS_REPARSE_POINTS = 0x00000080, 290 FILE_SUPPORTS_REMOTE_STORAGE = 0x00000100, 291 FS_LFN_APIS = 0x00004000, 292 FILE_VOLUME_IS_COMPRESSED = 0x00008000, 293 FILE_SUPPORTS_OBJECT_IDS = 0x00010000, 294 FILE_SUPPORTS_ENCRYPTION = 0x00020000, 295 FILE_NAMED_STREAMS = 0x00040000, 296 FILE_READ_ONLY_VOLUME = 0x00080000, 297 FILE_SEQUENTIAL_WRITE_ONCE = 0x00100000, 298 FILE_SUPPORTS_TRANSACTIONS = 0x00200000; 299 300 // These are not documented on MSDN 301 enum ACCESS_MASK 302 IO_COMPLETION_QUERY_STATE = 1, 303 IO_COMPLETION_MODIFY_STATE = 2, 304 IO_COMPLETION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 3; 305 // MinGW: end ntifs.h 306 307 // MinGW: also in ddk/winddk.h 308 enum DWORD 309 DUPLICATE_CLOSE_SOURCE = 1, 310 DUPLICATE_SAME_ACCESS = 2, 311 DUPLICATE_SAME_ATTRIBUTES = 4; 312 // MinGW: end winddk.k 313 314 enum DWORD 315 MAILSLOT_NO_MESSAGE = -1, 316 MAILSLOT_WAIT_FOREVER = -1; 317 318 enum ACCESS_MASK 319 PROCESS_TERMINATE = 0x0001, 320 PROCESS_CREATE_THREAD = 0x0002, 321 PROCESS_SET_SESSIONID = 0x0004, 322 PROCESS_VM_OPERATION = 0x0008, 323 PROCESS_VM_READ = 0x0010, 324 PROCESS_VM_WRITE = 0x0020, 325 PROCESS_DUP_HANDLE = 0x0040, 326 PROCESS_CREATE_PROCESS = 0x0080, 327 PROCESS_SET_QUOTA = 0x0100, 328 PROCESS_SET_INFORMATION = 0x0200, 329 PROCESS_QUERY_INFORMATION = 0x0400, 330 PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0FFF; 331 332 enum ACCESS_MASK 333 THREAD_TERMINATE = 0x0001, 334 THREAD_SUSPEND_RESUME = 0x0002, 335 THREAD_GET_CONTEXT = 0x0008, 336 THREAD_SET_CONTEXT = 0x0010, 337 THREAD_SET_INFORMATION = 0x0020, 338 THREAD_QUERY_INFORMATION = 0x0040, 339 THREAD_SET_THREAD_TOKEN = 0x0080, 340 THREAD_IMPERSONATE = 0x0100, 341 THREAD_DIRECT_IMPERSONATION = 0x0200, 342 THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF; 343 344 // These are not documented on MSDN 345 enum THREAD_BASE_PRIORITY_LOWRT = 15; 346 enum THREAD_BASE_PRIORITY_MAX = 2; 347 enum THREAD_BASE_PRIORITY_MIN = -2; 348 enum THREAD_BASE_PRIORITY_IDLE = -15; 349 350 enum DWORD EXCEPTION_NONCONTINUABLE = 1; 351 enum size_t EXCEPTION_MAXIMUM_PARAMETERS = 15; 352 353 // These are not documented on MSDN 354 enum ACCESS_MASK 355 MUTANT_QUERY_STATE = 1, 356 MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE; 357 358 enum ACCESS_MASK 359 TIMER_QUERY_STATE = 1, 360 TIMER_MODIFY_STATE = 2, 361 TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE 362 | TIMER_MODIFY_STATE; 363 364 enum SID_IDENTIFIER_AUTHORITY 365 SECURITY_NULL_SID_AUTHORITY = {[5: 0]}, 366 SECURITY_WORLD_SID_AUTHORITY = {[5: 1]}, 367 SECURITY_LOCAL_SID_AUTHORITY = {[5: 2]}, 368 SECURITY_CREATOR_SID_AUTHORITY = {[5: 3]}, 369 SECURITY_NON_UNIQUE_AUTHORITY = {[5: 4]}, 370 SECURITY_NT_AUTHORITY = {[5: 5]}, 371 SECURITY_MANDATORY_LABEL_AUTHORITY = {[5: 6]}; 372 373 enum DWORD 374 SECURITY_NULL_RID = 0, 375 SECURITY_WORLD_RID = 0, 376 SECURITY_LOCAL_RID = 0, 377 SECURITY_CREATOR_OWNER_RID = 0, 378 SECURITY_CREATOR_GROUP_RID = 1, 379 SECURITY_DIALUP_RID = 1, 380 SECURITY_NETWORK_RID = 2, 381 SECURITY_BATCH_RID = 3, 382 SECURITY_INTERACTIVE_RID = 4, 383 SECURITY_LOGON_IDS_RID = 5, 384 SECURITY_SERVICE_RID = 6, 385 SECURITY_LOCAL_SYSTEM_RID = 18, 386 SECURITY_BUILTIN_DOMAIN_RID = 32, 387 SECURITY_PRINCIPAL_SELF_RID = 10, 388 SECURITY_CREATOR_OWNER_SERVER_RID = 2, 389 SECURITY_CREATOR_GROUP_SERVER_RID = 3, 390 SECURITY_LOGON_IDS_RID_COUNT = 3, 391 SECURITY_ANONYMOUS_LOGON_RID = 7, 392 SECURITY_PROXY_RID = 8, 393 SECURITY_ENTERPRISE_CONTROLLERS_RID = 9, 394 SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID, 395 SECURITY_AUTHENTICATED_USER_RID = 11, 396 SECURITY_RESTRICTED_CODE_RID = 12, 397 SECURITY_NT_NON_UNIQUE_RID = 21, 398 SID_REVISION = 1; 399 400 enum : DWORD { 401 DOMAIN_USER_RID_ADMIN = 0x01F4, 402 DOMAIN_USER_RID_GUEST = 0x01F5, 403 DOMAIN_GROUP_RID_ADMINS = 0x0200, 404 DOMAIN_GROUP_RID_USERS = 0x0201, 405 DOMAIN_ALIAS_RID_ADMINS = 0x0220, 406 DOMAIN_ALIAS_RID_USERS = 0x0221, 407 DOMAIN_ALIAS_RID_GUESTS = 0x0222, 408 DOMAIN_ALIAS_RID_POWER_USERS = 0x0223, 409 DOMAIN_ALIAS_RID_ACCOUNT_OPS = 0x0224, 410 DOMAIN_ALIAS_RID_SYSTEM_OPS = 0x0225, 411 DOMAIN_ALIAS_RID_PRINT_OPS = 0x0226, 412 DOMAIN_ALIAS_RID_BACKUP_OPS = 0x0227, 413 DOMAIN_ALIAS_RID_REPLICATOR = 0x0228 414 } 415 416 enum : WORD { 417 SECURITY_MANDATORY_UNTRUSTED_RID = 0, 418 SECURITY_MANDATORY_LOW_RID = 0x1000, 419 SECURITY_MANDATORY_MEDIUM_RID = 0x2000, 420 SECURITY_MANDATORY_HIGH_RID = 0x3000, 421 SECURITY_MANDATORY_SYSTEM_RID = 0x4000, 422 SECURITY_MANDATORY_PROTECTED_PROCESS_RID = 0x5000, 423 SECURITY_MANDATORY_MAXIMUM_USER_RID = SECURITY_MANDATORY_SYSTEM_RID 424 } 425 426 const TCHAR[] 427 SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege", 428 SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege", 429 SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege", 430 SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege", 431 SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege", 432 SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege", 433 SE_TCB_NAME = "SeTcbPrivilege", 434 SE_SECURITY_NAME = "SeSecurityPrivilege", 435 SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege", 436 SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege", 437 SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege", 438 SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege", 439 SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege", 440 SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege", 441 SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege", 442 SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege", 443 SE_BACKUP_NAME = "SeBackupPrivilege", 444 SE_RESTORE_NAME = "SeRestorePrivilege", 445 SE_SHUTDOWN_NAME = "SeShutdownPrivilege", 446 SE_DEBUG_NAME = "SeDebugPrivilege", 447 SE_AUDIT_NAME = "SeAuditPrivilege", 448 SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege", 449 SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege", 450 SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege", 451 SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege", 452 SE_UNDOCK_NAME = "SeUndockPrivilege", 453 SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege", 454 SE_IMPERSONATE_NAME = "SeImpersonatePrivilege", 455 SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege", 456 SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege", 457 SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege", 458 SE_RELABEL_NAME = "SeRelabelPrivilege", 459 SE_INCREASE_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege", 460 SE_TIME_ZONE_NAME = "SeTimeZonePrivilege", 461 SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"; 462 463 enum DWORD 464 SE_GROUP_MANDATORY = 0x00000001, 465 SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002, 466 SE_GROUP_ENABLED = 0x00000004, 467 SE_GROUP_OWNER = 0x00000008, 468 SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010, 469 SE_GROUP_INTEGRITY = 0x00000020, 470 SE_GROUP_INTEGRITY_ENABLED = 0x00000040, 471 SE_GROUP_RESOURCE = 0x20000000, 472 SE_GROUP_LOGON_ID = 0xC0000000; 473 474 // Primary language identifiers 475 enum : USHORT { 476 LANG_NEUTRAL, 477 LANG_ARABIC, 478 LANG_BULGARIAN, 479 LANG_CATALAN, 480 LANG_CHINESE, 481 LANG_CZECH, 482 LANG_DANISH, 483 LANG_GERMAN, 484 LANG_GREEK, 485 LANG_ENGLISH, 486 LANG_SPANISH, 487 LANG_FINNISH, 488 LANG_FRENCH, 489 LANG_HEBREW, 490 LANG_HUNGARIAN, 491 LANG_ICELANDIC, 492 LANG_ITALIAN, 493 LANG_JAPANESE, 494 LANG_KOREAN, 495 LANG_DUTCH, 496 LANG_NORWEGIAN, 497 LANG_POLISH, 498 LANG_PORTUGUESE, // = 0x16 499 LANG_ROMANIAN = 0x18, 500 LANG_RUSSIAN, 501 LANG_CROATIAN, // = 0x1A 502 LANG_SERBIAN = 0x1A, 503 LANG_BOSNIAN = 0x1A, 504 LANG_SLOVAK, 505 LANG_ALBANIAN, 506 LANG_SWEDISH, 507 LANG_THAI, 508 LANG_TURKISH, 509 LANG_URDU, 510 LANG_INDONESIAN, 511 LANG_UKRAINIAN, 512 LANG_BELARUSIAN, 513 LANG_SLOVENIAN, 514 LANG_ESTONIAN, 515 LANG_LATVIAN, 516 LANG_LITHUANIAN, // = 0x27 517 LANG_FARSI = 0x29, 518 LANG_PERSIAN = 0x29, 519 LANG_VIETNAMESE, 520 LANG_ARMENIAN, 521 LANG_AZERI, 522 LANG_BASQUE, 523 LANG_LOWER_SORBIAN, // = 0x2E 524 LANG_UPPER_SORBIAN = 0x2E, 525 LANG_MACEDONIAN, // = 0x2F 526 LANG_TSWANA = 0x32, 527 LANG_XHOSA = 0x34, 528 LANG_ZULU, 529 LANG_AFRIKAANS, 530 LANG_GEORGIAN, 531 LANG_FAEROESE, 532 LANG_HINDI, 533 LANG_MALTESE, 534 LANG_SAMI, 535 LANG_IRISH, // = 0x3C 536 LANG_MALAY = 0x3E, 537 LANG_KAZAK, 538 LANG_KYRGYZ, 539 LANG_SWAHILI, // = 0x41 540 LANG_UZBEK = 0x43, 541 LANG_TATAR, 542 LANG_BENGALI, 543 LANG_PUNJABI, 544 LANG_GUJARATI, 545 LANG_ORIYA, 546 LANG_TAMIL, 547 LANG_TELUGU, 548 LANG_KANNADA, 549 LANG_MALAYALAM, 550 LANG_ASSAMESE, 551 LANG_MARATHI, 552 LANG_SANSKRIT, 553 LANG_MONGOLIAN, 554 LANG_TIBETAN, 555 LANG_WELSH, 556 LANG_KHMER, 557 LANG_LAO, // = 0x54 558 LANG_GALICIAN = 0x56, 559 LANG_KONKANI, 560 LANG_MANIPURI, 561 LANG_SINDHI, 562 LANG_SYRIAC, 563 LANG_SINHALESE, // = 0x5B 564 LANG_INUKTITUT = 0x5D, 565 LANG_AMHARIC, 566 LANG_TAMAZIGHT, 567 LANG_KASHMIRI, 568 LANG_NEPALI, 569 LANG_FRISIAN, 570 LANG_PASHTO, 571 LANG_FILIPINO, 572 LANG_DIVEHI, // = 0x65 573 LANG_HAUSA = 0x68, 574 LANG_YORUBA = 0x6A, 575 LANG_QUECHUA, 576 LANG_SOTHO, 577 LANG_BASHKIR, 578 LANG_LUXEMBOURGISH, 579 LANG_GREENLANDIC, 580 LANG_IGBO, // = 0x70 581 LANG_TIGRIGNA = 0x73, 582 LANG_YI = 0x78, 583 LANG_MAPUDUNGUN = 0x7A, 584 LANG_MOHAWK = 0x7C, 585 LANG_BRETON = 0x7E, 586 LANG_UIGHUR = 0x80, 587 LANG_MAORI, 588 LANG_OCCITAN, 589 LANG_CORSICAN, 590 LANG_ALSATIAN, 591 LANG_YAKUT, 592 LANG_KICHE, 593 LANG_KINYARWANDA, 594 LANG_WOLOF, // = 0x88 595 LANG_DARI = 0x8C, 596 LANG_MALAGASY, // = 0x8D 597 598 LANG_SERBIAN_NEUTRAL = 0x7C1A, 599 LANG_BOSNIAN_NEUTRAL = 0x781A, 600 601 LANG_INVARIANT = 0x7F 602 } 603 604 605 // Sublanguage identifiers 606 enum : USHORT { 607 SUBLANG_NEUTRAL, 608 SUBLANG_DEFAULT, 609 SUBLANG_SYS_DEFAULT, 610 SUBLANG_CUSTOM_DEFAULT, // = 3 611 SUBLANG_UI_CUSTOM_DEFAULT = 3, 612 SUBLANG_CUSTOM_UNSPECIFIED, // = 4 613 614 SUBLANG_AFRIKAANS_SOUTH_AFRICA = 1, 615 SUBLANG_ALBANIAN_ALBANIA = 1, 616 SUBLANG_ALSATIAN_FRANCE = 1, 617 SUBLANG_AMHARIC_ETHIOPIA = 1, 618 619 SUBLANG_ARABIC_SAUDI_ARABIA = 1, 620 SUBLANG_ARABIC_IRAQ, 621 SUBLANG_ARABIC_EGYPT, 622 SUBLANG_ARABIC_LIBYA, 623 SUBLANG_ARABIC_ALGERIA, 624 SUBLANG_ARABIC_MOROCCO, 625 SUBLANG_ARABIC_TUNISIA, 626 SUBLANG_ARABIC_OMAN, 627 SUBLANG_ARABIC_YEMEN, 628 SUBLANG_ARABIC_SYRIA, 629 SUBLANG_ARABIC_JORDAN, 630 SUBLANG_ARABIC_LEBANON, 631 SUBLANG_ARABIC_KUWAIT, 632 SUBLANG_ARABIC_UAE, 633 SUBLANG_ARABIC_BAHRAIN, 634 SUBLANG_ARABIC_QATAR, // = 16 635 636 SUBLANG_ARMENIAN_ARMENIA = 1, 637 SUBLANG_ASSAMESE_INDIA = 1, 638 639 SUBLANG_AZERI_LATIN = 1, 640 SUBLANG_AZERI_CYRILLIC, // = 2 641 642 SUBLANG_BASHKIR_RUSSIA = 1, 643 SUBLANG_BASQUE_BASQUE = 1, 644 SUBLANG_BELARUSIAN_BELARUS = 1, 645 SUBLANG_BENGALI_INDIA = 1, 646 647 SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN = 5, 648 SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC = 8, 649 650 SUBLANG_BRETON_FRANCE = 1, 651 SUBLANG_BULGARIAN_BULGARIA = 1, 652 SUBLANG_CATALAN_CATALAN = 1, 653 654 SUBLANG_CHINESE_TRADITIONAL = 1, 655 SUBLANG_CHINESE_SIMPLIFIED, 656 SUBLANG_CHINESE_HONGKONG, 657 SUBLANG_CHINESE_SINGAPORE, 658 SUBLANG_CHINESE_MACAU, // = 5 659 660 SUBLANG_CORSICAN_FRANCE = 1, 661 662 SUBLANG_CROATIAN_CROATIA = 1, 663 SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN = 4, 664 665 SUBLANG_CZECH_CZECH_REPUBLIC = 1, 666 SUBLANG_DANISH_DENMARK = 1, 667 SUBLANG_DIVEHI_MALDIVES = 1, 668 669 SUBLANG_DUTCH = 1, 670 SUBLANG_DUTCH_BELGIAN, // = 2 671 672 SUBLANG_ENGLISH_US = 1, 673 SUBLANG_ENGLISH_UK, 674 SUBLANG_ENGLISH_AUS, 675 SUBLANG_ENGLISH_CAN, 676 SUBLANG_ENGLISH_NZ, 677 SUBLANG_ENGLISH_EIRE, // = 6 678 SUBLANG_ENGLISH_IRELAND = 6, 679 SUBLANG_ENGLISH_SOUTH_AFRICA, 680 SUBLANG_ENGLISH_JAMAICA, 681 SUBLANG_ENGLISH_CARIBBEAN, 682 SUBLANG_ENGLISH_BELIZE, 683 SUBLANG_ENGLISH_TRINIDAD, 684 SUBLANG_ENGLISH_ZIMBABWE, 685 SUBLANG_ENGLISH_PHILIPPINES, // = 13 686 SUBLANG_ENGLISH_INDIA = 16, 687 SUBLANG_ENGLISH_MALAYSIA, 688 SUBLANG_ENGLISH_SINGAPORE, // = 18 689 690 SUBLANG_ESTONIAN_ESTONIA = 1, 691 SUBLANG_FAEROESE_FAROE_ISLANDS = 1, 692 SUBLANG_FILIPINO_PHILIPPINES = 1, 693 SUBLANG_FINNISH_FINLAND = 1, 694 695 SUBLANG_FRENCH = 1, 696 SUBLANG_FRENCH_BELGIAN, 697 SUBLANG_FRENCH_CANADIAN, 698 SUBLANG_FRENCH_SWISS, 699 SUBLANG_FRENCH_LUXEMBOURG, 700 SUBLANG_FRENCH_MONACO, // = 6 701 702 SUBLANG_FRISIAN_NETHERLANDS = 1, 703 SUBLANG_GALICIAN_GALICIAN = 1, 704 SUBLANG_GEORGIAN_GEORGIA = 1, 705 706 SUBLANG_GERMAN = 1, 707 SUBLANG_GERMAN_SWISS, 708 SUBLANG_GERMAN_AUSTRIAN, 709 SUBLANG_GERMAN_LUXEMBOURG, 710 SUBLANG_GERMAN_LIECHTENSTEIN, // = 5 711 712 SUBLANG_GREEK_GREECE = 1, 713 SUBLANG_GREENLANDIC_GREENLAND = 1, 714 SUBLANG_GUJARATI_INDIA = 1, 715 SUBLANG_HAUSA_NIGERIA = 1, 716 SUBLANG_HEBREW_ISRAEL = 1, 717 SUBLANG_HINDI_INDIA = 1, 718 SUBLANG_HUNGARIAN_HUNGARY = 1, 719 SUBLANG_ICELANDIC_ICELAND = 1, 720 SUBLANG_IGBO_NIGERIA = 1, 721 SUBLANG_INDONESIAN_INDONESIA = 1, 722 723 SUBLANG_INUKTITUT_CANADA = 1, 724 SUBLANG_INUKTITUT_CANADA_LATIN = 1, 725 726 SUBLANG_IRISH_IRELAND = 1, 727 728 SUBLANG_ITALIAN = 1, 729 SUBLANG_ITALIAN_SWISS, // = 2 730 731 SUBLANG_JAPANESE_JAPAN = 1, 732 733 SUBLANG_KASHMIRI_INDIA = 2, 734 SUBLANG_KASHMIRI_SASIA = 2, 735 736 SUBLANG_KAZAK_KAZAKHSTAN = 1, 737 SUBLANG_KHMER_CAMBODIA = 1, 738 SUBLANG_KICHE_GUATEMALA = 1, 739 SUBLANG_KINYARWANDA_RWANDA = 1, 740 SUBLANG_KONKANI_INDIA = 1, 741 SUBLANG_KOREAN = 1, 742 SUBLANG_KOREAN_JOHAB = 2, 743 SUBLANG_KYRGYZ_KYRGYZSTAN = 1, 744 SUBLANG_LAO_LAO_PDR = 1, 745 SUBLANG_LATVIAN_LATVIA = 1, 746 747 SUBLANG_LITHUANIAN = 1, 748 SUBLANG_LITHUANIAN_LITHUANIA = 1, 749 750 SUBLANG_LOWER_SORBIAN_GERMANY = 1, 751 SUBLANG_LUXEMBOURGISH_LUXEMBOURG = 1, 752 SUBLANG_MACEDONIAN_MACEDONIA = 1, 753 SUBLANG_MALAYALAM_INDIA = 1, 754 SUBLANG_MALTESE_MALTA = 1, 755 SUBLANG_MAORI_NEW_ZEALAND = 1, 756 SUBLANG_MAPUDUNGUN_CHILE = 1, 757 SUBLANG_MARATHI_INDIA = 1, 758 SUBLANG_MOHAWK_MOHAWK = 1, 759 760 SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA = 1, 761 SUBLANG_MONGOLIAN_PRC, // = 2 762 763 SUBLANG_MALAY_MALAYSIA = 1, 764 SUBLANG_MALAY_BRUNEI_DARUSSALAM, // = 2 765 766 SUBLANG_NEPALI_NEPAL = 1, 767 SUBLANG_NEPALI_INDIA, // = 2 768 769 SUBLANG_NORWEGIAN_BOKMAL = 1, 770 SUBLANG_NORWEGIAN_NYNORSK, // = 2 771 772 SUBLANG_OCCITAN_FRANCE = 1, 773 SUBLANG_ORIYA_INDIA = 1, 774 SUBLANG_PASHTO_AFGHANISTAN = 1, 775 SUBLANG_PERSIAN_IRAN = 1, 776 SUBLANG_POLISH_POLAND = 1, 777 778 SUBLANG_PORTUGUESE_BRAZILIAN = 1, 779 SUBLANG_PORTUGUESE = 2, 780 SUBLANG_PORTUGUESE_PORTUGAL, // = 2 781 782 SUBLANG_PUNJABI_INDIA = 1, 783 784 SUBLANG_QUECHUA_BOLIVIA = 1, 785 SUBLANG_QUECHUA_ECUADOR, 786 SUBLANG_QUECHUA_PERU, // = 3 787 788 SUBLANG_ROMANIAN_ROMANIA = 1, 789 SUBLANG_ROMANSH_SWITZERLAND = 1, 790 SUBLANG_RUSSIAN_RUSSIA = 1, 791 792 SUBLANG_SAMI_NORTHERN_NORWAY = 1, 793 SUBLANG_SAMI_NORTHERN_SWEDEN, 794 SUBLANG_SAMI_NORTHERN_FINLAND, // = 3 795 SUBLANG_SAMI_SKOLT_FINLAND = 3, 796 SUBLANG_SAMI_INARI_FINLAND = 3, 797 SUBLANG_SAMI_LULE_NORWAY, 798 SUBLANG_SAMI_LULE_SWEDEN, 799 SUBLANG_SAMI_SOUTHERN_NORWAY, 800 SUBLANG_SAMI_SOUTHERN_SWEDEN, // = 7 801 802 SUBLANG_SANSKRIT_INDIA = 1, 803 804 SUBLANG_SERBIAN_LATIN = 2, 805 SUBLANG_SERBIAN_CYRILLIC, // = 3 806 SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN = 6, 807 SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC = 7, 808 809 SUBLANG_SINDHI_AFGHANISTAN = 2, 810 SUBLANG_SINHALESE_SRI_LANKA = 1, 811 SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA = 1, 812 SUBLANG_SLOVAK_SLOVAKIA = 1, 813 SUBLANG_SLOVENIAN_SLOVENIA = 1, 814 815 SUBLANG_SPANISH = 1, 816 SUBLANG_SPANISH_MEXICAN, 817 SUBLANG_SPANISH_MODERN, 818 SUBLANG_SPANISH_GUATEMALA, 819 SUBLANG_SPANISH_COSTA_RICA, 820 SUBLANG_SPANISH_PANAMA, 821 SUBLANG_SPANISH_DOMINICAN_REPUBLIC, 822 SUBLANG_SPANISH_VENEZUELA, 823 SUBLANG_SPANISH_COLOMBIA, 824 SUBLANG_SPANISH_PERU, 825 SUBLANG_SPANISH_ARGENTINA, 826 SUBLANG_SPANISH_ECUADOR, 827 SUBLANG_SPANISH_CHILE, 828 SUBLANG_SPANISH_URUGUAY, 829 SUBLANG_SPANISH_PARAGUAY, 830 SUBLANG_SPANISH_BOLIVIA, 831 SUBLANG_SPANISH_EL_SALVADOR, 832 SUBLANG_SPANISH_HONDURAS, 833 SUBLANG_SPANISH_NICARAGUA, 834 SUBLANG_SPANISH_PUERTO_RICO, 835 SUBLANG_SPANISH_US, // = 21 836 837 SUBLANG_SWEDISH = 1, 838 SUBLANG_SWEDISH_SWEDEN = 1, 839 SUBLANG_SWEDISH_FINLAND, // = 2 840 841 SUBLANG_SYRIAC = 1, 842 SUBLANG_TAJIK_TAJIKISTAN = 1, 843 SUBLANG_TAMAZIGHT_ALGERIA_LATIN = 2, 844 SUBLANG_TAMIL_INDIA = 1, 845 SUBLANG_TATAR_RUSSIA = 1, 846 SUBLANG_TELUGU_INDIA = 1, 847 SUBLANG_THAI_THAILAND = 1, 848 SUBLANG_TIBETAN_PRC = 1, 849 SUBLANG_TIBETAN_BHUTAN = 2, 850 SUBLANG_TIGRIGNA_ERITREA = 1, 851 SUBLANG_TSWANA_SOUTH_AFRICA = 1, 852 SUBLANG_TURKISH_TURKEY = 1, 853 SUBLANG_TURKMEN_TURKMENISTAN = 1, 854 SUBLANG_UIGHUR_PRC = 1, 855 SUBLANG_UKRAINIAN_UKRAINE = 1, 856 SUBLANG_UPPER_SORBIAN_GERMANY = 1, 857 858 SUBLANG_URDU_PAKISTAN = 1, 859 SUBLANG_URDU_INDIA, // = 2 860 861 SUBLANG_UZBEK_LATIN = 1, 862 SUBLANG_UZBEK_CYRILLIC, // = 2 863 864 SUBLANG_VIETNAMESE_VIETNAM = 1, 865 SUBLANG_WELSH_UNITED_KINGDOM = 1, 866 SUBLANG_WOLOF_SENEGAL = 1, 867 SUBLANG_YORUBA_NIGERIA = 1, 868 SUBLANG_XHOSA_SOUTH_AFRICA = 1, 869 SUBLANG_YAKUT_RUSSIA = 1, 870 SUBLANG_YI_PRC = 1, 871 SUBLANG_ZULU_SOUTH_AFRICA = 1 872 } 873 874 // This is not documented on MSDN 875 enum NLS_VALID_LOCALE_MASK = 1048575; 876 877 // Sorting identifiers 878 enum : WORD { 879 SORT_DEFAULT = 0, 880 SORT_JAPANESE_XJIS = 0, 881 SORT_JAPANESE_UNICODE = 1, 882 SORT_CHINESE_BIG5 = 0, 883 SORT_CHINESE_PRCP = 0, 884 SORT_CHINESE_UNICODE = 1, 885 SORT_CHINESE_PRC = 2, 886 SORT_CHINESE_BOPOMOFO = 3, 887 SORT_KOREAN_KSC = 0, 888 SORT_KOREAN_UNICODE = 1, 889 SORT_GERMAN_PHONE_BOOK = 1, 890 SORT_HUNGARIAN_DEFAULT = 0, 891 SORT_HUNGARIAN_TECHNICAL = 1, 892 SORT_GEORGIAN_TRADITIONAL = 0, 893 SORT_GEORGIAN_MODERN = 1 894 } 895 896 pure nothrow @nogc { 897 WORD MAKELANGID(/*USHORT*/uint p, /*USHORT*/ uint s) { return cast(WORD)((s << 10) | p); } 898 WORD PRIMARYLANGID(/*WORD*/uint lgid) { return cast(WORD)(lgid & 0x3FF); } 899 WORD SUBLANGID(/*WORD*/uint lgid) { return cast(WORD)(lgid >>> 10); } 900 901 DWORD MAKELCID(/*WORD*/uint lgid, /*WORD*/uint srtid) { return (cast(DWORD) srtid << 16) | cast(DWORD) lgid; } 902 // ??? 903 //DWORD MAKESORTLCID(WORD lgid, WORD srtid, WORD ver) { return (MAKELCID(lgid, srtid)) | ((cast(DWORD)ver) << 20); } 904 WORD LANGIDFROMLCID(LCID lcid) { return cast(WORD) lcid; } 905 WORD SORTIDFROMLCID(LCID lcid) { return cast(WORD) ((lcid >>> 16) & 0x0F); } 906 WORD SORTVERSIONFROMLCID(LCID lcid) { return cast(WORD) ((lcid >>> 20) & 0x0F); } 907 } 908 909 enum WORD LANG_SYSTEM_DEFAULT = (SUBLANG_SYS_DEFAULT << 10) | LANG_NEUTRAL; 910 enum WORD LANG_USER_DEFAULT = (SUBLANG_DEFAULT << 10) | LANG_NEUTRAL; 911 enum DWORD LOCALE_NEUTRAL = (SORT_DEFAULT << 16) 912 | (SUBLANG_NEUTRAL << 10) | LANG_NEUTRAL; 913 914 // --- 915 enum : BYTE { 916 ACL_REVISION = 2, 917 ACL_REVISION_DS = 4 918 } 919 920 // These are not documented on MSDN 921 enum : BYTE { 922 ACL_REVISION1 = 1, 923 ACL_REVISION2, 924 ACL_REVISION3, 925 ACL_REVISION4 // = 4 926 } 927 928 enum BYTE 929 MIN_ACL_REVISION = 2, 930 MAX_ACL_REVISION = 4; 931 932 /+ 933 // These aren't necessary for D. 934 enum MINCHAR=0x80; 935 enum MAXCHAR=0x7f; 936 enum MINSHORT=0x8000; 937 enum MAXSHORT=0x7fff; 938 enum MINLONG=0x80000000; 939 enum MAXLONG=0x7fffffff; 940 enum MAXBYTE=0xff; 941 enum MAXWORD=0xffff; 942 enum MAXDWORD=0xffffffff; 943 +/ 944 945 // SYSTEM_INFO.dwProcessorType 946 enum : DWORD { 947 PROCESSOR_INTEL_386 = 386, 948 PROCESSOR_INTEL_486 = 486, 949 PROCESSOR_INTEL_PENTIUM = 586, 950 PROCESSOR_MIPS_R4000 = 4000, 951 PROCESSOR_ALPHA_21064 = 21064, 952 PROCESSOR_INTEL_IA64 = 2200 953 } 954 955 // SYSTEM_INFO.wProcessorArchitecture 956 enum : WORD { 957 PROCESSOR_ARCHITECTURE_INTEL, 958 PROCESSOR_ARCHITECTURE_MIPS, 959 PROCESSOR_ARCHITECTURE_ALPHA, 960 PROCESSOR_ARCHITECTURE_PPC, 961 PROCESSOR_ARCHITECTURE_SHX, 962 PROCESSOR_ARCHITECTURE_ARM, 963 PROCESSOR_ARCHITECTURE_IA64, 964 PROCESSOR_ARCHITECTURE_ALPHA64, 965 PROCESSOR_ARCHITECTURE_MSIL, 966 PROCESSOR_ARCHITECTURE_AMD64, 967 PROCESSOR_ARCHITECTURE_IA32_ON_WIN64, // = 10 968 PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF 969 } 970 971 // IsProcessorFeaturePresent() 972 enum : DWORD { 973 PF_FLOATING_POINT_PRECISION_ERRATA, 974 PF_FLOATING_POINT_EMULATED, 975 PF_COMPARE_EXCHANGE_DOUBLE, 976 PF_MMX_INSTRUCTIONS_AVAILABLE, 977 PF_PPC_MOVEMEM_64BIT_OK, 978 PF_ALPHA_BYTE_INSTRUCTIONS, 979 PF_XMMI_INSTRUCTIONS_AVAILABLE, 980 PF_3DNOW_INSTRUCTIONS_AVAILABLE, 981 PF_RDTSC_INSTRUCTION_AVAILABLE, 982 PF_PAE_ENABLED, 983 PF_XMMI64_INSTRUCTIONS_AVAILABLE 984 } 985 986 // MinGW: also in ddk/ntifs.h 987 enum : DWORD { 988 FILE_ACTION_ADDED = 1, 989 FILE_ACTION_REMOVED, 990 FILE_ACTION_MODIFIED, 991 FILE_ACTION_RENAMED_OLD_NAME, 992 FILE_ACTION_RENAMED_NEW_NAME, 993 FILE_ACTION_ADDED_STREAM, 994 FILE_ACTION_REMOVED_STREAM, 995 FILE_ACTION_MODIFIED_STREAM, 996 FILE_ACTION_REMOVED_BY_DELETE, 997 FILE_ACTION_ID_NOT_TUNNELLED, 998 FILE_ACTION_TUNNELLED_ID_COLLISION // = 11 999 } 1000 // MinGW: end ntifs.h 1001 1002 enum DWORD 1003 HEAP_NO_SERIALIZE = 0x01, 1004 HEAP_GROWABLE = 0x02, 1005 HEAP_GENERATE_EXCEPTIONS = 0x04, 1006 HEAP_ZERO_MEMORY = 0x08, 1007 HEAP_REALLOC_IN_PLACE_ONLY = 0x10, 1008 HEAP_TAIL_CHECKING_ENABLED = 0x20, 1009 HEAP_FREE_CHECKING_ENABLED = 0x40, 1010 HEAP_DISABLE_COALESCE_ON_FREE = 0x80; 1011 1012 // These are not documented on MSDN 1013 enum HEAP_CREATE_ALIGN_16 = 0; 1014 enum HEAP_CREATE_ENABLE_TRACING = 0x020000; 1015 enum HEAP_MAXIMUM_TAG = 0x000FFF; 1016 enum HEAP_PSEUDO_TAG_FLAG = 0x008000; 1017 enum HEAP_TAG_SHIFT = 16; 1018 // ??? 1019 //MACRO #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16))) 1020 1021 enum ACCESS_MASK 1022 KEY_QUERY_VALUE = 0x000001, 1023 KEY_SET_VALUE = 0x000002, 1024 KEY_CREATE_SUB_KEY = 0x000004, 1025 KEY_ENUMERATE_SUB_KEYS = 0x000008, 1026 KEY_NOTIFY = 0x000010, 1027 KEY_CREATE_LINK = 0x000020, 1028 KEY_WRITE = 0x020006, 1029 KEY_EXECUTE = 0x020019, 1030 KEY_READ = 0x020019, 1031 KEY_ALL_ACCESS = 0x0F003F; 1032 1033 static if (_WIN32_WINNT >= 0x502) { 1034 enum ACCESS_MASK 1035 KEY_WOW64_64KEY = 0x000100, 1036 KEY_WOW64_32KEY = 0x000200; 1037 } 1038 1039 enum DWORD 1040 REG_WHOLE_HIVE_VOLATILE = 1, 1041 REG_REFRESH_HIVE = 2, 1042 REG_NO_LAZY_FLUSH = 4; 1043 1044 enum DWORD 1045 REG_OPTION_RESERVED = 0, 1046 REG_OPTION_NON_VOLATILE = 0, 1047 REG_OPTION_VOLATILE = 1, 1048 REG_OPTION_CREATE_LINK = 2, 1049 REG_OPTION_BACKUP_RESTORE = 4, 1050 REG_OPTION_OPEN_LINK = 8, 1051 REG_LEGAL_OPTION = 15; 1052 1053 enum SECURITY_INFORMATION 1054 OWNER_SECURITY_INFORMATION = 0x00000001, 1055 GROUP_SECURITY_INFORMATION = 0x00000002, 1056 DACL_SECURITY_INFORMATION = 0x00000004, 1057 SACL_SECURITY_INFORMATION = 0x00000008, 1058 LABEL_SECURITY_INFORMATION = 0x00000010, 1059 UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000, 1060 UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000, 1061 PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000, 1062 PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000; 1063 1064 enum DWORD MAXIMUM_PROCESSORS = 32; 1065 1066 // VirtualAlloc(), etc 1067 // ------------------- 1068 1069 enum : DWORD { 1070 PAGE_NOACCESS = 0x0001, 1071 PAGE_READONLY = 0x0002, 1072 PAGE_READWRITE = 0x0004, 1073 PAGE_WRITECOPY = 0x0008, 1074 PAGE_EXECUTE = 0x0010, 1075 PAGE_EXECUTE_READ = 0x0020, 1076 PAGE_EXECUTE_READWRITE = 0x0040, 1077 PAGE_EXECUTE_WRITECOPY = 0x0080, 1078 PAGE_GUARD = 0x0100, 1079 PAGE_NOCACHE = 0x0200 1080 } 1081 1082 enum : DWORD { 1083 MEM_COMMIT = 0x00001000, 1084 MEM_RESERVE = 0x00002000, 1085 MEM_DECOMMIT = 0x00004000, 1086 MEM_RELEASE = 0x00008000, 1087 MEM_FREE = 0x00010000, 1088 MEM_PRIVATE = 0x00020000, 1089 MEM_MAPPED = 0x00040000, 1090 MEM_RESET = 0x00080000, 1091 MEM_TOP_DOWN = 0x00100000, 1092 MEM_WRITE_WATCH = 0x00200000, // MinGW (???): 98/Me 1093 MEM_PHYSICAL = 0x00400000, 1094 MEM_4MB_PAGES = 0x80000000 1095 } 1096 1097 // MinGW: also in ddk/ntifs.h 1098 // CreateFileMapping() 1099 enum DWORD 1100 SEC_BASED = 0x00200000, 1101 SEC_NO_CHANGE = 0x00400000, 1102 SEC_FILE = 0x00800000, 1103 SEC_IMAGE = 0x01000000, 1104 SEC_VLM = 0x02000000, 1105 SEC_RESERVE = 0x04000000, 1106 SEC_COMMIT = 0x08000000, 1107 SEC_NOCACHE = 0x10000000, 1108 MEM_IMAGE = SEC_IMAGE; 1109 // MinGW: end ntifs.h 1110 1111 // ??? 1112 enum ACCESS_MASK 1113 SECTION_QUERY = 0x000001, 1114 SECTION_MAP_WRITE = 0x000002, 1115 SECTION_MAP_READ = 0x000004, 1116 SECTION_MAP_EXECUTE = 0x000008, 1117 SECTION_EXTEND_SIZE = 0x000010, 1118 SECTION_ALL_ACCESS = 0x0F001F; 1119 1120 // These are not documented on MSDN 1121 enum MESSAGE_RESOURCE_UNICODE = 1; 1122 enum RTL_CRITSECT_TYPE = 0; 1123 enum RTL_RESOURCE_TYPE = 1; 1124 1125 // COFF file format 1126 // ---------------- 1127 1128 // IMAGE_FILE_HEADER.Characteristics 1129 enum WORD 1130 IMAGE_FILE_RELOCS_STRIPPED = 0x0001, 1131 IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002, 1132 IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004, 1133 IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008, 1134 IMAGE_FILE_AGGRESIVE_WS_TRIM = 0x0010, 1135 IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020, 1136 IMAGE_FILE_BYTES_REVERSED_LO = 0x0080, 1137 IMAGE_FILE_32BIT_MACHINE = 0x0100, 1138 IMAGE_FILE_DEBUG_STRIPPED = 0x0200, 1139 IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400, 1140 IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800, 1141 IMAGE_FILE_SYSTEM = 0x1000, 1142 IMAGE_FILE_DLL = 0x2000, 1143 IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000, 1144 IMAGE_FILE_BYTES_REVERSED_HI = 0x8000; 1145 1146 // IMAGE_FILE_HEADER.Machine 1147 enum : WORD { 1148 IMAGE_FILE_MACHINE_UNKNOWN = 0x0000, 1149 IMAGE_FILE_MACHINE_I386 = 0x014C, 1150 IMAGE_FILE_MACHINE_R3000 = 0x0162, 1151 IMAGE_FILE_MACHINE_R4000 = 0x0166, 1152 IMAGE_FILE_MACHINE_R10000 = 0x0168, 1153 IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x0169, 1154 IMAGE_FILE_MACHINE_ALPHA = 0x0184, 1155 IMAGE_FILE_MACHINE_SH3 = 0x01A2, 1156 IMAGE_FILE_MACHINE_SH3DSP = 0x01A3, 1157 IMAGE_FILE_MACHINE_SH4 = 0x01A6, 1158 IMAGE_FILE_MACHINE_SH5 = 0x01A8, 1159 IMAGE_FILE_MACHINE_ARM = 0x01C0, 1160 IMAGE_FILE_MACHINE_THUMB = 0x01C2, 1161 IMAGE_FILE_MACHINE_AM33 = 0x01D3, 1162 IMAGE_FILE_MACHINE_POWERPC = 0x01F0, 1163 IMAGE_FILE_MACHINE_POWERPCFP = 0x01F1, 1164 IMAGE_FILE_MACHINE_IA64 = 0x0200, 1165 IMAGE_FILE_MACHINE_MIPS16 = 0x0266, 1166 IMAGE_FILE_MACHINE_MIPSFPU = 0x0366, 1167 IMAGE_FILE_MACHINE_MIPSFPU16 = 0x0466, 1168 IMAGE_FILE_MACHINE_EBC = 0x0EBC, 1169 IMAGE_FILE_MACHINE_AMD64 = 0x8664, 1170 IMAGE_FILE_MACHINE_M32R = 0x9041, 1171 IMAGE_FILE_MACHINE_ARM64 = 0xAA64, 1172 } 1173 1174 // ??? 1175 enum { 1176 IMAGE_DOS_SIGNATURE = 0x5A4D, 1177 IMAGE_OS2_SIGNATURE = 0x454E, 1178 IMAGE_OS2_SIGNATURE_LE = 0x454C, 1179 IMAGE_VXD_SIGNATURE = 0x454C, 1180 IMAGE_NT_SIGNATURE = 0x4550 1181 } 1182 1183 // IMAGE_OPTIONAL_HEADER.Magic 1184 enum : WORD { 1185 IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x010B, 1186 IMAGE_ROM_OPTIONAL_HDR_MAGIC = 0x0107, 1187 IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x020B 1188 } 1189 1190 // IMAGE_OPTIONAL_HEADER.Subsystem 1191 enum : WORD { 1192 IMAGE_SUBSYSTEM_UNKNOWN = 0, 1193 IMAGE_SUBSYSTEM_NATIVE, 1194 IMAGE_SUBSYSTEM_WINDOWS_GUI, 1195 IMAGE_SUBSYSTEM_WINDOWS_CUI, // = 3 1196 IMAGE_SUBSYSTEM_OS2_CUI = 5, 1197 IMAGE_SUBSYSTEM_POSIX_CUI = 7, 1198 IMAGE_SUBSYSTEM_NATIVE_WINDOWS, 1199 IMAGE_SUBSYSTEM_WINDOWS_CE_GUI, 1200 IMAGE_SUBSYSTEM_EFI_APPLICATION, 1201 IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER, 1202 IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER, 1203 IMAGE_SUBSYSTEM_EFI_ROM, 1204 IMAGE_SUBSYSTEM_XBOX, // = 14 1205 IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16 1206 } 1207 1208 // IMAGE_OPTIONAL_HEADER.DllCharacteristics 1209 enum WORD 1210 IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040, 1211 IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY = 0x0080, 1212 IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100, 1213 IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200, 1214 IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400, 1215 IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800, 1216 IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000, 1217 IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000; 1218 1219 // ??? 1220 enum IMAGE_SEPARATE_DEBUG_SIGNATURE = 0x4944; 1221 1222 enum size_t 1223 IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16, 1224 IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56, 1225 IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28, 1226 IMAGE_SIZEOF_NT_OPTIONAL_HEADER = 224, 1227 IMAGE_SIZEOF_SHORT_NAME = 8, 1228 IMAGE_SIZEOF_SECTION_HEADER = 40, 1229 IMAGE_SIZEOF_SYMBOL = 18, 1230 IMAGE_SIZEOF_AUX_SYMBOL = 18, 1231 IMAGE_SIZEOF_RELOCATION = 10, 1232 IMAGE_SIZEOF_BASE_RELOCATION = 8, 1233 IMAGE_SIZEOF_LINENUMBER = 6, 1234 IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60, 1235 SIZEOF_RFPO_DATA = 16; 1236 1237 PIMAGE_SECTION_HEADER IMAGE_FIRST_SECTION(PIMAGE_NT_HEADERS h) { 1238 return cast(PIMAGE_SECTION_HEADER) 1239 (cast(ubyte*) &h.OptionalHeader + h.FileHeader.SizeOfOptionalHeader); 1240 } 1241 1242 // ImageDirectoryEntryToDataEx() 1243 enum : USHORT { 1244 IMAGE_DIRECTORY_ENTRY_EXPORT = 0, 1245 IMAGE_DIRECTORY_ENTRY_IMPORT, 1246 IMAGE_DIRECTORY_ENTRY_RESOURCE, 1247 IMAGE_DIRECTORY_ENTRY_EXCEPTION, 1248 IMAGE_DIRECTORY_ENTRY_SECURITY, 1249 IMAGE_DIRECTORY_ENTRY_BASERELOC, 1250 IMAGE_DIRECTORY_ENTRY_DEBUG, 1251 IMAGE_DIRECTORY_ENTRY_COPYRIGHT, // = 7 1252 IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7, 1253 IMAGE_DIRECTORY_ENTRY_GLOBALPTR, 1254 IMAGE_DIRECTORY_ENTRY_TLS, 1255 IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, 1256 IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, 1257 IMAGE_DIRECTORY_ENTRY_IAT, 1258 IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT, 1259 IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR, // = 14 1260 } 1261 1262 // IMAGE_SECTION_HEADER.Characteristics 1263 enum DWORD 1264 IMAGE_SCN_TYPE_REG = 0x00000000, 1265 IMAGE_SCN_TYPE_DSECT = 0x00000001, 1266 IMAGE_SCN_TYPE_NOLOAD = 0x00000002, 1267 IMAGE_SCN_TYPE_GROUP = 0x00000004, 1268 IMAGE_SCN_TYPE_NO_PAD = 0x00000008, 1269 IMAGE_SCN_TYPE_COPY = 0x00000010, 1270 IMAGE_SCN_CNT_CODE = 0x00000020, 1271 IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040, 1272 IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080, 1273 IMAGE_SCN_LNK_OTHER = 0x00000100, 1274 IMAGE_SCN_LNK_INFO = 0x00000200, 1275 IMAGE_SCN_TYPE_OVER = 0x00000400, 1276 IMAGE_SCN_LNK_REMOVE = 0x00000800, 1277 IMAGE_SCN_LNK_COMDAT = 0x00001000, 1278 IMAGE_SCN_MEM_FARDATA = 0x00008000, 1279 IMAGE_SCN_GPREL = 0x00008000, 1280 IMAGE_SCN_MEM_PURGEABLE = 0x00020000, 1281 IMAGE_SCN_MEM_16BIT = 0x00020000, 1282 IMAGE_SCN_MEM_LOCKED = 0x00040000, 1283 IMAGE_SCN_MEM_PRELOAD = 0x00080000, 1284 IMAGE_SCN_ALIGN_1BYTES = 0x00100000, 1285 IMAGE_SCN_ALIGN_2BYTES = 0x00200000, 1286 IMAGE_SCN_ALIGN_4BYTES = 0x00300000, 1287 IMAGE_SCN_ALIGN_8BYTES = 0x00400000, 1288 IMAGE_SCN_ALIGN_16BYTES = 0x00500000, 1289 IMAGE_SCN_ALIGN_32BYTES = 0x00600000, 1290 IMAGE_SCN_ALIGN_64BYTES = 0x00700000, 1291 IMAGE_SCN_ALIGN_128BYTES = 0x00800000, 1292 IMAGE_SCN_ALIGN_256BYTES = 0x00900000, 1293 IMAGE_SCN_ALIGN_512BYTES = 0x00A00000, 1294 IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000, 1295 IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000, 1296 IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000, 1297 IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000, 1298 IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000, 1299 IMAGE_SCN_MEM_DISCARDABLE = 0x02000000, 1300 IMAGE_SCN_MEM_NOT_CACHED = 0x04000000, 1301 IMAGE_SCN_MEM_NOT_PAGED = 0x08000000, 1302 IMAGE_SCN_MEM_SHARED = 0x10000000, 1303 IMAGE_SCN_MEM_EXECUTE = 0x20000000, 1304 IMAGE_SCN_MEM_READ = 0x40000000, 1305 IMAGE_SCN_MEM_WRITE = 0x80000000; 1306 1307 /* The following constants are mostlydocumented at 1308 * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/pecoff.doc 1309 * but don't seem to be defined in the HTML docs. 1310 */ 1311 enum : SHORT { 1312 IMAGE_SYM_UNDEFINED = 0, 1313 IMAGE_SYM_ABSOLUTE = -1, 1314 IMAGE_SYM_DEBUG = -2 1315 } 1316 1317 enum : ubyte { 1318 IMAGE_SYM_TYPE_NULL, 1319 IMAGE_SYM_TYPE_VOID, 1320 IMAGE_SYM_TYPE_CHAR, 1321 IMAGE_SYM_TYPE_SHORT, 1322 IMAGE_SYM_TYPE_INT, 1323 IMAGE_SYM_TYPE_LONG, 1324 IMAGE_SYM_TYPE_FLOAT, 1325 IMAGE_SYM_TYPE_DOUBLE, 1326 IMAGE_SYM_TYPE_STRUCT, 1327 IMAGE_SYM_TYPE_UNION, 1328 IMAGE_SYM_TYPE_ENUM, 1329 IMAGE_SYM_TYPE_MOE, 1330 IMAGE_SYM_TYPE_BYTE, 1331 IMAGE_SYM_TYPE_WORD, 1332 IMAGE_SYM_TYPE_UINT, 1333 IMAGE_SYM_TYPE_DWORD // = 15 1334 } 1335 enum IMAGE_SYM_TYPE_PCODE = 32768; // ??? 1336 1337 enum : ubyte { 1338 IMAGE_SYM_DTYPE_NULL, 1339 IMAGE_SYM_DTYPE_POINTER, 1340 IMAGE_SYM_DTYPE_FUNCTION, 1341 IMAGE_SYM_DTYPE_ARRAY 1342 } 1343 1344 enum : BYTE { 1345 IMAGE_SYM_CLASS_END_OF_FUNCTION = 0xFF, 1346 IMAGE_SYM_CLASS_NULL = 0, 1347 IMAGE_SYM_CLASS_AUTOMATIC, 1348 IMAGE_SYM_CLASS_EXTERNAL, 1349 IMAGE_SYM_CLASS_STATIC, 1350 IMAGE_SYM_CLASS_REGISTER, 1351 IMAGE_SYM_CLASS_EXTERNAL_DEF, 1352 IMAGE_SYM_CLASS_LABEL, 1353 IMAGE_SYM_CLASS_UNDEFINED_LABEL, 1354 IMAGE_SYM_CLASS_MEMBER_OF_STRUCT, 1355 IMAGE_SYM_CLASS_ARGUMENT, 1356 IMAGE_SYM_CLASS_STRUCT_TAG, 1357 IMAGE_SYM_CLASS_MEMBER_OF_UNION, 1358 IMAGE_SYM_CLASS_UNION_TAG, 1359 IMAGE_SYM_CLASS_TYPE_DEFINITION, 1360 IMAGE_SYM_CLASS_UNDEFINED_STATIC, 1361 IMAGE_SYM_CLASS_ENUM_TAG, 1362 IMAGE_SYM_CLASS_MEMBER_OF_ENUM, 1363 IMAGE_SYM_CLASS_REGISTER_PARAM, 1364 IMAGE_SYM_CLASS_BIT_FIELD, // = 18 1365 IMAGE_SYM_CLASS_FAR_EXTERNAL = 68, 1366 IMAGE_SYM_CLASS_BLOCK = 100, 1367 IMAGE_SYM_CLASS_FUNCTION, 1368 IMAGE_SYM_CLASS_END_OF_STRUCT, 1369 IMAGE_SYM_CLASS_FILE, 1370 IMAGE_SYM_CLASS_SECTION, 1371 IMAGE_SYM_CLASS_WEAK_EXTERNAL,// = 105 1372 IMAGE_SYM_CLASS_CLR_TOKEN = 107 1373 } 1374 1375 enum : BYTE { 1376 IMAGE_COMDAT_SELECT_NODUPLICATES = 1, 1377 IMAGE_COMDAT_SELECT_ANY, 1378 IMAGE_COMDAT_SELECT_SAME_SIZE, 1379 IMAGE_COMDAT_SELECT_EXACT_MATCH, 1380 IMAGE_COMDAT_SELECT_ASSOCIATIVE, 1381 IMAGE_COMDAT_SELECT_LARGEST, 1382 IMAGE_COMDAT_SELECT_NEWEST // = 7 1383 } 1384 1385 enum : DWORD { 1386 IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1, 1387 IMAGE_WEAK_EXTERN_SEARCH_LIBRARY, 1388 IMAGE_WEAK_EXTERN_SEARCH_ALIAS 1389 } 1390 1391 enum : WORD { 1392 IMAGE_REL_I386_ABSOLUTE = 0x0000, 1393 IMAGE_REL_I386_DIR16 = 0x0001, 1394 IMAGE_REL_I386_REL16 = 0x0002, 1395 IMAGE_REL_I386_DIR32 = 0x0006, 1396 IMAGE_REL_I386_DIR32NB = 0x0007, 1397 IMAGE_REL_I386_SEG12 = 0x0009, 1398 IMAGE_REL_I386_SECTION = 0x000A, 1399 IMAGE_REL_I386_SECREL = 0x000B, 1400 IMAGE_REL_I386_TOKEN = 0x000C, 1401 IMAGE_REL_I386_SECREL7 = 0x000D, 1402 IMAGE_REL_I386_REL32 = 0x0014 1403 } 1404 1405 enum : WORD { 1406 IMAGE_REL_AMD64_ABSOLUTE = 0x0000, 1407 IMAGE_REL_AMD64_ADDR64 = 0x0001, 1408 IMAGE_REL_AMD64_ADDR32 = 0x0002, 1409 IMAGE_REL_AMD64_ADDR32NB = 0x0003, 1410 IMAGE_REL_AMD64_REL32 = 0x0004, 1411 IMAGE_REL_AMD64_REL32_1 = 0x0005, 1412 IMAGE_REL_AMD64_REL32_2 = 0x0006, 1413 IMAGE_REL_AMD64_REL32_3 = 0x0007, 1414 IMAGE_REL_AMD64_REL32_4 = 0x0008, 1415 IMAGE_REL_AMD64_REL32_5 = 0x0009, 1416 IMAGE_REL_AMD64_SECTION = 0x000A, 1417 IMAGE_REL_AMD64_SECREL = 0x000B, 1418 IMAGE_REL_AMD64_SECREL7 = 0x000C, 1419 IMAGE_REL_AMD64_TOKEN = 0x000D, 1420 IMAGE_REL_AMD64_SREL32 = 0x000E, 1421 IMAGE_REL_AMD64_PAIR = 0x000F, 1422 IMAGE_REL_AMD64_SSPAN32 = 0x0010 1423 } 1424 1425 enum : WORD { 1426 IMAGE_REL_IA64_ABSOLUTE = 0x0000, 1427 IMAGE_REL_IA64_IMM14 = 0x0001, 1428 IMAGE_REL_IA64_IMM22 = 0x0002, 1429 IMAGE_REL_IA64_IMM64 = 0x0003, 1430 IMAGE_REL_IA64_DIR32 = 0x0004, 1431 IMAGE_REL_IA64_DIR64 = 0x0005, 1432 IMAGE_REL_IA64_PCREL21B = 0x0006, 1433 IMAGE_REL_IA64_PCREL21M = 0x0007, 1434 IMAGE_REL_IA64_PCREL21F = 0x0008, 1435 IMAGE_REL_IA64_GPREL22 = 0x0009, 1436 IMAGE_REL_IA64_LTOFF22 = 0x000A, 1437 IMAGE_REL_IA64_SECTION = 0x000B, 1438 IMAGE_REL_IA64_SECREL22 = 0x000C, 1439 IMAGE_REL_IA64_SECREL64I = 0x000D, 1440 IMAGE_REL_IA64_SECREL32 = 0x000E, 1441 IMAGE_REL_IA64_DIR32NB = 0x0010, 1442 IMAGE_REL_IA64_SREL14 = 0x0011, 1443 IMAGE_REL_IA64_SREL22 = 0x0012, 1444 IMAGE_REL_IA64_SREL32 = 0x0013, 1445 IMAGE_REL_IA64_UREL32 = 0x0014, 1446 IMAGE_REL_IA64_PCREL60X = 0x0015, 1447 IMAGE_REL_IA64_PCREL60B = 0x0016, 1448 IMAGE_REL_IA64_PCREL60F = 0x0017, 1449 IMAGE_REL_IA64_PCREL60I = 0x0018, 1450 IMAGE_REL_IA64_PCREL60M = 0x0019, 1451 IMAGE_REL_IA64_IMMGPREL64 = 0x001A, 1452 IMAGE_REL_IA64_TOKEN = 0x001B, 1453 IMAGE_REL_IA64_GPREL32 = 0x001C, 1454 IMAGE_REL_IA64_ADDEND = 0x001F 1455 } 1456 1457 enum : WORD { 1458 IMAGE_REL_SH3_ABSOLUTE = 0x0000, 1459 IMAGE_REL_SH3_DIRECT16 = 0x0001, 1460 IMAGE_REL_SH3_DIRECT32 = 0x0002, 1461 IMAGE_REL_SH3_DIRECT8 = 0x0003, 1462 IMAGE_REL_SH3_DIRECT8_WORD = 0x0004, 1463 IMAGE_REL_SH3_DIRECT8_LONG = 0x0005, 1464 IMAGE_REL_SH3_DIRECT4 = 0x0006, 1465 IMAGE_REL_SH3_DIRECT4_WORD = 0x0007, 1466 IMAGE_REL_SH3_DIRECT4_LONG = 0x0008, 1467 IMAGE_REL_SH3_PCREL8_WORD = 0x0009, 1468 IMAGE_REL_SH3_PCREL8_LONG = 0x000A, 1469 IMAGE_REL_SH3_PCREL12_WORD = 0x000B, 1470 IMAGE_REL_SH3_STARTOF_SECTION = 0x000C, 1471 IMAGE_REL_SH3_SIZEOF_SECTION = 0x000D, 1472 IMAGE_REL_SH3_SECTION = 0x000E, 1473 IMAGE_REL_SH3_SECREL = 0x000F, 1474 IMAGE_REL_SH3_DIRECT32_NB = 0x0010, 1475 IMAGE_REL_SH3_GPREL4_LONG = 0x0011, 1476 IMAGE_REL_SH3_TOKEN = 0x0012, 1477 IMAGE_REL_SHM_PCRELPT = 0x0013, 1478 IMAGE_REL_SHM_REFLO = 0x0014, 1479 IMAGE_REL_SHM_REFHALF = 0x0015, 1480 IMAGE_REL_SHM_RELLO = 0x0016, 1481 IMAGE_REL_SHM_RELHALF = 0x0017, 1482 IMAGE_REL_SHM_PAIR = 0x0018, 1483 IMAGE_REL_SHM_NOMODE = 0x8000 1484 } 1485 1486 enum : WORD { 1487 IMAGE_REL_M32R_ABSOLUTE = 0x0000, 1488 IMAGE_REL_M32R_ADDR32 = 0x0001, 1489 IMAGE_REL_M32R_ADDR32NB = 0x0002, 1490 IMAGE_REL_M32R_ADDR24 = 0x0003, 1491 IMAGE_REL_M32R_GPREL16 = 0x0004, 1492 IMAGE_REL_M32R_PCREL24 = 0x0005, 1493 IMAGE_REL_M32R_PCREL16 = 0x0006, 1494 IMAGE_REL_M32R_PCREL8 = 0x0007, 1495 IMAGE_REL_M32R_REFHALF = 0x0008, 1496 IMAGE_REL_M32R_REFHI = 0x0009, 1497 IMAGE_REL_M32R_REFLO = 0x000A, 1498 IMAGE_REL_M32R_PAIR = 0x000B, 1499 IMAGE_REL_M32R_SECTION = 0x000C, 1500 IMAGE_REL_M32R_SECREL = 0x000D, 1501 IMAGE_REL_M32R_TOKEN = 0x000E 1502 } 1503 1504 enum : WORD { 1505 IMAGE_REL_MIPS_ABSOLUTE = 0x0000, 1506 IMAGE_REL_MIPS_REFHALF = 0x0001, 1507 IMAGE_REL_MIPS_REFWORD = 0x0002, 1508 IMAGE_REL_MIPS_JMPADDR = 0x0003, 1509 IMAGE_REL_MIPS_REFHI = 0x0004, 1510 IMAGE_REL_MIPS_REFLO = 0x0005, 1511 IMAGE_REL_MIPS_GPREL = 0x0006, 1512 IMAGE_REL_MIPS_LITERAL = 0x0007, 1513 IMAGE_REL_MIPS_SECTION = 0x000A, 1514 IMAGE_REL_MIPS_SECREL = 0x000B, 1515 IMAGE_REL_MIPS_SECRELLO = 0x000C, 1516 IMAGE_REL_MIPS_SECRELHI = 0x000D, 1517 IMAGE_REL_MIPS_JMPADDR16 = 0x0010, 1518 IMAGE_REL_MIPS_REFWORDNB = 0x0022, 1519 IMAGE_REL_MIPS_PAIR = 0x0025 1520 } 1521 1522 1523 enum : WORD { 1524 IMAGE_REL_ALPHA_ABSOLUTE, 1525 IMAGE_REL_ALPHA_REFLONG, 1526 IMAGE_REL_ALPHA_REFQUAD, 1527 IMAGE_REL_ALPHA_GPREL32, 1528 IMAGE_REL_ALPHA_LITERAL, 1529 IMAGE_REL_ALPHA_LITUSE, 1530 IMAGE_REL_ALPHA_GPDISP, 1531 IMAGE_REL_ALPHA_BRADDR, 1532 IMAGE_REL_ALPHA_HINT, 1533 IMAGE_REL_ALPHA_INLINE_REFLONG, 1534 IMAGE_REL_ALPHA_REFHI, 1535 IMAGE_REL_ALPHA_REFLO, 1536 IMAGE_REL_ALPHA_PAIR, 1537 IMAGE_REL_ALPHA_MATCH, 1538 IMAGE_REL_ALPHA_SECTION, 1539 IMAGE_REL_ALPHA_SECREL, 1540 IMAGE_REL_ALPHA_REFLONGNB, 1541 IMAGE_REL_ALPHA_SECRELLO, 1542 IMAGE_REL_ALPHA_SECRELHI // = 18 1543 } 1544 1545 enum : WORD { 1546 IMAGE_REL_PPC_ABSOLUTE, 1547 IMAGE_REL_PPC_ADDR64, 1548 IMAGE_REL_PPC_ADDR32, 1549 IMAGE_REL_PPC_ADDR24, 1550 IMAGE_REL_PPC_ADDR16, 1551 IMAGE_REL_PPC_ADDR14, 1552 IMAGE_REL_PPC_REL24, 1553 IMAGE_REL_PPC_REL14, 1554 IMAGE_REL_PPC_TOCREL16, 1555 IMAGE_REL_PPC_TOCREL14, 1556 IMAGE_REL_PPC_ADDR32NB, 1557 IMAGE_REL_PPC_SECREL, 1558 IMAGE_REL_PPC_SECTION, 1559 IMAGE_REL_PPC_IFGLUE, 1560 IMAGE_REL_PPC_IMGLUE, 1561 IMAGE_REL_PPC_SECREL16, 1562 IMAGE_REL_PPC_REFHI, 1563 IMAGE_REL_PPC_REFLO, 1564 IMAGE_REL_PPC_PAIR // = 18 1565 } 1566 1567 // ??? 1568 enum IMAGE_REL_PPC_TYPEMASK = 0x00FF; 1569 enum IMAGE_REL_PPC_NEG = 0x0100; 1570 enum IMAGE_REL_PPC_BRTAKEN = 0x0200; 1571 enum IMAGE_REL_PPC_BRNTAKEN = 0x0400; 1572 enum IMAGE_REL_PPC_TOCDEFN = 0x0800; 1573 1574 enum { 1575 IMAGE_REL_BASED_ABSOLUTE, 1576 IMAGE_REL_BASED_HIGH, 1577 IMAGE_REL_BASED_LOW, 1578 IMAGE_REL_BASED_HIGHLOW, 1579 IMAGE_REL_BASED_HIGHADJ, 1580 IMAGE_REL_BASED_MIPS_JMPADDR 1581 } 1582 // End of constants documented in pecoff.doc 1583 1584 enum size_t IMAGE_ARCHIVE_START_SIZE = 8; 1585 1586 const TCHAR[] 1587 IMAGE_ARCHIVE_START = "!<arch>\n", 1588 IMAGE_ARCHIVE_END = "`\n", 1589 IMAGE_ARCHIVE_PAD = "\n", 1590 IMAGE_ARCHIVE_LINKER_MEMBER = "/ ", 1591 IMAGE_ARCHIVE_LONGNAMES_MEMBER = "// "; 1592 1593 enum IMAGE_ORDINAL_FLAG32 = 0x80000000; 1594 1595 ulong IMAGE_ORDINAL64(ulong Ordinal) { return Ordinal & 0xFFFF; } 1596 uint IMAGE_ORDINAL32(uint Ordinal) { return Ordinal & 0xFFFF; } 1597 1598 bool IMAGE_SNAP_BY_ORDINAL32(uint Ordinal) { 1599 return (Ordinal & IMAGE_ORDINAL_FLAG32) != 0; 1600 } 1601 1602 enum ulong IMAGE_ORDINAL_FLAG64 = 0x8000000000000000; 1603 1604 bool IMAGE_SNAP_BY_ORDINAL64(ulong Ordinal) { 1605 return (Ordinal & IMAGE_ORDINAL_FLAG64) != 0; 1606 } 1607 1608 // ??? 1609 enum IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000; 1610 enum IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000; 1611 1612 enum : DWORD { 1613 IMAGE_DEBUG_TYPE_UNKNOWN, 1614 IMAGE_DEBUG_TYPE_COFF, 1615 IMAGE_DEBUG_TYPE_CODEVIEW, 1616 IMAGE_DEBUG_TYPE_FPO, 1617 IMAGE_DEBUG_TYPE_MISC, 1618 IMAGE_DEBUG_TYPE_EXCEPTION, 1619 IMAGE_DEBUG_TYPE_FIXUP, 1620 IMAGE_DEBUG_TYPE_OMAP_TO_SRC, 1621 IMAGE_DEBUG_TYPE_OMAP_FROM_SRC, 1622 IMAGE_DEBUG_TYPE_BORLAND // = 9 1623 } 1624 1625 enum : ubyte { 1626 FRAME_FPO, 1627 FRAME_TRAP, 1628 FRAME_TSS, 1629 FRAME_NONFPO 1630 } 1631 1632 // ??? 1633 enum IMAGE_DEBUG_MISC_EXENAME = 1; 1634 1635 // ??? 1636 enum N_BTMASK = 0x000F; 1637 enum N_TMASK = 0x0030; 1638 enum N_TMASK1 = 0x00C0; 1639 enum N_TMASK2 = 0x00F0; 1640 enum N_BTSHFT = 4; 1641 enum N_TSHIFT = 2; 1642 1643 enum int 1644 IS_TEXT_UNICODE_ASCII16 = 0x0001, 1645 IS_TEXT_UNICODE_STATISTICS = 0x0002, 1646 IS_TEXT_UNICODE_CONTROLS = 0x0004, 1647 IS_TEXT_UNICODE_SIGNATURE = 0x0008, 1648 IS_TEXT_UNICODE_REVERSE_ASCII16 = 0x0010, 1649 IS_TEXT_UNICODE_REVERSE_STATISTICS = 0x0020, 1650 IS_TEXT_UNICODE_REVERSE_CONTROLS = 0x0040, 1651 IS_TEXT_UNICODE_REVERSE_SIGNATURE = 0x0080, 1652 IS_TEXT_UNICODE_ILLEGAL_CHARS = 0x0100, 1653 IS_TEXT_UNICODE_ODD_LENGTH = 0x0200, 1654 IS_TEXT_UNICODE_NULL_BYTES = 0x1000, 1655 IS_TEXT_UNICODE_UNICODE_MASK = 0x000F, 1656 IS_TEXT_UNICODE_REVERSE_MASK = 0x00F0, 1657 IS_TEXT_UNICODE_NOT_UNICODE_MASK = 0x0F00, 1658 IS_TEXT_UNICODE_NOT_ASCII_MASK = 0xF000; 1659 1660 enum DWORD 1661 SERVICE_KERNEL_DRIVER = 0x0001, 1662 SERVICE_FILE_SYSTEM_DRIVER = 0x0002, 1663 SERVICE_ADAPTER = 0x0004, 1664 SERVICE_RECOGNIZER_DRIVER = 0x0008, 1665 SERVICE_WIN32_OWN_PROCESS = 0x0010, 1666 SERVICE_WIN32_SHARE_PROCESS = 0x0020, 1667 SERVICE_INTERACTIVE_PROCESS = 0x0100, 1668 SERVICE_DRIVER = 0x000B, 1669 SERVICE_WIN32 = 0x0030, 1670 SERVICE_TYPE_ALL = 0x013F; 1671 1672 enum : DWORD { 1673 SERVICE_BOOT_START = 0, 1674 SERVICE_SYSTEM_START = 1, 1675 SERVICE_AUTO_START = 2, 1676 SERVICE_DEMAND_START = 3, 1677 SERVICE_DISABLED = 4 1678 } 1679 1680 enum : DWORD { 1681 SERVICE_ERROR_IGNORE = 0, 1682 SERVICE_ERROR_NORMAL = 1, 1683 SERVICE_ERROR_SEVERE = 2, 1684 SERVICE_ERROR_CRITICAL = 3 1685 } 1686 1687 1688 enum uint 1689 SE_OWNER_DEFAULTED = 0x0001, 1690 SE_GROUP_DEFAULTED = 0x0002, 1691 SE_DACL_PRESENT = 0x0004, 1692 SE_DACL_DEFAULTED = 0x0008, 1693 SE_SACL_PRESENT = 0x0010, 1694 SE_SACL_DEFAULTED = 0x0020, 1695 SE_DACL_AUTO_INHERIT_REQ = 0x0100, 1696 SE_SACL_AUTO_INHERIT_REQ = 0x0200, 1697 SE_DACL_AUTO_INHERITED = 0x0400, 1698 SE_SACL_AUTO_INHERITED = 0x0800, 1699 SE_DACL_PROTECTED = 0x1000, 1700 SE_SACL_PROTECTED = 0x2000, 1701 SE_SELF_RELATIVE = 0x8000; 1702 1703 enum SECURITY_IMPERSONATION_LEVEL { 1704 SecurityAnonymous, 1705 SecurityIdentification, 1706 SecurityImpersonation, 1707 SecurityDelegation 1708 } 1709 alias PSECURITY_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL*; 1710 1711 alias SECURITY_CONTEXT_TRACKING_MODE = BOOLEAN; 1712 alias PSECURITY_CONTEXT_TRACKING_MODE = BOOLEAN*; 1713 1714 enum size_t SECURITY_DESCRIPTOR_MIN_LENGTH = 20; 1715 1716 enum DWORD 1717 SECURITY_DESCRIPTOR_REVISION = 1, 1718 SECURITY_DESCRIPTOR_REVISION1 = 1; 1719 1720 enum DWORD 1721 SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001, 1722 SE_PRIVILEGE_ENABLED = 0x00000002, 1723 SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; 1724 1725 enum DWORD PRIVILEGE_SET_ALL_NECESSARY = 1; 1726 1727 enum SECURITY_IMPERSONATION_LEVEL 1728 SECURITY_MAX_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL.SecurityDelegation, 1729 DEFAULT_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation; 1730 1731 enum BOOLEAN 1732 SECURITY_DYNAMIC_TRACKING = true, 1733 SECURITY_STATIC_TRACKING = false; 1734 1735 // also in ddk/ntifs.h 1736 enum DWORD 1737 TOKEN_ASSIGN_PRIMARY = 0x0001, 1738 TOKEN_DUPLICATE = 0x0002, 1739 TOKEN_IMPERSONATE = 0x0004, 1740 TOKEN_QUERY = 0x0008, 1741 TOKEN_QUERY_SOURCE = 0x0010, 1742 TOKEN_ADJUST_PRIVILEGES = 0x0020, 1743 TOKEN_ADJUST_GROUPS = 0x0040, 1744 TOKEN_ADJUST_DEFAULT = 0x0080, 1745 1746 TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED 1747 | TOKEN_ASSIGN_PRIMARY 1748 | TOKEN_DUPLICATE 1749 | TOKEN_IMPERSONATE 1750 | TOKEN_QUERY 1751 | TOKEN_QUERY_SOURCE 1752 | TOKEN_ADJUST_PRIVILEGES 1753 | TOKEN_ADJUST_GROUPS 1754 | TOKEN_ADJUST_DEFAULT, 1755 TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY, 1756 TOKEN_WRITE = STANDARD_RIGHTS_WRITE 1757 | TOKEN_ADJUST_PRIVILEGES 1758 | TOKEN_ADJUST_GROUPS 1759 | TOKEN_ADJUST_DEFAULT, 1760 TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE; 1761 1762 enum size_t TOKEN_SOURCE_LENGTH = 8; 1763 // end ddk/ntifs.h 1764 1765 enum : DWORD { 1766 DLL_PROCESS_DETACH, 1767 DLL_PROCESS_ATTACH, 1768 DLL_THREAD_ATTACH, 1769 DLL_THREAD_DETACH 1770 } 1771 1772 enum : DWORD { 1773 DBG_CONTINUE = 0x00010002, 1774 DBG_TERMINATE_THREAD = 0x40010003, 1775 DBG_TERMINATE_PROCESS = 0x40010004, 1776 DBG_CONTROL_C = 0x40010005, 1777 DBG_CONTROL_BREAK = 0x40010008, 1778 DBG_EXCEPTION_NOT_HANDLED = 0x80010001 1779 } 1780 1781 enum : DWORD { 1782 TAPE_ABSOLUTE_POSITION, 1783 TAPE_LOGICAL_POSITION, 1784 TAPE_PSEUDO_LOGICAL_POSITION 1785 } 1786 1787 enum : DWORD { 1788 TAPE_REWIND, 1789 TAPE_ABSOLUTE_BLOCK, 1790 TAPE_LOGICAL_BLOCK, 1791 TAPE_PSEUDO_LOGICAL_BLOCK, 1792 TAPE_SPACE_END_OF_DATA, 1793 TAPE_SPACE_RELATIVE_BLOCKS, 1794 TAPE_SPACE_FILEMARKS, 1795 TAPE_SPACE_SEQUENTIAL_FMKS, 1796 TAPE_SPACE_SETMARKS, 1797 TAPE_SPACE_SEQUENTIAL_SMKS 1798 } 1799 1800 enum DWORD 1801 TAPE_DRIVE_FIXED = 0x00000001, 1802 TAPE_DRIVE_SELECT = 0x00000002, 1803 TAPE_DRIVE_INITIATOR = 0x00000004, 1804 TAPE_DRIVE_ERASE_SHORT = 0x00000010, 1805 TAPE_DRIVE_ERASE_LONG = 0x00000020, 1806 TAPE_DRIVE_ERASE_BOP_ONLY = 0x00000040, 1807 TAPE_DRIVE_ERASE_IMMEDIATE = 0x00000080, 1808 TAPE_DRIVE_TAPE_CAPACITY = 0x00000100, 1809 TAPE_DRIVE_TAPE_REMAINING = 0x00000200, 1810 TAPE_DRIVE_FIXED_BLOCK = 0x00000400, 1811 TAPE_DRIVE_VARIABLE_BLOCK = 0x00000800, 1812 TAPE_DRIVE_WRITE_PROTECT = 0x00001000, 1813 TAPE_DRIVE_EOT_WZ_SIZE = 0x00002000, 1814 TAPE_DRIVE_ECC = 0x00010000, 1815 TAPE_DRIVE_COMPRESSION = 0x00020000, 1816 TAPE_DRIVE_PADDING = 0x00040000, 1817 TAPE_DRIVE_REPORT_SMKS = 0x00080000, 1818 TAPE_DRIVE_GET_ABSOLUTE_BLK = 0x00100000, 1819 TAPE_DRIVE_GET_LOGICAL_BLK = 0x00200000, 1820 TAPE_DRIVE_SET_EOT_WZ_SIZE = 0x00400000, 1821 TAPE_DRIVE_EJECT_MEDIA = 0x01000000, 1822 TAPE_DRIVE_CLEAN_REQUESTS = 0x02000000, 1823 TAPE_DRIVE_SET_CMP_BOP_ONLY = 0x04000000, 1824 TAPE_DRIVE_RESERVED_BIT = 0x80000000; 1825 1826 enum DWORD 1827 TAPE_DRIVE_LOAD_UNLOAD = 0x80000001, 1828 TAPE_DRIVE_TENSION = 0x80000002, 1829 TAPE_DRIVE_LOCK_UNLOCK = 0x80000004, 1830 TAPE_DRIVE_REWIND_IMMEDIATE = 0x80000008, 1831 TAPE_DRIVE_SET_BLOCK_SIZE = 0x80000010, 1832 TAPE_DRIVE_LOAD_UNLD_IMMED = 0x80000020, 1833 TAPE_DRIVE_TENSION_IMMED = 0x80000040, 1834 TAPE_DRIVE_LOCK_UNLK_IMMED = 0x80000080, 1835 TAPE_DRIVE_SET_ECC = 0x80000100, 1836 TAPE_DRIVE_SET_COMPRESSION = 0x80000200, 1837 TAPE_DRIVE_SET_PADDING = 0x80000400, 1838 TAPE_DRIVE_SET_REPORT_SMKS = 0x80000800, 1839 TAPE_DRIVE_ABSOLUTE_BLK = 0x80001000, 1840 TAPE_DRIVE_ABS_BLK_IMMED = 0x80002000, 1841 TAPE_DRIVE_LOGICAL_BLK = 0x80004000, 1842 TAPE_DRIVE_LOG_BLK_IMMED = 0x80008000, 1843 TAPE_DRIVE_END_OF_DATA = 0x80010000, 1844 TAPE_DRIVE_RELATIVE_BLKS = 0x80020000, 1845 TAPE_DRIVE_FILEMARKS = 0x80040000, 1846 TAPE_DRIVE_SEQUENTIAL_FMKS = 0x80080000, 1847 TAPE_DRIVE_SETMARKS = 0x80100000, 1848 TAPE_DRIVE_SEQUENTIAL_SMKS = 0x80200000, 1849 TAPE_DRIVE_REVERSE_POSITION = 0x80400000, 1850 TAPE_DRIVE_SPACE_IMMEDIATE = 0x80800000, 1851 TAPE_DRIVE_WRITE_SETMARKS = 0x81000000, 1852 TAPE_DRIVE_WRITE_FILEMARKS = 0x82000000, 1853 TAPE_DRIVE_WRITE_SHORT_FMKS = 0x84000000, 1854 TAPE_DRIVE_WRITE_LONG_FMKS = 0x88000000, 1855 TAPE_DRIVE_WRITE_MARK_IMMED = 0x90000000, 1856 TAPE_DRIVE_FORMAT = 0xA0000000, 1857 TAPE_DRIVE_FORMAT_IMMEDIATE = 0xC0000000, 1858 TAPE_DRIVE_HIGH_FEATURES = 0x80000000; 1859 1860 enum : DWORD { 1861 TAPE_FIXED_PARTITIONS = 0, 1862 TAPE_SELECT_PARTITIONS = 1, 1863 TAPE_INITIATOR_PARTITIONS = 2 1864 } 1865 1866 enum : DWORD { 1867 TAPE_SETMARKS, 1868 TAPE_FILEMARKS, 1869 TAPE_SHORT_FILEMARKS, 1870 TAPE_LONG_FILEMARKS 1871 } 1872 1873 enum : DWORD { 1874 TAPE_ERASE_SHORT, 1875 TAPE_ERASE_LONG 1876 } 1877 1878 enum : DWORD { 1879 TAPE_LOAD, 1880 TAPE_UNLOAD, 1881 TAPE_TENSION, 1882 TAPE_LOCK, 1883 TAPE_UNLOCK, 1884 TAPE_FORMAT 1885 } 1886 1887 enum : ULONG32 { 1888 VER_PLATFORM_WIN32s, 1889 VER_PLATFORM_WIN32_WINDOWS, 1890 VER_PLATFORM_WIN32_NT 1891 } 1892 1893 enum : UCHAR { 1894 VER_NT_WORKSTATION = 1, 1895 VER_NT_DOMAIN_CONTROLLER, 1896 VER_NT_SERVER 1897 } 1898 1899 enum USHORT 1900 VER_SUITE_SMALLBUSINESS = 0x0001, 1901 VER_SUITE_ENTERPRISE = 0x0002, 1902 VER_SUITE_BACKOFFICE = 0x0004, 1903 VER_SUITE_TERMINAL = 0x0010, 1904 VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x0020, 1905 VER_SUITE_EMBEDDEDNT = 0x0040, 1906 VER_SUITE_DATACENTER = 0x0080, 1907 VER_SUITE_SINGLEUSERTS = 0x0100, 1908 VER_SUITE_PERSONAL = 0x0200, 1909 VER_SUITE_BLADE = 0x0400, 1910 VER_SUITE_STORAGE_SERVER = 0x2000, 1911 VER_SUITE_COMPUTE_SERVER = 0x4000; 1912 1913 enum ULONG 1914 WT_EXECUTEDEFAULT = 0x00000000, 1915 WT_EXECUTEINIOTHREAD = 0x00000001, 1916 WT_EXECUTEINWAITTHREAD = 0x00000004, 1917 WT_EXECUTEONLYONCE = 0x00000008, 1918 WT_EXECUTELONGFUNCTION = 0x00000010, 1919 WT_EXECUTEINTIMERTHREAD = 0x00000020, 1920 WT_EXECUTEINPERSISTENTTHREAD = 0x00000080, 1921 WT_TRANSFER_IMPERSONATION = 0x00000100; 1922 1923 static if (_WIN32_WINNT >= 0x500) { 1924 enum DWORD 1925 VER_MINORVERSION = 0x01, 1926 VER_MAJORVERSION = 0x02, 1927 VER_BUILDNUMBER = 0x04, 1928 VER_PLATFORMID = 0x08, 1929 VER_SERVICEPACKMINOR = 0x10, 1930 VER_SERVICEPACKMAJOR = 0x20, 1931 VER_SUITENAME = 0x40, 1932 VER_PRODUCT_TYPE = 0x80; 1933 1934 enum : DWORD { 1935 VER_EQUAL = 1, 1936 VER_GREATER, 1937 VER_GREATER_EQUAL, 1938 VER_LESS, 1939 VER_LESS_EQUAL, 1940 VER_AND, 1941 VER_OR // = 7 1942 } 1943 } 1944 1945 static if (_WIN32_WINNT >= 0x501) { 1946 enum : ULONG { 1947 ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION = 1, 1948 ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, 1949 ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, 1950 ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, 1951 ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION, 1952 ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, 1953 ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION, // = 7 1954 ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES = 9 1955 } 1956 } 1957 1958 // Macros 1959 BYTE BTYPE(BYTE x) { return cast(BYTE) (x & N_BTMASK); } 1960 bool ISPTR(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT); } 1961 bool ISFCN(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT); } 1962 bool ISARY(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT); } 1963 bool ISTAG(uint x) { 1964 return x == IMAGE_SYM_CLASS_STRUCT_TAG 1965 || x == IMAGE_SYM_CLASS_UNION_TAG 1966 || x == IMAGE_SYM_CLASS_ENUM_TAG; 1967 } 1968 uint INCREF(uint x) { 1969 return ((x & ~N_BTMASK) << N_TSHIFT) | (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) 1970 | (x & N_BTMASK); 1971 } 1972 uint DECREF(uint x) { return ((x >>> N_TSHIFT) & ~N_BTMASK) | (x & N_BTMASK); } 1973 1974 enum DWORD TLS_MINIMUM_AVAILABLE = 64; 1975 1976 enum ULONG 1977 IO_REPARSE_TAG_RESERVED_ZERO = 0, 1978 IO_REPARSE_TAG_RESERVED_ONE = 1, 1979 IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE, 1980 IO_REPARSE_TAG_SYMBOLIC_LINK = IO_REPARSE_TAG_RESERVED_ZERO, 1981 IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003, 1982 IO_REPARSE_TAG_SYMLINK = 0xA000000C, 1983 IO_REPARSE_TAG_VALID_VALUES = 0xE000FFFF; 1984 1985 /* Although these are semantically boolean, they are documented and 1986 * implemented to return ULONG; this behaviour is preserved for compatibility 1987 */ 1988 ULONG IsReparseTagMicrosoft(ULONG x) { return x & 0x80000000; } 1989 ULONG IsReparseTagHighLatency(ULONG x) { return x & 0x40000000; } 1990 ULONG IsReparseTagNameSurrogate(ULONG x) { return x & 0x20000000; } 1991 1992 bool IsReparseTagValid(ULONG x) { 1993 return !(x & ~IO_REPARSE_TAG_VALID_VALUES) && (x > IO_REPARSE_TAG_RESERVED_RANGE); 1994 } 1995 1996 // Doesn't seem to make sense, but anyway.... 1997 ULONG WT_SET_MAX_THREADPOOL_THREADS(ref ULONG Flags, ushort Limit) { 1998 return Flags |= Limit << 16; 1999 } 2000 2001 import nulib.system.win32.basetyps; 2002 /* also in nulib.system.win32.basetyps 2003 struct GUID { 2004 uint Data1; 2005 ushort Data2; 2006 ushort Data3; 2007 ubyte Data4[8]; 2008 } 2009 alias REFGUID = GUID*; 2010 alias LPGUID = GUID*; 2011 */ 2012 2013 struct GENERIC_MAPPING { 2014 ACCESS_MASK GenericRead; 2015 ACCESS_MASK GenericWrite; 2016 ACCESS_MASK GenericExecute; 2017 ACCESS_MASK GenericAll; 2018 } 2019 alias PGENERIC_MAPPING = GENERIC_MAPPING*; 2020 2021 struct ACE_HEADER { 2022 BYTE AceType; 2023 BYTE AceFlags; 2024 WORD AceSize; 2025 } 2026 alias PACE_HEADER = ACE_HEADER*; 2027 2028 struct ACCESS_ALLOWED_ACE { 2029 ACE_HEADER Header; 2030 ACCESS_MASK Mask; 2031 DWORD SidStart; 2032 } 2033 alias PACCESS_ALLOWED_ACE = ACCESS_ALLOWED_ACE*; 2034 2035 struct ACCESS_DENIED_ACE { 2036 ACE_HEADER Header; 2037 ACCESS_MASK Mask; 2038 DWORD SidStart; 2039 } 2040 alias PACCESS_DENIED_ACE = ACCESS_DENIED_ACE*; 2041 2042 struct SYSTEM_AUDIT_ACE { 2043 ACE_HEADER Header; 2044 ACCESS_MASK Mask; 2045 DWORD SidStart; 2046 } 2047 alias SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE; 2048 2049 struct SYSTEM_ALARM_ACE { 2050 ACE_HEADER Header; 2051 ACCESS_MASK Mask; 2052 DWORD SidStart; 2053 } 2054 alias PSYSTEM_ALARM_ACE = SYSTEM_ALARM_ACE*; 2055 2056 struct ACCESS_ALLOWED_OBJECT_ACE { 2057 ACE_HEADER Header; 2058 ACCESS_MASK Mask; 2059 DWORD Flags; 2060 GUID ObjectType; 2061 GUID InheritedObjectType; 2062 DWORD SidStart; 2063 } 2064 alias PACCESS_ALLOWED_OBJECT_ACE = ACCESS_ALLOWED_OBJECT_ACE*; 2065 2066 struct ACCESS_DENIED_OBJECT_ACE { 2067 ACE_HEADER Header; 2068 ACCESS_MASK Mask; 2069 DWORD Flags; 2070 GUID ObjectType; 2071 GUID InheritedObjectType; 2072 DWORD SidStart; 2073 } 2074 alias PACCESS_DENIED_OBJECT_ACE = ACCESS_DENIED_OBJECT_ACE*; 2075 2076 struct SYSTEM_AUDIT_OBJECT_ACE { 2077 ACE_HEADER Header; 2078 ACCESS_MASK Mask; 2079 DWORD Flags; 2080 GUID ObjectType; 2081 GUID InheritedObjectType; 2082 DWORD SidStart; 2083 } 2084 alias PSYSTEM_AUDIT_OBJECT_ACE = SYSTEM_AUDIT_OBJECT_ACE*; 2085 2086 struct SYSTEM_ALARM_OBJECT_ACE { 2087 ACE_HEADER Header; 2088 ACCESS_MASK Mask; 2089 DWORD Flags; 2090 GUID ObjectType; 2091 GUID InheritedObjectType; 2092 DWORD SidStart; 2093 } 2094 alias PSYSTEM_ALARM_OBJECT_ACE = SYSTEM_ALARM_OBJECT_ACE*; 2095 2096 struct ACL { 2097 BYTE AclRevision; 2098 BYTE Sbz1; 2099 WORD AclSize; 2100 WORD AceCount; 2101 WORD Sbz2; 2102 } 2103 alias PACL = ACL*; 2104 2105 struct ACL_REVISION_INFORMATION { 2106 DWORD AclRevision; 2107 } 2108 2109 struct ACL_SIZE_INFORMATION { 2110 DWORD AceCount; 2111 DWORD AclBytesInUse; 2112 DWORD AclBytesFree; 2113 } 2114 2115 version (X86) { 2116 // ??? 2117 enum SIZE_OF_80387_REGISTERS = 80; 2118 enum CONTEXT_i386 = 0x010000; 2119 enum CONTEXT_i486 = 0x010000; 2120 enum CONTEXT_CONTROL = CONTEXT_i386 | 0x01; 2121 enum CONTEXT_INTEGER = CONTEXT_i386 | 0x02; 2122 enum CONTEXT_SEGMENTS = CONTEXT_i386 | 0x04; 2123 enum CONTEXT_FLOATING_POINT = CONTEXT_i386 | 0x08; 2124 enum CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 | 0x10; 2125 enum CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 | 0x20; 2126 enum CONTEXT_FULL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS; 2127 enum CONTEXT_ALL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | 2128 CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | 2129 CONTEXT_EXTENDED_REGISTERS; 2130 2131 enum MAXIMUM_SUPPORTED_EXTENSION = 512; 2132 2133 struct FLOATING_SAVE_AREA { 2134 DWORD ControlWord; 2135 DWORD StatusWord; 2136 DWORD TagWord; 2137 DWORD ErrorOffset; 2138 DWORD ErrorSelector; 2139 DWORD DataOffset; 2140 DWORD DataSelector; 2141 BYTE[80] RegisterArea; 2142 DWORD Cr0NpxState; 2143 } 2144 2145 struct CONTEXT { 2146 DWORD ContextFlags; 2147 DWORD Dr0; 2148 DWORD Dr1; 2149 DWORD Dr2; 2150 DWORD Dr3; 2151 DWORD Dr6; 2152 DWORD Dr7; 2153 FLOATING_SAVE_AREA FloatSave; 2154 DWORD SegGs; 2155 DWORD SegFs; 2156 DWORD SegEs; 2157 DWORD SegDs; 2158 DWORD Edi; 2159 DWORD Esi; 2160 DWORD Ebx; 2161 DWORD Edx; 2162 DWORD Ecx; 2163 DWORD Eax; 2164 DWORD Ebp; 2165 DWORD Eip; 2166 DWORD SegCs; 2167 DWORD EFlags; 2168 DWORD Esp; 2169 DWORD SegSs; 2170 BYTE[MAXIMUM_SUPPORTED_EXTENSION] ExtendedRegisters; 2171 } 2172 2173 } else version (X86_64) 2174 { 2175 enum CONTEXT_AMD64 = 0x100000; 2176 2177 enum CONTEXT_CONTROL = (CONTEXT_AMD64 | 0x1L); 2178 enum CONTEXT_INTEGER = (CONTEXT_AMD64 | 0x2L); 2179 enum CONTEXT_SEGMENTS = (CONTEXT_AMD64 | 0x4L); 2180 enum CONTEXT_FLOATING_POINT = (CONTEXT_AMD64 | 0x8L); 2181 enum CONTEXT_DEBUG_REGISTERS = (CONTEXT_AMD64 | 0x10L); 2182 2183 enum CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT); 2184 enum CONTEXT_ALL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS); 2185 2186 enum CONTEXT_EXCEPTION_ACTIVE = 0x8000000; 2187 enum CONTEXT_SERVICE_ACTIVE = 0x10000000; 2188 enum CONTEXT_EXCEPTION_REQUEST = 0x40000000; 2189 enum CONTEXT_EXCEPTION_REPORTING = 0x80000000; 2190 2191 enum INITIAL_MXCSR = 0x1f80; 2192 enum INITIAL_FPCSR = 0x027f; 2193 2194 align(16) struct M128A 2195 { 2196 ULONGLONG Low; 2197 LONGLONG High; 2198 } 2199 alias PM128A = M128A*; 2200 2201 struct XMM_SAVE_AREA32 2202 { 2203 WORD ControlWord; 2204 WORD StatusWord; 2205 BYTE TagWord; 2206 BYTE Reserved1; 2207 WORD ErrorOpcode; 2208 DWORD ErrorOffset; 2209 WORD ErrorSelector; 2210 WORD Reserved2; 2211 DWORD DataOffset; 2212 WORD DataSelector; 2213 WORD Reserved3; 2214 DWORD MxCsr; 2215 DWORD MxCsr_Mask; 2216 M128A[8] FloatRegisters; 2217 M128A[16] XmmRegisters; 2218 BYTE[96] Reserved4; 2219 } 2220 alias PXMM_SAVE_AREA32 = XMM_SAVE_AREA32; 2221 enum LEGACY_SAVE_AREA_LENGTH = XMM_SAVE_AREA32.sizeof; 2222 2223 align(16) struct CONTEXT 2224 { 2225 DWORD64 P1Home; 2226 DWORD64 P2Home; 2227 DWORD64 P3Home; 2228 DWORD64 P4Home; 2229 DWORD64 P5Home; 2230 DWORD64 P6Home; 2231 DWORD ContextFlags; 2232 DWORD MxCsr; 2233 WORD SegCs; 2234 WORD SegDs; 2235 WORD SegEs; 2236 WORD SegFs; 2237 WORD SegGs; 2238 WORD SegSs; 2239 DWORD EFlags; 2240 DWORD64 Dr0; 2241 DWORD64 Dr1; 2242 DWORD64 Dr2; 2243 DWORD64 Dr3; 2244 DWORD64 Dr6; 2245 DWORD64 Dr7; 2246 DWORD64 Rax; 2247 DWORD64 Rcx; 2248 DWORD64 Rdx; 2249 DWORD64 Rbx; 2250 DWORD64 Rsp; 2251 DWORD64 Rbp; 2252 DWORD64 Rsi; 2253 DWORD64 Rdi; 2254 DWORD64 R8; 2255 DWORD64 R9; 2256 DWORD64 R10; 2257 DWORD64 R11; 2258 DWORD64 R12; 2259 DWORD64 R13; 2260 DWORD64 R14; 2261 DWORD64 R15; 2262 DWORD64 Rip; 2263 union 2264 { 2265 XMM_SAVE_AREA32 FltSave; 2266 XMM_SAVE_AREA32 FloatSave; 2267 struct 2268 { 2269 M128A[2] Header; 2270 M128A[8] Legacy; 2271 M128A Xmm0; 2272 M128A Xmm1; 2273 M128A Xmm2; 2274 M128A Xmm3; 2275 M128A Xmm4; 2276 M128A Xmm5; 2277 M128A Xmm6; 2278 M128A Xmm7; 2279 M128A Xmm8; 2280 M128A Xmm9; 2281 M128A Xmm10; 2282 M128A Xmm11; 2283 M128A Xmm12; 2284 M128A Xmm13; 2285 M128A Xmm14; 2286 M128A Xmm15; 2287 } 2288 } 2289 M128A[26] VectorRegister; 2290 DWORD64 VectorControl; 2291 DWORD64 DebugControl; 2292 DWORD64 LastBranchToRip; 2293 DWORD64 LastBranchFromRip; 2294 DWORD64 LastExceptionToRip; 2295 DWORD64 LastExceptionFromRip; 2296 } 2297 2298 } else version(AArch64) { 2299 enum CONTEXT_ARM64 = 0x400000; 2300 2301 enum CONTEXT_CONTROL = (CONTEXT_ARM64 | 0x1L); 2302 enum CONTEXT_INTEGER = (CONTEXT_ARM64 | 0x2L); 2303 enum CONTEXT_SEGMENTS = (CONTEXT_ARM64 | 0x4L); 2304 enum CONTEXT_FLOATING_POINT = (CONTEXT_ARM64 | 0x8L); 2305 enum CONTEXT_DEBUG_REGISTERS = (CONTEXT_ARM64 | 0x10L); 2306 2307 enum CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT); 2308 enum CONTEXT_ALL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS); 2309 2310 enum ARM64_MAX_BREAKPOINTS = 8; 2311 enum ARM64_MAX_WATCHPOINTS = 2; 2312 2313 union ARM64_NT_NEON128 { 2314 struct { 2315 ULONGLONG Low; 2316 LONGLONG High; 2317 }; 2318 double[2] D; 2319 float[4] S; 2320 WORD[8] H; 2321 BYTE[16] B; 2322 } 2323 alias PARM64_NT_NEON128 = ARM64_NT_NEON128*; 2324 2325 align(16) struct CONTEXT 2326 { 2327 DWORD ContextFlags; 2328 DWORD Cpsr; 2329 DWORD64[31] X; 2330 DWORD64 Sp; 2331 DWORD64 Pc; 2332 2333 ARM64_NT_NEON128[32] V; 2334 DWORD Fpcr; 2335 2336 DWORD Fpsr; 2337 2338 DWORD[ARM64_MAX_BREAKPOINTS] Bcr; 2339 DWORD64[ARM64_MAX_BREAKPOINTS] Bvr; 2340 DWORD[ARM64_MAX_WATCHPOINTS] Wcr; 2341 DWORD64[ARM64_MAX_WATCHPOINTS] Wvr; 2342 } 2343 } else { 2344 static assert(false, "Unsupported CPU"); 2345 // Versions for PowerPC, Alpha, SHX, and MIPS removed. 2346 } 2347 2348 alias PCONTEXT = CONTEXT*; 2349 alias LPCONTEXT = CONTEXT*; 2350 2351 struct EXCEPTION_RECORD { 2352 DWORD ExceptionCode; 2353 DWORD ExceptionFlags; 2354 EXCEPTION_RECORD* ExceptionRecord; 2355 PVOID ExceptionAddress; 2356 DWORD NumberParameters; 2357 ULONG_PTR[EXCEPTION_MAXIMUM_PARAMETERS] ExceptionInformation; 2358 } 2359 alias PEXCEPTION_RECORD = EXCEPTION_RECORD*; 2360 alias LPEXCEPTION_RECORD = EXCEPTION_RECORD*; 2361 2362 struct EXCEPTION_POINTERS { 2363 PEXCEPTION_RECORD ExceptionRecord; 2364 PCONTEXT ContextRecord; 2365 } 2366 alias PEXCEPTION_POINTERS = EXCEPTION_POINTERS*; 2367 alias LPEXCEPTION_POINTERS = EXCEPTION_POINTERS*; 2368 2369 union LARGE_INTEGER { 2370 struct { 2371 uint LowPart; 2372 int HighPart; 2373 } 2374 long QuadPart; 2375 } 2376 alias PLARGE_INTEGER = LARGE_INTEGER*; 2377 2378 union ULARGE_INTEGER { 2379 struct { 2380 uint LowPart; 2381 uint HighPart; 2382 } 2383 ulong QuadPart; 2384 } 2385 alias PULARGE_INTEGER = ULARGE_INTEGER*; 2386 2387 alias LUID = LARGE_INTEGER; 2388 alias PLUID = LUID*; 2389 2390 enum LUID SYSTEM_LUID = { QuadPart:999 }; 2391 2392 align(4) struct LUID_AND_ATTRIBUTES { 2393 LUID Luid; 2394 DWORD Attributes; 2395 } 2396 alias PLUID_AND_ATTRIBUTES = LUID_AND_ATTRIBUTES*; 2397 2398 align(4) struct PRIVILEGE_SET { 2399 DWORD PrivilegeCount; 2400 DWORD Control; 2401 LUID_AND_ATTRIBUTES _Privilege; 2402 2403 LUID_AND_ATTRIBUTES* Privilege() return { return &_Privilege; } 2404 } 2405 alias PPRIVILEGE_SET = PRIVILEGE_SET*; 2406 2407 struct SECURITY_ATTRIBUTES { 2408 DWORD nLength; 2409 LPVOID lpSecurityDescriptor; 2410 BOOL bInheritHandle; 2411 } 2412 alias PSECURITY_ATTRIBUTES = SECURITY_ATTRIBUTES*; 2413 alias LPSECURITY_ATTRIBUTES = SECURITY_ATTRIBUTES*; 2414 2415 struct SECURITY_QUALITY_OF_SERVICE { 2416 DWORD Length; 2417 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 2418 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; 2419 BOOLEAN EffectiveOnly; 2420 } 2421 alias PSECURITY_QUALITY_OF_SERVICE = SECURITY_QUALITY_OF_SERVICE*; 2422 2423 alias PACCESS_TOKEN = PVOID; 2424 2425 struct SE_IMPERSONATION_STATE { 2426 PACCESS_TOKEN Token; 2427 BOOLEAN CopyOnOpen; 2428 BOOLEAN EffectiveOnly; 2429 SECURITY_IMPERSONATION_LEVEL Level; 2430 } 2431 alias PSE_IMPERSONATION_STATE = SE_IMPERSONATION_STATE*; 2432 2433 struct SID_IDENTIFIER_AUTHORITY { 2434 BYTE[6] Value; 2435 } 2436 alias PSID_IDENTIFIER_AUTHORITY = SID_IDENTIFIER_AUTHORITY*; 2437 alias LPSID_IDENTIFIER_AUTHORITY = SID_IDENTIFIER_AUTHORITY*; 2438 2439 alias PSID = PVOID; 2440 2441 struct SID { 2442 BYTE Revision; 2443 BYTE SubAuthorityCount; 2444 SID_IDENTIFIER_AUTHORITY IdentifierAuthority; 2445 DWORD _SubAuthority; 2446 2447 DWORD* SubAuthority() return { return &_SubAuthority; } 2448 } 2449 alias PISID = SID*; 2450 2451 struct SID_AND_ATTRIBUTES { 2452 PSID Sid; 2453 DWORD Attributes; 2454 } 2455 alias PSID_AND_ATTRIBUTES = SID_AND_ATTRIBUTES*; 2456 2457 struct TOKEN_SOURCE { 2458 CHAR[TOKEN_SOURCE_LENGTH] SourceName = 0; 2459 LUID SourceIdentifier; 2460 } 2461 alias PTOKEN_SOURCE = TOKEN_SOURCE*; 2462 2463 struct TOKEN_CONTROL { 2464 LUID TokenId; 2465 LUID AuthenticationId; 2466 LUID ModifiedId; 2467 TOKEN_SOURCE TokenSource; 2468 } 2469 alias PTOKEN_CONTROL = TOKEN_CONTROL*; 2470 2471 struct TOKEN_DEFAULT_DACL { 2472 PACL DefaultDacl; 2473 } 2474 alias PTOKEN_DEFAULT_DACL = TOKEN_DEFAULT_DACL*; 2475 2476 struct TOKEN_GROUPS { 2477 DWORD GroupCount; 2478 SID_AND_ATTRIBUTES _Groups; 2479 2480 SID_AND_ATTRIBUTES* Groups() return { return &_Groups; } 2481 } 2482 alias PTOKEN_GROUPS = TOKEN_GROUPS*; 2483 alias LPTOKEN_GROUPS = TOKEN_GROUPS*; 2484 2485 struct TOKEN_OWNER { 2486 PSID Owner; 2487 } 2488 alias PTOKEN_OWNER = TOKEN_OWNER*; 2489 enum SECURITY_MAX_SID_SIZE = 68; 2490 2491 struct TOKEN_PRIMARY_GROUP { 2492 PSID PrimaryGroup; 2493 } 2494 alias PTOKEN_PRIMARY_GROUP = TOKEN_PRIMARY_GROUP*; 2495 2496 struct TOKEN_PRIVILEGES { 2497 DWORD PrivilegeCount; 2498 LUID_AND_ATTRIBUTES _Privileges; 2499 2500 LUID_AND_ATTRIBUTES* Privileges() return { return &_Privileges; } 2501 } 2502 alias PTOKEN_PRIVILEGES = TOKEN_PRIVILEGES*; 2503 alias LPTOKEN_PRIVILEGES = TOKEN_PRIVILEGES*; 2504 2505 enum TOKEN_TYPE { 2506 TokenPrimary = 1, 2507 TokenImpersonation 2508 } 2509 alias PTOKEN_TYPE = TOKEN_TYPE*; 2510 2511 struct TOKEN_STATISTICS { 2512 LUID TokenId; 2513 LUID AuthenticationId; 2514 LARGE_INTEGER ExpirationTime; 2515 TOKEN_TYPE TokenType; 2516 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; 2517 DWORD DynamicCharged; 2518 DWORD DynamicAvailable; 2519 DWORD GroupCount; 2520 DWORD PrivilegeCount; 2521 LUID ModifiedId; 2522 } 2523 alias PTOKEN_STATISTICS = TOKEN_STATISTICS*; 2524 2525 struct TOKEN_USER { 2526 SID_AND_ATTRIBUTES User; 2527 } 2528 alias PTOKEN_USER = TOKEN_USER*; 2529 2530 struct TOKEN_MANDATORY_LABEL { 2531 SID_AND_ATTRIBUTES Label; 2532 } 2533 alias PTOKEN_MANDATORY_LABEL = TOKEN_MANDATORY_LABEL*; 2534 alias SECURITY_INFORMATION = DWORD; 2535 alias PSECURITY_INFORMATION = SECURITY_INFORMATION*; 2536 alias SECURITY_DESCRIPTOR_CONTROL = WORD; 2537 alias PSECURITY_DESCRIPTOR_CONTROL = SECURITY_DESCRIPTOR_CONTROL*; 2538 2539 struct SECURITY_DESCRIPTOR { 2540 BYTE Revision; 2541 BYTE Sbz1; 2542 SECURITY_DESCRIPTOR_CONTROL Control; 2543 PSID Owner; 2544 PSID Group; 2545 PACL Sacl; 2546 PACL Dacl; 2547 } 2548 alias PSECURITY_DESCRIPTOR = SECURITY_DESCRIPTOR*; 2549 alias PISECURITY_DESCRIPTOR = SECURITY_DESCRIPTOR*; 2550 enum TOKEN_ELEVATION_TYPE { 2551 TokenElevationTypeDefault = 1, 2552 TokenElevationTypeFull, 2553 TokenElevationTypeLimited 2554 } 2555 2556 alias PTOKEN_ELEVATION_TYPE = TOKEN_ELEVATION_TYPE*; 2557 2558 struct TOKEN_ELEVATION { 2559 DWORD TokenIsElevated; 2560 } 2561 alias PTOKEN_ELEVATION = TOKEN_ELEVATION*; 2562 2563 enum TOKEN_INFORMATION_CLASS { 2564 TokenUser = 1, 2565 TokenGroups, 2566 TokenPrivileges, 2567 TokenOwner, 2568 TokenPrimaryGroup, 2569 TokenDefaultDacl, 2570 TokenSource, 2571 TokenType, 2572 TokenImpersonationLevel, 2573 TokenStatistics, 2574 TokenRestrictedSids, 2575 TokenSessionId, 2576 TokenGroupsAndPrivileges, 2577 TokenSessionReference, 2578 TokenSandBoxInert, 2579 TokenAuditPolicy, 2580 TokenOrigin, 2581 TokenElevationType, 2582 TokenLinkedToken, 2583 TokenElevation, 2584 TokenHasRestrictions, 2585 TokenAccessInformation, 2586 TokenVirtualizationAllowed, 2587 TokenVirtualizationEnabled, 2588 TokenIntegrityLevel, 2589 TokenUIAccess, 2590 TokenMandatoryPolicy, 2591 TokenLogonSid, 2592 TokenIsAppContainer, 2593 TokenCapabilities, 2594 TokenAppContainerSid, 2595 TokenAppContainerNumber, 2596 TokenUserClaimAttributes, 2597 TokenDeviceClaimAttributes, 2598 TokenRestrictedUserClaimAttributes, 2599 TokenRestrictedDeviceClaimAttributes, 2600 TokenDeviceGroups, 2601 TokenRestrictedDeviceGroups, 2602 TokenSecurityAttributes, 2603 TokenIsRestricted, 2604 TokenProcessTrustLevel, 2605 MaxTokenInfoClass // MaxTokenInfoClass should always be the last enum 2606 } 2607 2608 enum SID_NAME_USE { 2609 SidTypeUser = 1, 2610 SidTypeGroup, 2611 SidTypeDomain, 2612 SidTypeAlias, 2613 SidTypeWellKnownGroup, 2614 SidTypeDeletedAccount, 2615 SidTypeInvalid, 2616 SidTypeUnknown, 2617 SidTypeComputer 2618 } 2619 alias PSID_NAME_USE = SID_NAME_USE*; 2620 2621 enum WELL_KNOWN_SID_TYPE { 2622 WinNullSid = 0, 2623 WinWorldSid = 1, 2624 WinLocalSid = 2, 2625 WinCreatorOwnerSid = 3, 2626 WinCreatorGroupSid = 4, 2627 WinCreatorOwnerServerSid = 5, 2628 WinCreatorGroupServerSid = 6, 2629 WinNtAuthoritySid = 7, 2630 WinDialupSid = 8, 2631 WinNetworkSid = 9, 2632 WinBatchSid = 10, 2633 WinInteractiveSid = 11, 2634 WinServiceSid = 12, 2635 WinAnonymousSid = 13, 2636 WinProxySid = 14, 2637 WinEnterpriseControllersSid = 15, 2638 WinSelfSid = 16, 2639 WinAuthenticatedUserSid = 17, 2640 WinRestrictedCodeSid = 18, 2641 WinTerminalServerSid = 19, 2642 WinRemoteLogonIdSid = 20, 2643 WinLogonIdsSid = 21, 2644 WinLocalSystemSid = 22, 2645 WinLocalServiceSid = 23, 2646 WinNetworkServiceSid = 24, 2647 WinBuiltinDomainSid = 25, 2648 WinBuiltinAdministratorsSid = 26, 2649 WinBuiltinUsersSid = 27, 2650 WinBuiltinGuestsSid = 28, 2651 WinBuiltinPowerUsersSid = 29, 2652 WinBuiltinAccountOperatorsSid = 30, 2653 WinBuiltinSystemOperatorsSid = 31, 2654 WinBuiltinPrintOperatorsSid = 32, 2655 WinBuiltinBackupOperatorsSid = 33, 2656 WinBuiltinReplicatorSid = 34, 2657 WinBuiltinPreWindows2000CompatibleAccessSid = 35, 2658 WinBuiltinRemoteDesktopUsersSid = 36, 2659 WinBuiltinNetworkConfigurationOperatorsSid = 37, 2660 WinAccountAdministratorSid = 38, 2661 WinAccountGuestSid = 39, 2662 WinAccountKrbtgtSid = 40, 2663 WinAccountDomainAdminsSid = 41, 2664 WinAccountDomainUsersSid = 42, 2665 WinAccountDomainGuestsSid = 43, 2666 WinAccountComputersSid = 44, 2667 WinAccountControllersSid = 45, 2668 WinAccountCertAdminsSid = 46, 2669 WinAccountSchemaAdminsSid = 47, 2670 WinAccountEnterpriseAdminsSid = 48, 2671 WinAccountPolicyAdminsSid = 49, 2672 WinAccountRasAndIasServersSid = 50, 2673 WinNTLMAuthenticationSid = 51, 2674 WinDigestAuthenticationSid = 52, 2675 WinSChannelAuthenticationSid = 53, 2676 WinThisOrganizationSid = 54, 2677 WinOtherOrganizationSid = 55, 2678 WinBuiltinIncomingForestTrustBuildersSid = 56, 2679 WinBuiltinPerfMonitoringUsersSid = 57, 2680 WinBuiltinPerfLoggingUsersSid = 58, 2681 WinBuiltinAuthorizationAccessSid = 59, 2682 WinBuiltinTerminalServerLicenseServersSid = 60, 2683 WinBuiltinDCOMUsersSid = 61, 2684 WinBuiltinIUsersSid = 62, 2685 WinIUserSid = 63, 2686 WinBuiltinCryptoOperatorsSid = 64, 2687 WinUntrustedLabelSid = 65, 2688 WinLowLabelSid = 66, 2689 WinMediumLabelSid = 67, 2690 WinHighLabelSid = 68, 2691 WinSystemLabelSid = 69, 2692 WinWriteRestrictedCodeSid = 70, 2693 WinCreatorOwnerRightsSid = 71, 2694 WinCacheablePrincipalsGroupSid = 72, 2695 WinNonCacheablePrincipalsGroupSid = 73, 2696 WinEnterpriseReadonlyControllersSid = 74, 2697 WinAccountReadonlyControllersSid = 75, 2698 WinBuiltinEventLogReadersGroup = 76, 2699 WinNewEnterpriseReadonlyControllersSid = 77, 2700 WinBuiltinCertSvcDComAccessGroup = 78, 2701 WinMediumPlusLabelSid = 79, 2702 WinLocalLogonSid = 80, 2703 WinConsoleLogonSid = 81, 2704 WinThisOrganizationCertificateSid = 82, 2705 WinApplicationPackageAuthoritySid = 83, 2706 WinBuiltinAnyPackageSid = 84, 2707 WinCapabilityInternetClientSid = 85, 2708 WinCapabilityInternetClientServerSid = 86, 2709 WinCapabilityPrivateNetworkClientServerSid = 87, 2710 WinCapabilityPicturesLibrarySid = 88, 2711 WinCapabilityVideosLibrarySid = 89, 2712 WinCapabilityMusicLibrarySid = 90, 2713 WinCapabilityDocumentsLibrarySid = 91, 2714 WinCapabilitySharedUserCertificatesSid = 92, 2715 WinCapabilityEnterpriseAuthenticationSid = 93, 2716 WinCapabilityRemovableStorageSid = 94 2717 } 2718 struct QUOTA_LIMITS { 2719 SIZE_T PagedPoolLimit; 2720 SIZE_T NonPagedPoolLimit; 2721 SIZE_T MinimumWorkingSetSize; 2722 SIZE_T MaximumWorkingSetSize; 2723 SIZE_T PagefileLimit; 2724 LARGE_INTEGER TimeLimit; 2725 } 2726 alias PQUOTA_LIMITS = QUOTA_LIMITS*; 2727 2728 struct IO_COUNTERS { 2729 ULONGLONG ReadOperationCount; 2730 ULONGLONG WriteOperationCount; 2731 ULONGLONG OtherOperationCount; 2732 ULONGLONG ReadTransferCount; 2733 ULONGLONG WriteTransferCount; 2734 ULONGLONG OtherTransferCount; 2735 } 2736 alias PIO_COUNTERS = IO_COUNTERS*; 2737 2738 struct FILE_NOTIFY_INFORMATION { 2739 DWORD NextEntryOffset; 2740 DWORD Action; 2741 DWORD FileNameLength = 0; 2742 WCHAR _FileName = 0; 2743 2744 WCHAR* FileName() return { return &_FileName; } 2745 } 2746 alias PFILE_NOTIFY_INFORMATION = FILE_NOTIFY_INFORMATION*; 2747 2748 struct TAPE_ERASE { 2749 DWORD Type; 2750 BOOLEAN Immediate; 2751 } 2752 alias PTAPE_ERASE = TAPE_ERASE*; 2753 2754 struct TAPE_GET_DRIVE_PARAMETERS { 2755 BOOLEAN ECC; 2756 BOOLEAN Compression; 2757 BOOLEAN DataPadding; 2758 BOOLEAN ReportSetmarks; 2759 DWORD DefaultBlockSize; 2760 DWORD MaximumBlockSize; 2761 DWORD MinimumBlockSize; 2762 DWORD MaximumPartitionCount; 2763 DWORD FeaturesLow; 2764 DWORD FeaturesHigh; 2765 DWORD EOTWarningZoneSize; 2766 } 2767 alias PTAPE_GET_DRIVE_PARAMETERS = TAPE_GET_DRIVE_PARAMETERS*; 2768 2769 struct TAPE_GET_MEDIA_PARAMETERS { 2770 LARGE_INTEGER Capacity; 2771 LARGE_INTEGER Remaining; 2772 DWORD BlockSize; 2773 DWORD PartitionCount; 2774 BOOLEAN WriteProtected; 2775 } 2776 alias PTAPE_GET_MEDIA_PARAMETERS = TAPE_GET_MEDIA_PARAMETERS*; 2777 2778 struct TAPE_GET_POSITION { 2779 ULONG Type; 2780 ULONG Partition; 2781 ULONG OffsetLow; 2782 ULONG OffsetHigh; 2783 } 2784 alias PTAPE_GET_POSITION = TAPE_GET_POSITION*; 2785 2786 struct TAPE_PREPARE { 2787 DWORD Operation; 2788 BOOLEAN Immediate; 2789 } 2790 alias PTAPE_PREPARE = TAPE_PREPARE*; 2791 2792 struct TAPE_SET_DRIVE_PARAMETERS { 2793 BOOLEAN ECC; 2794 BOOLEAN Compression; 2795 BOOLEAN DataPadding; 2796 BOOLEAN ReportSetmarks; 2797 ULONG EOTWarningZoneSize; 2798 } 2799 alias PTAPE_SET_DRIVE_PARAMETERS = TAPE_SET_DRIVE_PARAMETERS*; 2800 2801 struct TAPE_SET_MEDIA_PARAMETERS { 2802 ULONG BlockSize; 2803 } 2804 alias PTAPE_SET_MEDIA_PARAMETERS = TAPE_SET_MEDIA_PARAMETERS*; 2805 2806 struct TAPE_SET_POSITION { 2807 DWORD Method; 2808 DWORD Partition; 2809 LARGE_INTEGER Offset; 2810 BOOLEAN Immediate; 2811 } 2812 alias PTAPE_SET_POSITION = TAPE_SET_POSITION*; 2813 2814 struct TAPE_WRITE_MARKS { 2815 DWORD Type; 2816 DWORD Count; 2817 BOOLEAN Immediate; 2818 } 2819 alias PTAPE_WRITE_MARKS = TAPE_WRITE_MARKS*; 2820 2821 struct TAPE_CREATE_PARTITION { 2822 DWORD Method; 2823 DWORD Count; 2824 DWORD Size; 2825 } 2826 alias PTAPE_CREATE_PARTITION = TAPE_CREATE_PARTITION*; 2827 2828 struct MEMORY_BASIC_INFORMATION { 2829 PVOID BaseAddress; 2830 PVOID AllocationBase; 2831 DWORD AllocationProtect; 2832 SIZE_T RegionSize; 2833 DWORD State; 2834 DWORD Protect; 2835 DWORD Type; 2836 } 2837 alias PMEMORY_BASIC_INFORMATION = MEMORY_BASIC_INFORMATION*; 2838 2839 struct MESSAGE_RESOURCE_ENTRY { 2840 WORD Length; 2841 WORD Flags; 2842 BYTE _Text; 2843 2844 BYTE* Text() return { return &_Text; } 2845 } 2846 alias PMESSAGE_RESOURCE_ENTRY = MESSAGE_RESOURCE_ENTRY*; 2847 2848 struct MESSAGE_RESOURCE_BLOCK { 2849 DWORD LowId; 2850 DWORD HighId; 2851 DWORD OffsetToEntries; 2852 } 2853 alias PMESSAGE_RESOURCE_BLOCK = MESSAGE_RESOURCE_BLOCK*; 2854 2855 struct MESSAGE_RESOURCE_DATA { 2856 DWORD NumberOfBlocks; 2857 MESSAGE_RESOURCE_BLOCK _Blocks; 2858 2859 MESSAGE_RESOURCE_BLOCK* Blocks() return { return &_Blocks; } 2860 } 2861 alias PMESSAGE_RESOURCE_DATA = MESSAGE_RESOURCE_DATA*; 2862 2863 struct LIST_ENTRY { 2864 LIST_ENTRY* Flink; 2865 LIST_ENTRY* Blink; 2866 } 2867 alias PLIST_ENTRY = LIST_ENTRY*; 2868 alias _LIST_ENTRY = LIST_ENTRY; 2869 2870 struct SINGLE_LIST_ENTRY { 2871 SINGLE_LIST_ENTRY* Next; 2872 } 2873 2874 version (Win64) { 2875 align (16) 2876 struct SLIST_ENTRY { 2877 SLIST_ENTRY* Next; 2878 } 2879 } else { 2880 alias SLIST_ENTRY = SINGLE_LIST_ENTRY; 2881 } 2882 alias PSINGLE_LIST_ENTRY = SINGLE_LIST_ENTRY*; 2883 alias PSLIST_ENTRY = SINGLE_LIST_ENTRY*; 2884 2885 union SLIST_HEADER { 2886 ULONGLONG Alignment; 2887 struct { 2888 SLIST_ENTRY Next; 2889 WORD Depth; 2890 WORD Sequence; 2891 } 2892 } 2893 alias PSLIST_HEADER = SLIST_HEADER*; 2894 2895 struct RTL_CRITICAL_SECTION_DEBUG { 2896 WORD Type; 2897 WORD CreatorBackTraceIndex; 2898 RTL_CRITICAL_SECTION* CriticalSection; 2899 LIST_ENTRY ProcessLocksList; 2900 DWORD EntryCount; 2901 DWORD ContentionCount; 2902 DWORD[2] Spare; 2903 } 2904 alias PRTL_CRITICAL_SECTION_DEBUG = RTL_CRITICAL_SECTION_DEBUG*; 2905 alias _RTL_CRITICAL_SECTION_DEBUG = RTL_CRITICAL_SECTION_DEBUG; 2906 2907 struct RTL_CRITICAL_SECTION { 2908 PRTL_CRITICAL_SECTION_DEBUG DebugInfo; 2909 LONG LockCount; 2910 LONG RecursionCount; 2911 HANDLE OwningThread; 2912 HANDLE LockSemaphore; 2913 ULONG_PTR SpinCount; 2914 alias Reserved = SpinCount; 2915 } 2916 alias PRTL_CRITICAL_SECTION = RTL_CRITICAL_SECTION*; 2917 alias _RTL_CRITICAL_SECTION = RTL_CRITICAL_SECTION; 2918 2919 struct EVENTLOGRECORD { 2920 DWORD Length; 2921 DWORD Reserved; 2922 DWORD RecordNumber; 2923 DWORD TimeGenerated; 2924 DWORD TimeWritten; 2925 DWORD EventID; 2926 WORD EventType; 2927 WORD NumStrings; 2928 WORD EventCategory; 2929 WORD ReservedFlags; 2930 DWORD ClosingRecordNumber; 2931 DWORD StringOffset; 2932 DWORD UserSidLength; 2933 DWORD UserSidOffset; 2934 DWORD DataLength; 2935 DWORD DataOffset; 2936 } 2937 alias PEVENTLOGRECORD = EVENTLOGRECORD*; 2938 2939 struct OSVERSIONINFOA { 2940 DWORD dwOSVersionInfoSize = OSVERSIONINFOA.sizeof; 2941 DWORD dwMajorVersion; 2942 DWORD dwMinorVersion; 2943 DWORD dwBuildNumber; 2944 DWORD dwPlatformId; 2945 CHAR[128] szCSDVersion = 0; 2946 } 2947 alias POSVERSIONINFOA = OSVERSIONINFOA*; 2948 alias LPOSVERSIONINFOA = OSVERSIONINFOA*; 2949 2950 struct OSVERSIONINFOW { 2951 DWORD dwOSVersionInfoSize = OSVERSIONINFOW.sizeof; 2952 DWORD dwMajorVersion; 2953 DWORD dwMinorVersion; 2954 DWORD dwBuildNumber; 2955 DWORD dwPlatformId; 2956 WCHAR[128] szCSDVersion = 0; 2957 } 2958 alias POSVERSIONINFOW = OSVERSIONINFOW*; 2959 alias LPOSVERSIONINFOW = OSVERSIONINFOW*; 2960 2961 struct OSVERSIONINFOEXA { 2962 DWORD dwOSVersionInfoSize; 2963 DWORD dwMajorVersion; 2964 DWORD dwMinorVersion; 2965 DWORD dwBuildNumber; 2966 DWORD dwPlatformId; 2967 CHAR[128] szCSDVersion = 0; 2968 WORD wServicePackMajor; 2969 WORD wServicePackMinor; 2970 WORD wSuiteMask; 2971 BYTE wProductType; 2972 BYTE wReserved; 2973 } 2974 alias POSVERSIONINFOEXA = OSVERSIONINFOEXA*; 2975 alias LPOSVERSIONINFOEXA = OSVERSIONINFOEXA*; 2976 2977 struct OSVERSIONINFOEXW { 2978 DWORD dwOSVersionInfoSize; 2979 DWORD dwMajorVersion; 2980 DWORD dwMinorVersion; 2981 DWORD dwBuildNumber; 2982 DWORD dwPlatformId; 2983 WCHAR[128] szCSDVersion = 0; 2984 WORD wServicePackMajor; 2985 WORD wServicePackMinor; 2986 WORD wSuiteMask; 2987 BYTE wProductType; 2988 BYTE wReserved; 2989 } 2990 alias POSVERSIONINFOEXW = OSVERSIONINFOEXW*; 2991 alias LPOSVERSIONINFOEXW = OSVERSIONINFOEXW*; 2992 2993 align(2) struct IMAGE_VXD_HEADER { 2994 WORD e32_magic; 2995 BYTE e32_border; 2996 BYTE e32_worder; 2997 DWORD e32_level; 2998 WORD e32_cpu; 2999 WORD e32_os; 3000 DWORD e32_ver; 3001 DWORD e32_mflags; 3002 DWORD e32_mpages; 3003 DWORD e32_startobj; 3004 DWORD e32_eip; 3005 DWORD e32_stackobj; 3006 DWORD e32_esp; 3007 DWORD e32_pagesize; 3008 DWORD e32_lastpagesize; 3009 DWORD e32_fixupsize; 3010 DWORD e32_fixupsum; 3011 DWORD e32_ldrsize; 3012 DWORD e32_ldrsum; 3013 DWORD e32_objtab; 3014 DWORD e32_objcnt; 3015 DWORD e32_objmap; 3016 DWORD e32_itermap; 3017 DWORD e32_rsrctab; 3018 DWORD e32_rsrccnt; 3019 DWORD e32_restab; 3020 DWORD e32_enttab; 3021 DWORD e32_dirtab; 3022 DWORD e32_dircnt; 3023 DWORD e32_fpagetab; 3024 DWORD e32_frectab; 3025 DWORD e32_impmod; 3026 DWORD e32_impmodcnt; 3027 DWORD e32_impproc; 3028 DWORD e32_pagesum; 3029 DWORD e32_datapage; 3030 DWORD e32_preload; 3031 DWORD e32_nrestab; 3032 DWORD e32_cbnrestab; 3033 DWORD e32_nressum; 3034 DWORD e32_autodata; 3035 DWORD e32_debuginfo; 3036 DWORD e32_debuglen; 3037 DWORD e32_instpreload; 3038 DWORD e32_instdemand; 3039 DWORD e32_heapsize; 3040 BYTE[12] e32_res3; 3041 DWORD e32_winresoff; 3042 DWORD e32_winreslen; 3043 WORD e32_devid; 3044 WORD e32_ddkver; 3045 } 3046 alias PIMAGE_VXD_HEADER = IMAGE_VXD_HEADER*; 3047 3048 align(4): 3049 struct IMAGE_FILE_HEADER { 3050 WORD Machine; 3051 WORD NumberOfSections; 3052 DWORD TimeDateStamp; 3053 DWORD PointerToSymbolTable; 3054 DWORD NumberOfSymbols; 3055 WORD SizeOfOptionalHeader; 3056 WORD Characteristics; 3057 } 3058 alias PIMAGE_FILE_HEADER = IMAGE_FILE_HEADER*; 3059 // const IMAGE_SIZEOF_FILE_HEADER = IMAGE_FILE_HEADER.sizeof; 3060 3061 struct IMAGE_DATA_DIRECTORY { 3062 DWORD VirtualAddress; 3063 DWORD Size; 3064 } 3065 alias PIMAGE_DATA_DIRECTORY = IMAGE_DATA_DIRECTORY*; 3066 3067 struct IMAGE_OPTIONAL_HEADER32 { 3068 WORD Magic; 3069 BYTE MajorLinkerVersion; 3070 BYTE MinorLinkerVersion; 3071 DWORD SizeOfCode; 3072 DWORD SizeOfInitializedData; 3073 DWORD SizeOfUninitializedData; 3074 DWORD AddressOfEntryPoint; 3075 DWORD BaseOfCode; 3076 DWORD BaseOfData; 3077 DWORD ImageBase; 3078 DWORD SectionAlignment; 3079 DWORD FileAlignment; 3080 WORD MajorOperatingSystemVersion; 3081 WORD MinorOperatingSystemVersion; 3082 WORD MajorImageVersion; 3083 WORD MinorImageVersion; 3084 WORD MajorSubsystemVersion; 3085 WORD MinorSubsystemVersion; 3086 DWORD Win32VersionValue; 3087 DWORD SizeOfImage; 3088 DWORD SizeOfHeaders; 3089 DWORD CheckSum; 3090 WORD Subsystem; 3091 WORD DllCharacteristics; 3092 DWORD SizeOfStackReserve; 3093 DWORD SizeOfStackCommit; 3094 DWORD SizeOfHeapReserve; 3095 DWORD SizeOfHeapCommit; 3096 DWORD LoaderFlags; 3097 DWORD NumberOfRvaAndSizes; 3098 IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] DataDirectory; 3099 } 3100 alias PIMAGE_OPTIONAL_HEADER32 = IMAGE_OPTIONAL_HEADER32*; 3101 3102 struct IMAGE_OPTIONAL_HEADER64 { 3103 WORD Magic; 3104 BYTE MajorLinkerVersion; 3105 BYTE MinorLinkerVersion; 3106 DWORD SizeOfCode; 3107 DWORD SizeOfInitializedData; 3108 DWORD SizeOfUninitializedData; 3109 DWORD AddressOfEntryPoint; 3110 DWORD BaseOfCode; 3111 ULONGLONG ImageBase; 3112 DWORD SectionAlignment; 3113 DWORD FileAlignment; 3114 WORD MajorOperatingSystemVersion; 3115 WORD MinorOperatingSystemVersion; 3116 WORD MajorImageVersion; 3117 WORD MinorImageVersion; 3118 WORD MajorSubsystemVersion; 3119 WORD MinorSubsystemVersion; 3120 DWORD Win32VersionValue; 3121 DWORD SizeOfImage; 3122 DWORD SizeOfHeaders; 3123 DWORD CheckSum; 3124 WORD Subsystem; 3125 WORD DllCharacteristics; 3126 ULONGLONG SizeOfStackReserve; 3127 ULONGLONG SizeOfStackCommit; 3128 ULONGLONG SizeOfHeapReserve; 3129 ULONGLONG SizeOfHeapCommit; 3130 DWORD LoaderFlags; 3131 DWORD NumberOfRvaAndSizes; 3132 IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] DataDirectory; 3133 } 3134 alias PIMAGE_OPTIONAL_HEADER64 = IMAGE_OPTIONAL_HEADER64*; 3135 3136 struct IMAGE_ROM_OPTIONAL_HEADER { 3137 WORD Magic; 3138 BYTE MajorLinkerVersion; 3139 BYTE MinorLinkerVersion; 3140 DWORD SizeOfCode; 3141 DWORD SizeOfInitializedData; 3142 DWORD SizeOfUninitializedData; 3143 DWORD AddressOfEntryPoint; 3144 DWORD BaseOfCode; 3145 DWORD BaseOfData; 3146 DWORD BaseOfBss; 3147 DWORD GprMask; 3148 DWORD[4] CprMask; 3149 DWORD GpValue; 3150 } 3151 alias PIMAGE_ROM_OPTIONAL_HEADER = IMAGE_ROM_OPTIONAL_HEADER*; 3152 3153 align(2): 3154 struct IMAGE_DOS_HEADER { 3155 WORD e_magic; 3156 WORD e_cblp; 3157 WORD e_cp; 3158 WORD e_crlc; 3159 WORD e_cparhdr; 3160 WORD e_minalloc; 3161 WORD e_maxalloc; 3162 WORD e_ss; 3163 WORD e_sp; 3164 WORD e_csum; 3165 WORD e_ip; 3166 WORD e_cs; 3167 WORD e_lfarlc; 3168 WORD e_ovno; 3169 WORD[4] e_res; 3170 WORD e_oemid; 3171 WORD e_oeminfo; 3172 WORD[10] e_res2; 3173 LONG e_lfanew; 3174 } 3175 alias PIMAGE_DOS_HEADER = IMAGE_DOS_HEADER*; 3176 3177 struct IMAGE_OS2_HEADER { 3178 WORD ne_magic; 3179 CHAR ne_ver = 0; 3180 CHAR ne_rev = 0; 3181 WORD ne_enttab; 3182 WORD ne_cbenttab; 3183 LONG ne_crc; 3184 WORD ne_flags; 3185 WORD ne_autodata; 3186 WORD ne_heap; 3187 WORD ne_stack; 3188 LONG ne_csip; 3189 LONG ne_sssp; 3190 WORD ne_cseg; 3191 WORD ne_cmod; 3192 WORD ne_cbnrestab; 3193 WORD ne_segtab; 3194 WORD ne_rsrctab; 3195 WORD ne_restab; 3196 WORD ne_modtab; 3197 WORD ne_imptab; 3198 LONG ne_nrestab; 3199 WORD ne_cmovent; 3200 WORD ne_align; 3201 WORD ne_cres; 3202 BYTE ne_exetyp; 3203 BYTE ne_flagsothers; 3204 WORD ne_pretthunks; 3205 WORD ne_psegrefbytes; 3206 WORD ne_swaparea; 3207 WORD ne_expver; 3208 } 3209 alias PIMAGE_OS2_HEADER = IMAGE_OS2_HEADER*; 3210 3211 align(4) struct IMAGE_NT_HEADERS32 { 3212 DWORD Signature; 3213 IMAGE_FILE_HEADER FileHeader; 3214 IMAGE_OPTIONAL_HEADER32 OptionalHeader; 3215 } 3216 alias PIMAGE_NT_HEADERS32 = IMAGE_NT_HEADERS32*; 3217 3218 align(4) struct IMAGE_NT_HEADERS64 { 3219 DWORD Signature; 3220 IMAGE_FILE_HEADER FileHeader; 3221 IMAGE_OPTIONAL_HEADER64 OptionalHeader; 3222 } 3223 alias PIMAGE_NT_HEADERS64 = IMAGE_NT_HEADERS64*; 3224 3225 struct IMAGE_ROM_HEADERS { 3226 IMAGE_FILE_HEADER FileHeader; 3227 IMAGE_ROM_OPTIONAL_HEADER OptionalHeader; 3228 } 3229 alias PIMAGE_ROM_HEADERS = IMAGE_ROM_HEADERS*; 3230 3231 struct IMAGE_SECTION_HEADER { 3232 BYTE[IMAGE_SIZEOF_SHORT_NAME] Name; 3233 union _Misc { 3234 DWORD PhysicalAddress; 3235 DWORD VirtualSize; 3236 } 3237 _Misc Misc; 3238 DWORD VirtualAddress; 3239 DWORD SizeOfRawData; 3240 DWORD PointerToRawData; 3241 DWORD PointerToRelocations; 3242 DWORD PointerToLinenumbers; 3243 WORD NumberOfRelocations; 3244 WORD NumberOfLinenumbers; 3245 DWORD Characteristics; 3246 } 3247 alias PIMAGE_SECTION_HEADER = IMAGE_SECTION_HEADER*; 3248 3249 struct IMAGE_SYMBOL { 3250 union _N { 3251 BYTE[8] ShortName; 3252 struct _Name { 3253 DWORD Short; 3254 DWORD Long; 3255 } 3256 _Name Name; 3257 DWORD[2] LongName; // PBYTE[2] 3258 } 3259 _N N; 3260 DWORD Value; 3261 SHORT SectionNumber; 3262 WORD Type; 3263 BYTE StorageClass; 3264 BYTE NumberOfAuxSymbols; 3265 } 3266 alias PIMAGE_SYMBOL = IMAGE_SYMBOL*; 3267 3268 union IMAGE_AUX_SYMBOL { 3269 struct _Sym { 3270 DWORD TagIndex; 3271 union _Misc { 3272 struct _LnSz { 3273 WORD Linenumber; 3274 WORD Size; 3275 } 3276 _LnSz LnSz; 3277 DWORD TotalSize; 3278 } 3279 _Misc Misc; 3280 union _FcnAry { 3281 struct _Function { 3282 DWORD PointerToLinenumber; 3283 DWORD PointerToNextFunction; 3284 } 3285 _Function Function; 3286 struct _Array { 3287 WORD[4] Dimension; 3288 } 3289 _Array Array; 3290 } 3291 _FcnAry FcnAry; 3292 WORD TvIndex; 3293 } 3294 _Sym Sym; 3295 struct _File { 3296 BYTE[IMAGE_SIZEOF_SYMBOL] Name; 3297 } 3298 _File File; 3299 struct _Section { 3300 DWORD Length; 3301 WORD NumberOfRelocations; 3302 WORD NumberOfLinenumbers; 3303 DWORD CheckSum; 3304 SHORT Number; 3305 BYTE Selection; 3306 } 3307 _Section Section; 3308 } 3309 alias PIMAGE_AUX_SYMBOL = IMAGE_AUX_SYMBOL*; 3310 3311 struct IMAGE_COFF_SYMBOLS_HEADER { 3312 DWORD NumberOfSymbols; 3313 DWORD LvaToFirstSymbol; 3314 DWORD NumberOfLinenumbers; 3315 DWORD LvaToFirstLinenumber; 3316 DWORD RvaToFirstByteOfCode; 3317 DWORD RvaToLastByteOfCode; 3318 DWORD RvaToFirstByteOfData; 3319 DWORD RvaToLastByteOfData; 3320 } 3321 alias PIMAGE_COFF_SYMBOLS_HEADER = IMAGE_COFF_SYMBOLS_HEADER*; 3322 3323 struct IMAGE_RELOCATION { 3324 union { 3325 DWORD VirtualAddress; 3326 DWORD RelocCount; 3327 } 3328 DWORD SymbolTableIndex; 3329 WORD Type; 3330 } 3331 alias PIMAGE_RELOCATION = IMAGE_RELOCATION*; 3332 3333 align(4) struct IMAGE_BASE_RELOCATION { 3334 DWORD VirtualAddress; 3335 DWORD SizeOfBlock; 3336 } 3337 alias PIMAGE_BASE_RELOCATION = IMAGE_BASE_RELOCATION*; 3338 3339 align(2) struct IMAGE_LINENUMBER { 3340 union _Type { 3341 DWORD SymbolTableIndex; 3342 DWORD VirtualAddress; 3343 } 3344 _Type Type; 3345 WORD Linenumber; 3346 } 3347 alias PIMAGE_LINENUMBER = IMAGE_LINENUMBER*; 3348 3349 align(4): 3350 struct IMAGE_ARCHIVE_MEMBER_HEADER { 3351 BYTE[16] Name; 3352 BYTE[12] Date; 3353 BYTE[6] UserID; 3354 BYTE[6] GroupID; 3355 BYTE[8] Mode; 3356 BYTE[10] Size; 3357 BYTE[2] EndHeader; 3358 } 3359 alias PIMAGE_ARCHIVE_MEMBER_HEADER = IMAGE_ARCHIVE_MEMBER_HEADER*; 3360 3361 struct IMAGE_EXPORT_DIRECTORY { 3362 DWORD Characteristics; 3363 DWORD TimeDateStamp; 3364 WORD MajorVersion; 3365 WORD MinorVersion; 3366 DWORD Name; 3367 DWORD Base; 3368 DWORD NumberOfFunctions; 3369 DWORD NumberOfNames; 3370 DWORD AddressOfFunctions; 3371 DWORD AddressOfNames; 3372 DWORD AddressOfNameOrdinals; 3373 } 3374 alias PIMAGE_EXPORT_DIRECTORY = IMAGE_EXPORT_DIRECTORY*; 3375 3376 struct IMAGE_IMPORT_BY_NAME { 3377 WORD Hint; 3378 BYTE _Name; 3379 3380 BYTE* Name() return { return &_Name; } 3381 } 3382 alias PIMAGE_IMPORT_BY_NAME = IMAGE_IMPORT_BY_NAME*; 3383 3384 struct IMAGE_THUNK_DATA32 { 3385 union _u1 { 3386 DWORD ForwarderString; 3387 DWORD Function; 3388 DWORD Ordinal; 3389 DWORD AddressOfData; 3390 } 3391 _u1 u1; 3392 } 3393 alias PIMAGE_THUNK_DATA32 = IMAGE_THUNK_DATA32*; 3394 3395 struct IMAGE_THUNK_DATA64 { 3396 union _u1 { 3397 ULONGLONG ForwarderString; 3398 ULONGLONG Function; 3399 ULONGLONG Ordinal; 3400 ULONGLONG AddressOfData; 3401 } 3402 _u1 u1; 3403 } 3404 alias PIMAGE_THUNK_DATA64 = IMAGE_THUNK_DATA64*; 3405 3406 struct IMAGE_IMPORT_DESCRIPTOR { 3407 union { 3408 DWORD Characteristics; 3409 DWORD OriginalFirstThunk; 3410 } 3411 DWORD TimeDateStamp; 3412 DWORD ForwarderChain; 3413 DWORD Name; 3414 DWORD FirstThunk; 3415 } 3416 alias PIMAGE_IMPORT_DESCRIPTOR = IMAGE_IMPORT_DESCRIPTOR*; 3417 3418 struct IMAGE_BOUND_IMPORT_DESCRIPTOR { 3419 DWORD TimeDateStamp; 3420 WORD OffsetModuleName; 3421 WORD NumberOfModuleForwarderRefs; 3422 } 3423 alias PIMAGE_BOUND_IMPORT_DESCRIPTOR = IMAGE_BOUND_IMPORT_DESCRIPTOR*; 3424 3425 struct IMAGE_BOUND_FORWARDER_REF { 3426 DWORD TimeDateStamp; 3427 WORD OffsetModuleName; 3428 WORD Reserved; 3429 } 3430 alias PIMAGE_BOUND_FORWARDER_REF = IMAGE_BOUND_FORWARDER_REF*; 3431 3432 struct IMAGE_TLS_DIRECTORY32 { 3433 DWORD StartAddressOfRawData; 3434 DWORD EndAddressOfRawData; 3435 DWORD AddressOfIndex; 3436 DWORD AddressOfCallBacks; 3437 DWORD SizeOfZeroFill; 3438 DWORD Characteristics; 3439 } 3440 alias PIMAGE_TLS_DIRECTORY32 = IMAGE_TLS_DIRECTORY32*; 3441 3442 struct IMAGE_TLS_DIRECTORY64 { 3443 ULONGLONG StartAddressOfRawData; 3444 ULONGLONG EndAddressOfRawData; 3445 ULONGLONG AddressOfIndex; 3446 ULONGLONG AddressOfCallBacks; 3447 DWORD SizeOfZeroFill; 3448 DWORD Characteristics; 3449 } 3450 alias PIMAGE_TLS_DIRECTORY64 = IMAGE_TLS_DIRECTORY64*; 3451 3452 struct IMAGE_RESOURCE_DIRECTORY { 3453 DWORD Characteristics; 3454 DWORD TimeDateStamp; 3455 WORD MajorVersion; 3456 WORD MinorVersion; 3457 WORD NumberOfNamedEntries; 3458 WORD NumberOfIdEntries; 3459 } 3460 alias PIMAGE_RESOURCE_DIRECTORY = IMAGE_RESOURCE_DIRECTORY*; 3461 3462 struct IMAGE_RESOURCE_DIRECTORY_ENTRY { 3463 union { 3464 /+struct { 3465 DWORD NameOffset:31; 3466 DWORD NameIsString:1; 3467 }+/ 3468 DWORD Name; 3469 WORD Id; 3470 } 3471 DWORD OffsetToData; 3472 /+struct { 3473 DWORD OffsetToDirectory:31; 3474 DWORD DataIsDirectory:1; 3475 }+/ 3476 3477 uint NameOffset() { return Name & 0x7FFFFFFF; } 3478 bool NameIsString() { return cast(bool)(Name & 0x80000000); } 3479 uint OffsetToDirectory() { return OffsetToData & 0x7FFFFFFF; } 3480 bool DataIsDirectory() { return cast(bool)(OffsetToData & 0x80000000); } 3481 3482 uint NameOffset(uint n) { 3483 Name = (Name & 0x80000000) | (n & 0x7FFFFFFF); 3484 return n & 0x7FFFFFFF; 3485 } 3486 3487 bool NameIsString(bool n) { 3488 Name = (Name & 0x7FFFFFFF) | (n << 31); return n; 3489 } 3490 3491 uint OffsetToDirectory(uint o) { 3492 OffsetToData = (OffsetToData & 0x80000000) | (o & 0x7FFFFFFF); 3493 return o & 0x7FFFFFFF; 3494 } 3495 3496 bool DataIsDirectory(bool d) { 3497 OffsetToData = (OffsetToData & 0x7FFFFFFF) | (d << 31); return d; 3498 } 3499 } 3500 alias PIMAGE_RESOURCE_DIRECTORY_ENTRY = IMAGE_RESOURCE_DIRECTORY_ENTRY*; 3501 3502 struct IMAGE_RESOURCE_DIRECTORY_STRING { 3503 WORD Length; 3504 CHAR _NameString = 0; 3505 3506 CHAR* NameString() return { return &_NameString; } 3507 } 3508 alias PIMAGE_RESOURCE_DIRECTORY_STRING = IMAGE_RESOURCE_DIRECTORY_STRING*; 3509 3510 struct IMAGE_RESOURCE_DIR_STRING_U { 3511 WORD Length; 3512 WCHAR _NameString = 0; 3513 3514 WCHAR* NameString() return { return &_NameString; } 3515 } 3516 alias PIMAGE_RESOURCE_DIR_STRING_U = IMAGE_RESOURCE_DIR_STRING_U*; 3517 3518 struct IMAGE_RESOURCE_DATA_ENTRY { 3519 DWORD OffsetToData; 3520 DWORD Size; 3521 DWORD CodePage; 3522 DWORD Reserved; 3523 } 3524 alias PIMAGE_RESOURCE_DATA_ENTRY = IMAGE_RESOURCE_DATA_ENTRY*; 3525 3526 struct IMAGE_LOAD_CONFIG_DIRECTORY32 { 3527 DWORD Characteristics; 3528 DWORD TimeDateStamp; 3529 WORD MajorVersion; 3530 WORD MinorVersion; 3531 DWORD GlobalFlagsClear; 3532 DWORD GlobalFlagsSet; 3533 DWORD CriticalSectionDefaultTimeout; 3534 DWORD DeCommitFreeBlockThreshold; 3535 DWORD DeCommitTotalFreeThreshold; 3536 PVOID LockPrefixTable; 3537 DWORD MaximumAllocationSize; 3538 DWORD VirtualMemoryThreshold; 3539 DWORD ProcessHeapFlags; 3540 DWORD[4] Reserved; 3541 } 3542 alias PIMAGE_LOAD_CONFIG_DIRECTORY32 = IMAGE_LOAD_CONFIG_DIRECTORY32*; 3543 3544 struct IMAGE_LOAD_CONFIG_DIRECTORY64 { 3545 DWORD Characteristics; 3546 DWORD TimeDateStamp; 3547 WORD MajorVersion; 3548 WORD MinorVersion; 3549 DWORD GlobalFlagsClear; 3550 DWORD GlobalFlagsSet; 3551 DWORD CriticalSectionDefaultTimeout; 3552 ULONGLONG DeCommitFreeBlockThreshold; 3553 ULONGLONG DeCommitTotalFreeThreshold; 3554 ULONGLONG LockPrefixTable; 3555 ULONGLONG MaximumAllocationSize; 3556 ULONGLONG VirtualMemoryThreshold; 3557 ULONGLONG ProcessAffinityMask; 3558 DWORD ProcessHeapFlags; 3559 WORD CSDFlags; 3560 WORD Reserved1; 3561 ULONGLONG EditList; 3562 DWORD[2] Reserved; 3563 } 3564 alias PIMAGE_LOAD_CONFIG_DIRECTORY64 = IMAGE_LOAD_CONFIG_DIRECTORY64*; 3565 3566 version (Win64) { 3567 alias IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY64; 3568 } else { 3569 alias IMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY32; 3570 } 3571 alias PIMAGE_LOAD_CONFIG_DIRECTORY = IMAGE_LOAD_CONFIG_DIRECTORY*; 3572 3573 // Note versions for Alpha, Alpha64, ARM removed. 3574 struct IMAGE_RUNTIME_FUNCTION_ENTRY { 3575 DWORD BeginAddress; 3576 DWORD EndAddress; 3577 union { 3578 DWORD UnwindInfoAddress; 3579 DWORD UnwindData; 3580 } 3581 } 3582 alias PIMAGE_RUNTIME_FUNCTION_ENTRY = IMAGE_RUNTIME_FUNCTION_ENTRY*; 3583 3584 struct IMAGE_CE_RUNTIME_FUNCTION_ENTRY { 3585 uint FuncStart; 3586 union { 3587 ubyte PrologLen; 3588 uint _bf; 3589 } 3590 /+ 3591 unsigned int FuncLen:22; 3592 unsigned int ThirtyTwoBit:1; 3593 unsigned int ExceptionFlag:1; 3594 +/ 3595 uint FuncLen() { return (_bf >> 8) & 0x3FFFFF; } 3596 bool ThirtyTwoBit() { return cast(bool)(_bf & 0x40000000); } 3597 bool ExceptionFlag() { return cast(bool)(_bf & 0x80000000); } 3598 3599 uint FuncLen(uint f) { 3600 _bf = (_bf & ~0x3FFFFF00) | ((f & 0x3FFFFF) << 8); return f & 0x3FFFFF; 3601 } 3602 3603 bool ThirtyTwoBit(bool t) { 3604 _bf = (_bf & ~0x40000000) | (t << 30); return t; 3605 } 3606 3607 bool ExceptionFlag(bool e) { 3608 _bf = (_bf & ~0x80000000) | (e << 31); return e; 3609 } 3610 } 3611 alias PIMAGE_CE_RUNTIME_FUNCTION_ENTRY = IMAGE_CE_RUNTIME_FUNCTION_ENTRY*; 3612 3613 struct IMAGE_DEBUG_DIRECTORY { 3614 DWORD Characteristics; 3615 DWORD TimeDateStamp; 3616 WORD MajorVersion; 3617 WORD MinorVersion; 3618 DWORD Type; 3619 DWORD SizeOfData; 3620 DWORD AddressOfRawData; 3621 DWORD PointerToRawData; 3622 } 3623 alias PIMAGE_DEBUG_DIRECTORY = IMAGE_DEBUG_DIRECTORY*; 3624 3625 struct FPO_DATA { 3626 DWORD ulOffStart; 3627 DWORD cbProcSize; 3628 DWORD cdwLocals; 3629 WORD cdwParams; 3630 ubyte cbProlog; 3631 ubyte _bf; 3632 /+ 3633 WORD cbRegs:3; 3634 WORD fHasSEH:1; 3635 WORD fUseBP:1; 3636 WORD reserved:1; 3637 WORD cbFrame:2; 3638 +/ 3639 ubyte cbRegs() { return cast(ubyte)(_bf & 0x07); } 3640 bool fHasSEH() { return cast(bool)(_bf & 0x08); } 3641 bool fUseBP() { return cast(bool)(_bf & 0x10); } 3642 bool reserved() { return cast(bool)(_bf & 0x20); } 3643 ubyte cbFrame() { return cast(ubyte)(_bf >> 6); } 3644 3645 ubyte cbRegs(ubyte c) { 3646 _bf = cast(ubyte) ((_bf & ~0x07) | (c & 0x07)); 3647 return cast(ubyte)(c & 0x07); 3648 } 3649 3650 bool fHasSEH(bool f) { _bf = cast(ubyte)((_bf & ~0x08) | (f << 3)); return f; } 3651 bool fUseBP(bool f) { _bf = cast(ubyte)((_bf & ~0x10) | (f << 4)); return f; } 3652 bool reserved(bool r) { _bf = cast(ubyte)((_bf & ~0x20) | (r << 5)); return r; } 3653 3654 ubyte cbFrame(ubyte c) { 3655 _bf = cast(ubyte) ((_bf & ~0xC0) | ((c & 0x03) << 6)); 3656 return cast(ubyte)(c & 0x03); 3657 } 3658 } 3659 alias PFPO_DATA = FPO_DATA*; 3660 3661 struct IMAGE_DEBUG_MISC { 3662 DWORD DataType; 3663 DWORD Length; 3664 BOOLEAN Unicode; 3665 BYTE[3] Reserved; 3666 BYTE _Data; 3667 3668 BYTE* Data() return { return &_Data; } 3669 } 3670 alias PIMAGE_DEBUG_MISC = IMAGE_DEBUG_MISC*; 3671 3672 struct IMAGE_FUNCTION_ENTRY { 3673 DWORD StartingAddress; 3674 DWORD EndingAddress; 3675 DWORD EndOfPrologue; 3676 } 3677 alias PIMAGE_FUNCTION_ENTRY = IMAGE_FUNCTION_ENTRY*; 3678 3679 struct IMAGE_FUNCTION_ENTRY64 { 3680 ULONGLONG StartingAddress; 3681 ULONGLONG EndingAddress; 3682 union { 3683 ULONGLONG EndOfPrologue; 3684 ULONGLONG UnwindInfoAddress; 3685 } 3686 } 3687 alias PIMAGE_FUNCTION_ENTRY64 = IMAGE_FUNCTION_ENTRY64*; 3688 3689 struct IMAGE_SEPARATE_DEBUG_HEADER { 3690 WORD Signature; 3691 WORD Flags; 3692 WORD Machine; 3693 WORD Characteristics; 3694 DWORD TimeDateStamp; 3695 DWORD CheckSum; 3696 DWORD ImageBase; 3697 DWORD SizeOfImage; 3698 DWORD NumberOfSections; 3699 DWORD ExportedNamesSize; 3700 DWORD DebugDirectorySize; 3701 DWORD SectionAlignment; 3702 DWORD[2] Reserved; 3703 } 3704 alias PIMAGE_SEPARATE_DEBUG_HEADER = IMAGE_SEPARATE_DEBUG_HEADER*; 3705 3706 enum SERVICE_NODE_TYPE { 3707 DriverType = SERVICE_KERNEL_DRIVER, 3708 FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, 3709 Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, 3710 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, 3711 AdapterType = SERVICE_ADAPTER, 3712 RecognizerType = SERVICE_RECOGNIZER_DRIVER 3713 } 3714 3715 enum SERVICE_LOAD_TYPE { 3716 BootLoad = SERVICE_BOOT_START, 3717 SystemLoad = SERVICE_SYSTEM_START, 3718 AutoLoad = SERVICE_AUTO_START, 3719 DemandLoad = SERVICE_DEMAND_START, 3720 DisableLoad = SERVICE_DISABLED 3721 } 3722 3723 enum SERVICE_ERROR_TYPE { 3724 IgnoreError = SERVICE_ERROR_IGNORE, 3725 NormalError = SERVICE_ERROR_NORMAL, 3726 SevereError = SERVICE_ERROR_SEVERE, 3727 CriticalError = SERVICE_ERROR_CRITICAL 3728 } 3729 alias _CM_ERROR_CONTROL_TYPE = SERVICE_ERROR_TYPE; 3730 3731 //DAC: According to MSJ, 'UnderTheHood', May 1996, this 3732 // structure is not documented in any official Microsoft header file. 3733 alias EXCEPTION_REGISTRATION_RECORD = void; 3734 3735 align: 3736 struct NT_TIB { 3737 EXCEPTION_REGISTRATION_RECORD *ExceptionList; 3738 PVOID StackBase; 3739 PVOID StackLimit; 3740 PVOID SubSystemTib; 3741 union { 3742 PVOID FiberData; 3743 DWORD Version; 3744 } 3745 PVOID ArbitraryUserPointer; 3746 NT_TIB *Self; 3747 } 3748 alias PNT_TIB = NT_TIB*; 3749 3750 struct REPARSE_DATA_BUFFER { 3751 DWORD ReparseTag; 3752 WORD ReparseDataLength; 3753 WORD Reserved; 3754 union { 3755 struct _GenericReparseBuffer { 3756 BYTE _DataBuffer; 3757 3758 BYTE* DataBuffer() return { return &_DataBuffer; } 3759 } 3760 _GenericReparseBuffer GenericReparseBuffer; 3761 struct _SymbolicLinkReparseBuffer { 3762 WORD SubstituteNameOffset; 3763 WORD SubstituteNameLength; 3764 WORD PrintNameOffset; 3765 WORD PrintNameLength; 3766 // ??? This is in MinGW, but absent in MSDN docs 3767 ULONG Flags; 3768 WCHAR _PathBuffer = 0; 3769 3770 WCHAR* PathBuffer() return { return &_PathBuffer; } 3771 } 3772 _SymbolicLinkReparseBuffer SymbolicLinkReparseBuffer; 3773 struct _MountPointReparseBuffer { 3774 WORD SubstituteNameOffset; 3775 WORD SubstituteNameLength; 3776 WORD PrintNameOffset; 3777 WORD PrintNameLength; 3778 WCHAR _PathBuffer = 0; 3779 3780 WCHAR* PathBuffer() return { return &_PathBuffer; } 3781 } 3782 _MountPointReparseBuffer MountPointReparseBuffer; 3783 } 3784 } 3785 alias REPARSE_DATA_BUFFER *PREPARSE_DATA_BUFFER; 3786 3787 struct REPARSE_GUID_DATA_BUFFER { 3788 DWORD ReparseTag; 3789 WORD ReparseDataLength; 3790 WORD Reserved; 3791 GUID ReparseGuid; 3792 struct _GenericReparseBuffer { 3793 BYTE _DataBuffer; 3794 3795 BYTE* DataBuffer() return { return &_DataBuffer; } 3796 } 3797 _GenericReparseBuffer GenericReparseBuffer; 3798 } 3799 alias PREPARSE_GUID_DATA_BUFFER = REPARSE_GUID_DATA_BUFFER*; 3800 3801 enum size_t 3802 REPARSE_DATA_BUFFER_HEADER_SIZE = REPARSE_DATA_BUFFER.GenericReparseBuffer.offsetof, 3803 REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = REPARSE_GUID_DATA_BUFFER.GenericReparseBuffer.offsetof, 3804 MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384; 3805 3806 3807 struct REPARSE_POINT_INFORMATION { 3808 WORD ReparseDataLength; 3809 WORD UnparsedNameLength; 3810 } 3811 alias PREPARSE_POINT_INFORMATION = REPARSE_POINT_INFORMATION*; 3812 3813 union FILE_SEGMENT_ELEMENT { 3814 PVOID64 Buffer; 3815 ULONGLONG Alignment; 3816 } 3817 alias PFILE_SEGMENT_ELEMENT = FILE_SEGMENT_ELEMENT*; 3818 3819 // JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants 3820 enum DWORD 3821 JOB_OBJECT_LIMIT_WORKINGSET = 0x0001, 3822 JOB_OBJECT_LIMIT_PROCESS_TIME = 0x0002, 3823 JOB_OBJECT_LIMIT_JOB_TIME = 0x0004, 3824 JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x0008, 3825 JOB_OBJECT_LIMIT_AFFINITY = 0x0010, 3826 JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x0020, 3827 JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x0040, 3828 JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x0080, 3829 JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x0100, 3830 JOB_OBJECT_LIMIT_JOB_MEMORY = 0x0200, 3831 JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x0400, 3832 JOB_OBJECT_BREAKAWAY_OK = 0x0800, 3833 JOB_OBJECT_SILENT_BREAKAWAY = 0x1000; 3834 3835 // JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants 3836 enum DWORD 3837 JOB_OBJECT_UILIMIT_HANDLES = 0x0001, 3838 JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x0002, 3839 JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x0004, 3840 JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x0008, 3841 JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x0010, 3842 JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x0020, 3843 JOB_OBJECT_UILIMIT_DESKTOP = 0x0040, 3844 JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x0080; 3845 3846 // JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants 3847 enum DWORD 3848 JOB_OBJECT_SECURITY_NO_ADMIN = 0x0001, 3849 JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = 0x0002, 3850 JOB_OBJECT_SECURITY_ONLY_TOKEN = 0x0004, 3851 JOB_OBJECT_SECURITY_FILTER_TOKENS = 0x0008; 3852 3853 // JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants 3854 enum : DWORD { 3855 JOB_OBJECT_TERMINATE_AT_END_OF_JOB, 3856 JOB_OBJECT_POST_AT_END_OF_JOB 3857 } 3858 3859 enum : DWORD { 3860 JOB_OBJECT_MSG_END_OF_JOB_TIME = 1, 3861 JOB_OBJECT_MSG_END_OF_PROCESS_TIME, 3862 JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT, 3863 JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO, 3864 JOB_OBJECT_MSG_NEW_PROCESS, 3865 JOB_OBJECT_MSG_EXIT_PROCESS, 3866 JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS, 3867 JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT, 3868 JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 3869 } 3870 3871 enum JOBOBJECTINFOCLASS { 3872 JobObjectBasicAccountingInformation = 1, 3873 JobObjectBasicLimitInformation, 3874 JobObjectBasicProcessIdList, 3875 JobObjectBasicUIRestrictions, 3876 JobObjectSecurityLimitInformation, 3877 JobObjectEndOfJobTimeInformation, 3878 JobObjectAssociateCompletionPortInformation, 3879 JobObjectBasicAndIoAccountingInformation, 3880 JobObjectExtendedLimitInformation, 3881 JobObjectJobSetInformation, 3882 MaxJobObjectInfoClass 3883 } 3884 3885 struct JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { 3886 LARGE_INTEGER TotalUserTime; 3887 LARGE_INTEGER TotalKernelTime; 3888 LARGE_INTEGER ThisPeriodTotalUserTime; 3889 LARGE_INTEGER ThisPeriodTotalKernelTime; 3890 DWORD TotalPageFaultCount; 3891 DWORD TotalProcesses; 3892 DWORD ActiveProcesses; 3893 DWORD TotalTerminatedProcesses; 3894 } 3895 alias PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION = JOBOBJECT_BASIC_ACCOUNTING_INFORMATION*; 3896 3897 struct JOBOBJECT_BASIC_LIMIT_INFORMATION { 3898 LARGE_INTEGER PerProcessUserTimeLimit; 3899 LARGE_INTEGER PerJobUserTimeLimit; 3900 DWORD LimitFlags; 3901 SIZE_T MinimumWorkingSetSize; 3902 SIZE_T MaximumWorkingSetSize; 3903 DWORD ActiveProcessLimit; 3904 ULONG_PTR Affinity; 3905 DWORD PriorityClass; 3906 DWORD SchedulingClass; 3907 } 3908 alias PJOBOBJECT_BASIC_LIMIT_INFORMATION = JOBOBJECT_BASIC_LIMIT_INFORMATION*; 3909 3910 struct JOBOBJECT_BASIC_PROCESS_ID_LIST { 3911 DWORD NumberOfAssignedProcesses; 3912 DWORD NumberOfProcessIdsInList; 3913 ULONG_PTR _ProcessIdList; 3914 3915 ULONG_PTR* ProcessIdList() return { return &_ProcessIdList; } 3916 } 3917 alias PJOBOBJECT_BASIC_PROCESS_ID_LIST = JOBOBJECT_BASIC_PROCESS_ID_LIST*; 3918 3919 struct JOBOBJECT_BASIC_UI_RESTRICTIONS { 3920 DWORD UIRestrictionsClass; 3921 } 3922 alias PJOBOBJECT_BASIC_UI_RESTRICTIONS = JOBOBJECT_BASIC_UI_RESTRICTIONS*; 3923 3924 struct JOBOBJECT_SECURITY_LIMIT_INFORMATION { 3925 DWORD SecurityLimitFlags; 3926 HANDLE JobToken; 3927 PTOKEN_GROUPS SidsToDisable; 3928 PTOKEN_PRIVILEGES PrivilegesToDelete; 3929 PTOKEN_GROUPS RestrictedSids; 3930 } 3931 alias PJOBOBJECT_SECURITY_LIMIT_INFORMATION = JOBOBJECT_SECURITY_LIMIT_INFORMATION*; 3932 3933 struct JOBOBJECT_END_OF_JOB_TIME_INFORMATION { 3934 DWORD EndOfJobTimeAction; 3935 } 3936 alias PJOBOBJECT_END_OF_JOB_TIME_INFORMATION = JOBOBJECT_END_OF_JOB_TIME_INFORMATION*; 3937 3938 struct JOBOBJECT_ASSOCIATE_COMPLETION_PORT { 3939 PVOID CompletionKey; 3940 HANDLE CompletionPort; 3941 } 3942 alias PJOBOBJECT_ASSOCIATE_COMPLETION_PORT = JOBOBJECT_ASSOCIATE_COMPLETION_PORT*; 3943 3944 struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION { 3945 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo; 3946 IO_COUNTERS IoInfo; 3947 } 3948 alias JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION; 3949 3950 struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION { 3951 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation; 3952 IO_COUNTERS IoInfo; 3953 SIZE_T ProcessMemoryLimit; 3954 SIZE_T JobMemoryLimit; 3955 SIZE_T PeakProcessMemoryUsed; 3956 SIZE_T PeakJobMemoryUsed; 3957 } 3958 alias PJOBOBJECT_EXTENDED_LIMIT_INFORMATION = JOBOBJECT_EXTENDED_LIMIT_INFORMATION*; 3959 3960 struct JOBOBJECT_JOBSET_INFORMATION { 3961 DWORD MemberLevel; 3962 } 3963 alias PJOBOBJECT_JOBSET_INFORMATION = JOBOBJECT_JOBSET_INFORMATION*; 3964 3965 // MinGW: Making these defines conditional on _WIN32_WINNT will break ddk includes 3966 //static if (_WIN32_WINNT >= 0x500) { 3967 3968 enum DWORD 3969 ES_SYSTEM_REQUIRED = 0x00000001, 3970 ES_DISPLAY_REQUIRED = 0x00000002, 3971 ES_USER_PRESENT = 0x00000004, 3972 ES_AWAYMODE_REQUIRED = 0x00000040, 3973 ES_CONTINUOUS = 0x80000000; 3974 3975 enum LATENCY_TIME { 3976 LT_DONT_CARE, 3977 LT_LOWEST_LATENCY 3978 } 3979 alias PLATENCY_TIME = LATENCY_TIME*; 3980 3981 enum SYSTEM_POWER_STATE { 3982 PowerSystemUnspecified, 3983 PowerSystemWorking, 3984 PowerSystemSleeping1, 3985 PowerSystemSleeping2, 3986 PowerSystemSleeping3, 3987 PowerSystemHibernate, 3988 PowerSystemShutdown, 3989 PowerSystemMaximum 3990 } 3991 alias PSYSTEM_POWER_STATE = SYSTEM_POWER_STATE*; 3992 3993 enum POWER_SYSTEM_MAXIMUM = SYSTEM_POWER_STATE.PowerSystemMaximum; 3994 3995 enum POWER_ACTION { 3996 PowerActionNone, 3997 PowerActionReserved, 3998 PowerActionSleep, 3999 PowerActionHibernate, 4000 PowerActionShutdown, 4001 PowerActionShutdownReset, 4002 PowerActionShutdownOff, 4003 PowerActionWarmEject 4004 } 4005 alias PPOWER_ACTION = POWER_ACTION*; 4006 4007 static if (_WIN32_WINNT >= 0x600) { 4008 enum SYSTEM_POWER_CONDITION { 4009 PoAc, 4010 PoDc, 4011 PoHot, 4012 PoConditionMaximum 4013 } 4014 alias PSYSTEM_POWER_CONDITION = SYSTEM_POWER_CONDITION*; 4015 } 4016 4017 enum DEVICE_POWER_STATE { 4018 PowerDeviceUnspecified, 4019 PowerDeviceD0, 4020 PowerDeviceD1, 4021 PowerDeviceD2, 4022 PowerDeviceD3, 4023 PowerDeviceMaximum 4024 } 4025 alias PDEVICE_POWER_STATE = DEVICE_POWER_STATE*; 4026 4027 align(4): 4028 struct BATTERY_REPORTING_SCALE { 4029 DWORD Granularity; 4030 DWORD Capacity; 4031 } 4032 alias PBATTERY_REPORTING_SCALE = BATTERY_REPORTING_SCALE*; 4033 4034 struct POWER_ACTION_POLICY { 4035 POWER_ACTION Action; 4036 ULONG Flags; 4037 ULONG EventCode; 4038 } 4039 alias PPOWER_ACTION_POLICY = POWER_ACTION_POLICY*; 4040 4041 // POWER_ACTION_POLICY.Flags constants 4042 enum ULONG 4043 POWER_ACTION_QUERY_ALLOWED = 0x00000001, 4044 POWER_ACTION_UI_ALLOWED = 0x00000002, 4045 POWER_ACTION_OVERRIDE_APPS = 0x00000004, 4046 POWER_ACTION_LIGHTEST_FIRST = 0x10000000, 4047 POWER_ACTION_LOCK_CONSOLE = 0x20000000, 4048 POWER_ACTION_DISABLE_WAKES = 0x40000000, 4049 POWER_ACTION_CRITICAL = 0x80000000; 4050 4051 // POWER_ACTION_POLICY.EventCode constants 4052 enum ULONG 4053 POWER_LEVEL_USER_NOTIFY_TEXT = 0x00000001, 4054 POWER_LEVEL_USER_NOTIFY_SOUND = 0x00000002, 4055 POWER_LEVEL_USER_NOTIFY_EXEC = 0x00000004, 4056 POWER_USER_NOTIFY_BUTTON = 0x00000008, 4057 POWER_USER_NOTIFY_SHUTDOWN = 0x00000010, 4058 POWER_FORCE_TRIGGER_RESET = 0x80000000; 4059 4060 enum size_t 4061 DISCHARGE_POLICY_CRITICAL = 0, 4062 DISCHARGE_POLICY_LOW = 1, 4063 NUM_DISCHARGE_POLICIES = 4; 4064 4065 enum : BYTE { 4066 PO_THROTTLE_NONE, 4067 PO_THROTTLE_CONSTANT, 4068 PO_THROTTLE_DEGRADE, 4069 PO_THROTTLE_ADAPTIVE, 4070 PO_THROTTLE_MAXIMUM 4071 } 4072 4073 struct SYSTEM_POWER_LEVEL { 4074 BOOLEAN Enable; 4075 UCHAR[3] Spare; 4076 ULONG BatteryLevel; 4077 POWER_ACTION_POLICY PowerPolicy; 4078 SYSTEM_POWER_STATE MinSystemState; 4079 } 4080 alias PSYSTEM_POWER_LEVEL = SYSTEM_POWER_LEVEL*; 4081 4082 struct SYSTEM_POWER_POLICY { 4083 ULONG Revision; 4084 POWER_ACTION_POLICY PowerButton; 4085 POWER_ACTION_POLICY SleepButton; 4086 POWER_ACTION_POLICY LidClose; 4087 SYSTEM_POWER_STATE LidOpenWake; 4088 ULONG Reserved; 4089 POWER_ACTION_POLICY Idle; 4090 ULONG IdleTimeout; 4091 UCHAR IdleSensitivity; 4092 UCHAR DynamicThrottle; 4093 UCHAR[2] Spare2; 4094 SYSTEM_POWER_STATE MinSleep; 4095 SYSTEM_POWER_STATE MaxSleep; 4096 SYSTEM_POWER_STATE ReducedLatencySleep; 4097 ULONG WinLogonFlags; 4098 ULONG Spare3; 4099 ULONG DozeS4Timeout; 4100 ULONG BroadcastCapacityResolution; 4101 SYSTEM_POWER_LEVEL[NUM_DISCHARGE_POLICIES] DischargePolicy; 4102 ULONG VideoTimeout; 4103 BOOLEAN VideoDimDisplay; 4104 ULONG[3] VideoReserved; 4105 ULONG SpindownTimeout; 4106 BOOLEAN OptimizeForPower; 4107 UCHAR FanThrottleTolerance; 4108 UCHAR ForcedThrottle; 4109 UCHAR MinThrottle; 4110 POWER_ACTION_POLICY OverThrottled; 4111 } 4112 alias PSYSTEM_POWER_POLICY = SYSTEM_POWER_POLICY*; 4113 4114 struct SYSTEM_POWER_CAPABILITIES { 4115 BOOLEAN PowerButtonPresent; 4116 BOOLEAN SleepButtonPresent; 4117 BOOLEAN LidPresent; 4118 BOOLEAN SystemS1; 4119 BOOLEAN SystemS2; 4120 BOOLEAN SystemS3; 4121 BOOLEAN SystemS4; 4122 BOOLEAN SystemS5; 4123 BOOLEAN HiberFilePresent; 4124 BOOLEAN FullWake; 4125 BOOLEAN VideoDimPresent; 4126 BOOLEAN ApmPresent; 4127 BOOLEAN UpsPresent; 4128 BOOLEAN ThermalControl; 4129 BOOLEAN ProcessorThrottle; 4130 UCHAR ProcessorMinThrottle; 4131 UCHAR ProcessorMaxThrottle; 4132 UCHAR[4] spare2; 4133 BOOLEAN DiskSpinDown; 4134 UCHAR[8] spare3; 4135 BOOLEAN SystemBatteriesPresent; 4136 BOOLEAN BatteriesAreShortTerm; 4137 BATTERY_REPORTING_SCALE[3] BatteryScale; 4138 SYSTEM_POWER_STATE AcOnLineWake; 4139 SYSTEM_POWER_STATE SoftLidWake; 4140 SYSTEM_POWER_STATE RtcWake; 4141 SYSTEM_POWER_STATE MinDeviceWakeState; 4142 SYSTEM_POWER_STATE DefaultLowLatencyWake; 4143 } 4144 alias PSYSTEM_POWER_CAPABILITIES = SYSTEM_POWER_CAPABILITIES*; 4145 4146 struct SYSTEM_BATTERY_STATE { 4147 BOOLEAN AcOnLine; 4148 BOOLEAN BatteryPresent; 4149 BOOLEAN Charging; 4150 BOOLEAN Discharging; 4151 BOOLEAN[4] Spare1; 4152 ULONG MaxCapacity; 4153 ULONG RemainingCapacity; 4154 ULONG Rate; 4155 ULONG EstimatedTime; 4156 ULONG DefaultAlert1; 4157 ULONG DefaultAlert2; 4158 } 4159 alias PSYSTEM_BATTERY_STATE = SYSTEM_BATTERY_STATE*; 4160 4161 enum POWER_INFORMATION_LEVEL { 4162 SystemPowerPolicyAc, 4163 SystemPowerPolicyDc, 4164 VerifySystemPolicyAc, 4165 VerifySystemPolicyDc, 4166 SystemPowerCapabilities, 4167 SystemBatteryState, 4168 SystemPowerStateHandler, 4169 ProcessorStateHandler, 4170 SystemPowerPolicyCurrent, 4171 AdministratorPowerPolicy, 4172 SystemReserveHiberFile, 4173 ProcessorInformation, 4174 SystemPowerInformation, 4175 ProcessorStateHandler2, 4176 LastWakeTime, 4177 LastSleepTime, 4178 SystemExecutionState, 4179 SystemPowerStateNotifyHandler, 4180 ProcessorPowerPolicyAc, 4181 ProcessorPowerPolicyDc, 4182 VerifyProcessorPowerPolicyAc, 4183 VerifyProcessorPowerPolicyDc, 4184 ProcessorPowerPolicyCurrent 4185 } 4186 4187 //#if 1 /* (WIN32_WINNT >= 0x0500) */ 4188 struct SYSTEM_POWER_INFORMATION { 4189 ULONG MaxIdlenessAllowed; 4190 ULONG Idleness; 4191 ULONG TimeRemaining; 4192 UCHAR CoolingMode; 4193 } 4194 alias PSYSTEM_POWER_INFORMATION = SYSTEM_POWER_INFORMATION*; 4195 //#endif 4196 4197 struct PROCESSOR_POWER_POLICY_INFO { 4198 ULONG TimeCheck; 4199 ULONG DemoteLimit; 4200 ULONG PromoteLimit; 4201 UCHAR DemotePercent; 4202 UCHAR PromotePercent; 4203 UCHAR[2] Spare; 4204 uint _bf; 4205 4206 bool AllowDemotion() { return cast(bool)(_bf & 1); } 4207 bool AllowPromotion() { return cast(bool)(_bf & 2); } 4208 4209 bool AllowDemotion(bool a) { _bf = (_bf & ~1) | a; return a; } 4210 bool AllowPromotion(bool a) { _bf = (_bf & ~2) | (a << 1); return a; } 4211 /+ 4212 ULONG AllowDemotion : 1; 4213 ULONG AllowPromotion : 1; 4214 ULONG Reserved : 30; 4215 +/ 4216 } 4217 alias PPROCESSOR_POWER_POLICY_INFO = PROCESSOR_POWER_POLICY_INFO*; 4218 4219 struct PROCESSOR_POWER_POLICY { 4220 ULONG Revision; 4221 UCHAR DynamicThrottle; 4222 UCHAR[3] Spare; 4223 ULONG Reserved; 4224 ULONG PolicyCount; 4225 PROCESSOR_POWER_POLICY_INFO[3] Policy; 4226 } 4227 alias PPROCESSOR_POWER_POLICY = PROCESSOR_POWER_POLICY*; 4228 4229 struct ADMINISTRATOR_POWER_POLICY { 4230 SYSTEM_POWER_STATE MinSleep; 4231 SYSTEM_POWER_STATE MaxSleep; 4232 ULONG MinVideoTimeout; 4233 ULONG MaxVideoTimeout; 4234 ULONG MinSpindownTimeout; 4235 ULONG MaxSpindownTimeout; 4236 } 4237 alias PADMINISTRATOR_POWER_POLICY = ADMINISTRATOR_POWER_POLICY*; 4238 4239 //}//#endif /* _WIN32_WINNT >= 0x500 */ 4240 4241 extern (Windows) { 4242 alias void function(PVOID, DWORD, PVOID) PIMAGE_TLS_CALLBACK; 4243 4244 static if (_WIN32_WINNT >= 0x500) { 4245 alias LONG function(PEXCEPTION_POINTERS) PVECTORED_EXCEPTION_HANDLER; 4246 alias void function(PVOID, BOOLEAN) WAITORTIMERCALLBACKFUNC; 4247 } 4248 } 4249 4250 static if (_WIN32_WINNT >= 0x501) { 4251 enum HEAP_INFORMATION_CLASS { 4252 HeapCompatibilityInformation 4253 } 4254 4255 enum ACTIVATION_CONTEXT_INFO_CLASS { 4256 ActivationContextBasicInformation = 1, 4257 ActivationContextDetailedInformation, 4258 AssemblyDetailedInformationInActivationContext, 4259 FileInformationInAssemblyOfAssemblyInActivationContext 4260 } 4261 4262 align struct ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION { 4263 DWORD ulFlags; 4264 DWORD ulEncodedAssemblyIdentityLength; 4265 DWORD ulManifestPathType; 4266 DWORD ulManifestPathLength; 4267 LARGE_INTEGER liManifestLastWriteTime; 4268 DWORD ulPolicyPathType; 4269 DWORD ulPolicyPathLength; 4270 LARGE_INTEGER liPolicyLastWriteTime; 4271 DWORD ulMetadataSatelliteRosterIndex; 4272 DWORD ulManifestVersionMajor; 4273 DWORD ulManifestVersionMinor; 4274 DWORD ulPolicyVersionMajor; 4275 DWORD ulPolicyVersionMinor; 4276 DWORD ulAssemblyDirectoryNameLength; 4277 PCWSTR lpAssemblyEncodedAssemblyIdentity; 4278 PCWSTR lpAssemblyManifestPath; 4279 PCWSTR lpAssemblyPolicyPath; 4280 PCWSTR lpAssemblyDirectoryName; 4281 } 4282 alias ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION* 4283 PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION; 4284 alias const(ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION)* 4285 PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION; 4286 4287 struct ACTIVATION_CONTEXT_DETAILED_INFORMATION { 4288 DWORD dwFlags; 4289 DWORD ulFormatVersion; 4290 DWORD ulAssemblyCount; 4291 DWORD ulRootManifestPathType; 4292 DWORD ulRootManifestPathChars; 4293 DWORD ulRootConfigurationPathType; 4294 DWORD ulRootConfigurationPathChars; 4295 DWORD ulAppDirPathType; 4296 DWORD ulAppDirPathChars; 4297 PCWSTR lpRootManifestPath; 4298 PCWSTR lpRootConfigurationPath; 4299 PCWSTR lpAppDirPath; 4300 } 4301 alias ACTIVATION_CONTEXT_DETAILED_INFORMATION* 4302 PACTIVATION_CONTEXT_DETAILED_INFORMATION; 4303 alias const(ACTIVATION_CONTEXT_DETAILED_INFORMATION)* 4304 PCACTIVATION_CONTEXT_DETAILED_INFORMATION; 4305 4306 struct ACTIVATION_CONTEXT_QUERY_INDEX { 4307 ULONG ulAssemblyIndex; 4308 ULONG ulFileIndexInAssembly; 4309 } 4310 alias ACTIVATION_CONTEXT_QUERY_INDEX* PACTIVATION_CONTEXT_QUERY_INDEX; 4311 alias PCACTIVATION_CONTEXT_QUERY_INDEX = const(ACTIVATION_CONTEXT_QUERY_INDEX)*; 4312 4313 struct ASSEMBLY_FILE_DETAILED_INFORMATION { 4314 DWORD ulFlags; 4315 DWORD ulFilenameLength; 4316 DWORD ulPathLength; 4317 PCWSTR lpFileName; 4318 PCWSTR lpFilePath; 4319 } 4320 alias ASSEMBLY_FILE_DETAILED_INFORMATION* 4321 PASSEMBLY_FILE_DETAILED_INFORMATION; 4322 alias const(ASSEMBLY_FILE_DETAILED_INFORMATION)* 4323 PCASSEMBLY_FILE_DETAILED_INFORMATION; 4324 } 4325 4326 version (Unicode) { 4327 alias OSVERSIONINFO = OSVERSIONINFOW; 4328 alias OSVERSIONINFOEX = OSVERSIONINFOEXW; 4329 } else { 4330 alias OSVERSIONINFO = OSVERSIONINFOA; 4331 alias OSVERSIONINFOEX = OSVERSIONINFOEXA; 4332 } 4333 4334 alias POSVERSIONINFO = OSVERSIONINFO*; 4335 alias LPOSVERSIONINFO = OSVERSIONINFO*; 4336 alias POSVERSIONINFOEX = OSVERSIONINFOEX*; 4337 alias LPOSVERSIONINFOEX = OSVERSIONINFOEX*; 4338 4339 4340 static if (_WIN32_WINNT >= 0x500) { 4341 extern (Windows) ULONGLONG VerSetConditionMask(ULONGLONG, DWORD, BYTE); 4342 } 4343 4344 version (Win64) { 4345 enum WORD IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR64_MAGIC; 4346 4347 alias IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG64; 4348 alias IMAGE_SNAP_BY_ORDINAL = IMAGE_SNAP_BY_ORDINAL64; 4349 alias IMAGE_ORDINAL = IMAGE_ORDINAL64; 4350 alias IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER64; 4351 alias IMAGE_NT_HEADERS = IMAGE_NT_HEADERS64; 4352 alias IMAGE_THUNK_DATA = IMAGE_THUNK_DATA64; 4353 alias IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY64; 4354 } else { 4355 enum WORD IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR32_MAGIC; 4356 4357 alias IMAGE_ORDINAL_FLAG = IMAGE_ORDINAL_FLAG32; 4358 alias IMAGE_ORDINAL = IMAGE_ORDINAL32; 4359 alias IMAGE_SNAP_BY_ORDINAL = IMAGE_SNAP_BY_ORDINAL32; 4360 alias IMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER32; 4361 alias IMAGE_NT_HEADERS = IMAGE_NT_HEADERS32; 4362 alias IMAGE_THUNK_DATA = IMAGE_THUNK_DATA32; 4363 alias IMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY32; 4364 } 4365 4366 alias PIMAGE_OPTIONAL_HEADER = IMAGE_OPTIONAL_HEADER*; 4367 alias PIMAGE_NT_HEADERS = IMAGE_NT_HEADERS*; 4368 alias PIMAGE_THUNK_DATA = IMAGE_THUNK_DATA*; 4369 alias PIMAGE_TLS_DIRECTORY = IMAGE_TLS_DIRECTORY*; 4370 4371 // TODO: MinGW implements these in assembly. How to translate? 4372 PVOID GetCurrentFiber(); 4373 PVOID GetFiberData();