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