comparison win32/winnt.d @ 1:4a9dcbd9e54f

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