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