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