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