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