Sync tools to 45592
[reactos.git] / reactos / include / psdk / winnt.h
1 #ifndef _WINNT_H
2 #define _WINNT_H
3
4 #ifndef _M_AMD64
5 #if !defined(__ROS_LONG64__)
6 #ifdef __WINESRC__
7 #define __ROS_LONG64__
8 #endif
9 #endif
10 #endif
11
12 #ifdef __GNUC__
13 #include <msvctarget.h>
14 #endif
15
16 #if defined(_M_IX86) && !defined(_X86_)
17 #define _X86_
18 #elif defined(_M_ALPHA) && !defined(_ALPHA_)
19 #define _ALPHA_
20 #elif defined(_M_ARM) && !defined(_ARM_)
21 #define _ARM_
22 #elif defined(_M_PPC) && !defined(_PPC_)
23 #define _PPC_
24 #elif defined(_M_MRX000) && !defined(_MIPS_)
25 #define _MIPS_
26 #elif defined(_M_M68K) && !defined(_68K_)
27 #define _68K_
28 #endif
29
30 #ifndef DECLSPEC_ALIGN
31 # if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
32 # define DECLSPEC_ALIGN(x) __declspec(align(x))
33 # elif defined(__GNUC__)
34 # define DECLSPEC_ALIGN(x) __attribute__((aligned(x)))
35 # else
36 # define DECLSPEC_ALIGN(x)
37 # endif
38 #endif
39
40 # define DECLSPEC_HIDDEN
41
42 #ifdef __cplusplus
43 extern "C" {
44 #endif
45
46 #include <excpt.h>
47 #include <basetsd.h>
48 #include <guiddef.h>
49
50 #include <ctype.h>
51 #undef __need_wchar_t
52
53 #include <winerror.h>
54 #include <stddef.h>
55 #include <sdkddkver.h>
56
57 #ifndef RC_INVOKED
58 #include <string.h>
59
60 /* FIXME: add more architectures. Is there a way to specify this in GCC? */
61 #if defined(_M_AMD64)
62 #undef UNALIGNED
63 #define UNALIGNED __unaligned
64 #else
65 #undef UNALIGNED
66 #define UNALIGNED
67 #endif
68
69 #ifndef DECLSPEC_ADDRSAFE
70 #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
71 #define DECLSPEC_ADDRSAFE __declspec(address_safe)
72 #else
73 #define DECLSPEC_ADDRSAFE
74 #endif
75 #endif
76
77 /*#ifdef _WINE*/
78 #if defined(__GNUC__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 3)))
79 #define __WINE_ALLOC_SIZE(x) __attribute__((__alloc_size__(x)))
80 #else
81 #define __WINE_ALLOC_SIZE(x)
82 #endif
83 /*#endif*/
84
85 #ifndef FORCEINLINE
86 #if (_MSC_VER >= 1200)
87 #define FORCEINLINE __forceinline
88 #elif (_MSC_VER)
89 #define FORCEINLINE __inline
90 #else
91 #define FORCEINLINE static __inline__ __attribute__((always_inline))
92 #endif
93 #endif
94
95 #if !defined(_NTSYSTEM_)
96 #define NTSYSAPI DECLSPEC_IMPORT
97 #define NTSYSCALLAPI DECLSPEC_IMPORT
98 #else
99 #define NTSYSAPI
100 #if defined(_NTDLLBUILD_)
101 #define NTSYSCALLAPI
102 #else
103 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
104 #endif
105 #endif
106
107 #ifndef VOID
108 #define VOID void
109 #endif
110 typedef char CHAR;
111 typedef short SHORT;
112 #if !defined(__ROS_LONG64__) || defined(_M_AMD64)
113 typedef long LONG;
114 #else
115 typedef int LONG;
116 #endif
117 typedef char CCHAR, *PCCHAR;
118 typedef void *PVOID;
119
120 /* FIXME for __WIN64 */
121 #ifndef __ptr64
122 #define __ptr64
123 #endif
124 typedef void* __ptr64 PVOID64;
125
126 #ifdef __cplusplus
127 # define EXTERN_C extern "C"
128 #else
129 # define EXTERN_C extern
130 #endif
131
132 #define STDMETHODCALLTYPE __stdcall
133 #define STDMETHODVCALLTYPE __cdecl
134 #define STDAPICALLTYPE __stdcall
135 #define STDAPIVCALLTYPE __cdecl
136
137 #define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
138 #define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
139 #define STDMETHODIMP HRESULT STDMETHODCALLTYPE
140 #define STDMETHODIMP_(type) type STDMETHODCALLTYPE
141 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
142 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
143 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
144 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
145
146 typedef wchar_t WCHAR;
147 typedef WCHAR *PWCHAR,*LPWCH,*PWCH,*NWPSTR,*LPWSTR,*PWSTR;
148 typedef CONST WCHAR *LPCWCH,*PCWCH,*LPCWSTR,*PCWSTR;
149 typedef CHAR *PCHAR,*LPCH,*PCH,*NPSTR,*LPSTR,*PSTR;
150 typedef CONST CHAR *LPCCH,*PCCH,*PCSTR,*LPCSTR;
151 typedef PWSTR *PZPWSTR;
152 typedef CONST PWSTR *PCZPWSTR;
153 typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
154 typedef PCWSTR *PZPCWSTR;
155 typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
156 typedef PSTR *PZPSTR;
157 typedef CONST PSTR *PCZPSTR;
158 typedef PCSTR *PZPCSTR;
159
160 #ifdef UNICODE
161 #ifndef _TCHAR_DEFINED
162 #define _TCHAR_DEFINED
163 typedef WCHAR TCHAR,*PTCHAR;
164 typedef WCHAR TBYTE ,*PTBYTE;
165 #endif
166 typedef LPWSTR LPTCH,PTCH,PTSTR,LPTSTR,LP;
167 typedef LPCWSTR PCTSTR,LPCTSTR;
168 typedef LPUWSTR PUTSTR,LPUTSTR;
169 typedef LPCUWSTR PCUTSTR,LPCUTSTR;
170 #define __TEXT(quote) L##quote
171 #else
172 #ifndef _TCHAR_DEFINED
173 #define _TCHAR_DEFINED
174 typedef char TCHAR,*PTCHAR;
175 typedef unsigned char TBYTE ,*PTBYTE;
176 #endif
177 typedef LPSTR LPTCH,PTCH,PTSTR,LPTSTR,PUTSTR,LPUTSTR;
178 typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
179 #define __TEXT(quote) quote
180 #endif
181
182 #define TEXT(quote) __TEXT(quote)
183
184 typedef SHORT *PSHORT;
185 typedef LONG *PLONG;
186 #ifdef STRICT
187 typedef void *HANDLE;
188 #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
189 #else
190 typedef PVOID HANDLE;
191 #define DECLARE_HANDLE(n) typedef HANDLE n
192 #endif
193 typedef HANDLE *PHANDLE;
194 typedef DWORD LCID;
195 typedef PDWORD PLCID;
196 typedef WORD LANGID;
197 #ifdef __GNUC__
198 #define _HAVE_INT64
199 #ifndef _INTEGRAL_MAX_BITS
200 # define _INTEGRAL_MAX_BITS 64
201 #endif
202 #undef __int64
203 #define __int64 long long
204 #elif (defined(__WATCOMC__) || defined(_MSC_VER)) && (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64 )
205 #define _HAVE_INT64
206 #endif /* __GNUC__/__WATCOMC */
207 #if defined(_HAVE_INT64) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)
208 typedef __int64 LONGLONG;
209 typedef unsigned __int64 DWORDLONG;
210 #else
211 typedef double LONGLONG,DWORDLONG;
212 #endif
213 typedef LONGLONG *PLONGLONG;
214 typedef DWORDLONG *PDWORDLONG;
215 typedef DWORDLONG ULONGLONG,*PULONGLONG;
216 typedef LONGLONG USN;
217 #ifdef _HAVE_INT64
218 #define Int32x32To64(a,b) ((LONGLONG)(a)*(LONGLONG)(b))
219 #define UInt32x32To64(a,b) ((DWORDLONG)(a)*(DWORDLONG)(b))
220 #define Int64ShllMod32(a,b) ((DWORDLONG)(a)<<(b))
221 #define Int64ShraMod32(a,b) ((LONGLONG)(a)>>(b))
222 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
223 #endif
224 #define ANSI_NULL ((CHAR)0)
225 #define UNICODE_NULL ((WCHAR)0)
226 typedef BYTE BOOLEAN,*PBOOLEAN;
227 #endif
228 typedef BYTE FCHAR;
229 typedef WORD FSHORT;
230 typedef DWORD FLONG;
231
232 #define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1]
233
234 #include "intrin.h"
235
236 #define NTAPI __stdcall
237 #include <basetsd.h>
238
239 #ifdef _MSC_VER
240 #pragma warning(push)
241 #pragma warning(disable:4201)
242 #pragma warning(disable:4214)
243 #pragma warning(disable:4820)
244 #endif
245
246 #define ACE_OBJECT_TYPE_PRESENT 0x00000001
247 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x00000002
248 #define APPLICATION_ERROR_MASK 0x20000000
249 #define ERROR_SEVERITY_SUCCESS 0x00000000
250 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
251 #define ERROR_SEVERITY_WARNING 0x80000000
252 #define ERROR_SEVERITY_ERROR 0xC0000000
253 /* also in ddk/ntifs.h */
254 #define COMPRESSION_FORMAT_NONE (0x0000)
255 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
256 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
257 #define COMPRESSION_ENGINE_STANDARD (0x0000)
258 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
259 #define COMPRESSION_ENGINE_HIBER (0x0200)
260 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
261 #define ACCESS_DENIED_ACE_TYPE (0x1)
262 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
263 #define SYSTEM_ALARM_ACE_TYPE (0x3)
264 /*end ntifs.h */
265 #define ANYSIZE_ARRAY 1
266 #define OBJECT_INHERIT_ACE 1
267 #define CONTAINER_INHERIT_ACE 2
268 #define NO_PROPAGATE_INHERIT_ACE 4
269 #define INHERIT_ONLY_ACE 8
270 #define INHERITED_ACE 10
271 #define VALID_INHERIT_FLAGS 0x1F
272 #define SUCCESSFUL_ACCESS_ACE_FLAG 64
273 #define FAILED_ACCESS_ACE_FLAG 128
274 #define DELETE 0x00010000L
275 #define READ_CONTROL 0x20000L
276 #define WRITE_DAC 0x40000L
277 #define WRITE_OWNER 0x80000L
278 #define SYNCHRONIZE 0x100000L
279 #define STANDARD_RIGHTS_REQUIRED 0xF0000
280 #define STANDARD_RIGHTS_READ 0x20000
281 #define STANDARD_RIGHTS_WRITE 0x20000
282 #define STANDARD_RIGHTS_EXECUTE 0x20000
283 #define STANDARD_RIGHTS_ALL 0x1F0000
284 #define SPECIFIC_RIGHTS_ALL 0xFFFF
285 #define ACCESS_SYSTEM_SECURITY 0x1000000
286
287 #define REG_STANDARD_FORMAT 1
288 #define REG_LATEST_FORMAT 2
289 #define REG_NO_COMPRESSION 4
290
291 #ifndef WIN32_NO_STATUS
292
293 #define STATUS_WAIT_0 ((DWORD)0x00000000)
294 #define STATUS_ABANDONED_WAIT_0 ((DWORD)0x00000080)
295 #define STATUS_USER_APC ((DWORD)0x000000C0)
296 #define STATUS_TIMEOUT ((DWORD)0x00000102)
297 #define STATUS_PENDING ((DWORD)0x00000103)
298 #define STATUS_SEGMENT_NOTIFICATION ((DWORD)0x40000005)
299 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001)
300 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002)
301 #define STATUS_BREAKPOINT ((DWORD)0x80000003)
302 #define STATUS_SINGLE_STEP ((DWORD)0x80000004)
303 #define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005)
304 #define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006)
305 #define STATUS_INVALID_HANDLE ((DWORD)0xC0000008)
306 #define STATUS_NO_MEMORY ((DWORD)0xC0000017)
307 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001D)
308 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025)
309 #define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026)
310 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008C)
311 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008D)
312 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008E)
313 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008F)
314 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090)
315 #define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091)
316 #define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092)
317 #define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093)
318 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094)
319 #define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095)
320 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096)
321 #define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FD)
322 #define STATUS_CONTROL_C_EXIT ((DWORD)0xC000013A)
323 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD)0xC00002B4)
324 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD)0xC00002B5)
325 #define STATUS_REG_NAT_CONSUMPTION ((DWORD)0xC00002C9)
326 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD)0xC015000F)
327 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD)0xC0150010)
328
329 #define DBG_EXCEPTION_HANDLED ((DWORD)0x00010001)
330 #define DBG_CONTINUE ((DWORD)0x00010002)
331 #define DBG_TERMINATE_THREAD ((DWORD)0x40010003)
332 #define DBG_TERMINATE_PROCESS ((DWORD)0x40010004)
333 #define DBG_CONTROL_C ((DWORD)0x40010005)
334 #define DBG_CONTROL_BREAK ((DWORD)0x40010008)
335 #define DBG_COMMAND_EXCEPTION ((DWORD)0x40010009)
336 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD)0x80010001)
337
338 #endif /* WIN32_NO_STATUS */
339
340 #define MAXIMUM_ALLOWED 0x2000000
341 #define GENERIC_READ 0x80000000
342 #define GENERIC_WRITE 0x40000000
343 #define GENERIC_EXECUTE 0x20000000
344 #define GENERIC_ALL 0x10000000
345
346 #define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
347
348 /* Also in ddk/winddk.h */
349 #define FILE_LIST_DIRECTORY 0x00000001
350 #define FILE_READ_DATA 0x00000001
351 #define FILE_ADD_FILE 0x00000002
352 #define FILE_WRITE_DATA 0x00000002
353 #define FILE_ADD_SUBDIRECTORY 0x00000004
354 #define FILE_APPEND_DATA 0x00000004
355 #define FILE_CREATE_PIPE_INSTANCE 0x00000004
356 #define FILE_READ_EA 0x00000008
357 #define FILE_READ_PROPERTIES 0x00000008
358 #define FILE_WRITE_EA 0x00000010
359 #define FILE_WRITE_PROPERTIES 0x00000010
360 #define FILE_EXECUTE 0x00000020
361 #define FILE_TRAVERSE 0x00000020
362 #define FILE_DELETE_CHILD 0x00000040
363 #define FILE_READ_ATTRIBUTES 0x00000080
364 #define FILE_WRITE_ATTRIBUTES 0x00000100
365
366 #define FILE_SHARE_READ 0x00000001
367 #define FILE_SHARE_WRITE 0x00000002
368 #define FILE_SHARE_DELETE 0x00000004
369 #define FILE_SHARE_VALID_FLAGS 0x00000007
370
371 #define FILE_ATTRIBUTE_READONLY 0x00000001
372 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
373 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
374 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
375 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
376 #define FILE_ATTRIBUTE_DEVICE 0x00000040
377 #define FILE_ATTRIBUTE_NORMAL 0x00000080
378 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
379 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
380 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
381 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
382 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
383 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
384 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
385 #define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
386 #define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
387
388 #define FILE_COPY_STRUCTURED_STORAGE 0x00000041
389 #define FILE_STRUCTURED_STORAGE 0x00000441
390
391 #define FILE_VALID_OPTION_FLAGS 0x00ffffff
392 #define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
393 #define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
394 #define FILE_VALID_SET_FLAGS 0x00000036
395
396 #define FILE_DIRECTORY_FILE 0x00000001
397 #define FILE_WRITE_THROUGH 0x00000002
398 #define FILE_SEQUENTIAL_ONLY 0x00000004
399 #define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
400 #define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
401 #define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
402 #define FILE_NON_DIRECTORY_FILE 0x00000040
403 #define FILE_CREATE_TREE_CONNECTION 0x00000080
404 #define FILE_COMPLETE_IF_OPLOCKED 0x00000100
405 #define FILE_NO_EA_KNOWLEDGE 0x00000200
406 #define FILE_OPEN_FOR_RECOVERY 0x00000400
407 #define FILE_RANDOM_ACCESS 0x00000800
408 #define FILE_DELETE_ON_CLOSE 0x00001000
409 #define FILE_OPEN_BY_FILE_ID 0x00002000
410 #define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
411 #define FILE_NO_COMPRESSION 0x00008000
412 #define FILE_RESERVE_OPFILTER 0x00100000
413 #define FILE_OPEN_REPARSE_POINT 0x00200000
414 #define FILE_OPEN_NO_RECALL 0x00400000
415 #define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
416
417 #define FILE_ALL_ACCESS \
418 (STANDARD_RIGHTS_REQUIRED | \
419 SYNCHRONIZE | \
420 0x1FF)
421
422 #define FILE_GENERIC_EXECUTE \
423 (STANDARD_RIGHTS_EXECUTE | \
424 FILE_READ_ATTRIBUTES | \
425 FILE_EXECUTE | \
426 SYNCHRONIZE)
427
428 #define FILE_GENERIC_READ \
429 (STANDARD_RIGHTS_READ | \
430 FILE_READ_DATA | \
431 FILE_READ_ATTRIBUTES | \
432 FILE_READ_EA | \
433 SYNCHRONIZE)
434
435 #define FILE_GENERIC_WRITE \
436 (STANDARD_RIGHTS_WRITE | \
437 FILE_WRITE_DATA | \
438 FILE_WRITE_ATTRIBUTES | \
439 FILE_WRITE_EA | \
440 FILE_APPEND_DATA | \
441 SYNCHRONIZE)
442 /* end winddk.h */
443 /* also in ddk/ntifs.h */
444 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
445 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
446 #define FILE_NOTIFY_CHANGE_NAME 0x00000003
447 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
448 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
449 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
450 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
451 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
452 #define FILE_NOTIFY_CHANGE_EA 0x00000080
453 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
454 #define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
455 #define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
456 #define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
457 #define FILE_NOTIFY_VALID_MASK 0x00000fff
458
459 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
460 #define FILE_CASE_PRESERVED_NAMES 0x00000002
461 #define FILE_UNICODE_ON_DISK 0x00000004
462 #define FILE_PERSISTENT_ACLS 0x00000008
463 #define FILE_FILE_COMPRESSION 0x00000010
464 #define FILE_VOLUME_QUOTAS 0x00000020
465 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
466 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
467 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
468 #define FS_LFN_APIS 0x00004000
469 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
470 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
471 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
472 #define FILE_NAMED_STREAMS 0x00040000
473
474 #define IO_COMPLETION_QUERY_STATE 0x0001
475 #define IO_COMPLETION_MODIFY_STATE 0x0002
476 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
477 /* end ntifs.h */
478
479 /* also in ddk/winddk.h */
480 #define DUPLICATE_CLOSE_SOURCE 0x00000001
481 #define DUPLICATE_SAME_ACCESS 0x00000002
482 /* end winddk.k */
483
484 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
485 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
486 #define PROCESS_TERMINATE 1
487 #define PROCESS_CREATE_THREAD 2
488 #define PROCESS_SET_SESSIONID 4
489 #define PROCESS_VM_OPERATION 8
490 #define PROCESS_VM_READ 16
491 #define PROCESS_VM_WRITE 32
492 #define PROCESS_CREATE_PROCESS 128
493 #define PROCESS_SET_QUOTA 256
494 #define PROCESS_SET_INFORMATION 512
495 #define PROCESS_QUERY_INFORMATION 1024
496 #define PROCESS_SUSPEND_RESUME 2048
497 #define PROCESS_QUERY_LIMITED_INFORMATION 0x1000
498 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0xFFF)
499 #define PROCESS_DUP_HANDLE 64
500 #define THREAD_TERMINATE 1
501 #define THREAD_SUSPEND_RESUME 2
502 #define THREAD_GET_CONTEXT 8
503 #define THREAD_SET_CONTEXT 16
504 #define THREAD_SET_INFORMATION 32
505 #define THREAD_QUERY_INFORMATION 64
506 #define THREAD_SET_THREAD_TOKEN 128
507 #define THREAD_IMPERSONATE 256
508 #define THREAD_DIRECT_IMPERSONATION 0x200
509 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF)
510 #define MUTANT_QUERY_STATE 0x0001
511 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|MUTANT_QUERY_STATE)
512 #define TIMER_QUERY_STATE 0x0001
513 #define TIMER_MODIFY_STATE 0x0002
514 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
515 #define THREAD_BASE_PRIORITY_LOWRT 15
516 #define THREAD_BASE_PRIORITY_MAX 2
517 #define THREAD_BASE_PRIORITY_MIN (-2)
518 #define THREAD_BASE_PRIORITY_IDLE (-15)
519 /*
520 * To prevent gcc compiler warnings, bracket these defines when initialising
521 * a SID_IDENTIFIER_AUTHORITY, eg.
522 * SID_IDENTIFIER_AUTHORITY aNullSidAuthority = {SECURITY_NULL_SID_AUTHORITY};
523 */
524 #define SID_MAX_SUB_AUTHORITIES 15
525
526 /* security entities */
527 #define SECURITY_NULL_RID (0x00000000L)
528 #define SECURITY_WORLD_RID (0x00000000L)
529 #define SECURITY_LOCAL_RID (0X00000000L)
530
531 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
532
533 /* S-1-1 */
534 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
535
536 /* S-1-2 */
537 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
538
539 /* S-1-3 */
540 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
541 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
542 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
543 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
544 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
545
546 /* S-1-4 */
547 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
548
549 /* S-1-5 */
550 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
551 #define SECURITY_DIALUP_RID 0x00000001L
552 #define SECURITY_NETWORK_RID 0x00000002L
553 #define SECURITY_BATCH_RID 0x00000003L
554 #define SECURITY_INTERACTIVE_RID 0x00000004L
555 #define SECURITY_LOGON_IDS_RID 0x00000005L
556 #define SECURITY_SERVICE_RID 0x00000006L
557 #define SECURITY_ANONYMOUS_LOGON_RID 0x00000007L
558 #define SECURITY_PROXY_RID 0x00000008L
559 #define SECURITY_ENTERPRISE_CONTROLLERS_RID 0x00000009L
560 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
561 #define SECURITY_PRINCIPAL_SELF_RID 0x0000000AL
562 #define SECURITY_AUTHENTICATED_USER_RID 0x0000000BL
563 #define SECURITY_RESTRICTED_CODE_RID 0x0000000CL
564 #define SECURITY_TERMINAL_SERVER_RID 0x0000000DL
565 #define SECURITY_REMOTE_LOGON_RID 0x0000000EL
566 #define SECURITY_THIS_ORGANIZATION_RID 0x0000000FL
567 #define SECURITY_LOCAL_SYSTEM_RID 0x00000012L
568 #define SECURITY_LOCAL_SERVICE_RID 0x00000013L
569 #define SECURITY_NETWORK_SERVICE_RID 0x00000014L
570 #define SECURITY_NT_NON_UNIQUE 0x00000015L
571 #define SECURITY_BUILTIN_DOMAIN_RID 0x00000020L
572
573 #define SECURITY_PACKAGE_BASE_RID 0x00000040L
574 #define SECURITY_PACKAGE_NTLM_RID 0x0000000AL
575 #define SECURITY_PACKAGE_SCHANNEL_RID 0x0000000EL
576 #define SECURITY_PACKAGE_DIGEST_RID 0x00000015L
577 #define SECURITY_OTHER_ORGANIZATION_RID 0x000003E8L
578
579 #define SECURITY_LOGON_IDS_RID_COUNT 0x3
580 #define SID_REVISION 1
581
582 #define FOREST_USER_RID_MAX 0x000001F3L
583 #define DOMAIN_USER_RID_ADMIN 0x000001F4L
584 #define DOMAIN_USER_RID_GUEST 0x000001F5L
585 #define DOMAIN_USER_RID_KRBTGT 0x000001F6L
586 #define DOMAIN_USER_RID_MAX 0x000003E7L
587
588 #define DOMAIN_GROUP_RID_ADMINS 0x00000200L
589 #define DOMAIN_GROUP_RID_USERS 0x00000201L
590 #define DOMAIN_GROUP_RID_GUESTS 0x00000202L
591 #define DOMAIN_GROUP_RID_COMPUTERS 0x00000203L
592 #define DOMAIN_GROUP_RID_CONTROLLERS 0x00000204L
593 #define DOMAIN_GROUP_RID_CERT_ADMINS 0x00000205L
594 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS 0x00000206L
595 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS 0x00000207L
596 #define DOMAIN_GROUP_RID_POLICY_ADMINS 0x00000208L
597
598 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
599 #define SECURITY_MANDATORY_UNTRUSTED_RID 0x00000000L
600 #define SECURITY_MANDATORY_LOW_RID 0x00001000L
601 #define SECURITY_MANDATORY_MEDIUM_RID 0x00002000L
602 #define SECURITY_MANDATORY_HIGH_RID 0x00003000L
603 #define SECURITY_MANDATORY_SYSTEM_RID 0x00004000L
604 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID 0x00005000L
605
606 #define DOMAIN_ALIAS_RID_ADMINS 0x00000220L
607 #define DOMAIN_ALIAS_RID_USERS 0x00000221L
608 #define DOMAIN_ALIAS_RID_GUESTS 0x00000222L
609 #define DOMAIN_ALIAS_RID_POWER_USERS 0x00000223L
610
611 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS 0x00000224L
612 #define DOMAIN_ALIAS_RID_SYSTEM_OPS 0x00000225L
613 #define DOMAIN_ALIAS_RID_PRINT_OPS 0x00000226L
614 #define DOMAIN_ALIAS_RID_BACKUP_OPS 0x00000227L
615
616 #define DOMAIN_ALIAS_RID_REPLICATOR 0x00000228L
617 #define DOMAIN_ALIAS_RID_RAS_SERVERS 0x00000229L
618 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS 0x0000022AL
619 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS 0x0000022BL
620 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS 0x0000022CL
621 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS 0x0000022DL
622
623 #define DOMAIN_ALIAS_RID_MONITORING_USERS 0x0000022EL
624 #define DOMAIN_ALIAS_RID_LOGGING_USERS 0x0000022FL
625 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS 0x00000230L
626 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS 0x00000231L
627 #define DOMAIN_ALIAS_RID_DCOM_USERS 0x00000232L
628
629 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
630
631 typedef enum {
632 WinNullSid = 0,
633 WinWorldSid = 1,
634 WinLocalSid = 2,
635 WinCreatorOwnerSid = 3,
636 WinCreatorGroupSid = 4,
637 WinCreatorOwnerServerSid = 5,
638 WinCreatorGroupServerSid = 6,
639 WinNtAuthoritySid = 7,
640 WinDialupSid = 8,
641 WinNetworkSid = 9,
642 WinBatchSid = 10,
643 WinInteractiveSid = 11,
644 WinServiceSid = 12,
645 WinAnonymousSid = 13,
646 WinProxySid = 14,
647 WinEnterpriseControllersSid = 15,
648 WinSelfSid = 16,
649 WinAuthenticatedUserSid = 17,
650 WinRestrictedCodeSid = 18,
651 WinTerminalServerSid = 19,
652 WinRemoteLogonIdSid = 20,
653 WinLogonIdsSid = 21,
654 WinLocalSystemSid = 22,
655 WinLocalServiceSid = 23,
656 WinNetworkServiceSid = 24,
657 WinBuiltinDomainSid = 25,
658 WinBuiltinAdministratorsSid = 26,
659 WinBuiltinUsersSid = 27,
660 WinBuiltinGuestsSid = 28,
661 WinBuiltinPowerUsersSid = 29,
662 WinBuiltinAccountOperatorsSid = 30,
663 WinBuiltinSystemOperatorsSid = 31,
664 WinBuiltinPrintOperatorsSid = 32,
665 WinBuiltinBackupOperatorsSid = 33,
666 WinBuiltinReplicatorSid = 34,
667 WinBuiltinPreWindows2000CompatibleAccessSid = 35,
668 WinBuiltinRemoteDesktopUsersSid = 36,
669 WinBuiltinNetworkConfigurationOperatorsSid = 37,
670 WinAccountAdministratorSid = 38,
671 WinAccountGuestSid = 39,
672 WinAccountKrbtgtSid = 40,
673 WinAccountDomainAdminsSid = 41,
674 WinAccountDomainUsersSid = 42,
675 WinAccountDomainGuestsSid = 43,
676 WinAccountComputersSid = 44,
677 WinAccountControllersSid = 45,
678 WinAccountCertAdminsSid = 46,
679 WinAccountSchemaAdminsSid = 47,
680 WinAccountEnterpriseAdminsSid = 48,
681 WinAccountPolicyAdminsSid = 49,
682 WinAccountRasAndIasServersSid = 50,
683 WinNTLMAuthenticationSid = 51,
684 WinDigestAuthenticationSid = 52,
685 WinSChannelAuthenticationSid = 53,
686 WinThisOrganizationSid = 54,
687 WinOtherOrganizationSid = 55,
688 WinBuiltinIncomingForestTrustBuildersSid = 56,
689 WinBuiltinPerfMonitoringUsersSid = 57,
690 WinBuiltinPerfLoggingUsersSid = 58,
691 WinBuiltinAuthorizationAccessSid = 59,
692 WinBuiltinTerminalServerLicenseServersSid = 60,
693 WinBuiltinDCOMUsersSid = 61,
694 WinBuiltinIUsersSid = 62,
695 WinIUserSid = 63,
696 WinBuiltinCryptoOperatorsSid = 64,
697 WinUntrustedLabelSid = 65,
698 WinLowLabelSid = 66,
699 WinMediumLabelSid = 67,
700 WinHighLabelSid = 68,
701 WinSystemLabelSid = 69,
702 WinWriteRestrictedCodeSid = 70,
703 WinCreatorOwnerRightsSid = 71,
704 WinCacheablePrincipalsGroupSid = 72,
705 WinNonCacheablePrincipalsGroupSid = 73,
706 WinEnterpriseReadonlyControllersSid = 74,
707 WinAccountReadonlyControllersSid = 75,
708 WinBuiltinEventLogReadersGroup = 76
709 } WELL_KNOWN_SID_TYPE;
710
711 #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
712 #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
713 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
714 #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
715 #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
716 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
717 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
718 #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
719 #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
720 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
721 #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
722 #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
723 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
724 #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
725 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
726 #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
727 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
728 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
729 #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
730 #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
731 #define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
732 #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
733 #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
734 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
735 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
736 #define SE_GROUP_MANDATORY 1
737 #define SE_GROUP_ENABLED_BY_DEFAULT 2
738 #define SE_GROUP_ENABLED 4
739 #define SE_GROUP_OWNER 8
740 #define SE_GROUP_USE_FOR_DENY_ONLY 16
741 #define SE_GROUP_LOGON_ID 3221225472U
742 #define SE_GROUP_RESOURCE 536870912
743 #define LANG_NEUTRAL 0x00
744 #define LANG_INVARIANT 0x7f
745 #define LANG_AFRIKAANS 0x36
746 #define LANG_ALBANIAN 0x1c
747 #define LANG_ALSATIAN 0x84
748 #define LANG_AMHARIC 0x5e
749 #define LANG_ARABIC 0x01
750 #define LANG_ARMENIAN 0x2b
751 #define LANG_ASSAMESE 0x4d
752 #define LANG_AZERI 0x2c
753 #define LANG_BASHKIR 0x6d
754 #define LANG_BASQUE 0x2d
755 #define LANG_BELARUSIAN 0x23
756 #define LANG_BENGALI 0x45
757 #define LANG_BOSNIAN 0x1a
758 #define LANG_BRETON 0x7e
759 #define LANG_BULGARIAN 0x02
760 #define LANG_CATALAN 0x03
761 #define LANG_CHINESE 0x04
762 #define LANG_CHINESE_SIMPLIFIED 0x04
763 #define LANG_CORSICAN 0x83
764 #define LANG_CROATIAN 0x1a
765 #define LANG_CROATIAN 0x1a
766 #define LANG_CZECH 0x05
767 #define LANG_DANISH 0x06
768 #define LANG_DARI 0x8c
769 #define LANG_DIVEHI 0x65
770 #define LANG_DUTCH 0x13
771 #define LANG_ENGLISH 0x09
772 #define LANG_ESTONIAN 0x25
773 #define LANG_FAEROESE 0x38
774 #define LANG_FILIPINO 0x64
775 #define LANG_FINNISH 0x0b
776 #define LANG_FRENCH 0x0c
777 #define LANG_FRISIAN 0x62
778 #define LANG_GALICIAN 0x56
779 #define LANG_GEORGIAN 0x37
780 #define LANG_GERMAN 0x07
781 #define LANG_GREEK 0x08
782 #define LANG_GREENLANDIC 0x6f
783 #define LANG_GUJARATI 0x47
784 #define LANG_HAUSA 0x68
785 #define LANG_HEBREW 0x0d
786 #define LANG_HINDI 0x39
787 #define LANG_HUNGARIAN 0x0e
788 #define LANG_ICELANDIC 0x0f
789 #define LANG_IGBO 0x70
790 #define LANG_INDONESIAN 0x21
791 #define LANG_INUKTITUT 0x5d
792 #define LANG_IRISH 0x3c
793 #define LANG_ITALIAN 0x10
794 #define LANG_JAPANESE 0x11
795 #define LANG_KANNADA 0x4b
796 #define LANG_KASHMIRI 0x60
797 #define LANG_KAZAK 0x3f
798 #define LANG_KHMER 0x53
799 #define LANG_KICHE 0x86
800 #define LANG_KINYARWANDA 0x87
801 #define LANG_KONKANI 0x57
802 #define LANG_KOREAN 0x12
803 #define LANG_KYRGYZ 0x40
804 #define LANG_LAO 0x54
805 #define LANG_LATVIAN 0x26
806 #define LANG_LITHUANIAN 0x27
807 #define LANG_LOWER_SORBIAN 0x2e
808 #define LANG_LUXEMBOURGISH 0x6e
809 #define LANG_MACEDONIAN 0x2f
810 #define LANG_MALAY 0x3e
811 #define LANG_MALAYALAM 0x4c
812 #define LANG_MALTESE 0x3a
813 #define LANG_MANIPURI 0x58
814 #define LANG_MAORI 0x81
815 #define LANG_MAPUDUNGUN 0x7a
816 #define LANG_MARATHI 0x4e
817 #define LANG_MOHAWK 0x7c
818 #define LANG_MONGOLIAN 0x50
819 #define LANG_NEPALI 0x61
820 #define LANG_NORWEGIAN 0x14
821 #define LANG_OCCITAN 0x82
822 #define LANG_ORIYA 0x48
823 #define LANG_PASHTO 0x63
824 #define LANG_FARSI 0x29
825 #define LANG_POLISH 0x15
826 #define LANG_PORTUGUESE 0x16
827 #define LANG_PUNJABI 0x46
828 #define LANG_QUECHUA 0x6b
829 #define LANG_ROMANIAN 0x18
830 #define LANG_ROMANSH 0x17
831 #define LANG_RUSSIAN 0x19
832 #define LANG_SAMI 0x3b
833 #define LANG_SANSKRIT 0x4f
834 #define LANG_SERBIAN 0x1a
835 #define LANG_SOTHO 0x6c
836 #define LANG_TSWANA 0x32
837 #define LANG_SINDHI 0x59
838 #define LANG_SINHALESE 0x5b
839 #define LANG_SLOVAK 0x1b
840 #define LANG_SLOVENIAN 0x24
841 #define LANG_SPANISH 0x0a
842 #define LANG_SWAHILI 0x41
843 #define LANG_SWEDISH 0x1d
844 #define LANG_SYRIAC 0x5a
845 #define LANG_TAJIK 0x28
846 #define LANG_TAMAZIGHT 0x5f
847 #define LANG_TAMIL 0x49
848 #define LANG_TATAR 0x44
849 #define LANG_TELUGU 0x4a
850 #define LANG_THAI 0x1e
851 #define LANG_TIBETAN 0x51
852 #define LANG_TIGRIGNA 0x73
853 #define LANG_TURKISH 0x1f
854 #define LANG_TURKMEN 0x42
855 #define LANG_UIGHUR 0x80
856 #define LANG_UKRAINIAN 0x22
857 #define LANG_UPPER_SORBIAN 0x2e
858 #define LANG_URDU 0x20
859 #define LANG_UZBEK 0x43
860 #define LANG_VIETNAMESE 0x2a
861 #define LANG_WELSH 0x52
862 #define LANG_WOLOF 0x88
863 #define LANG_XHOSA 0x34
864 #define LANG_YAKUT 0x85
865 #define LANG_YI 0x78
866 #define LANG_YORUBA 0x6a
867 #define LANG_ZULU 0x35
868
869 /* FIXME: non-standard */
870 #define LANG_ESPERANTO 0x8f
871 #define LANG_WALON 0x90
872 #define LANG_CORNISH 0x91
873
874 /* FIXME: not present in the official headers */
875 #define LANG_GAELIC 0x94
876 #define LANG_SAAMI 0x3b
877 #define LANG_SUTU 0x30
878 #define LANG_TSONGA 0x31
879 #define LANG_VENDA 0x33
880
881 #define SUBLANG_CUSTOM_UNSPECIFIED 0x04
882 #define SUBLANG_CUSTOM_DEFAULT 0x03
883 #define SUBLANG_UI_CUSTOM_DEFAULT 0x05
884 #define SUBLANG_NEUTRAL 0x00
885 #define SUBLANG_SYS_DEFAULT 0x02
886 #define SUBLANG_DEFAULT 0x01
887 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
888 #define SUBLANG_ALBANIAN_ALBANIA 0x01
889 #define SUBLANG_ALSATIAN_FRANCE 0x01
890 #define SUBLANG_AMHARIC_ETHIOPIA 0x01
891 #define SUBLANG_ARABIC_ALGERIA 0x05
892 #define SUBLANG_ARABIC_BAHRAIN 0x0f
893 #define SUBLANG_ARABIC_EGYPT 0x03
894 #define SUBLANG_ARABIC_IRAQ 0x02
895 #define SUBLANG_ARABIC_JORDAN 0x0b
896 #define SUBLANG_ARABIC_KUWAIT 0x0d
897 #define SUBLANG_ARABIC_LEBANON 0x0c
898 #define SUBLANG_ARABIC_LIBYA 0x04
899 #define SUBLANG_ARABIC_MOROCCO 0x06
900 #define SUBLANG_ARABIC_OMAN 0x08
901 #define SUBLANG_ARABIC_QATAR 0x10
902 #define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
903 #define SUBLANG_ARABIC_SYRIA 0x0a
904 #define SUBLANG_ARABIC_TUNISIA 0x07
905 #define SUBLANG_ARABIC_UAE 0x0e
906 #define SUBLANG_ARABIC_YEMEN 0x09
907 #define SUBLANG_ARMENIAN_ARMENIA 0x01
908 #define SUBLANG_ASSAMESE_INDIA 0x01
909 #define SUBLANG_AZERI_CYRILLIC 0x02
910 #define SUBLANG_AZERI_LATIN 0x01
911 #define SUBLANG_BASHKIR_RUSSIA 0x01
912 #define SUBLANG_BASQUE_BASQUE 0x01
913 #define SUBLANG_BELARUSIAN_BELARUS 0x01
914 #define SUBLANG_BENGALI_BANGLADESH 0x02
915 #define SUBLANG_BENGALI_INDIA 0x01
916 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
917 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
918 #define SUBLANG_BRETON_FRANCE 0x01
919 #define SUBLANG_BULGARIAN_BULGARIA 0x01
920 #define SUBLANG_CATALAN_CATALAN 0x01
921 #define SUBLANG_CHINESE_HONGKONG 0x03
922 #define SUBLANG_CHINESE_MACAU 0x05
923 #define SUBLANG_CHINESE_SINGAPORE 0x04
924 #define SUBLANG_CHINESE_SIMPLIFIED 0x02
925 #define SUBLANG_CHINESE_TRADITIONAL 0x01
926 #define SUBLANG_CORSICAN_FRANCE 0x01
927 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
928 #define SUBLANG_CROATIAN_CROATIA 0x01
929 #define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
930 #define SUBLANG_DANISH_DENMARK 0x01
931 #define SUBLANG_DARI_AFGHANISTAN 0x01
932 #define SUBLANG_DIVEHI_MALDIVES 0x01
933 #define SUBLANG_DUTCH_BELGIAN 0x02
934 #define SUBLANG_DUTCH 0x01
935 #define SUBLANG_ENGLISH_AUS 0x03
936 #define SUBLANG_ENGLISH_BELIZE 0x0a
937 #define SUBLANG_ENGLISH_CAN 0x04
938 #define SUBLANG_ENGLISH_CARIBBEAN 0x09
939 #define SUBLANG_ENGLISH_INDIA 0x10
940 #define SUBLANG_ENGLISH_EIRE 0x06
941 #define SUBLANG_ENGLISH_IRELAND 0x06
942 #define SUBLANG_ENGLISH_JAMAICA 0x08
943 #define SUBLANG_ENGLISH_MALAYSIA 0x11
944 #define SUBLANG_ENGLISH_NZ 0x05
945 #define SUBLANG_ENGLISH_PHILIPPINES 0x0d
946 #define SUBLANG_ENGLISH_SINGAPORE 0x12
947 #define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
948 #define SUBLANG_ENGLISH_TRINIDAD 0x0b
949 #define SUBLANG_ENGLISH_UK 0x02
950 #define SUBLANG_ENGLISH_US 0x01
951 #define SUBLANG_ENGLISH_ZIMBABWE 0x0c
952 #define SUBLANG_ESTONIAN_ESTONIA 0x01
953 #define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
954 #define SUBLANG_FILIPINO_PHILIPPINES 0x01
955 #define SUBLANG_FINNISH_FINLAND 0x01
956 #define SUBLANG_FRENCH_BELGIAN 0x02
957 #define SUBLANG_FRENCH_CANADIAN 0x03
958 #define SUBLANG_FRENCH 0x01
959 #define SUBLANG_FRENCH_LUXEMBOURG 0x05
960 #define SUBLANG_FRENCH_MONACO 0x06
961 #define SUBLANG_FRENCH_SWISS 0x04
962 #define SUBLANG_FRISIAN_NETHERLANDS 0x01
963 #define SUBLANG_GALICIAN_GALICIAN 0x01
964 #define SUBLANG_GEORGIAN_GEORGIA 0x01
965 #define SUBLANG_GERMAN_AUSTRIAN 0x03
966 #define SUBLANG_GERMAN 0x01
967 #define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
968 #define SUBLANG_GERMAN_LUXEMBOURG 0x04
969 #define SUBLANG_GERMAN_SWISS 0x02
970 #define SUBLANG_GREEK_GREECE 0x01
971 #define SUBLANG_GREENLANDIC_GREENLAND 0x01
972 #define SUBLANG_GUJARATI_INDIA 0x01
973 #define SUBLANG_HAUSA_NIGERIA_LATIN 0x01
974 #define SUBLANG_HEBREW_ISRAEL 0x01
975 #define SUBLANG_HINDI_INDIA 0x01
976 #define SUBLANG_HUNGARIAN_HUNGARY 0x01
977 #define SUBLANG_ICELANDIC_ICELAND 0x01
978 #define SUBLANG_IGBO_NIGERIA 0x01
979 #define SUBLANG_INDONESIAN_INDONESIA 0x01
980 #define SUBLANG_INUKTITUT_CANADA_LATIN 0x02
981 #define SUBLANG_INUKTITUT_CANADA 0x01
982 #define SUBLANG_IRISH_IRELAND 0x02
983 #define SUBLANG_ITALIAN 0x01
984 #define SUBLANG_ITALIAN_SWISS 0x02
985 #define SUBLANG_JAPANESE_JAPAN 0x01
986 #define SUBLANG_KANNADA_INDIA 0x01
987 #define SUBLANG_KASHMIRI_INDIA 0x02
988 #define SUBLANG_KASHMIRI_SASIA 0x02
989 #define SUBLANG_KAZAK_KAZAKHSTAN 0x01
990 #define SUBLANG_KHMER_CAMBODIA 0x01
991 #define SUBLANG_KICHE_GUATEMALA 0x01
992 #define SUBLANG_KINYARWANDA_RWANDA 0x01
993 #define SUBLANG_KONKANI_INDIA 0x01
994 #define SUBLANG_KOREAN 0x01
995 #define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
996 #define SUBLANG_LAO_LAO 0x01
997 #define SUBLANG_LATVIAN_LATVIA 0x01
998 #define SUBLANG_LITHUANIAN_LITHUANIA 0x01
999 #define SUBLANG_LOWER_SORBIAN_GERMANY 0x02
1000 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
1001 #define SUBLANG_MACEDONIAN_MACEDONIA 0x01
1002 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
1003 #define SUBLANG_MALAY_MALAYSIA 0x01
1004 #define SUBLANG_MALAYALAM_INDIA 0x01
1005 #define SUBLANG_MALTESE_MALTA 0x01
1006 #define SUBLANG_MAORI_NEW_ZEALAND 0x01
1007 #define SUBLANG_MAPUDUNGUN_CHILE 0x01
1008 #define SUBLANG_MARATHI_INDIA 0x01
1009 #define SUBLANG_MOHAWK_MOHAWK 0x01
1010 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
1011 #define SUBLANG_MONGOLIAN_PRC 0x02
1012 #define SUBLANG_NEPALI_NEPAL 0x01
1013 #define SUBLANG_NEPALI_INDIA 0x02
1014 #define SUBLANG_NORWEGIAN_BOKMAL 0x01
1015 #define SUBLANG_NORWEGIAN_NYNORSK 0x02
1016 #define SUBLANG_OCCITAN_FRANCE 0x01
1017 #define SUBLANG_ORIYA_INDIA 0x01
1018 #define SUBLANG_PASHTO_AFGHANISTAN 0x01
1019 #define SUBLANG_PERSIAN_IRAN 0x01
1020 #define SUBLANG_POLISH_POLAND 0x01
1021 #define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
1022 #define SUBLANG_PORTUGUESE 0x02
1023 #define SUBLANG_PORTUGUESE_PORTUGAL 0x02
1024 #define SUBLANG_PUNJABI_INDIA 0x01
1025 #define SUBLANG_QUECHUA_BOLIVIA 0x01
1026 #define SUBLANG_QUECHUA_ECUADOR 0x02
1027 #define SUBLANG_QUECHUA_PERU 0x03
1028 #define SUBLANG_ROMANIAN_ROMANIA 0x01
1029 #define SUBLANG_ROMANSH_SWITZERLAND 0x01
1030 #define SUBLANG_RUSSIAN_RUSSIA 0x01
1031 #define SUBLANG_SAMI_INARI_FINLAND 0x09
1032 #define SUBLANG_SAMI_LULE_NORWAY 0x04
1033 #define SUBLANG_SAMI_LULE_SWEDEN 0x05
1034 #define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
1035 #define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
1036 #define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
1037 #define SUBLANG_SAMI_SKOLT_FINLAND 0x08
1038 #define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
1039 #define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
1040 #define SUBLANG_SANSKRIT_INDIA 0x01
1041 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
1042 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
1043 #define SUBLANG_SERBIAN_CROATIA 0x01
1044 #define SUBLANG_SERBIAN_CYRILLIC 0x03
1045 #define SUBLANG_SERBIAN_LATIN 0x02
1046 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
1047 #define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
1048 #define SUBLANG_SINDHI_AFGHANISTAN 0x02
1049 #define SUBLANG_SINDHI_PAKISTAN 0x01
1050 #define SUBLANG_SINHALESE_SRI_LANKA 0x01
1051 #define SUBLANG_SLOVAK_SLOVAKIA 0x01
1052 #define SUBLANG_SLOVENIAN_SLOVENIA 0x01
1053 #define SUBLANG_SPANISH_ARGENTINA 0x0b
1054 #define SUBLANG_SPANISH_BOLIVIA 0x10
1055 #define SUBLANG_SPANISH_CHILE 0x0d
1056 #define SUBLANG_SPANISH_COLOMBIA 0x09
1057 #define SUBLANG_SPANISH_COSTA_RICA 0x05
1058 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
1059 #define SUBLANG_SPANISH_ECUADOR 0x0c
1060 #define SUBLANG_SPANISH_EL_SALVADOR 0x11
1061 #define SUBLANG_SPANISH_GUATEMALA 0x04
1062 #define SUBLANG_SPANISH_HONDURAS 0x12
1063 #define SUBLANG_SPANISH_MEXICAN 0x02
1064 #define SUBLANG_SPANISH_MODERN 0x03
1065 #define SUBLANG_SPANISH_NICARAGUA 0x13
1066 #define SUBLANG_SPANISH_PANAMA 0x06
1067 #define SUBLANG_SPANISH_PARAGUAY 0x0f
1068 #define SUBLANG_SPANISH_PERU 0x0a
1069 #define SUBLANG_SPANISH_PUERTO_RICO 0x14
1070 #define SUBLANG_SPANISH 0x01
1071 #define SUBLANG_SPANISH_US 0x15
1072 #define SUBLANG_SPANISH_URUGUAY 0x0e
1073 #define SUBLANG_SPANISH_VENEZUELA 0x08
1074 #define SUBLANG_SWAHILI 0x01
1075 #define SUBLANG_SWEDISH_FINLAND 0x02
1076 #define SUBLANG_SWEDISH 0x01
1077 #define SUBLANG_SWEDISH_SWEDEN 0x01
1078 #define SUBLANG_SYRIAC 0x01
1079 #define SUBLANG_TAJIK_TAJIKISTAN 0x01
1080 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
1081 #define SUBLANG_TAMIL_INDIA 0x01
1082 #define SUBLANG_TATAR_RUSSIA 0x01
1083 #define SUBLANG_TELUGU_INDIA 0x01
1084 #define SUBLANG_THAI_THAILAND 0x01
1085 #define SUBLANG_TIBETAN_PRC 0x01
1086 #define SUBLANG_TIGRIGNA_ERITREA 0x02
1087 #define SUBLANG_TURKISH_TURKEY 0x01
1088 #define SUBLANG_TURKMEN_TURKMENISTAN 0x01
1089 #define SUBLANG_UIGHUR_PRC 0x01
1090 #define SUBLANG_UKRAINIAN_UKRAINE 0x01
1091 #define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
1092 #define SUBLANG_URDU_INDIA 0x02
1093 #define SUBLANG_URDU_PAKISTAN 0x01
1094 #define SUBLANG_UZBEK_CYRILLIC 0x02
1095 #define SUBLANG_UZBEK_LATIN 0x01
1096 #define SUBLANG_VIETNAMESE_VIETNAM 0x01
1097 #define SUBLANG_WELSH_UNITED_KINGDOM 0x01
1098 #define SUBLANG_WOLOF_SENEGAL 0x01
1099 #define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
1100 #define SUBLANG_YAKUT_RUSSIA 0x01
1101 #define SUBLANG_YI_PRC 0x01
1102 #define SUBLANG_YORUBA_NIGERIA 0x01
1103 #define SUBLANG_ZULU_SOUTH_AFRICA 0x01
1104 #define NLS_VALID_LOCALE_MASK 1048575
1105 #define SORT_DEFAULT 0
1106 #define SORT_JAPANESE_XJIS 0
1107 #define SORT_JAPANESE_UNICODE 1
1108 #define SORT_CHINESE_BIG5 0
1109 #define SORT_CHINESE_PRCP 0
1110 #define SORT_CHINESE_UNICODE 1
1111 #define SORT_CHINESE_PRC 2
1112 #define SORT_CHINESE_BOPOMOFO 3
1113 #define SORT_KOREAN_KSC 0
1114 #define SORT_KOREAN_UNICODE 1
1115 #define SORT_GERMAN_PHONE_BOOK 1
1116 #define SORT_HUNGARIAN_DEFAULT 0
1117 #define SORT_HUNGARIAN_TECHNICAL 1
1118 #define SORT_GEORGIAN_TRADITIONAL 0
1119 #define SORT_GEORGIAN_MODERN 1
1120 #define MAKELANGID(p,s) ((((WORD)(s))<<10)|(WORD)(p))
1121 #define MAKELCID(l,s) ((DWORD)((((DWORD)((WORD)(s)))<<16)|((DWORD)((WORD)(l)))))
1122 #define PRIMARYLANGID(l) ((WORD)(l)&0x3ff)
1123 #define SORTIDFROMLCID(l) ((WORD)((((DWORD)(l))&NLS_VALID_LOCALE_MASK)>>16))
1124 #define SORTVERSIONFROMLCID(l) ((WORD)((((DWORD)(l))>>20)&0xf))
1125 #define SUBLANGID(l) ((WORD)(l)>>10)
1126 #define LANGIDFROMLCID(l) ((WORD)(l))
1127 #define LANG_SYSTEM_DEFAULT MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT)
1128 #define LANG_USER_DEFAULT MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT)
1129 #define LOCALE_NEUTRAL MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT)
1130 #define ACL_REVISION 2
1131 #define ACL_REVISION_DS 4
1132 #define ACL_REVISION1 1
1133 #define ACL_REVISION2 2
1134 #define ACL_REVISION3 3
1135 #define ACL_REVISION4 4
1136 #define MIN_ACL_REVISION 2
1137 #define MAX_ACL_REVISION 4
1138 #define MINCHAR 0x80
1139 #define MAXCHAR 0x7f
1140 #define MINSHORT 0x8000
1141 #define MAXSHORT 0x7fff
1142 #define MINLONG 0x80000000
1143 #define MAXLONG 0x7fffffff
1144 #define MAXBYTE 0xff
1145 #define MAXWORD 0xffff
1146 #define MAXDWORD 0xffffffff
1147 #define PROCESSOR_INTEL_386 386
1148 #define PROCESSOR_INTEL_486 486
1149 #define PROCESSOR_INTEL_PENTIUM 586
1150 #define PROCESSOR_MIPS_R4000 4000
1151 #define PROCESSOR_ALPHA_21064 21064
1152 #define PROCESSOR_INTEL_IA64 2200
1153 #define PROCESSOR_PPC_601 601
1154 #define PROCESSOR_PPC_603 603
1155 #define PROCESSOR_PPC_604 604
1156 #define PROCESSOR_PPC_620 620
1157 #define PROCESSOR_ARCHITECTURE_INTEL 0
1158 #define PROCESSOR_ARCHITECTURE_MIPS 1
1159 #define PROCESSOR_ARCHITECTURE_ALPHA 2
1160 #define PROCESSOR_ARCHITECTURE_PPC 3
1161 #define PROCESSOR_ARCHITECTURE_SHX 4
1162 #define PROCESSOR_ARCHITECTURE_ARM 5
1163 #define PROCESSOR_ARCHITECTURE_IA64 6
1164 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
1165 #define PROCESSOR_ARCHITECTURE_MSIL 8
1166 #define PROCESSOR_ARCHITECTURE_AMD64 9
1167 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
1168 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
1169 #define PF_FLOATING_POINT_EMULATED 1
1170 #define PF_COMPARE_EXCHANGE_DOUBLE 2
1171 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
1172 #define PF_PPC_MOVEMEM_64BIT_OK 4
1173 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
1174 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
1175 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
1176 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
1177 #define PF_PAE_ENABLED 9
1178 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
1179 /* also in ddk/ntifs.h */
1180 #define FILE_ACTION_ADDED 0x00000001
1181 #define FILE_ACTION_REMOVED 0x00000002
1182 #define FILE_ACTION_MODIFIED 0x00000003
1183 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
1184 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
1185 #define FILE_ACTION_ADDED_STREAM 0x00000006
1186 #define FILE_ACTION_REMOVED_STREAM 0x00000007
1187 #define FILE_ACTION_MODIFIED_STREAM 0x00000008
1188 #define FILE_ACTION_REMOVED_BY_DELETE 0x00000009
1189 #define FILE_ACTION_ID_NOT_TUNNELLED 0x0000000A
1190 #define FILE_ACTION_TUNNELLED_ID_COLLISION 0x0000000B
1191 /* end ntifs.h */
1192 #define HEAP_NO_SERIALIZE 1
1193 #define HEAP_GROWABLE 2
1194 #define HEAP_GENERATE_EXCEPTIONS 4
1195 #define HEAP_ZERO_MEMORY 8
1196 #define HEAP_REALLOC_IN_PLACE_ONLY 16
1197 #define HEAP_TAIL_CHECKING_ENABLED 32
1198 #define HEAP_FREE_CHECKING_ENABLED 64
1199 #define HEAP_DISABLE_COALESCE_ON_FREE 128
1200 #define HEAP_CREATE_ALIGN_16 0x10000
1201 #define HEAP_CREATE_ENABLE_TRACING 0x20000
1202 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
1203 #define HEAP_MAXIMUM_TAG 0xFFF
1204 #define HEAP_PSEUDO_TAG_FLAG 0x8000
1205 #define HEAP_TAG_SHIFT 16
1206 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16)))
1207
1208 #define KEY_QUERY_VALUE 1
1209 #define KEY_SET_VALUE 2
1210 #define KEY_CREATE_SUB_KEY 4
1211 #define KEY_ENUMERATE_SUB_KEYS 8
1212 #define KEY_NOTIFY 16
1213 #define KEY_CREATE_LINK 32
1214 #define KEY_WOW64_64KEY 0x00000100
1215 #define KEY_WOW64_32KEY 0x00000200
1216 #define KEY_WOW64_RES 0x00000300
1217
1218 #define KEY_WRITE 0x20006
1219 #define KEY_EXECUTE 0x20019
1220 #define KEY_READ 0x20019
1221 #define KEY_ALL_ACCESS 0xf003f
1222 #define REG_WHOLE_HIVE_VOLATILE 1
1223 #define REG_REFRESH_HIVE 2
1224 #define REG_NO_LAZY_FLUSH 4
1225 #define REG_OPTION_RESERVED 0
1226 #define REG_OPTION_NON_VOLATILE 0
1227 #define REG_OPTION_VOLATILE 1
1228 #define REG_OPTION_CREATE_LINK 2
1229 #define REG_OPTION_BACKUP_RESTORE 4
1230 #define REG_OPTION_OPEN_LINK 8
1231 #define REG_LEGAL_OPTION 15
1232 #define OWNER_SECURITY_INFORMATION 1
1233 #define GROUP_SECURITY_INFORMATION 2
1234 #define DACL_SECURITY_INFORMATION 4
1235 #define SACL_SECURITY_INFORMATION 8
1236 #define PROTECTED_DACL_SECURITY_INFORMATION 0x80000000
1237 #define PROTECTED_SACL_SECURITY_INFORMATION 0x40000000
1238 #define UNPROTECTED_DACL_SECURITY_INFORMATION 0x20000000
1239 #define UNPROTECTED_SACL_SECURITY_INFORMATION 0x10000000
1240 #define MAXIMUM_PROCESSORS 32
1241 #define PAGE_NOACCESS 0x0001
1242 #define PAGE_READONLY 0x0002
1243 #define PAGE_READWRITE 0x0004
1244 #define PAGE_WRITECOPY 0x0008
1245 #define PAGE_EXECUTE 0x0010
1246 #define PAGE_EXECUTE_READ 0x0020
1247 #define PAGE_EXECUTE_READWRITE 0x0040
1248 #define PAGE_EXECUTE_WRITECOPY 0x0080
1249 #define PAGE_GUARD 0x0100
1250 #define PAGE_NOCACHE 0x0200
1251 #define PAGE_WRITECOMBINE 0x0400
1252 #define MEM_COMMIT 0x1000
1253 #define MEM_RESERVE 0x2000
1254 #define MEM_DECOMMIT 0x4000
1255 #define MEM_RELEASE 0x8000
1256 #define MEM_FREE 0x10000
1257 #define MEM_PRIVATE 0x20000
1258 #define MEM_MAPPED 0x40000
1259 #define MEM_RESET 0x80000
1260 #define MEM_TOP_DOWN 0x100000
1261 #define MEM_WRITE_WATCH 0x200000 /* 98/Me */
1262 #define MEM_PHYSICAL 0x400000
1263 #define MEM_4MB_PAGES 0x80000000
1264 #define MEM_IMAGE SEC_IMAGE
1265 #define SEC_NO_CHANGE 0x00400000
1266 #define SEC_FILE 0x00800000
1267 #define SEC_IMAGE 0x01000000
1268 #define SEC_VLM 0x02000000
1269 #define SEC_RESERVE 0x04000000
1270 #define SEC_COMMIT 0x08000000
1271 #define SEC_NOCACHE 0x10000000
1272 #define SECTION_EXTEND_SIZE 16
1273 #define SECTION_MAP_READ 4
1274 #define SECTION_MAP_WRITE 2
1275 #define SECTION_QUERY 1
1276 #define SECTION_MAP_EXECUTE 8
1277 #define SECTION_ALL_ACCESS 0xf001f
1278 #define WRITE_WATCH_FLAG_RESET 0x01
1279 #define MESSAGE_RESOURCE_UNICODE 1
1280 #define RTL_CRITSECT_TYPE 0
1281 #define RTL_RESOURCE_TYPE 1
1282 /* Also in winddk.h */
1283 #if !defined(__GNUC__)
1284 #define FIELD_OFFSET(t,f) ((LONG)(LONG_PTR)&(((t*) 0)->f))
1285 #else
1286 #define FIELD_OFFSET(t,f) ((LONG)__builtin_offsetof(t,f))
1287 #endif
1288 #ifndef CONTAINING_RECORD
1289 #define CONTAINING_RECORD(address, type, field) \
1290 ((type *)(((ULONG_PTR)address) - (ULONG_PTR)(&(((type *)0)->field))))
1291 #endif
1292 /* end winddk.h */
1293 #define IMAGE_SIZEOF_FILE_HEADER 20
1294 #define IMAGE_FILE_RELOCS_STRIPPED 1
1295 #define IMAGE_FILE_EXECUTABLE_IMAGE 2
1296 #define IMAGE_FILE_LINE_NUMS_STRIPPED 4
1297 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 8
1298 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 16
1299 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 32
1300 #define IMAGE_FILE_BYTES_REVERSED_LO 128
1301 #define IMAGE_FILE_32BIT_MACHINE 256
1302 #define IMAGE_FILE_DEBUG_STRIPPED 512
1303 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 1024
1304 #define IMAGE_FILE_NET_RUN_FROM_SWAP 2048
1305 #define IMAGE_FILE_SYSTEM 4096
1306 #define IMAGE_FILE_DLL 8192
1307 #define IMAGE_FILE_UP_SYSTEM_ONLY 16384
1308 #define IMAGE_FILE_BYTES_REVERSED_HI 32768
1309 #define IMAGE_FILE_MACHINE_UNKNOWN 0
1310
1311 #define IMAGE_FILE_MACHINE_AM33 0x1d3
1312 #define IMAGE_FILE_MACHINE_AMD64 0x8664
1313 #define IMAGE_FILE_MACHINE_ARM 0x1c0
1314 #define IMAGE_FILE_MACHINE_EBC 0xebc
1315 #define IMAGE_FILE_MACHINE_I386 0x14c
1316 #define IMAGE_FILE_MACHINE_IA64 0x200
1317 #define IMAGE_FILE_MACHINE_M32R 0x9041
1318 #define IMAGE_FILE_MACHINE_MIPS16 0x266
1319 #define IMAGE_FILE_MACHINE_MIPSFPU 0x366
1320 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x466
1321 #define IMAGE_FILE_MACHINE_POWERPC 0x1f0
1322 #define IMAGE_FILE_MACHINE_POWERPCFP 0x1f1
1323 #define IMAGE_FILE_MACHINE_R4000 0x166
1324 #define IMAGE_FILE_MACHINE_SH3 0x1a2
1325 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
1326 #define IMAGE_FILE_MACHINE_SH3DSP 0x1a3
1327 #define IMAGE_FILE_MACHINE_SH4 0x1a6
1328 #define IMAGE_FILE_MACHINE_SH5 0x1a8
1329 #define IMAGE_FILE_MACHINE_THUMB 0x1c2
1330 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x169
1331 #define IMAGE_FILE_MACHINE_R3000 0x162
1332 #define IMAGE_FILE_MACHINE_R10000 0x168
1333 #define IMAGE_FILE_MACHINE_ALPHA 0x184
1334 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
1335 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
1336 #define IMAGE_FILE_MACHINE_CEE 0xC0EE
1337 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
1338 #define IMAGE_FILE_MACHINE_CEF 0x0CEF
1339
1340 #define IMAGE_DOS_SIGNATURE 0x5A4D
1341 #define IMAGE_OS2_SIGNATURE 0x454E
1342 #define IMAGE_OS2_SIGNATURE_LE 0x454C
1343 #define IMAGE_VXD_SIGNATURE 0x454C
1344 #define IMAGE_NT_SIGNATURE 0x00004550
1345 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
1346 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
1347 #ifdef _WIN64
1348 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
1349 #else
1350 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
1351 #endif
1352 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
1353 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
1354 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
1355 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
1356 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
1357 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER 224
1358 #define IMAGE_SIZEOF_SHORT_NAME 8
1359 #define IMAGE_SIZEOF_SECTION_HEADER 40
1360 #define IMAGE_SIZEOF_SYMBOL 18
1361 #define IMAGE_SIZEOF_AUX_SYMBOL 18
1362 #define IMAGE_SIZEOF_RELOCATION 10
1363 #define IMAGE_SIZEOF_BASE_RELOCATION 8
1364 #define IMAGE_SIZEOF_LINENUMBER 6
1365 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
1366 #define SIZEOF_RFPO_DATA 16
1367
1368 #define IMAGE_SUBSYSTEM_UNKNOWN 0
1369 #define IMAGE_SUBSYSTEM_NATIVE 1
1370 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
1371 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
1372 #define IMAGE_SUBSYSTEM_OS2_CUI 5
1373 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
1374 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8
1375 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
1376 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
1377 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
1378 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
1379 #define IMAGE_SUBSYSTEM_EFI_ROM 13
1380 #define IMAGE_SUBSYSTEM_XBOX 14
1381
1382 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
1383 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
1384 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
1385 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
1386 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
1387 #define IMAGE_FIRST_SECTION(h) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)h+FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader)+((PIMAGE_NT_HEADERS)(h))->FileHeader.SizeOfOptionalHeader))
1388 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
1389 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
1390 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
1391 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
1392 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
1393 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
1394 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
1395 #define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
1396 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
1397 #define IMAGE_DIRECTORY_ENTRY_TLS 9
1398 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
1399 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
1400 #define IMAGE_DIRECTORY_ENTRY_IAT 12
1401 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
1402 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
1403 #define IMAGE_SCN_TYPE_REG 0
1404 #define IMAGE_SCN_TYPE_DSECT 1
1405 //#define IMAGE_SCN_TYPE_NOLOAD 2
1406 #define IMAGE_SCN_TYPE_GROUP 4
1407 #define IMAGE_SCN_TYPE_NO_PAD 8
1408 #define IMAGE_SCN_CNT_CODE 32
1409 #define IMAGE_SCN_CNT_INITIALIZED_DATA 64
1410 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 128
1411 #define IMAGE_SCN_LNK_OTHER 256
1412 #define IMAGE_SCN_LNK_INFO 512
1413 #define IMAGE_SCN_LNK_REMOVE 2048
1414 #define IMAGE_SCN_LNK_COMDAT 4096
1415 #define IMAGE_SCN_MEM_FARDATA 0x8000
1416 #define IMAGE_SCN_MEM_PURGEABLE 0x20000
1417 #define IMAGE_SCN_MEM_16BIT 0x20000
1418 #define IMAGE_SCN_MEM_LOCKED 0x40000
1419 #define IMAGE_SCN_MEM_PRELOAD 0x80000
1420 #define IMAGE_SCN_ALIGN_1BYTES 0x100000
1421 #define IMAGE_SCN_ALIGN_2BYTES 0x200000
1422 #define IMAGE_SCN_ALIGN_4BYTES 0x300000
1423 #define IMAGE_SCN_ALIGN_8BYTES 0x400000
1424 #define IMAGE_SCN_ALIGN_16BYTES 0x500000
1425 #define IMAGE_SCN_ALIGN_32BYTES 0x600000
1426 #define IMAGE_SCN_ALIGN_64BYTES 0x700000
1427 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x1000000
1428 #define IMAGE_SCN_MEM_DISCARDABLE 0x2000000
1429 #define IMAGE_SCN_MEM_NOT_CACHED 0x4000000
1430 #define IMAGE_SCN_MEM_NOT_PAGED 0x8000000
1431 #define IMAGE_SCN_MEM_SHARED 0x10000000
1432 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
1433 #define IMAGE_SCN_MEM_READ 0x40000000
1434 #define IMAGE_SCN_MEM_WRITE 0x80000000
1435 #define IMAGE_SYM_UNDEFINED 0
1436 #define IMAGE_SYM_ABSOLUTE (-1)
1437 #define IMAGE_SYM_DEBUG (-2)
1438 #define IMAGE_SYM_TYPE_NULL 0
1439 #define IMAGE_SYM_TYPE_VOID 1
1440 #define IMAGE_SYM_TYPE_CHAR 2
1441 #define IMAGE_SYM_TYPE_SHORT 3
1442 #define IMAGE_SYM_TYPE_INT 4
1443 #define IMAGE_SYM_TYPE_LONG 5
1444 #define IMAGE_SYM_TYPE_FLOAT 6
1445 #define IMAGE_SYM_TYPE_DOUBLE 7
1446 #define IMAGE_SYM_TYPE_STRUCT 8
1447 #define IMAGE_SYM_TYPE_UNION 9
1448 #define IMAGE_SYM_TYPE_ENUM 10
1449 #define IMAGE_SYM_TYPE_MOE 11
1450 #define IMAGE_SYM_TYPE_BYTE 12
1451 #define IMAGE_SYM_TYPE_WORD 13
1452 #define IMAGE_SYM_TYPE_UINT 14
1453 #define IMAGE_SYM_TYPE_DWORD 15
1454 #define IMAGE_SYM_TYPE_PCODE 32768
1455 #define IMAGE_SYM_DTYPE_NULL 0
1456 #define IMAGE_SYM_DTYPE_POINTER 1
1457 #define IMAGE_SYM_DTYPE_FUNCTION 2
1458 #define IMAGE_SYM_DTYPE_ARRAY 3
1459 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (-1)
1460 #define IMAGE_SYM_CLASS_NULL 0
1461 #define IMAGE_SYM_CLASS_AUTOMATIC 1
1462 #define IMAGE_SYM_CLASS_EXTERNAL 2
1463 #define IMAGE_SYM_CLASS_STATIC 3
1464 #define IMAGE_SYM_CLASS_REGISTER 4
1465 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 5
1466 #define IMAGE_SYM_CLASS_LABEL 6
1467 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 7
1468 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 8
1469 #define IMAGE_SYM_CLASS_ARGUMENT 9
1470 #define IMAGE_SYM_CLASS_STRUCT_TAG 10
1471 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 11
1472 #define IMAGE_SYM_CLASS_UNION_TAG 12
1473 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 13
1474 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 14
1475 #define IMAGE_SYM_CLASS_ENUM_TAG 15
1476 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 16
1477 #define IMAGE_SYM_CLASS_REGISTER_PARAM 17
1478 #define IMAGE_SYM_CLASS_BIT_FIELD 18
1479 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 68
1480 #define IMAGE_SYM_CLASS_BLOCK 100
1481 #define IMAGE_SYM_CLASS_FUNCTION 101
1482 #define IMAGE_SYM_CLASS_END_OF_STRUCT 102
1483 #define IMAGE_SYM_CLASS_FILE 103
1484 #define IMAGE_SYM_CLASS_SECTION 104
1485 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 105
1486 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
1487 #define IMAGE_COMDAT_SELECT_ANY 2
1488 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
1489 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
1490 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
1491 #define IMAGE_COMDAT_SELECT_LARGEST 6
1492 #define IMAGE_COMDAT_SELECT_NEWEST 7
1493 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
1494 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
1495 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
1496 #define IMAGE_REL_I386_ABSOLUTE 0
1497 #define IMAGE_REL_I386_DIR16 1
1498 #define IMAGE_REL_I386_REL16 2
1499 #define IMAGE_REL_I386_DIR32 6
1500 #define IMAGE_REL_I386_DIR32NB 7
1501 #define IMAGE_REL_I386_SEG12 9
1502 #define IMAGE_REL_I386_SECTION 10
1503 #define IMAGE_REL_I386_SECREL 11
1504 #define IMAGE_REL_I386_REL32 20
1505 #define IMAGE_REL_MIPS_ABSOLUTE 0
1506 #define IMAGE_REL_MIPS_REFHALF 1
1507 #define IMAGE_REL_MIPS_REFWORD 2
1508 #define IMAGE_REL_MIPS_JMPADDR 3
1509 #define IMAGE_REL_MIPS_REFHI 4
1510 #define IMAGE_REL_MIPS_REFLO 5
1511 #define IMAGE_REL_MIPS_GPREL 6
1512 #define IMAGE_REL_MIPS_LITERAL 7
1513 #define IMAGE_REL_MIPS_SECTION 10
1514 #define IMAGE_REL_MIPS_SECREL 11
1515 #define IMAGE_REL_MIPS_SECRELLO 12
1516 #define IMAGE_REL_MIPS_SECRELHI 13
1517 #define IMAGE_REL_MIPS_REFWORDNB 34
1518 #define IMAGE_REL_MIPS_PAIR 35
1519 #define IMAGE_REL_ALPHA_ABSOLUTE 0
1520 #define IMAGE_REL_ALPHA_REFLONG 1
1521 #define IMAGE_REL_ALPHA_REFQUAD 2
1522 #define IMAGE_REL_ALPHA_GPREL32 3
1523 #define IMAGE_REL_ALPHA_LITERAL 4
1524 #define IMAGE_REL_ALPHA_LITUSE 5
1525 #define IMAGE_REL_ALPHA_GPDISP 6
1526 #define IMAGE_REL_ALPHA_BRADDR 7
1527 #define IMAGE_REL_ALPHA_HINT 8
1528 #define IMAGE_REL_ALPHA_INLINE_REFLONG 9
1529 #define IMAGE_REL_ALPHA_REFHI 10
1530 #define IMAGE_REL_ALPHA_REFLO 11
1531 #define IMAGE_REL_ALPHA_PAIR 12
1532 #define IMAGE_REL_ALPHA_MATCH 13
1533 #define IMAGE_REL_ALPHA_SECTION 14
1534 #define IMAGE_REL_ALPHA_SECREL 15
1535 #define IMAGE_REL_ALPHA_REFLONGNB 16
1536 #define IMAGE_REL_ALPHA_SECRELLO 17
1537 #define IMAGE_REL_ALPHA_SECRELHI 18
1538 #define IMAGE_REL_PPC_ABSOLUTE 0
1539 #define IMAGE_REL_PPC_ADDR64 1
1540 #define IMAGE_REL_PPC_ADDR32 2
1541 #define IMAGE_REL_PPC_ADDR24 3
1542 #define IMAGE_REL_PPC_ADDR16 4
1543 #define IMAGE_REL_PPC_ADDR14 5
1544 #define IMAGE_REL_PPC_REL24 6
1545 #define IMAGE_REL_PPC_REL14 7
1546 #define IMAGE_REL_PPC_TOCREL16 8
1547 #define IMAGE_REL_PPC_TOCREL14 9
1548 #define IMAGE_REL_PPC_ADDR32NB 10
1549 #define IMAGE_REL_PPC_SECREL 11
1550 #define IMAGE_REL_PPC_SECTION 12
1551 #define IMAGE_REL_PPC_IFGLUE 13
1552 #define IMAGE_REL_PPC_IMGLUE 14
1553 #define IMAGE_REL_PPC_SECREL16 15
1554 #define IMAGE_REL_PPC_REFHI 16
1555 #define IMAGE_REL_PPC_REFLO 17
1556 #define IMAGE_REL_PPC_PAIR 18
1557 #define IMAGE_REL_PPC_TYPEMASK 255
1558 #define IMAGE_REL_PPC_NEG 256
1559 #define IMAGE_REL_PPC_BRTAKEN 512
1560 #define IMAGE_REL_PPC_BRNTAKEN 1024
1561 #define IMAGE_REL_PPC_TOCDEFN 2048
1562 #define IMAGE_REL_BASED_ABSOLUTE 0
1563 #define IMAGE_REL_BASED_HIGH 1
1564 #define IMAGE_REL_BASED_LOW 2
1565 #define IMAGE_REL_BASED_HIGHLOW 3
1566 #define IMAGE_REL_BASED_HIGHADJ 4
1567 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
1568 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
1569 #define IMAGE_REL_BASED_IA64_IMM64 9
1570 #define IMAGE_REL_BASED_DIR64 10
1571 #define IMAGE_ARCHIVE_START_SIZE 8
1572 #define IMAGE_ARCHIVE_START "!<arch>\n"
1573 #define IMAGE_ARCHIVE_END "`\n"
1574 #define IMAGE_ARCHIVE_PAD "\n"
1575 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
1576 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
1577 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
1578 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
1579 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
1580 #define IMAGE_DEBUG_TYPE_COFF 1
1581 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
1582 #define IMAGE_DEBUG_TYPE_FPO 3
1583 #define IMAGE_DEBUG_TYPE_MISC 4
1584 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
1585 #define IMAGE_DEBUG_TYPE_FIXUP 6
1586 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
1587 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
1588 #define FRAME_FPO 0
1589 #define FRAME_TRAP 1
1590 #define FRAME_TSS 2
1591 #define FRAME_NONFPO 3
1592 #define IMAGE_DEBUG_MISC_EXENAME 1
1593 #define N_BTMASK 0x000F
1594 #define N_TMASK 0x0030
1595 #define N_TMASK1 0x00C0
1596 #define N_TMASK2 0x00F0
1597 #define N_BTSHFT 4
1598 #define N_TSHIFT 2
1599 #define IS_TEXT_UNICODE_ASCII16 1
1600 #define IS_TEXT_UNICODE_REVERSE_ASCII16 16
1601 #define IS_TEXT_UNICODE_STATISTICS 2
1602 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 32
1603 #define IS_TEXT_UNICODE_CONTROLS 4
1604 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 64
1605 #define IS_TEXT_UNICODE_SIGNATURE 8
1606 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 128
1607 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 256
1608 #define IS_TEXT_UNICODE_ODD_LENGTH 512
1609 #define IS_TEXT_UNICODE_NULL_BYTES 4096
1610 #define IS_TEXT_UNICODE_UNICODE_MASK 15
1611 #define IS_TEXT_UNICODE_REVERSE_MASK 240
1612 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 3840
1613 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 61440
1614 #define SERVICE_KERNEL_DRIVER 1
1615 #define SERVICE_FILE_SYSTEM_DRIVER 2
1616 #define SERVICE_ADAPTER 4
1617 #define SERVICE_RECOGNIZER_DRIVER 8
1618 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER|SERVICE_FILE_SYSTEM_DRIVER|SERVICE_RECOGNIZER_DRIVER)
1619 #define SERVICE_WIN32_OWN_PROCESS 16
1620 #define SERVICE_WIN32_SHARE_PROCESS 32
1621 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS|SERVICE_WIN32_SHARE_PROCESS)
1622 #define SERVICE_INTERACTIVE_PROCESS 256
1623 #define SERVICE_TYPE_ALL (SERVICE_WIN32|SERVICE_ADAPTER|SERVICE_DRIVER|SERVICE_INTERACTIVE_PROCESS)
1624 #define SERVICE_BOOT_START 0
1625 #define SERVICE_SYSTEM_START 1
1626 #define SERVICE_AUTO_START 2
1627 #define SERVICE_DEMAND_START 3
1628 #define SERVICE_DISABLED 4
1629 #define SERVICE_ERROR_IGNORE 0
1630 #define SERVICE_ERROR_NORMAL 1
1631 #define SERVICE_ERROR_SEVERE 2
1632 #define SERVICE_ERROR_CRITICAL 3
1633 #define SE_OWNER_DEFAULTED 1
1634 #define SE_GROUP_DEFAULTED 2
1635 #define SE_DACL_PRESENT 4
1636 #define SE_DACL_DEFAULTED 8
1637 #define SE_SACL_PRESENT 16
1638 #define SE_SACL_DEFAULTED 32
1639 #define SE_DACL_AUTO_INHERIT_REQ 256
1640 #define SE_SACL_AUTO_INHERIT_REQ 512
1641 #define SE_DACL_AUTO_INHERITED 1024
1642 #define SE_SACL_AUTO_INHERITED 2048
1643 #define SE_DACL_PROTECTED 4096
1644 #define SE_SACL_PROTECTED 8192
1645 #define SE_RM_CONTROL_VALID 0x4000
1646 #define SE_SELF_RELATIVE 0x8000
1647 #define SECURITY_DESCRIPTOR_MIN_LENGTH 20
1648 #define SECURITY_DESCRIPTOR_REVISION 1
1649 #define SECURITY_DESCRIPTOR_REVISION1 1
1650 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT 1
1651 #define SE_PRIVILEGE_ENABLED 2
1652 #define SE_PRIVILEGE_USED_FOR_ACCESS 0x80000000
1653 #define PRIVILEGE_SET_ALL_NECESSARY 1
1654 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
1655 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
1656 #define SECURITY_DYNAMIC_TRACKING TRUE
1657 #define SECURITY_STATIC_TRACKING FALSE
1658 /* also in ddk/ntifs.h */
1659 #define TOKEN_ASSIGN_PRIMARY (0x0001)
1660 #define TOKEN_DUPLICATE (0x0002)
1661 #define TOKEN_IMPERSONATE (0x0004)
1662 #define TOKEN_QUERY (0x0008)
1663 #define TOKEN_QUERY_SOURCE (0x0010)
1664 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
1665 #define TOKEN_ADJUST_GROUPS (0x0040)
1666 #define TOKEN_ADJUST_DEFAULT (0x0080)
1667 #define TOKEN_ADJUST_SESSIONID (0x0100)
1668 #define TOKEN_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
1669 TOKEN_ASSIGN_PRIMARY |\
1670 TOKEN_DUPLICATE |\
1671 TOKEN_IMPERSONATE |\
1672 TOKEN_QUERY |\
1673 TOKEN_QUERY_SOURCE |\
1674 TOKEN_ADJUST_PRIVILEGES |\
1675 TOKEN_ADJUST_GROUPS |\
1676 TOKEN_ADJUST_DEFAULT |\
1677 TOKEN_ADJUST_SESSIONID)
1678 #define TOKEN_READ (STANDARD_RIGHTS_READ |\
1679 TOKEN_QUERY)
1680 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
1681 TOKEN_ADJUST_PRIVILEGES |\
1682 TOKEN_ADJUST_GROUPS |\
1683 TOKEN_ADJUST_DEFAULT)
1684
1685 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
1686 #define TOKEN_SOURCE_LENGTH 8
1687 /* end ddk/ntifs.h */
1688 #define DLL_PROCESS_DETACH 0
1689 #define DLL_PROCESS_ATTACH 1
1690 #define DLL_THREAD_ATTACH 2
1691 #define DLL_THREAD_DETACH 3
1692 #ifdef __WINESRC__
1693 #define DLL_WINE_PREATTACH 8 /* Never called, but defined for compatibility with Wine source */
1694 #endif
1695 #define TAPE_ABSOLUTE_POSITION 0
1696 #define TAPE_LOGICAL_POSITION 1
1697 #define TAPE_PSEUDO_LOGICAL_POSITION 2
1698 #define TAPE_REWIND 0
1699 #define TAPE_ABSOLUTE_BLOCK 1
1700 #define TAPE_LOGICAL_BLOCK 2
1701 #define TAPE_PSEUDO_LOGICAL_BLOCK 3
1702 #define TAPE_SPACE_END_OF_DATA 4
1703 #define TAPE_SPACE_RELATIVE_BLOCKS 5
1704 #define TAPE_SPACE_FILEMARKS 6
1705 #define TAPE_SPACE_SEQUENTIAL_FMKS 7
1706 #define TAPE_SPACE_SETMARKS 8
1707 #define TAPE_SPACE_SEQUENTIAL_SMKS 9
1708 #define TAPE_DRIVE_FIXED 1
1709 #define TAPE_DRIVE_SELECT 2
1710 #define TAPE_DRIVE_INITIATOR 4
1711 #define TAPE_DRIVE_ERASE_SHORT 16
1712 #define TAPE_DRIVE_ERASE_LONG 32
1713 #define TAPE_DRIVE_ERASE_BOP_ONLY 64
1714 #define TAPE_DRIVE_ERASE_IMMEDIATE 128
1715 #define TAPE_DRIVE_TAPE_CAPACITY 256
1716 #define TAPE_DRIVE_TAPE_REMAINING 512
1717 #define TAPE_DRIVE_FIXED_BLOCK 1024
1718 #define TAPE_DRIVE_VARIABLE_BLOCK 2048
1719 #define TAPE_DRIVE_WRITE_PROTECT 4096
1720 #define TAPE_DRIVE_EOT_WZ_SIZE 8192
1721 #define TAPE_DRIVE_ECC 0x10000
1722 #define TAPE_DRIVE_COMPRESSION 0x20000
1723 #define TAPE_DRIVE_PADDING 0x40000
1724 #define TAPE_DRIVE_REPORT_SMKS 0x80000
1725 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x100000
1726 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x200000
1727 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x400000
1728 #define TAPE_DRIVE_EJECT_MEDIA 0x1000000
1729 #define TAPE_DRIVE_CLEAN_REQUESTS 0x2000000
1730 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x4000000
1731 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
1732 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
1733 #define TAPE_DRIVE_TENSION 0x80000002
1734 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
1735 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
1736 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
1737 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
1738 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
1739 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
1740 #define TAPE_DRIVE_SET_ECC 0x80000100
1741 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
1742 #define TAPE_DRIVE_SET_PADDING 0x80000400
1743 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
1744 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
1745 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
1746 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
1747 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
1748 #define TAPE_DRIVE_END_OF_DATA 0x80010000
1749 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
1750 #define TAPE_DRIVE_FILEMARKS 0x80040000
1751 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
1752 #define TAPE_DRIVE_SETMARKS 0x80100000
1753 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
1754 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
1755 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
1756 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
1757 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
1758 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
1759 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
1760 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
1761 #define TAPE_DRIVE_FORMAT 0xA0000000
1762 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
1763 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
1764 #define TAPE_FIXED_PARTITIONS 0
1765 #define TAPE_INITIATOR_PARTITIONS 2
1766 #define TAPE_SELECT_PARTITIONS 1
1767 #define TAPE_FILEMARKS 1
1768 #define TAPE_LONG_FILEMARKS 3
1769 #define TAPE_SETMARKS 0
1770 #define TAPE_SHORT_FILEMARKS 2
1771 #define TAPE_ERASE_LONG 1
1772 #define TAPE_ERASE_SHORT 0
1773 #define TAPE_LOAD 0
1774 #define TAPE_UNLOAD 1
1775 #define TAPE_TENSION 2
1776 #define TAPE_LOCK 3
1777 #define TAPE_UNLOCK 4
1778 #define TAPE_FORMAT 5
1779 #if (_WIN32_WINNT >= 0x0500)
1780 #define VER_MINORVERSION 0x0000001
1781 #define VER_MAJORVERSION 0x0000002
1782 #define VER_BUILDNUMBER 0x0000004
1783 #define VER_PLATFORMID 0x0000008
1784 #define VER_SERVICEPACKMINOR 0x0000010
1785 #define VER_SERVICEPACKMAJOR 0x0000020
1786 #define VER_SUITENAME 0x0000040
1787 #define VER_PRODUCT_TYPE 0x0000080
1788 #define VER_EQUAL 1
1789 #define VER_GREATER 2
1790 #define VER_GREATER_EQUAL 3
1791 #define VER_LESS 4
1792 #define VER_LESS_EQUAL 5
1793 #define VER_AND 6
1794 #define VER_OR 7
1795 #endif
1796 #define VER_PLATFORM_WIN32s 0
1797 #define VER_PLATFORM_WIN32_WINDOWS 1
1798 #define VER_PLATFORM_WIN32_NT 2
1799 #define VER_NT_WORKSTATION 1
1800 #define VER_NT_DOMAIN_CONTROLLER 2
1801 #define VER_NT_SERVER 3
1802 #define VER_SUITE_SMALLBUSINESS 1
1803 #define VER_SUITE_ENTERPRISE 2
1804 #define VER_SUITE_BACKOFFICE 4
1805 #define VER_SUITE_TERMINAL 16
1806 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 32
1807 #define VER_SUITE_EMBEDDEDNT 64
1808 #define VER_SUITE_DATACENTER 128
1809 #define VER_SUITE_SINGLEUSERTS 256
1810 #define VER_SUITE_PERSONAL 512
1811 #define VER_SUITE_BLADE 1024
1812 #define WT_EXECUTEDEFAULT 0x00000000
1813 #define WT_EXECUTEINIOTHREAD 0x00000001
1814 #define WT_EXECUTEINUITHREAD 0x00000002
1815 #define WT_EXECUTEINWAITTHREAD 0x00000004
1816 #define WT_EXECUTEONLYONCE 0x00000008
1817 #define WT_EXECUTELONGFUNCTION 0x00000010
1818 #define WT_EXECUTEINTIMERTHREAD 0x00000020
1819 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
1820 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
1821 #define WT_TRANSFER_IMPERSONATION 0x00000100
1822 #define WT_SET_MAX_THREADPOOL_THREADS(flags,limit) ((flags)|=(limit)<<16)
1823 typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID);
1824 #if (_WIN32_WINNT >= 0x0501)
1825 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
1826 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
1827 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
1828 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
1829 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
1830 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
1831 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
1832 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
1833 #endif /* (_WIN32_WINNT >= 0x0501) */
1834 #define BTYPE(x) ((x)&N_BTMASK)
1835 #define ISPTR(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT))
1836 #define ISFCN(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION<<N_BTSHFT))
1837 #define ISARY(x) (((x)&N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY<<N_BTSHFT))
1838 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG||(x)==IMAGE_SYM_CLASS_UNION_TAG||(x)==IMAGE_SYM_CLASS_ENUM_TAG)
1839 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
1840 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
1841 #define TLS_MINIMUM_AVAILABLE 64
1842 #define FLS_MAXIMUM_AVAILABLE 128
1843 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
1844 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE 16384
1845 #define IO_REPARSE_TAG_RESERVED_ZERO 0
1846 #define IO_REPARSE_TAG_RESERVED_ONE 1
1847 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
1848 #define IsReparseTagMicrosoft(x) ((x)&0x80000000)
1849 #define IsReparseTagHighLatency(x) ((x)&0x40000000)
1850 #define IsReparseTagNameSurrogate(x) ((x)&0x20000000)
1851 #define IO_REPARSE_TAG_VALID_VALUES 0xE000FFFF
1852 #define IsReparseTagValid(x) (!((x)&~IO_REPARSE_TAG_VALID_VALUES)&&((x)>IO_REPARSE_TAG_RESERVED_RANGE))
1853 #define IO_REPARSE_TAG_SYMBOLIC_LINK IO_REPARSE_TAG_RESERVED_ZERO
1854 #define IO_REPARSE_TAG_MOUNT_POINT 0xA0000003
1855 #define IO_REPARSE_TAG_SYMLINK 0xA000000CL
1856 #ifndef RC_INVOKED
1857 typedef DWORD ACCESS_MASK, *PACCESS_MASK;
1858
1859 #ifdef _GUID_DEFINED
1860 # warning _GUID_DEFINED is deprecated, use GUID_DEFINED instead
1861 #endif
1862
1863 #if ! (defined _GUID_DEFINED || defined GUID_DEFINED) /* also defined in basetyps.h */
1864 #define GUID_DEFINED
1865 typedef struct _GUID {
1866 unsigned long Data1;
1867 unsigned short Data2;
1868 unsigned short Data3;
1869 unsigned char Data4[8];
1870 } GUID, *REFGUID, *LPGUID;
1871 #endif /* GUID_DEFINED */
1872
1873 #define SYSTEM_LUID { 0x3E7, 0x0 }
1874
1875 /* ACE Access Types, also in ntifs.h */
1876 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
1877 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
1878 #define ACCESS_DENIED_ACE_TYPE (0x1)
1879 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
1880 #define SYSTEM_ALARM_ACE_TYPE (0x3)
1881 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
1882 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
1883 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
1884 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
1885 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
1886 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
1887 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
1888 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
1889 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
1890 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
1891 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
1892 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
1893 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
1894 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
1895 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
1896 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
1897 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
1898 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
1899 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
1900 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
1901 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
1902 /* end ntifs.h */
1903 typedef struct _GENERIC_MAPPING {
1904 ACCESS_MASK GenericRead;
1905 ACCESS_MASK GenericWrite;
1906 ACCESS_MASK GenericExecute;
1907 ACCESS_MASK GenericAll;
1908 } GENERIC_MAPPING, *PGENERIC_MAPPING;
1909 typedef struct _ACE_HEADER {
1910 BYTE AceType;
1911 BYTE AceFlags;
1912 WORD AceSize;
1913 } ACE_HEADER, *PACE_HEADER;
1914
1915 typedef struct _ACCESS_ALLOWED_ACE {
1916 ACE_HEADER Header;
1917 ACCESS_MASK Mask;
1918 DWORD SidStart;
1919 } ACCESS_ALLOWED_ACE, *PACCESS_ALLOWED_ACE;
1920 typedef struct _ACCESS_DENIED_ACE {
1921 ACE_HEADER Header;
1922 ACCESS_MASK Mask;
1923 DWORD SidStart;
1924 } ACCESS_DENIED_ACE, *PACCESS_DENIED_ACE;
1925 typedef struct _SYSTEM_AUDIT_ACE {
1926 ACE_HEADER Header;
1927 ACCESS_MASK Mask;
1928 DWORD SidStart;
1929 } SYSTEM_AUDIT_ACE;
1930 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
1931 typedef struct _SYSTEM_ALARM_ACE {
1932 ACE_HEADER Header;
1933 ACCESS_MASK Mask;
1934 DWORD SidStart;
1935 } SYSTEM_ALARM_ACE,*PSYSTEM_ALARM_ACE;
1936 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
1937 ACE_HEADER Header;
1938 ACCESS_MASK Mask;
1939 DWORD SidStart;
1940 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
1941 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
1942 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
1943 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
1944 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
1945 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
1946 ACE_HEADER Header;
1947 ACCESS_MASK Mask;
1948 DWORD Flags;
1949 GUID ObjectType;
1950 GUID InheritedObjectType;
1951 DWORD SidStart;
1952 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
1953 typedef struct _ACCESS_DENIED_OBJECT_ACE {
1954 ACE_HEADER Header;
1955 ACCESS_MASK Mask;
1956 DWORD Flags;
1957 GUID ObjectType;
1958 GUID InheritedObjectType;
1959 DWORD SidStart;
1960 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
1961 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
1962 ACE_HEADER Header;
1963 ACCESS_MASK Mask;
1964 DWORD Flags;
1965 GUID ObjectType;
1966 GUID InheritedObjectType;
1967 DWORD SidStart;
1968 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
1969 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
1970 ACE_HEADER Header;
1971 ACCESS_MASK Mask;
1972 DWORD Flags;
1973 GUID ObjectType;
1974 GUID InheritedObjectType;
1975 DWORD SidStart;
1976 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
1977 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
1978 ACE_HEADER Header;
1979 ACCESS_MASK Mask;
1980 DWORD SidStart;
1981 } ACCESS_ALLOWED_CALLBACK_ACE, *PACCESS_ALLOWED_CALLBACK_ACE;
1982 typedef struct _ACCESS_DENIED_CALLBACK_ACE {
1983 ACE_HEADER Header;
1984 ACCESS_MASK Mask;
1985 DWORD SidStart;
1986 } ACCESS_DENIED_CALLBACK_ACE, *PACCESS_DENIED_CALLBACK_ACE;
1987 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
1988 ACE_HEADER Header;
1989 ACCESS_MASK Mask;
1990 DWORD SidStart;
1991 } SYSTEM_AUDIT_CALLBACK_ACE, *PSYSTEM_AUDIT_CALLBACK_ACE;
1992 typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
1993 ACE_HEADER Header;
1994 ACCESS_MASK Mask;
1995 DWORD SidStart;
1996 } SYSTEM_ALARM_CALLBACK_ACE, *PSYSTEM_ALARM_CALLBACK_ACE;
1997 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
1998 ACE_HEADER Header;
1999 ACCESS_MASK Mask;
2000 DWORD Flags;
2001 GUID ObjectType;
2002 GUID InheritedObjectType;
2003 DWORD SidStart;
2004 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE, *PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
2005 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
2006 ACE_HEADER Header;
2007 ACCESS_MASK Mask;
2008 DWORD Flags;
2009 GUID ObjectType;
2010 GUID InheritedObjectType;
2011 DWORD SidStart;
2012 } ACCESS_DENIED_CALLBACK_OBJECT_ACE, *PACCESS_DENIED_CALLBACK_OBJECT_ACE;
2013 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
2014 ACE_HEADER Header;
2015 ACCESS_MASK Mask;
2016 DWORD Flags;
2017 GUID ObjectType;
2018 GUID InheritedObjectType;
2019 DWORD SidStart;
2020 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE, *PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
2021 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
2022 ACE_HEADER Header;
2023 ACCESS_MASK Mask;
2024 DWORD Flags;
2025 GUID ObjectType;
2026 GUID InheritedObjectType;
2027 DWORD SidStart;
2028 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE, *PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
2029 typedef struct _ACL {
2030 BYTE AclRevision;
2031 BYTE Sbz1;
2032 WORD AclSize;
2033 WORD AceCount;
2034 WORD Sbz2;
2035 } ACL,*PACL;
2036 typedef enum _ACL_INFORMATION_CLASS
2037 {
2038 AclRevisionInformation = 1,
2039 AclSizeInformation
2040 } ACL_INFORMATION_CLASS;
2041 typedef struct _ACL_REVISION_INFORMATION {
2042 DWORD AclRevision;
2043 } ACL_REVISION_INFORMATION;
2044 typedef struct _ACL_SIZE_INFORMATION {
2045 DWORD AceCount;
2046 DWORD AclBytesInUse;
2047 DWORD AclBytesFree;
2048 } ACL_SIZE_INFORMATION;
2049
2050 #ifndef _LDT_ENTRY_DEFINED
2051 #define _LDT_ENTRY_DEFINED
2052 typedef struct _LDT_ENTRY
2053 {
2054 USHORT LimitLow;
2055 USHORT BaseLow;
2056 union
2057 {
2058 struct
2059 {
2060 UCHAR BaseMid;
2061 UCHAR Flags1;
2062 UCHAR Flags2;
2063 UCHAR BaseHi;
2064 } Bytes;
2065 struct
2066 {
2067 ULONG BaseMid:8;
2068 ULONG Type:5;
2069 ULONG Dpl:2;
2070 ULONG Pres:1;
2071 ULONG LimitHi:4;
2072 ULONG Sys:1;
2073 ULONG Reserved_0:1;
2074 ULONG Default_Big:1;
2075 ULONG Granularity:1;
2076 ULONG BaseHi:8;
2077 } Bits;
2078 } HighWord;
2079 } LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
2080 #endif
2081
2082 /* FIXME: add more machines */
2083 #if defined(_X86_) && !defined(__PowerPC__)
2084 #define SIZE_OF_80387_REGISTERS 80
2085 #define CONTEXT_i386 0x10000
2086 #define CONTEXT_i486 0x10000
2087 #define CONTEXT_CONTROL (CONTEXT_i386|0x00000001L)
2088 #define CONTEXT_INTEGER (CONTEXT_i386|0x00000002L)
2089 #define CONTEXT_SEGMENTS (CONTEXT_i386|0x00000004L)
2090 #define CONTEXT_FLOATING_POINT (CONTEXT_i386|0x00000008L)
2091 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386|0x00000010L)
2092 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386|0x00000020L)
2093 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_INTEGER|CONTEXT_SEGMENTS)
2094 #define MAXIMUM_SUPPORTED_EXTENSION 512
2095
2096 #define EXCEPTION_READ_FAULT 0
2097 #define EXCEPTION_WRITE_FAULT 1
2098 #define EXCEPTION_EXECUTE_FAULT 8
2099
2100 typedef struct _FLOATING_SAVE_AREA {
2101 DWORD ControlWord;
2102 DWORD StatusWord;
2103 DWORD TagWord;
2104 DWORD ErrorOffset;
2105 DWORD ErrorSelector;
2106 DWORD DataOffset;
2107 DWORD DataSelector;
2108 BYTE RegisterArea[80];
2109 DWORD Cr0NpxState;
2110 } FLOATING_SAVE_AREA;
2111 typedef struct _CONTEXT {
2112 DWORD ContextFlags;
2113 DWORD Dr0;
2114 DWORD Dr1;
2115 DWORD Dr2;
2116 DWORD Dr3;
2117 DWORD Dr6;
2118 DWORD Dr7;
2119 FLOATING_SAVE_AREA FloatSave;
2120 DWORD SegGs;
2121 DWORD SegFs;
2122 DWORD SegEs;
2123 DWORD SegDs;
2124 DWORD Edi;
2125 DWORD Esi;
2126 DWORD Ebx;
2127 DWORD Edx;
2128 DWORD Ecx;
2129 DWORD Eax;
2130 DWORD Ebp;
2131 DWORD Eip;
2132 DWORD SegCs;
2133 DWORD EFlags;
2134 DWORD Esp;
2135 DWORD SegSs;
2136 BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
2137 } CONTEXT;
2138 #elif defined(__x86_64__)
2139
2140
2141 #define CONTEXT_AMD64 0x100000
2142
2143 #if !defined(RC_INVOKED)
2144 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
2145 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
2146 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
2147 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
2148 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
2149
2150 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
2151 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
2152
2153 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
2154 #define CONTEXT_SERVICE_ACTIVE 0x10000000
2155 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
2156 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
2157 #endif
2158
2159 #define INITIAL_MXCSR 0x1f80
2160 #define INITIAL_FPCSR 0x027f
2161 #define EXCEPTION_READ_FAULT 0
2162 #define EXCEPTION_WRITE_FAULT 1
2163 #define EXCEPTION_EXECUTE_FAULT 8
2164
2165 typedef struct DECLSPEC_ALIGN(16) _M128A {
2166 ULONGLONG Low;
2167 LONGLONG High;
2168 } M128A, *PM128A;
2169
2170 typedef struct _XMM_SAVE_AREA32 {
2171 WORD ControlWord;
2172 WORD StatusWord;
2173 BYTE TagWord;
2174 BYTE Reserved1;
2175 WORD ErrorOpcode;
2176 DWORD ErrorOffset;
2177 WORD ErrorSelector;
2178 WORD Reserved2;
2179 DWORD DataOffset;
2180 WORD DataSelector;
2181 WORD Reserved3;
2182 DWORD MxCsr;
2183 DWORD MxCsr_Mask;
2184 M128A FloatRegisters[8];
2185 M128A XmmRegisters[16];
2186 BYTE Reserved4[96];
2187 } XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
2188
2189 typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
2190 DWORD64 P1Home;
2191 DWORD64 P2Home;
2192 DWORD64 P3Home;
2193 DWORD64 P4Home;
2194 DWORD64 P5Home;
2195 DWORD64 P6Home;
2196
2197 /* Control flags */
2198 DWORD ContextFlags;
2199 DWORD MxCsr;
2200
2201 /* Segment */
2202 WORD SegCs;
2203 WORD SegDs;
2204 WORD SegEs;
2205 WORD SegFs;
2206 WORD SegGs;
2207 WORD SegSs;
2208 DWORD EFlags;
2209
2210 /* Debug */
2211 DWORD64 Dr0;
2212 DWORD64 Dr1;
2213 DWORD64 Dr2;
2214 DWORD64 Dr3;
2215 DWORD64 Dr6;
2216 DWORD64 Dr7;
2217
2218 /* Integer */
2219 DWORD64 Rax;
2220 DWORD64 Rcx;
2221 DWORD64 Rdx;
2222 DWORD64 Rbx;
2223 DWORD64 Rsp;
2224 DWORD64 Rbp;
2225 DWORD64 Rsi;
2226 DWORD64 Rdi;
2227 DWORD64 R8;
2228 DWORD64 R9;
2229 DWORD64 R10;
2230 DWORD64 R11;
2231 DWORD64 R12;
2232 DWORD64 R13;
2233 DWORD64 R14;
2234 DWORD64 R15;
2235
2236 /* Counter */
2237 DWORD64 Rip;
2238
2239 /* Floating point */
2240 union {
2241 XMM_SAVE_AREA32 FltSave;
2242 struct {
2243 M128A Header[2];
2244 M128A Legacy[8];
2245 M128A Xmm0;
2246 M128A Xmm1;
2247 M128A Xmm2;
2248 M128A Xmm3;
2249 M128A Xmm4;
2250 M128A Xmm5;
2251 M128A Xmm6;
2252 M128A Xmm7;
2253 M128A Xmm8;
2254 M128A Xmm9;
2255 M128A Xmm10;
2256 M128A Xmm11;
2257 M128A Xmm12;
2258 M128A Xmm13;
2259 M128A Xmm14;
2260 M128A Xmm15;
2261 } DUMMYSTRUCTNAME;
2262 } DUMMYUNIONNAME;
2263
2264 /* Vector */
2265 M128A VectorRegister[26];
2266 DWORD64 VectorControl;
2267
2268 /* Debug control */
2269 DWORD64 DebugControl;
2270 DWORD64 LastBranchToRip;
2271 DWORD64 LastBranchFromRip;
2272 DWORD64 LastExceptionToRip;
2273 DWORD64 LastExceptionFromRip;
2274 } CONTEXT;
2275
2276
2277 typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
2278 union {
2279 PM128A FloatingContext[16];
2280 struct {
2281 PM128A Xmm0;
2282 PM128A Xmm1;
2283 PM128A Xmm2;
2284 PM128A Xmm3;
2285 PM128A Xmm4;
2286 PM128A Xmm5;
2287 PM128A Xmm6;
2288 PM128A Xmm7;
2289 PM128A Xmm8;
2290 PM128A Xmm9;
2291 PM128A Xmm10;
2292 PM128A Xmm11;
2293 PM128A Xmm12;
2294 PM128A Xmm13;
2295 PM128A Xmm14;
2296 PM128A Xmm15;
2297 };
2298 };
2299
2300 union {
2301 PULONG64 IntegerContext[16];
2302 struct {
2303 PULONG64 Rax;
2304 PULONG64 Rcx;
2305 PULONG64 Rdx;
2306 PULONG64 Rbx;
2307 PULONG64 Rsp;
2308 PULONG64 Rbp;
2309 PULONG64 Rsi;
2310 PULONG64 Rdi;
2311 PULONG64 R8;
2312 PULONG64 R9;
2313 PULONG64 R10;
2314 PULONG64 R11;
2315 PULONG64 R12;
2316 PULONG64 R13;
2317 PULONG64 R14;
2318 PULONG64 R15;
2319 };
2320 };
2321 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2322
2323 #define RUNTIME_FUNCTION_INDIRECT 0x1
2324
2325 typedef struct _RUNTIME_FUNCTION {
2326 DWORD BeginAddress;
2327 DWORD EndAddress;
2328 DWORD UnwindData;
2329 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
2330
2331 #define UNWIND_HISTORY_TABLE_SIZE 12
2332
2333 typedef struct _UNWIND_HISTORY_TABLE_ENTRY
2334 {
2335 ULONG64 ImageBase;
2336 PRUNTIME_FUNCTION FunctionEntry;
2337 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
2338
2339 typedef struct _UNWIND_HISTORY_TABLE
2340 {
2341 ULONG Count;
2342 UCHAR Search;
2343 ULONG64 LowAddress;
2344 ULONG64 HighAddress;
2345 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
2346 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
2347
2348 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
2349 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
2350
2351 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
2352
2353 NTSYSAPI
2354 VOID
2355 __cdecl
2356 RtlRestoreContext(struct _CONTEXT *ContextRecord,
2357 struct _EXCEPTION_RECORD *ExceptionRecord);
2358
2359 NTSYSAPI
2360 BOOLEAN
2361 __cdecl
2362 RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable,
2363 DWORD EntryCount,
2364 DWORD64 BaseAddress);
2365
2366 NTSYSAPI
2367 BOOLEAN
2368 __cdecl
2369 RtlInstallFunctionTableCallback(DWORD64 TableIdentifier,
2370 DWORD64 BaseAddress,
2371 DWORD Length,
2372 PGET_RUNTIME_FUNCTION_CALLBACK Callback,
2373 PVOID Context,
2374 PCWSTR OutOfProcessCallbackDll);
2375
2376 NTSYSAPI
2377 BOOLEAN
2378 __cdecl
2379 RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable);
2380
2381 #elif defined(_PPC_)
2382 #define CONTEXT_CONTROL 1L
2383 #define CONTEXT_FLOATING_POINT 2L
2384 #define CONTEXT_INTEGER 4L
2385 #define CONTEXT_DEBUG_REGISTERS 8L
2386 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
2387 typedef struct _FLOATING_SAVE_AREA
2388 {
2389 double Fpr0;
2390 double Fpr1;
2391 double Fpr2;
2392 double Fpr3;
2393 double Fpr4;
2394 double Fpr5;
2395 double Fpr6;
2396 double Fpr7;
2397 double Fpr8;
2398 double Fpr9;
2399 double Fpr10;
2400 double Fpr11;
2401 double Fpr12;
2402 double Fpr13;
2403 double Fpr14;
2404 double Fpr15;
2405 double Fpr16;
2406 double Fpr17;
2407 double Fpr18;
2408 double Fpr19;
2409 double Fpr20;
2410 double Fpr21;
2411 double Fpr22;
2412 double Fpr23;
2413 double Fpr24;
2414 double Fpr25;
2415 double Fpr26;
2416 double Fpr27;
2417 double Fpr28;
2418 double Fpr29;
2419 double Fpr30;
2420 double Fpr31;
2421 double Fpscr;
2422 } FLOATING_SAVE_AREA;
2423
2424 typedef struct _CONTEXT {
2425 FLOATING_SAVE_AREA FloatSave;
2426 DWORD Gpr0;
2427 DWORD Gpr1;
2428 DWORD Gpr2;
2429 DWORD Gpr3;
2430 DWORD Gpr4;
2431 DWORD Gpr5;
2432 DWORD Gpr6;
2433 DWORD Gpr7;
2434 DWORD Gpr8;
2435 DWORD Gpr9;
2436 DWORD Gpr10;
2437 DWORD Gpr11;
2438 DWORD Gpr12;
2439 DWORD Gpr13;
2440 DWORD Gpr14;
2441 DWORD Gpr15;
2442 DWORD Gpr16;
2443 DWORD Gpr17;
2444 DWORD Gpr18;
2445 DWORD Gpr19;
2446 DWORD Gpr20;
2447 DWORD Gpr21;
2448 DWORD Gpr22;
2449 DWORD Gpr23;
2450 DWORD Gpr24;
2451 DWORD Gpr25;
2452 DWORD Gpr26;
2453 DWORD Gpr27;
2454 DWORD Gpr28;
2455 DWORD Gpr29;
2456 DWORD Gpr30;
2457 DWORD Gpr31;
2458 DWORD Cr;
2459 DWORD Xer;
2460 DWORD Msr;
2461 DWORD Iar;
2462 DWORD Lr;
2463 DWORD Ctr;
2464 DWORD ContextFlags;
2465 DWORD Fill[3];
2466 DWORD Dr0;
2467 DWORD Dr1;
2468 DWORD Dr2;
2469 DWORD Dr3;
2470 DWORD Dr4;
2471 DWORD Dr5;
2472 DWORD Dr6;
2473 DWORD Dr7;
2474 } CONTEXT;
2475 #elif defined(_ALPHA_)
2476 #define CONTEXT_ALPHA 0x20000
2477 #define CONTEXT_CONTROL (CONTEXT_ALPHA|1L)
2478 #define CONTEXT_FLOATING_POINT (CONTEXT_ALPHA|2L)
2479 #define CONTEXT_INTEGER (CONTEXT_ALPHA|4L)
2480 #define CONTEXT_FULL (CONTEXT_CONTROL|CONTEXT_FLOATING_POINT|CONTEXT_INTEGER)
2481 typedef struct _CONTEXT {
2482 ULONGLONG FltF0;
2483 ULONGLONG FltF1;
2484 ULONGLONG FltF2;
2485 ULONGLONG FltF3;
2486 ULONGLONG FltF4;
2487 ULONGLONG FltF5;
2488 ULONGLONG FltF6;
2489 ULONGLONG FltF7;
2490 ULONGLONG FltF8;
2491 ULONGLONG FltF9;
2492 ULONGLONG FltF10;
2493 ULONGLONG FltF11;
2494 ULONGLONG FltF12;
2495 ULONGLONG FltF13;
2496 ULONGLONG FltF14;
2497 ULONGLONG FltF15;
2498 ULONGLONG FltF16;
2499 ULONGLONG FltF17;
2500 ULONGLONG FltF18;
2501 ULONGLONG FltF19;
2502 ULONGLONG FltF20;
2503 ULONGLONG FltF21;
2504 ULONGLONG FltF22;
2505 ULONGLONG FltF23;
2506 ULONGLONG FltF24;
2507 ULONGLONG FltF25;
2508 ULONGLONG FltF26;
2509 ULONGLONG FltF27;
2510 ULONGLONG FltF28;
2511 ULONGLONG FltF29;
2512 ULONGLONG FltF30;
2513 ULONGLONG FltF31;
2514 ULONGLONG IntV0;
2515 ULONGLONG IntT0;
2516 ULONGLONG IntT1;
2517 ULONGLONG IntT2;
2518 ULONGLONG IntT3;
2519 ULONGLONG IntT4;
2520 ULONGLONG IntT5;
2521 ULONGLONG IntT6;
2522 ULONGLONG IntT7;
2523 ULONGLONG IntS0;
2524 ULONGLONG IntS1;
2525 ULONGLONG IntS2;
2526 ULONGLONG IntS3;
2527 ULONGLONG IntS4;
2528 ULONGLONG IntS5;
2529 ULONGLONG IntFp;
2530 ULONGLONG IntA0;
2531 ULONGLONG IntA1;
2532 ULONGLONG IntA2;
2533 ULONGLONG IntA3;
2534 ULONGLONG IntA4;
2535 ULONGLONG IntA5;
2536 ULONGLONG IntT8;
2537 ULONGLONG IntT9;
2538 ULONGLONG IntT10;
2539 ULONGLONG IntT11;
2540 ULONGLONG IntRa;
2541 ULONGLONG IntT12;
2542 ULONGLONG IntAt;
2543 ULONGLONG IntGp;
2544 ULONGLONG IntSp;
2545 ULONGLONG IntZero;
2546 ULONGLONG Fpcr;
2547 ULONGLONG SoftFpcr;
2548 ULONGLONG Fir;
2549 DWORD Psr;
2550 DWORD ContextFlags;
2551 DWORD Fill[4];
2552 } CONTEXT;
2553 #elif defined(SHx)
2554
2555 /* These are the debug or break registers on the SH3 */
2556 typedef struct _DEBUG_REGISTERS {
2557 ULONG BarA;
2558 UCHAR BasrA;
2559 UCHAR BamrA;
2560 USHORT BbrA;
2561 ULONG BarB;
2562 UCHAR BasrB;
2563 UCHAR BamrB;
2564 USHORT BbrB;
2565 ULONG BdrB;
2566 ULONG BdmrB;
2567 USHORT Brcr;
2568 USHORT Align;
2569 } DEBUG_REGISTERS, *PDEBUG_REGISTERS;
2570
2571 /* The following flags control the contents of the CONTEXT structure. */
2572
2573 #define CONTEXT_SH3 0x00000040
2574 #define CONTEXT_SH4 0x000000c0 /* CONTEXT_SH3 | 0x80 - must contain the SH3 bits */
2575
2576 #ifdef SH3
2577 #define CONTEXT_CONTROL (CONTEXT_SH3 | 0x00000001L)
2578 #define CONTEXT_INTEGER (CONTEXT_SH3 | 0x00000002L)
2579 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH3 | 0x00000008L)
2580 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS)
2581 #else /* SH4 */
2582 #define CONTEXT_CONTROL (CONTEXT_SH4 | 0x00000001L)
2583 #define CONTEXT_INTEGER (CONTEXT_SH4 | 0x00000002L)
2584 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_SH4 | 0x00000008L)
2585 #define CONTEXT_FLOATING_POINT (CONTEXT_SH4 | 0x00000004L)
2586 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_DEBUG_REGISTERS | CONTEXT_FLOATING_POINT)
2587 #endif
2588
2589 /* Context Frame */
2590
2591 /* This frame is used to store a limited processor context into the */
2592 /* Thread structure for CPUs which have no floating point support. */
2593
2594 typedef struct _CONTEXT {
2595 /* The flags values within this flag control the contents of */
2596 /* a CONTEXT record. */
2597
2598 /* If the context record is used as an input parameter, then */
2599 /* for each portion of the context record controlled by a flag */
2600 /* whose value is set, it is assumed that that portion of the */
2601 /* context record contains valid context. If the context record */
2602 /* is being used to modify a thread's context, then only that */
2603 /* portion of the threads context will be modified. */
2604
2605 /* If the context record is used as an IN OUT parameter to capture */
2606 /* the context of a thread, then only those portions of the thread's */
2607 /* context corresponding to set flags will be returned. */
2608
2609 /* The context record is never used as an OUT only parameter. */
2610
2611
2612 ULONG ContextFlags;
2613
2614 /* This section is specified/returned if the ContextFlags word contains */
2615 /* the flag CONTEXT_INTEGER. */
2616
2617 /* N.B. The registers RA and R15 are defined in this section, but are */
2618 /* considered part of the control context rather than part of the integer */
2619 /* context. */
2620
2621 ULONG PR;
2622 ULONG MACH;
2623 ULONG MACL;
2624 ULONG GBR;
2625 ULONG R0;
2626 ULONG R1;
2627 ULONG R2;
2628 ULONG R3;
2629 ULONG R4;
2630 ULONG R5;
2631 ULONG R6;
2632 ULONG R7;
2633 ULONG R8;
2634 ULONG R9;
2635 ULONG R10;
2636 ULONG R11;
2637 ULONG R12;
2638 ULONG R13;
2639 ULONG R14;
2640 ULONG R15;
2641
2642 /* This section is specified/returned if the ContextFlags word contains */
2643 /* the flag CONTEXT_CONTROL. */
2644
2645 /* N.B. The registers r15 and ra are defined in the integer section, */
2646 /* but are considered part of the control context rather than part of */
2647 /* the integer context. */
2648
2649 ULONG Fir;
2650 ULONG Psr;
2651
2652 #if !defined(SH3e) && !defined(SH4)
2653 ULONG OldStuff[2];
2654 DEBUG_REGISTERS DebugRegisters;
2655 #else
2656 ULONG Fpscr;
2657 ULONG Fpul;
2658 ULONG FRegs[16];
2659 #if defined(SH4)
2660 ULONG xFRegs[16];
2661 #endif
2662 #endif
2663 } CONTEXT;
2664
2665 #elif defined(_MIPS_)
2666
2667 /* The following flags control the contents of the CONTEXT structure. */
2668
2669 #define CONTEXT_R4000 0x00010000 /* r4000 context */
2670
2671 #define CONTEXT_CONTROL (CONTEXT_R4000 | 0x00000001L)
2672 #define CONTEXT_FLOATING_POINT (CONTEXT_R4000 | 0x00000002L)
2673 #define CONTEXT_INTEGER (CONTEXT_R4000 | 0x00000004L)
2674
2675 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
2676
2677 /* Context Frame */
2678
2679 /* N.B. This frame must be exactly a multiple of 16 bytes in length. */
2680
2681 /* This frame has a several purposes: 1) it is used as an argument to */
2682 /* NtContinue, 2) it is used to constuct a call frame for APC delivery, */
2683 /* 3) it is used to construct a call frame for exception dispatching */
2684 /* in user mode, and 4) it is used in the user level thread creation */
2685 /* routines. */
2686
2687 /* The layout of the record conforms to a standard call frame. */
2688
2689
2690 typedef struct _CONTEXT {
2691
2692 /* This section is always present and is used as an argument build */
2693 /* area. */
2694
2695 DWORD Argument[4];
2696
2697 /* This section is specified/returned if the ContextFlags word contains */
2698 /* the flag CONTEXT_FLOATING_POINT. */
2699
2700 DWORD FltF0;
2701 DWORD FltF1;
2702 DWORD FltF2;
2703 DWORD FltF3;
2704 DWORD FltF4;
2705 DWORD FltF5;
2706 DWORD FltF6;
2707 DWORD FltF7;
2708 DWORD FltF8;
2709 DWORD FltF9;
2710 DWORD FltF10;
2711 DWORD FltF11;
2712 DWORD FltF12;
2713 DWORD FltF13;
2714 DWORD FltF14;
2715 DWORD FltF15;
2716 DWORD FltF16;
2717 DWORD FltF17;
2718 DWORD FltF18;
2719 DWORD FltF19;
2720 DWORD FltF20;
2721 DWORD FltF21;
2722 DWORD FltF22;
2723 DWORD FltF23;
2724 DWORD FltF24;
2725 DWORD FltF25;
2726 DWORD FltF26;
2727 DWORD FltF27;
2728 DWORD FltF28;
2729 DWORD FltF29;
2730 DWORD FltF30;
2731 DWORD FltF31;
2732
2733 /* This section is specified/returned if the ContextFlags word contains */
2734 /* the flag CONTEXT_INTEGER. */
2735
2736 /* N.B. The registers gp, sp, and ra are defined in this section, but are */
2737 /* considered part of the control context rather than part of the integer */
2738 /* context. */
2739
2740 /* N.B. Register zero is not stored in the frame. */
2741
2742 DWORD IntZero;
2743 DWORD IntAt;
2744 DWORD IntV0;
2745 DWORD IntV1;
2746 DWORD IntA0;
2747 DWORD IntA1;
2748 DWORD IntA2;
2749 DWORD IntA3;
2750 DWORD IntT0;
2751 DWORD IntT1;
2752 DWORD IntT2;
2753 DWORD IntT3;
2754 DWORD IntT4;
2755 DWORD IntT5;
2756 DWORD IntT6;
2757 DWORD IntT7;
2758 DWORD IntS0;
2759 DWORD IntS1;
2760 DWORD IntS2;
2761 DWORD IntS3;
2762 DWORD IntS4;
2763 DWORD IntS5;
2764 DWORD IntS6;
2765 DWORD IntS7;
2766 DWORD IntT8;
2767 DWORD IntT9;
2768 DWORD IntK0;
2769 DWORD IntK1;
2770 DWORD IntGp;
2771 DWORD IntSp;
2772 DWORD IntS8;
2773 DWORD IntRa;
2774 DWORD IntLo;
2775 DWORD IntHi;
2776
2777 /* This section is specified/returned if the ContextFlags word contains */
2778 /* the flag CONTEXT_FLOATING_POINT. */
2779
2780 DWORD Fsr;
2781
2782 /* This section is specified/returned if the ContextFlags word contains */
2783 /* the flag CONTEXT_CONTROL. */
2784
2785 /* N.B. The registers gp, sp, and ra are defined in the integer section, */
2786 /* but are considered part of the control context rather than part of */
2787 /* the integer context. */
2788
2789 DWORD Fir;
2790 DWORD Psr;
2791
2792 /* The flags values within this flag control the contents of */
2793 /* a CONTEXT record. */
2794
2795 /* If the context record is used as an input parameter, then */
2796 /* for each portion of the context record controlled by a flag */
2797 /* whose value is set, it is assumed that that portion of the */
2798 /* context record contains valid context. If the context record */
2799 /* is being used to modify a thread's context, then only that */
2800 /* portion of the threads context will be modified. */
2801
2802 /* If the context record is used as an IN OUT parameter to capture */
2803 /* the context of a thread, then only those portions of the thread's */
2804 /* context corresponding to set flags will be returned. */
2805
2806 /* The context record is never used as an OUT only parameter. */
2807
2808 DWORD ContextFlags;
2809
2810 DWORD Fill[2];
2811
2812 } CONTEXT;
2813 #elif defined(ARM)
2814
2815 #ifndef PAGE_SIZE
2816 #define PAGE_SIZE 0x1000 // FIXME: This should probably go elsewhere
2817 #endif
2818
2819 /* The following flags control the contents of the CONTEXT structure. */
2820
2821 #define CONTEXT_ARM 0x0000040
2822 #define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001L)
2823 #define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002L)
2824
2825 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
2826
2827 typedef struct _CONTEXT {
2828 /* The flags values within this flag control the contents of
2829 a CONTEXT record.
2830
2831 If the context record is used as an input parameter, then
2832 for each portion of the context record controlled by a flag
2833 whose value is set, it is assumed that that portion of the
2834 context record contains valid context. If the context record
2835 is being used to modify a thread's context, then only that
2836 portion of the threads context will be modified.
2837
2838 If the context record is used as an IN OUT parameter to capture
2839 the context of a thread, then only those portions of the thread's
2840 context corresponding to set flags will be returned.
2841
2842 The context record is never used as an OUT only parameter. */
2843
2844 ULONG ContextFlags;
2845
2846 /* This section is specified/returned if the ContextFlags word contains
2847 the flag CONTEXT_INTEGER. */
2848 ULONG R0;
2849 ULONG R1;
2850 ULONG R2;
2851 ULONG R3;
2852 ULONG R4;
2853 ULONG R5;
2854 ULONG R6;
2855 ULONG R7;
2856 ULONG R8;
2857 ULONG R9;
2858 ULONG R10;
2859 ULONG R11;
2860 ULONG R12;
2861
2862 ULONG Sp;
2863 ULONG Lr;
2864 ULONG Pc;
2865 ULONG Psr;
2866 } CONTEXT;
2867
2868 #else
2869 #error "undefined processor type"
2870 #endif
2871 typedef CONTEXT *PCONTEXT,*LPCONTEXT;
2872
2873 #define EXCEPTION_NONCONTINUABLE 1
2874 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2875
2876 typedef struct _EXCEPTION_RECORD {
2877 DWORD ExceptionCode;
2878 DWORD ExceptionFlags;
2879 struct _EXCEPTION_RECORD *ExceptionRecord;
2880 PVOID ExceptionAddress;
2881 DWORD NumberParameters;
2882 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2883 } EXCEPTION_RECORD;
2884
2885 typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
2886
2887 typedef struct _EXCEPTION_RECORD32 {
2888 DWORD ExceptionCode;
2889 DWORD ExceptionFlags;
2890 DWORD ExceptionRecord;
2891 DWORD ExceptionAddress;
2892 DWORD NumberParameters;
2893 DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2894 } EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
2895
2896 typedef struct _EXCEPTION_RECORD64 {
2897 DWORD ExceptionCode;
2898 DWORD ExceptionFlags;
2899 DWORD64 ExceptionRecord;
2900 DWORD64 ExceptionAddress;
2901 DWORD NumberParameters;
2902 DWORD __unusedAlignment;
2903 DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2904 } EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
2905
2906 typedef struct _EXCEPTION_POINTERS {
2907 PEXCEPTION_RECORD ExceptionRecord;
2908 PCONTEXT ContextRecord;
2909 } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS, *LPEXCEPTION_POINTERS;
2910
2911 #ifdef _M_PPC
2912 #define LARGE_INTEGER_ORDER(x) x HighPart; DWORD LowPart;
2913 #else
2914 #define LARGE_INTEGER_ORDER(x) DWORD LowPart; x HighPart;
2915 #endif
2916
2917 typedef union _LARGE_INTEGER {
2918 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
2919 _ANONYMOUS_STRUCT struct {
2920 LARGE_INTEGER_ORDER(LONG)
2921 };
2922 #endif /* NONAMELESSUNION */
2923 struct {
2924 LARGE_INTEGER_ORDER(LONG)
2925 } u;
2926 LONGLONG QuadPart;
2927 } LARGE_INTEGER, *PLARGE_INTEGER;
2928 typedef union _ULARGE_INTEGER {
2929 #if ! defined(NONAMELESSUNION) || defined(__cplusplus)
2930 _ANONYMOUS_STRUCT struct {
2931 LARGE_INTEGER_ORDER(DWORD)
2932 };
2933 #endif /* NONAMELESSUNION */
2934 struct {
2935 LARGE_INTEGER_ORDER(DWORD)
2936 } u;
2937 ULONGLONG QuadPart;
2938 } ULARGE_INTEGER, *PULARGE_INTEGER;
2939 typedef struct _LUID {
2940 LARGE_INTEGER_ORDER(LONG)
2941 } LUID, *PLUID;
2942
2943 #include <pshpack4.h>
2944 typedef struct _LUID_AND_ATTRIBUTES {
2945 LUID Luid;
2946 DWORD Attributes;
2947 } LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
2948 #include <poppack.h>
2949
2950 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2951 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
2952 typedef struct _PRIVILEGE_SET {
2953 DWORD PrivilegeCount;
2954 DWORD Control;
2955 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
2956 } PRIVILEGE_SET,*PPRIVILEGE_SET;
2957 typedef struct _SECURITY_ATTRIBUTES {
2958 DWORD nLength;
2959 LPVOID lpSecurityDescriptor;
2960 BOOL bInheritHandle;
2961 } SECURITY_ATTRIBUTES,*PSECURITY_ATTRIBUTES,*LPSECURITY_ATTRIBUTES;
2962 typedef enum _SECURITY_IMPERSONATION_LEVEL {
2963 SecurityAnonymous,
2964 SecurityIdentification,
2965 SecurityImpersonation,
2966 SecurityDelegation
2967 } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
2968 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
2969 typedef struct _SECURITY_QUALITY_OF_SERVICE {
2970 DWORD Length;
2971 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2972 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
2973 BOOLEAN EffectiveOnly;
2974 } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
2975 typedef PVOID PACCESS_TOKEN;
2976 typedef struct _SE_IMPERSONATION_STATE {
2977 PACCESS_TOKEN Token;
2978 BOOLEAN CopyOnOpen;
2979 BOOLEAN EffectiveOnly;
2980 SECURITY_IMPERSONATION_LEVEL Level;
2981 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
2982 typedef struct _SID_IDENTIFIER_AUTHORITY {
2983 BYTE Value[6];
2984 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
2985 typedef PVOID PSID;
2986 typedef struct _SID {
2987 BYTE Revision;
2988 BYTE SubAuthorityCount;
2989 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
2990 DWORD SubAuthority[ANYSIZE_ARRAY];
2991 } SID, *PISID;
2992 #define SECURITY_MIN_SID_SIZE (sizeof(SID))
2993 #define SECURITY_MAX_SID_SIZE (FIELD_OFFSET(SID, SubAuthority) + SID_MAX_SUB_AUTHORITIES * sizeof(DWORD))
2994 typedef struct _SID_AND_ATTRIBUTES {
2995 PSID Sid;
2996 DWORD Attributes;
2997 } SID_AND_ATTRIBUTES, *PSID_AND_ATTRIBUTES;
2998 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2999 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
3000 typedef struct _TOKEN_SOURCE {
3001 CHAR SourceName[TOKEN_SOURCE_LENGTH];
3002 LUID SourceIdentifier;
3003 } TOKEN_SOURCE,*PTOKEN_SOURCE;
3004 typedef struct _TOKEN_CONTROL {
3005 LUID TokenId;
3006 LUID AuthenticationId;
3007 LUID ModifiedId;
3008 TOKEN_SOURCE TokenSource;
3009 } TOKEN_CONTROL,*PTOKEN_CONTROL;
3010 typedef struct _TOKEN_DEFAULT_DACL {
3011 PACL DefaultDacl;
3012 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
3013 typedef struct _TOKEN_GROUPS {
3014 DWORD GroupCount;
3015 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
3016 } TOKEN_GROUPS,*PTOKEN_GROUPS,*LPTOKEN_GROUPS;
3017 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
3018 ULONG SidCount;
3019 ULONG SidLength;
3020 PSID_AND_ATTRIBUTES Sids;
3021 ULONG RestrictedSidCount;
3022 ULONG RestrictedSidLength;
3023 PSID_AND_ATTRIBUTES RestrictedSids;
3024 ULONG PrivilegeCount;
3025 ULONG PrivilegeLength;
3026 PLUID_AND_ATTRIBUTES Privileges;
3027 LUID AuthenticationId;
3028 } TOKEN_GROUPS_AND_PRIVILEGES, *PTOKEN_GROUPS_AND_PRIVILEGES;
3029 typedef struct _TOKEN_ORIGIN {
3030 LUID OriginatingLogonSession;
3031 } TOKEN_ORIGIN, *PTOKEN_ORIGIN;
3032 typedef struct _TOKEN_OWNER {
3033 PSID Owner;
3034 } TOKEN_OWNER,*PTOKEN_OWNER;
3035 typedef struct _TOKEN_PRIMARY_GROUP {
3036 PSID PrimaryGroup;
3037 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
3038 typedef struct _TOKEN_PRIVILEGES {
3039 DWORD PrivilegeCount;
3040 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
3041 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES,*LPTOKEN_PRIVILEGES;
3042 typedef enum tagTOKEN_TYPE {
3043 TokenPrimary = 1,
3044 TokenImpersonation
3045 } TOKEN_TYPE,*PTOKEN_TYPE;
3046
3047 #include <pshpack4.h>
3048 typedef struct _TOKEN_STATISTICS {
3049 LUID TokenId;
3050 LUID AuthenticationId;
3051 LARGE_INTEGER ExpirationTime;
3052 TOKEN_TYPE TokenType;
3053 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
3054 DWORD DynamicCharged;
3055 DWORD DynamicAvailable;
3056 DWORD GroupCount;
3057 DWORD PrivilegeCount;
3058 LUID ModifiedId;
3059 } TOKEN_STATISTICS, *PTOKEN_STATISTICS;
3060 #include <poppack.h>
3061
3062 typedef struct _TOKEN_USER {
3063 SID_AND_ATTRIBUTES User;
3064 } TOKEN_USER, *PTOKEN_USER;
3065 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
3066 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
3067
3068 #ifndef _SECURITY_ATTRIBUTES_
3069 #define _SECURITY_ATTRIBUTES_
3070 typedef struct _SECURITY_DESCRIPTOR {
3071 BYTE Revision;
3072 BYTE Sbz1;
3073 SECURITY_DESCRIPTOR_CONTROL Control;
3074 PSID Owner;
3075 PSID Group;
3076 PACL Sacl;
3077 PACL Dacl;
3078 } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
3079 typedef PVOID PSECURITY_DESCRIPTOR;
3080 #endif
3081 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
3082 BYTE Revision;
3083 BYTE Sbz1;
3084 SECURITY_DESCRIPTOR_CONTROL Control;
3085 DWORD Owner;
3086 DWORD Group;
3087 DWORD Sacl;
3088 DWORD Dacl;
3089 } SECURITY_DESCRIPTOR_RELATIVE, *PISECURITY_DESCRIPTOR_RELATIVE;
3090
3091 typedef enum _TOKEN_INFORMATION_CLASS {
3092 TokenUser = 1,
3093 TokenGroups,
3094 TokenPrivileges,
3095 TokenOwner,
3096 TokenPrimaryGroup,
3097 TokenDefaultDacl,
3098 TokenSource,
3099 TokenType,
3100 TokenImpersonationLevel,
3101 TokenStatistics,
3102 TokenRestrictedSids,
3103 TokenSessionId,
3104 TokenGroupsAndPrivileges,
3105 TokenSessionReference,
3106 TokenSandBoxInert,
3107 TokenAuditPolicy,
3108 TokenOrigin,
3109 TokenElevationType,
3110 TokenLinkedToken,
3111 TokenElevation,
3112 TokenHasRestrictions,
3113 TokenAccessInformation,
3114 TokenVirtualizationAllowed,
3115 TokenVirtualizationEnabled,
3116 TokenIntegrityLevel,
3117 TokenUIAccess,
3118 TokenMandatoryPolicy,
3119 TokenLogonSid,
3120 MaxTokenInfoClass
3121 } TOKEN_INFORMATION_CLASS;
3122
3123 typedef enum _SID_NAME_USE {
3124 SidTypeUser=1,SidTypeGroup,SidTypeDomain,SidTypeAlias,
3125 SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,
3126 SidTypeUnknown
3127 } SID_NAME_USE,*PSID_NAME_USE;
3128 typedef struct _QUOTA_LIMITS {
3129 SIZE_T PagedPoolLimit;
3130 SIZE_T NonPagedPoolLimit;
3131 SIZE_T MinimumWorkingSetSize;
3132 SIZE_T MaximumWorkingSetSize;
3133 SIZE_T PagefileLimit;
3134 LARGE_INTEGER TimeLimit;
3135 } QUOTA_LIMITS,*PQUOTA_LIMITS;
3136 typedef struct _IO_COUNTERS {
3137 ULONGLONG ReadOperationCount;
3138 ULONGLONG WriteOperationCount;
3139 ULONGLONG OtherOperationCount;
3140 ULONGLONG ReadTransferCount;
3141 ULONGLONG WriteTransferCount;
3142 ULONGLONG OtherTransferCount;
3143 } IO_COUNTERS, *PIO_COUNTERS;
3144 typedef struct _FILE_NOTIFY_INFORMATION {
3145 DWORD NextEntryOffset;
3146 DWORD Action;
3147 DWORD FileNameLength;
3148 WCHAR FileName[1];
3149 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
3150 typedef struct _TAPE_ERASE {
3151 DWORD Type;
3152 BOOLEAN Immediate;
3153 } TAPE_ERASE,*PTAPE_ERASE;
3154 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
3155 BOOLEAN ECC;
3156 BOOLEAN Compression;
3157 BOOLEAN DataPadding;
3158 BOOLEAN ReportSetmarks;
3159 DWORD DefaultBlockSize;
3160 DWORD MaximumBlockSize;
3161 DWORD MinimumBlockSize;
3162 DWORD MaximumPartitionCount;
3163 DWORD FeaturesLow;
3164 DWORD FeaturesHigh;
3165 DWORD EOTWarningZoneSize;
3166 } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
3167 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
3168 LARGE_INTEGER Capacity;
3169 LARGE_INTEGER Remaining;
3170 DWORD BlockSize;
3171 DWORD PartitionCount;
3172 BOOLEAN WriteProtected;
3173 } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
3174 typedef struct _TAPE_GET_POSITION {
3175 ULONG Type;
3176 ULONG Partition;
3177 LARGE_INTEGER Offset;
3178 } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
3179 typedef struct _TAPE_PREPARE {
3180 DWORD Operation;
3181 BOOLEAN Immediate;
3182 } TAPE_PREPARE,*PTAPE_PREPARE;
3183 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
3184 BOOLEAN ECC;
3185 BOOLEAN Compression;
3186 BOOLEAN DataPadding;
3187 BOOLEAN ReportSetmarks;
3188 ULONG EOTWarningZoneSize;
3189 } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
3190 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
3191 ULONG BlockSize;
3192 } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
3193 typedef struct _TAPE_SET_POSITION {
3194 DWORD Method;
3195 DWORD Partition;
3196 LARGE_INTEGER Offset;
3197 BOOLEAN Immediate;
3198 } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
3199 typedef struct _TAPE_WRITE_MARKS {
3200 DWORD Type;
3201 DWORD Count;
3202 BOOLEAN Immediate;
3203 } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
3204 typedef struct _TAPE_CREATE_PARTITION {
3205 DWORD Method;
3206 DWORD Count;
3207 DWORD Size;
3208 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
3209 typedef struct _MEMORY_BASIC_INFORMATION {
3210 PVOID BaseAddress;
3211 PVOID AllocationBase;
3212 DWORD AllocationProtect;
3213 SIZE_T RegionSize;
3214 DWORD State;
3215 DWORD Protect;
3216 DWORD Type;
3217 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
3218 typedef struct _MESSAGE_RESOURCE_ENTRY {
3219 WORD Length;
3220 WORD Flags;
3221 BYTE Text[1];
3222 } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
3223 typedef struct _MESSAGE_RESOURCE_BLOCK {
3224 DWORD LowId;
3225 DWORD HighId;
3226 DWORD OffsetToEntries;
3227 } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
3228 typedef struct _MESSAGE_RESOURCE_DATA {
3229 DWORD NumberOfBlocks;
3230 MESSAGE_RESOURCE_BLOCK Blocks[1];
3231 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
3232 typedef struct _LIST_ENTRY {
3233 struct _LIST_ENTRY *Flink;
3234 struct _LIST_ENTRY *Blink;
3235 } LIST_ENTRY,*PLIST_ENTRY;
3236 typedef struct _LIST_ENTRY32 {
3237 DWORD Flink;
3238 DWORD Blink;
3239 } LIST_ENTRY32,*PLIST_ENTRY32;
3240 typedef struct _LIST_ENTRY64 {
3241 ULONGLONG Flink;
3242 ULONGLONG Blink;
3243 } LIST_ENTRY64,*PLIST_ENTRY64;
3244
3245 typedef struct _SINGLE_LIST_ENTRY {
3246 struct _SINGLE_LIST_ENTRY *Next;
3247 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
3248
3249 //
3250 // Slist Header
3251 //
3252 #ifndef _SLIST_HEADER_
3253 #define _SLIST_HEADER_
3254
3255 #if defined(_WIN64)
3256 typedef struct _SLIST_ENTRY *PSLIST_ENTRY;
3257 typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
3258 PSLIST_ENTRY Next;
3259 } SLIST_ENTRY;
3260 typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
3261 struct {
3262 ULONGLONG Alignment;
3263 ULONGLONG Region;
3264 } DUMMYSTRUCTNAME;
3265 struct {
3266 ULONGLONG Depth:16;
3267 ULONGLONG Sequence:9;
3268 ULONGLONG NextEntry:39;
3269 ULONGLONG HeaderType:1;
3270 ULONGLONG Init:1;
3271 ULONGLONG Reserved:59;
3272 ULONGLONG Region:3;
3273 } Header8;
3274 struct {
3275 ULONGLONG Depth:16;
3276 ULONGLONG Sequence:48;
3277 ULONGLONG HeaderType:1;
3278 ULONGLONG Init:1;
3279 ULONGLONG Reserved:2;
3280 ULONGLONG NextEntry:60;
3281 } Header16;
3282 } SLIST_HEADER, *PSLIST_HEADER;
3283 #else
3284 #define SLIST_ENTRY SINGLE_LIST_ENTRY
3285 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
3286 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
3287 typedef union _SLIST_HEADER {
3288 ULONGLONG Alignment;
3289 struct {
3290 SLIST_ENTRY Next;
3291 USHORT Depth;
3292 USHORT Sequence;
3293 } DUMMYSTRUCTNAME;
3294 } SLIST_HEADER, *PSLIST_HEADER;
3295 #endif
3296
3297 #endif /* _SLIST_HEADER_ */
3298
3299
3300 NTSYSAPI
3301 VOID
3302 NTAPI
3303 RtlInitializeSListHead (
3304 IN PSLIST_HEADER ListHead
3305 );
3306
3307 NTSYSAPI
3308 PSLIST_ENTRY
3309 NTAPI
3310 RtlFirstEntrySList (
3311 IN const SLIST_HEADER *ListHead
3312 );
3313
3314 NTSYSAPI
3315 PSLIST_ENTRY
3316 NTAPI
3317 RtlInterlockedPopEntrySList (
3318 IN PSLIST_HEADER ListHead
3319 );
3320
3321 NTSYSAPI
3322 PSLIST_ENTRY
3323 NTAPI
3324 RtlInterlockedPushEntrySList (
3325 IN PSLIST_HEADER ListHead,
3326 IN PSLIST_ENTRY ListEntry
3327 );
3328
3329 NTSYSAPI
3330 PSLIST_ENTRY
3331 NTAPI
3332 RtlInterlockedFlushSList (
3333 IN PSLIST_HEADER ListHead
3334 );
3335
3336 NTSYSAPI
3337 WORD
3338 NTAPI
3339 RtlQueryDepthSList (
3340 IN PSLIST_HEADER ListHead
3341 );
3342
3343 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
3344 WORD Type;
3345 WORD CreatorBackTraceIndex;
3346 struct _RTL_CRITICAL_SECTION *CriticalSection;
3347 LIST_ENTRY ProcessLocksList;
3348 DWORD EntryCount;
3349 DWORD ContentionCount;
3350 DWORD Flags;
3351 WORD CreatorBackTraceIndexHigh;
3352 WORD SpareWORD;
3353 } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG;
3354 typedef struct _RTL_CRITICAL_SECTION {
3355 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
3356 LONG LockCount;
3357 LONG RecursionCount;
3358 HANDLE OwningThread;
3359 HANDLE LockSemaphore;
3360 ULONG_PTR SpinCount;
3361 } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
3362
3363 NTSYSAPI
3364 WORD
3365 NTAPI
3366 RtlCaptureStackBackTrace(
3367 IN DWORD FramesToSkip,
3368 IN DWORD FramesToCapture,
3369 OUT PVOID *BackTrace,
3370 OUT PDWORD BackTraceHash OPTIONAL
3371 );
3372
3373 NTSYSAPI
3374 VOID
3375 NTAPI
3376 RtlCaptureContext(
3377 PCONTEXT ContextRecord
3378 );
3379
3380 NTSYSAPI
3381 PVOID
3382 NTAPI
3383 RtlPcToFileHeader(
3384 IN PVOID PcValue,
3385 PVOID* BaseOfImage
3386 );
3387
3388 NTSYSAPI
3389 VOID
3390 NTAPI
3391 RtlUnwind (
3392 IN PVOID TargetFrame OPTIONAL,
3393 IN PVOID TargetIp OPTIONAL,
3394 IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL,
3395 IN PVOID ReturnValue
3396 );
3397
3398 #define RTL_SRWLOCK_INIT {0}
3399 typedef struct _RTL_SRWLOCK
3400 {
3401 PVOID Ptr;
3402 } RTL_SRWLOCK, *PRTL_SRWLOCK;
3403
3404 #define RTL_CONDITION_VARIABLE_INIT {0}
3405 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
3406 typedef struct _RTL_CONDITION_VARIABLE
3407 {
3408 PVOID Ptr;
3409 } RTL_CONDITION_VARIABLE, *PRTL_CONDITION_VARIABLE;
3410
3411 typedef LONG
3412 (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
3413 struct _EXCEPTION_POINTERS *ExceptionInfo
3414 );
3415
3416 typedef struct _EVENTLOGRECORD {
3417 DWORD Length;
3418 DWORD Reserved;
3419 DWORD RecordNumber;
3420 DWORD TimeGenerated;
3421 DWORD TimeWritten;
3422 DWORD EventID;
3423 WORD EventType;
3424 WORD NumStrings;
3425 WORD EventCategory;
3426 WORD ReservedFlags;
3427 DWORD ClosingRecordNumber;
3428 DWORD StringOffset;
3429 DWORD UserSidLength;
3430 DWORD UserSidOffset;
3431 DWORD DataLength;
3432 DWORD DataOffset;
3433 } EVENTLOGRECORD,*PEVENTLOGRECORD;
3434
3435 typedef struct _OSVERSIONINFOA {
3436 DWORD dwOSVersionInfoSize;
3437 DWORD dwMajorVersion;
3438 DWORD dwMinorVersion;
3439 DWORD dwBuildNumber;
3440 DWORD dwPlatformId;
3441 CHAR szCSDVersion[128];
3442 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
3443
3444 typedef struct _OSVERSIONINFOW {
3445 DWORD dwOSVersionInfoSize;
3446 DWORD dwMajorVersion;
3447 DWORD dwMinorVersion;
3448 DWORD dwBuildNumber;
3449 DWORD dwPlatformId;
3450 WCHAR szCSDVersion[128];
3451 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW;
3452
3453 typedef struct _OSVERSIONINFOEXA {
3454 DWORD dwOSVersionInfoSize;
3455 DWORD dwMajorVersion;
3456 DWORD dwMinorVersion;
3457 DWORD dwBuildNumber;
3458 DWORD dwPlatformId;
3459 CHAR szCSDVersion[128];
3460 WORD wServicePackMajor;
3461 WORD wServicePackMinor;
3462 WORD wSuiteMask;
3463 BYTE wProductType;
3464 BYTE wReserved;
3465 } OSVERSIONINFOEXA, *POSVERSIONINFOEXA, *LPOSVERSIONINFOEXA;
3466
3467 typedef struct _OSVERSIONINFOEXW {
3468 DWORD dwOSVersionInfoSize;
3469 DWORD dwMajorVersion;
3470 DWORD dwMinorVersion;
3471 DWORD dwBuildNumber;
3472 DWORD dwPlatformId;
3473 WCHAR szCSDVersion[128];
3474 WORD wServicePackMajor;
3475 WORD wServicePackMinor;
3476 WORD wSuiteMask;
3477 BYTE wProductType;
3478 BYTE wReserved;
3479 } OSVERSIONINFOEXW, *POSVERSIONINFOEXW, *LPOSVERSIONINFOEXW;
3480
3481 #include <pshpack2.h>
3482 typedef struct _IMAGE_VXD_HEADER {
3483 WORD e32_magic;
3484 BYTE e32_border;
3485 BYTE e32_worder;
3486 DWORD e32_level;
3487 WORD e32_cpu;
3488 WORD e32_os;
3489 DWORD e32_ver;
3490 DWORD e32_mflags;
3491 DWORD e32_mpages;
3492 DWORD e32_startobj;
3493 DWORD e32_eip;
3494 DWORD e32_stackobj;
3495 DWORD e32_esp;
3496 DWORD e32_pagesize;
3497 DWORD e32_lastpagesize;
3498 DWORD e32_fixupsize;
3499 DWORD e32_fixupsum;
3500 DWORD e32_ldrsize;
3501 DWORD e32_ldrsum;
3502 DWORD e32_objtab;
3503 DWORD e32_objcnt;
3504 DWORD e32_objmap;
3505 DWORD e32_itermap;
3506 DWORD e32_rsrctab;
3507 DWORD e32_rsrccnt;
3508 DWORD e32_restab;
3509 DWORD e32_enttab;
3510 DWORD e32_dirtab;
3511 DWORD e32_dircnt;
3512 DWORD e32_fpagetab;
3513 DWORD e32_frectab;
3514 DWORD e32_impmod;
3515 DWORD e32_impmodcnt;
3516 DWORD e32_impproc;
3517 DWORD e32_pagesum;
3518 DWORD e32_datapage;
3519 DWORD e32_preload;
3520 DWORD e32_nrestab;
3521 DWORD e32_cbnrestab;
3522 DWORD e32_nressum;
3523 DWORD e32_autodata;
3524 DWORD e32_debuginfo;
3525 DWORD e32_debuglen;
3526 DWORD e32_instpreload;
3527 DWORD e32_instdemand;
3528 DWORD e32_heapsize;
3529 BYTE e32_res3[12];
3530 DWORD e32_winresoff;
3531 DWORD e32_winreslen;
3532 WORD e32_devid;
3533 WORD e32_ddkver;
3534 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
3535 #include <poppack.h>
3536
3537 typedef struct _IMAGE_FILE_HEADER {
3538 WORD Machine;
3539 WORD NumberOfSections;
3540 DWORD TimeDateStamp;
3541 DWORD PointerToSymbolTable;
3542 DWORD NumberOfSymbols;
3543 WORD SizeOfOptionalHeader;
3544 WORD Characteristics;
3545 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
3546
3547 typedef struct _IMAGE_DATA_DIRECTORY {
3548 DWORD VirtualAddress;
3549 DWORD Size;
3550 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
3551
3552 typedef struct _IMAGE_OPTIONAL_HEADER32 {
3553 WORD Magic;
3554 BYTE MajorLinkerVersion;
3555 BYTE MinorLinkerVersion;
3556 DWORD SizeOfCode;
3557 DWORD SizeOfInitializedData;
3558 DWORD SizeOfUninitializedData;
3559 DWORD AddressOfEntryPoint;
3560 DWORD BaseOfCode;
3561 DWORD BaseOfData;
3562 DWORD ImageBase;
3563 DWORD SectionAlignment;
3564 DWORD FileAlignment;
3565 WORD MajorOperatingSystemVersion;
3566 WORD MinorOperatingSystemVersion;
3567 WORD MajorImageVersion;
3568 WORD MinorImageVersion;
3569 WORD MajorSubsystemVersion;
3570 WORD MinorSubsystemVersion;
3571 DWORD Win32VersionValue;
3572 DWORD SizeOfImage;
3573 DWORD SizeOfHeaders;
3574 DWORD CheckSum;
3575 WORD Subsystem;
3576 WORD DllCharacteristics;
3577 DWORD SizeOfStackReserve;
3578 DWORD SizeOfStackCommit;
3579 DWORD SizeOfHeapReserve;
3580 DWORD SizeOfHeapCommit;
3581 DWORD LoaderFlags;
3582 DWORD NumberOfRvaAndSizes;
3583 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
3584 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
3585
3586 typedef struct _IMAGE_OPTIONAL_HEADER64 {
3587 WORD Magic;
3588 BYTE MajorLinkerVersion;
3589 BYTE MinorLinkerVersion;
3590 DWORD SizeOfCode;
3591 DWORD SizeOfInitializedData;
3592 DWORD SizeOfUninitializedData;
3593 DWORD AddressOfEntryPoint;
3594 DWORD BaseOfCode;
3595 ULONGLONG ImageBase;
3596 DWORD SectionAlignment;
3597 DWORD FileAlignment;
3598 WORD MajorOperatingSystemVersion;
3599 WORD MinorOperatingSystemVersion;
3600 WORD MajorImageVersion;
3601 WORD MinorImageVersion;
3602 WORD MajorSubsystemVersion;
3603 WORD MinorSubsystemVersion;
3604 DWORD Win32VersionValue;
3605 DWORD SizeOfImage;
3606 DWORD SizeOfHeaders;
3607 DWORD CheckSum;
3608 WORD Subsystem;
3609 WORD DllCharacteristics;
3610 ULONGLONG SizeOfStackReserve;
3611 ULONGLONG SizeOfStackCommit;
3612 ULONGLONG SizeOfHeapReserve;
3613 ULONGLONG SizeOfHeapCommit;
3614 DWORD LoaderFlags;
3615 DWORD NumberOfRvaAndSizes;
3616 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
3617 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
3618
3619 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
3620 WORD Magic;
3621 BYTE MajorLinkerVersion;
3622 BYTE MinorLinkerVersion;
3623 DWORD SizeOfCode;
3624 DWORD SizeOfInitializedData;
3625 DWORD SizeOfUninitializedData;
3626 DWORD AddressOfEntryPoint;
3627 DWORD BaseOfCode;
3628 DWORD BaseOfData;
3629 DWORD BaseOfBss;
3630 DWORD GprMask;
3631 DWORD CprMask[4];
3632 DWORD GpValue;
3633 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
3634
3635 #include <pshpack2.h>
3636 typedef struct _IMAGE_DOS_HEADER {
3637 WORD e_magic;
3638 WORD e_cblp;
3639 WORD e_cp;
3640 WORD e_crlc;
3641 WORD e_cparhdr;
3642 WORD e_minalloc;
3643 WORD e_maxalloc;
3644 WORD e_ss;
3645 WORD e_sp;
3646 WORD e_csum;
3647 WORD e_ip;
3648 WORD e_cs;
3649 WORD e_lfarlc;
3650 WORD e_ovno;
3651 WORD e_res[4];
3652 WORD e_oemid;
3653 WORD e_oeminfo;
3654 WORD e_res2[10];
3655 LONG e_lfanew;
3656 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
3657
3658 typedef struct _IMAGE_OS2_HEADER {
3659 WORD ne_magic;
3660 CHAR ne_ver;
3661 CHAR ne_rev;
3662 WORD ne_enttab;
3663 WORD ne_cbenttab;
3664 LONG ne_crc;
3665 WORD ne_flags;
3666 WORD ne_autodata;
3667 WORD ne_heap;
3668 WORD ne_stack;
3669 LONG ne_csip;
3670 LONG ne_sssp;
3671 WORD ne_cseg;
3672 WORD ne_cmod;
3673 WORD ne_cbnrestab;
3674 WORD ne_segtab;
3675 WORD ne_rsrctab;
3676 WORD ne_restab;
3677 WORD ne_modtab;
3678 WORD ne_imptab;
3679 LONG ne_nrestab;
3680 WORD ne_cmovent;
3681 WORD ne_align;
3682 WORD ne_cres;
3683 BYTE ne_exetyp;
3684 BYTE ne_flagsothers;
3685 WORD ne_pretthunks;
3686 WORD ne_psegrefbytes;
3687 WORD ne_swaparea;
3688 WORD ne_expver;
3689 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
3690 #include <poppack.h>
3691
3692 typedef struct _IMAGE_NT_HEADERS32 {
3693 DWORD Signature;
3694 IMAGE_FILE_HEADER FileHeader;
3695 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
3696 } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
3697
3698 typedef struct _IMAGE_NT_HEADERS64 {
3699 DWORD Signature;
3700 IMAGE_FILE_HEADER FileHeader;
3701 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
3702 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
3703
3704 #ifdef _WIN64
3705 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
3706 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
3707 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
3708 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
3709 #else
3710 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
3711 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
3712 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
3713 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
3714 #endif
3715
3716 typedef struct _IMAGE_ROM_HEADERS {
3717 IMAGE_FILE_HEADER FileHeader;
3718 IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
3719 } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
3720
3721 typedef struct _IMAGE_SECTION_HEADER {
3722 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
3723 union {
3724 DWORD PhysicalAddress;
3725 DWORD VirtualSize;
3726 } Misc;
3727 DWORD VirtualAddress;
3728 DWORD SizeOfRawData;
3729 DWORD PointerToRawData;
3730 DWORD PointerToRelocations;
3731 DWORD PointerToLinenumbers;
3732 WORD NumberOfRelocations;
3733 WORD NumberOfLinenumbers;
3734 DWORD Characteristics;
3735 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
3736
3737 #include <pshpack2.h>
3738 typedef struct _IMAGE_SYMBOL {
3739 union {
3740 BYTE ShortName[8];
3741 struct {
3742 DWORD Short;
3743 DWORD Long;
3744 } Name;
3745 PBYTE LongName[2];
3746 } N;
3747 DWORD Value;
3748 SHORT SectionNumber;
3749 WORD Type;
3750 BYTE StorageClass;
3751 BYTE NumberOfAuxSymbols;
3752 } IMAGE_SYMBOL,*PIMAGE_SYMBOL;
3753
3754 typedef struct _IMAGE_LINENUMBER {
3755 union {
3756 DWORD SymbolTableIndex;
3757 DWORD VirtualAddress;
3758 } Type;
3759 WORD Linenumber;
3760 } IMAGE_LINENUMBER,*PIMAGE_LINENUMBER;
3761
3762 typedef union _IMAGE_AUX_SYMBOL {
3763 struct {
3764 DWORD TagIndex;
3765 union {
3766 struct {
3767 WORD Linenumber;
3768 WORD Size;
3769 } LnSz;
3770 DWORD TotalSize;
3771 } Misc;
3772 union {
3773 struct {
3774 DWORD PointerToLinenumber;
3775 DWORD PointerToNextFunction;
3776 } Function;
3777 struct {
3778 WORD Dimension[4];
3779 } Array;
3780 } FcnAry;
3781 WORD TvIndex;
3782 } Sym;
3783 struct {
3784 BYTE Name[IMAGE_SIZEOF_SYMBOL];
3785 } File;
3786 struct {
3787 DWORD Length;
3788 WORD NumberOfRelocations;
3789 WORD NumberOfLinenumbers;
3790 DWORD CheckSum;
3791 SHORT Number;
3792 BYTE Selection;
3793 } Section;
3794 } IMAGE_AUX_SYMBOL,*PIMAGE_AUX_SYMBOL;
3795
3796 #ifndef __IMAGE_COR20_HEADER_DEFINED__
3797 #define __IMAGE_COR20_HEADER_DEFINED__
3798
3799 typedef enum ReplacesCorHdrNumericDefines
3800 {
3801 COMIMAGE_FLAGS_ILONLY = 0x00000001,
3802 COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,
3803 COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
3804 COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,
3805 COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,
3806
3807 COR_VERSION_MAJOR_V2 = 2,
3808 COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,
3809 COR_VERSION_MINOR = 0,
3810 COR_DELETED_NAME_LENGTH = 8,
3811 COR_VTABLEGAP_NAME_LENGTH = 8,
3812
3813 NATIVE_TYPE_MAX_CB = 1,
3814 COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE = 0xff,
3815
3816 IMAGE_COR_MIH_METHODRVA = 0x01,
3817 IMAGE_COR_MIH_EHRVA = 0x02,
3818 IMAGE_COR_MIH_BASICBLOCK = 0x08,
3819
3820 COR_VTABLE_32BIT = 0x01,
3821 COR_VTABLE_64BIT = 0x02,
3822 COR_VTABLE_FROM_UNMANAGED = 0x04,
3823 COR_VTABLE_CALL_MOST_DERIVED = 0x10,
3824
3825 IMAGE_COR_EATJ_THUNK_SIZE = 32,
3826
3827 MAX_CLASS_NAME = 1024,
3828 MAX_PACKAGE_NAME = 1024,
3829 } ReplacesCorHdrNumericDefines;
3830
3831 typedef struct IMAGE_COR20_HEADER
3832 {
3833 DWORD cb;
3834 WORD MajorRuntimeVersion;
3835 WORD MinorRuntimeVersion;
3836
3837 IMAGE_DATA_DIRECTORY MetaData;
3838 DWORD Flags;
3839 DWORD EntryPointToken;
3840
3841 IMAGE_DATA_DIRECTORY Resources;
3842 IMAGE_DATA_DIRECTORY StrongNameSignature;
3843 IMAGE_DATA_DIRECTORY CodeManagerTable;
3844 IMAGE_DATA_DIRECTORY VTableFixups;
3845 IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
3846 IMAGE_DATA_DIRECTORY ManagedNativeHeader;
3847
3848 } IMAGE_COR20_HEADER, *PIMAGE_COR20_HEADER;
3849
3850 #endif
3851
3852 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
3853 DWORD NumberOfSymbols;
3854 DWORD LvaToFirstSymbol;
3855 DWORD NumberOfLinenumbers;
3856 DWORD LvaToFirstLinenumber;
3857 DWORD RvaToFirstByteOfCode;
3858 DWORD RvaToLastByteOfCode;
3859 DWORD RvaToFirstByteOfData;
3860 DWORD RvaToLastByteOfData;
3861 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
3862
3863 typedef struct _IMAGE_RELOCATION {
3864 _ANONYMOUS_UNION union {
3865 DWORD VirtualAddress;
3866 DWORD RelocCount;
3867 } DUMMYUNIONNAME;
3868 DWORD SymbolTableIndex;
3869 WORD Type;
3870 } IMAGE_RELOCATION,*PIMAGE_RELOCATION;
3871 #include <poppack.h>
3872
3873 typedef struct _IMAGE_BASE_RELOCATION {
3874 DWORD VirtualAddress;
3875 DWORD SizeOfBlock;
3876 } IMAGE_BASE_RELOCATION,*PIMAGE_BASE_RELOCATION;
3877
3878 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
3879 BYTE Name[16];
3880 BYTE Date[12];
3881 BYTE UserID[6];
3882 BYTE GroupID[6];
3883 BYTE Mode[8];
3884 BYTE Size[10];
3885 BYTE EndHeader[2];
3886 } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
3887
3888 typedef struct _IMAGE_EXPORT_DIRECTORY {
3889 DWORD Characteristics;
3890 DWORD TimeDateStamp;
3891 WORD MajorVersion;
3892 WORD MinorVersion;
3893 DWORD Name;
3894 DWORD Base;
3895 DWORD NumberOfFunctions;
3896 DWORD NumberOfNames;
3897 DWORD AddressOfFunctions;
3898 DWORD AddressOfNames;
3899 DWORD AddressOfNameOrdinals;
3900 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
3901
3902 typedef struct _IMAGE_IMPORT_BY_NAME {
3903 WORD Hint;
3904 BYTE Name[1];
3905 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
3906
3907 #include <pshpack8.h>
3908 typedef struct _IMAGE_THUNK_DATA64 {
3909 union {
3910 ULONGLONG ForwarderString;
3911 ULONGLONG Function;
3912 ULONGLONG Ordinal;
3913 ULONGLONG AddressOfData;
3914 } u1;
3915 } IMAGE_THUNK_DATA64;
3916 typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
3917 #include <poppack.h>
3918
3919 typedef struct _IMAGE_THUNK_DATA32 {
3920 union {
3921 DWORD ForwarderString;
3922 DWORD Function;
3923 DWORD Ordinal;
3924 DWORD AddressOfData;
3925 } u1;
3926 } IMAGE_THUNK_DATA32;
3927 typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
3928
3929 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ULL
3930 #define IMAGE_ORDINAL_FLAG32 0x80000000
3931 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff)
3932 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
3933 #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
3934 #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
3935
3936 typedef VOID
3937 (NTAPI *PIMAGE_TLS_CALLBACK)(PVOID DllHandle,DWORD Reason,PVOID Reserved);
3938
3939 typedef struct _IMAGE_TLS_DIRECTORY64 {
3940 ULONGLONG StartAddressOfRawData;
3941 ULONGLONG EndAddressOfRawData;
3942 ULONGLONG AddressOfIndex;
3943 ULONGLONG AddressOfCallBacks;
3944 DWORD SizeOfZeroFill;
3945 DWORD Characteristics;
3946 } IMAGE_TLS_DIRECTORY64;
3947 typedef IMAGE_TLS_DIRECTORY64 *PIMAGE_TLS_DIRECTORY64;
3948
3949 typedef struct _IMAGE_TLS_DIRECTORY32 {
3950 DWORD StartAddressOfRawData;
3951 DWORD EndAddressOfRawData;
3952 DWORD AddressOfIndex;
3953 DWORD AddressOfCallBacks;
3954 DWORD SizeOfZeroFill;
3955 DWORD Characteristics;
3956 } IMAGE_TLS_DIRECTORY32;
3957 typedef IMAGE_TLS_DIRECTORY32 *PIMAGE_TLS_DIRECTORY32;
3958 #ifdef _WIN64
3959 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
3960 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
3961 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
3962 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
3963 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
3964 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
3965 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
3966 #else
3967 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
3968 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
3969 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
3970 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
3971 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
3972 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
3973 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
3974 #endif
3975
3976 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
3977 _ANONYMOUS_UNION union {
3978 DWORD Characteristics;
3979 ULONG OriginalFirstThunk;
3980 } DUMMYUNIONNAME;
3981 DWORD TimeDateStamp;
3982 DWORD ForwarderChain;
3983 DWORD Name;
3984 ULONG FirstThunk;
3985 } IMAGE_IMPORT_DESCRIPTOR,*PIMAGE_IMPORT_DESCRIPTOR;
3986
3987 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
3988 DWORD TimeDateStamp;
3989 WORD OffsetModuleName;
3990 WORD NumberOfModuleForwarderRefs;
3991 } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
3992
3993 typedef struct _IMAGE_BOUND_FORWARDER_REF {
3994 DWORD TimeDateStamp;
3995 WORD OffsetModuleName;
3996 WORD Reserved;
3997 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
3998
3999 typedef struct _IMAGE_RESOURCE_DIRECTORY {
4000 DWORD Characteristics;
4001 DWORD TimeDateStamp;
4002 WORD MajorVersion;
4003 WORD MinorVersion;
4004 WORD NumberOfNamedEntries;
4005 WORD NumberOfIdEntries;
4006 } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
4007 _ANONYMOUS_STRUCT typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
4008 _ANONYMOUS_UNION union {
4009 _ANONYMOUS_STRUCT struct {
4010 DWORD NameOffset:31;
4011 DWORD NameIsString:1;
4012 }DUMMYSTRUCTNAME1;
4013 DWORD Name;
4014 _ANONYMOUS_STRUCT struct {
4015 WORD Id;
4016 WORD __pad;
4017 }DUMMYSTRUCTNAME2;
4018 } DUMMYUNIONNAME1;
4019 _ANONYMOUS_UNION union {
4020 DWORD OffsetToData;
4021 _ANONYMOUS_STRUCT struct {
4022 DWORD OffsetToDirectory:31;
4023 DWORD DataIsDirectory:1;
4024 } DUMMYSTRUCTNAME3;
4025 } DUMMYUNIONNAME2;
4026 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
4027
4028 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
4029 WORD Length;
4030 CHAR NameString[1];
4031 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
4032
4033 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
4034 WORD Length;
4035 WCHAR NameString[1];
4036 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
4037
4038 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
4039 DWORD OffsetToData;
4040 DWORD Size;
4041 DWORD CodePage;
4042 DWORD Reserved;
4043 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
4044
4045 typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY {
4046 DWORD Size;
4047 DWORD TimeDateStamp;
4048 WORD MajorVersion;
4049 WORD MinorVersion;
4050 DWORD GlobalFlagsClear;
4051 DWORD GlobalFlagsSet;
4052 DWORD CriticalSectionDefaultTimeout;
4053 DWORD DeCommitFreeBlockThreshold;
4054 DWORD DeCommitTotalFreeThreshold;
4055 DWORD LockPrefixTable;
4056 DWORD MaximumAllocationSize;
4057 DWORD VirtualMemoryThreshold;
4058 DWORD ProcessHeapFlags;
4059 DWORD ProcessAffinityMask;
4060 WORD CSDVersion;
4061 WORD Reserved1;
4062 DWORD EditList;
4063 DWORD SecurityCookie;
4064 DWORD SEHandlerTable;
4065 DWORD SEHandlerCount;
4066 } IMAGE_LOAD_CONFIG_DIRECTORY,*PIMAGE_LOAD_CONFIG_DIRECTORY;
4067
4068 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
4069 DWORD BeginAddress;
4070 DWORD EndAddress;
4071 PVOID ExceptionHandler;
4072 PVOID HandlerData;
4073 DWORD PrologEndAddress;
4074 } IMAGE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_RUNTIME_FUNCTION_ENTRY;
4075
4076 typedef struct _IMAGE_DEBUG_DIRECTORY {
4077 DWORD Characteristics;
4078 DWORD TimeDateStamp;
4079 WORD MajorVersion;
4080 WORD MinorVersion;
4081 DWORD Type;
4082 DWORD SizeOfData;
4083 DWORD AddressOfRawData;
4084 DWORD PointerToRawData;
4085 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
4086
4087 typedef struct _FPO_DATA {
4088 DWORD ulOffStart;
4089 DWORD cbProcSize;
4090 DWORD cdwLocals;
4091 WORD cdwParams;
4092 WORD cbProlog:8;
4093 WORD cbRegs:3;
4094 WORD fHasSEH:1;
4095 WORD fUseBP:1;
4096 WORD reserved:1;
4097 WORD cbFrame:2;
4098 } FPO_DATA,*PFPO_DATA;
4099
4100 typedef struct _IMAGE_DEBUG_MISC {
4101 DWORD DataType;
4102 DWORD Length;
4103 BOOLEAN Unicode;
4104 BYTE Reserved[3];
4105 BYTE Data[1];
4106 } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
4107
4108 typedef struct _IMAGE_FUNCTION_ENTRY {
4109 DWORD StartingAddress;
4110 DWORD EndingAddress;
4111 DWORD EndOfPrologue;
4112 } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
4113
4114 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
4115 WORD Signature;
4116 WORD Flags;
4117 WORD Machine;
4118 WORD Characteristics;
4119 DWORD TimeDateStamp;
4120 DWORD CheckSum;
4121 DWORD ImageBase;
4122 DWORD SizeOfImage;
4123 DWORD NumberOfSections;
4124 DWORD ExportedNamesSize;
4125 DWORD DebugDirectorySize;
4126 DWORD SectionAlignment;
4127 DWORD Reserved[2];
4128 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
4129
4130 typedef enum _CM_SERVICE_NODE_TYPE {
4131 DriverType=SERVICE_KERNEL_DRIVER,
4132 FileSystemType=SERVICE_FILE_SYSTEM_DRIVER,
4133 Win32ServiceOwnProcess=SERVICE_WIN32_OWN_PROCESS,
4134 Win32ServiceShareProcess=SERVICE_WIN32_SHARE_PROCESS,
4135 AdapterType=SERVICE_ADAPTER,
4136 RecognizerType=SERVICE_RECOGNIZER_DRIVER
4137 } SERVICE_NODE_TYPE;
4138
4139 typedef enum _CM_SERVICE_LOAD_TYPE {
4140 BootLoad=SERVICE_BOOT_START,
4141 SystemLoad=SERVICE_SYSTEM_START,
4142 AutoLoad=SERVICE_AUTO_START,
4143 DemandLoad=SERVICE_DEMAND_START,
4144 DisableLoad=SERVICE_DISABLED
4145 } SERVICE_LOAD_TYPE;
4146
4147 typedef enum _CM_ERROR_CONTROL_TYPE {
4148 IgnoreError=SERVICE_ERROR_IGNORE,
4149 NormalError=SERVICE_ERROR_NORMAL,
4150 SevereError=SERVICE_ERROR_SEVERE,
4151 CriticalError=SERVICE_ERROR_CRITICAL
4152 } SERVICE_ERROR_TYPE;
4153
4154 typedef struct _NT_TIB {
4155 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
4156 PVOID StackBase;
4157 PVOID StackLimit;
4158 PVOID SubSystemTib;
4159 _ANONYMOUS_UNION union {
4160 PVOID FiberData;
4161 DWORD Version;
4162 } DUMMYUNIONNAME;
4163 PVOID ArbitraryUserPointer;
4164 struct _NT_TIB *Self;
4165 } NT_TIB,*PNT_TIB;
4166
4167 typedef struct _NT_TIB32 {
4168 DWORD ExceptionList;
4169 DWORD StackBase;
4170 DWORD StackLimit;
4171 DWORD SubSystemTib;
4172 union {
4173 DWORD FiberData;
4174 DWORD Version;
4175 };
4176 DWORD ArbitraryUserPointer;
4177 DWORD Self;
4178 } NT_TIB32,*PNT_TIB32;
4179
4180 typedef struct _NT_TIB64 {
4181 DWORD64 ExceptionList;
4182 DWORD64 StackBase;
4183 DWORD64 StackLimit;
4184 DWORD64 SubSystemTib;
4185 union {
4186 DWORD64 FiberData;
4187 DWORD Version;
4188 };
4189 DWORD64 ArbitraryUserPointer;
4190 DWORD64 Self;
4191 } NT_TIB64,*PNT_TIB64;
4192
4193 typedef struct _REPARSE_GUID_DATA_BUFFER {
4194 DWORD ReparseTag;
4195 WORD ReparseDataLength;
4196 WORD Reserved;
4197 GUID ReparseGuid;
4198 struct {
4199 BYTE DataBuffer[1];
4200 } GenericReparseBuffer;
4201 } REPARSE_GUID_DATA_BUFFER, *PREPARSE_GUID_DATA_BUFFER;
4202
4203 typedef struct _REPARSE_POINT_INFORMATION {
4204 WORD ReparseDataLength;
4205 WORD UnparsedNameLength;
4206 } REPARSE_POINT_INFORMATION, *PREPARSE_POINT_INFORMATION;
4207
4208 typedef union _FILE_SEGMENT_ELEMENT {
4209 PVOID64 Buffer;
4210 ULONGLONG Alignment;
4211 }FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
4212
4213 /* JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants */
4214 #define JOB_OBJECT_LIMIT_WORKINGSET 0x0001
4215 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x0002
4216 #define JOB_OBJECT_LIMIT_JOB_TIME 0x0004
4217 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x0008
4218 #define JOB_OBJECT_LIMIT_AFFINITY 0x0010
4219 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x0020
4220 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x0040
4221 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x0080
4222 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x0100
4223 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x0200
4224 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x0400
4225 #define JOB_OBJECT_BREAKAWAY_OK 0x0800
4226 #define JOB_OBJECT_SILENT_BREAKAWAY 0x1000
4227
4228 /* JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants */
4229 #define JOB_OBJECT_UILIMIT_HANDLES 0x0001
4230 #define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x0002
4231 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x0004
4232 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x0008
4233 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x0010
4234 #define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x0020
4235 #define JOB_OBJECT_UILIMIT_DESKTOP 0x0040
4236 #define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x0080
4237
4238 /* JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants */
4239 #define JOB_OBJECT_SECURITY_NO_ADMIN 0x0001
4240 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x0002
4241 #define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x0004
4242 #define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x0008
4243
4244 /* JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants */
4245 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
4246 #define JOB_OBJECT_POST_AT_END_OF_JOB 1
4247
4248 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
4249 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
4250 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
4251 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
4252 #define JOB_OBJECT_MSG_NEW_PROCESS 6
4253 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
4254 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
4255 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
4256 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
4257
4258 #define JOB_OBJECT_ASSIGN_PROCESS 1
4259 #define JOB_OBJECT_SET_ATTRIBUTES 2
4260 #define JOB_OBJECT_QUERY 4
4261 #define JOB_OBJECT_TERMINATE 8
4262 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES 16
4263 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|31)
4264
4265 typedef enum _JOBOBJECTINFOCLASS {
4266 JobObjectBasicAccountingInformation = 1,
4267 JobObjectBasicLimitInformation,
4268 JobObjectBasicProcessIdList,
4269 JobObjectBasicUIRestrictions,
4270 JobObjectSecurityLimitInformation,
4271 JobObjectEndOfJobTimeInformation,
4272 JobObjectAssociateCompletionPortInformation,
4273 JobObjectBasicAndIoAccountingInformation,
4274 JobObjectExtendedLimitInformation,
4275 JobObjectJobSetInformation,
4276 MaxJobObjectInfoClass
4277 } JOBOBJECTINFOCLASS;
4278
4279 typedef struct _JOB_SET_ARRAY
4280 {
4281 HANDLE JobHandle;
4282 DWORD MemberLevel;
4283 DWORD Flags;
4284 } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
4285
4286 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
4287 LARGE_INTEGER TotalUserTime;
4288 LARGE_INTEGER TotalKernelTime;
4289 LARGE_INTEGER ThisPeriodTotalUserTime;
4290 LARGE_INTEGER ThisPeriodTotalKernelTime;
4291 DWORD TotalPageFaultCount;
4292 DWORD TotalProcesses;
4293 DWORD ActiveProcesses;
4294 DWORD TotalTerminatedProcesses;
4295 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
4296 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
4297 LARGE_INTEGER PerProcessUserTimeLimit;
4298 LARGE_INTEGER PerJobUserTimeLimit;
4299 DWORD LimitFlags;
4300 SIZE_T MinimumWorkingSetSize;
4301 SIZE_T MaximumWorkingSetSize;
4302 DWORD ActiveProcessLimit;
4303 ULONG_PTR Affinity;
4304 DWORD PriorityClass;
4305 DWORD SchedulingClass;
4306 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
4307
4308 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
4309 DWORD NumberOfAssignedProcesses;
4310 DWORD NumberOfProcessIdsInList;
4311 ULONG_PTR ProcessIdList[1];
4312 } JOBOBJECT_BASIC_PROCESS_ID_LIST, *PJOBOBJECT_BASIC_PROCESS_ID_LIST;
4313
4314 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
4315 DWORD UIRestrictionsClass;
4316 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
4317
4318 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
4319 DWORD SecurityLimitFlags;
4320 HANDLE JobToken;
4321 PTOKEN_GROUPS SidsToDisable;
4322 PTOKEN_PRIVILEGES PrivilegesToDelete;
4323 PTOKEN_GROUPS RestrictedSids;
4324 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
4325
4326 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
4327 DWORD EndOfJobTimeAction;
4328 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
4329
4330 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
4331 PVOID CompletionKey;
4332 HANDLE CompletionPort;
4333 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
4334
4335 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
4336 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
4337 IO_COUNTERS IoInfo;
4338 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
4339
4340 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
4341 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
4342 IO_COUNTERS IoInfo;
4343 SIZE_T ProcessMemoryLimit;
4344 SIZE_T JobMemoryLimit;
4345 SIZE_T PeakProcessMemoryUsed;
4346 SIZE_T PeakJobMemoryUsed;
4347 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
4348
4349 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
4350 DWORD MemberLevel;
4351 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
4352
4353 /* Fixme: Making these defines conditional on WINVER will break ddk includes */
4354 #if 1 /* (WINVER >= 0x0500) */
4355
4356 #define ES_SYSTEM_REQUIRED 0x00000001
4357 #define ES_DISPLAY_REQUIRED 0x00000002
4358 #define ES_USER_PRESENT 0x00000004
4359 #define ES_CONTINUOUS 0x80000000
4360
4361 typedef enum _LATENCY_TIME {
4362 LT_DONT_CARE,
4363 LT_LOWEST_LATENCY
4364 } LATENCY_TIME, *PLATENCY_TIME;
4365
4366 typedef enum _SYSTEM_POWER_STATE {
4367 PowerSystemUnspecified,
4368 PowerSystemWorking,
4369 PowerSystemSleeping1,
4370 PowerSystemSleeping2,
4371 PowerSystemSleeping3,
4372 PowerSystemHibernate,
4373 PowerSystemShutdown,
4374 PowerSystemMaximum
4375 } SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
4376 #define POWER_SYSTEM_MAXIMUM PowerSystemMaximum
4377
4378 typedef enum {
4379 PowerActionNone,
4380 PowerActionReserved,
4381 PowerActionSleep,
4382 PowerActionHibernate,
4383 PowerActionShutdown,
4384 PowerActionShutdownReset,
4385 PowerActionShutdownOff,
4386 PowerActionWarmEject
4387 } POWER_ACTION, *PPOWER_ACTION;
4388
4389 typedef enum _DEVICE_POWER_STATE {
4390 PowerDeviceUnspecified,
4391 PowerDeviceD0,
4392 PowerDeviceD1,
4393 PowerDeviceD2,
4394 PowerDeviceD3,
4395 PowerDeviceMaximum
4396 } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
4397
4398 typedef struct {
4399 DWORD Granularity;
4400 DWORD Capacity;
4401 } BATTERY_REPORTING_SCALE, *PBATTERY_REPORTING_SCALE;
4402
4403 typedef struct _POWER_ACTION_POLICY {
4404 POWER_ACTION Action;
4405 ULONG Flags;
4406 ULONG EventCode;
4407 } POWER_ACTION_POLICY, *PPOWER_ACTION_POLICY;
4408
4409 /* POWER_ACTION_POLICY.Flags constants */
4410 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
4411 #define POWER_ACTION_UI_ALLOWED 0x00000002
4412 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
4413 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
4414 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
4415 #define POWER_ACTION_DISABLE_WAKES 0x40000000
4416 #define POWER_ACTION_CRITICAL 0x80000000
4417
4418 /* POWER_ACTION_POLICY.EventCode constants */
4419 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
4420 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
4421 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
4422 #define POWER_USER_NOTIFY_BUTTON 0x00000008
4423 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
4424 #define POWER_FORCE_TRIGGER_RESET 0x80000000
4425
4426 #define DISCHARGE_POLICY_CRITICAL 0
4427 #define DISCHARGE_POLICY_LOW 1
4428 #define NUM_DISCHARGE_POLICIES 4
4429
4430 #define PO_THROTTLE_NONE 0
4431 #define PO_THROTTLE_CONSTANT 1
4432 #define PO_THROTTLE_DEGRADE 2
4433 #define PO_THROTTLE_ADAPTIVE 3
4434 #define PO_THROTTLE_MAXIMUM 4
4435
4436 typedef struct _SYSTEM_POWER_LEVEL {
4437 BOOLEAN Enable;
4438 UCHAR Spare[3];
4439 ULONG BatteryLevel;
4440 POWER_ACTION_POLICY PowerPolicy;
4441 SYSTEM_POWER_STATE MinSystemState;
4442 } SYSTEM_POWER_LEVEL, *PSYSTEM_POWER_LEVEL;
4443
4444 typedef struct _SYSTEM_POWER_POLICY {
4445 ULONG Revision;
4446 POWER_ACTION_POLICY PowerButton;
4447 POWER_ACTION_POLICY SleepButton;
4448 POWER_ACTION_POLICY LidClose;
4449 SYSTEM_POWER_STATE LidOpenWake;
4450 ULONG Reserved;
4451 POWER_ACTION_POLICY Idle;
4452 ULONG IdleTimeout;
4453 UCHAR IdleSensitivity;
4454 UCHAR DynamicThrottle;
4455 UCHAR Spare2[2];
4456 SYSTEM_POWER_STATE MinSleep;
4457 SYSTEM_POWER_STATE MaxSleep;
4458 SYSTEM_POWER_STATE ReducedLatencySleep;
4459 ULONG WinLogonFlags;
4460 ULONG Spare3;
4461 ULONG DozeS4Timeout;
4462 ULONG BroadcastCapacityResolution;
4463 SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
4464 ULONG VideoTimeout;
4465 BOOLEAN VideoDimDisplay;
4466 ULONG VideoReserved[3];
4467 ULONG SpindownTimeout;
4468 BOOLEAN OptimizeForPower;
4469 UCHAR FanThrottleTolerance;
4470 UCHAR ForcedThrottle;
4471 UCHAR MinThrottle;
4472 POWER_ACTION_POLICY OverThrottled;
4473 } SYSTEM_POWER_POLICY, *PSYSTEM_POWER_POLICY;
4474
4475 typedef struct _SYSTEM_POWER_CAPABILITIES {
4476 BOOLEAN PowerButtonPresent;
4477 BOOLEAN SleepButtonPresent;
4478 BOOLEAN LidPresent;
4479 BOOLEAN SystemS1;
4480 BOOLEAN SystemS2;
4481 BOOLEAN SystemS3;
4482 BOOLEAN SystemS4;
4483 BOOLEAN SystemS5;
4484 BOOLEAN HiberFilePresent;
4485 BOOLEAN FullWake;
4486 BOOLEAN VideoDimPresent;
4487 BOOLEAN ApmPresent;
4488 BOOLEAN UpsPresent;
4489 BOOLEAN ThermalControl;
4490 BOOLEAN ProcessorThrottle;
4491 UCHAR ProcessorMinThrottle;
4492 UCHAR ProcessorMaxThrottle;
4493 UCHAR spare2[4];
4494 BOOLEAN DiskSpinDown;
4495 UCHAR spare3[8];
4496 BOOLEAN SystemBatteriesPresent;
4497 BOOLEAN BatteriesAreShortTerm;
4498 BATTERY_REPORTING_SCALE BatteryScale[3];
4499 SYSTEM_POWER_STATE AcOnLineWake;
4500 SYSTEM_POWER_STATE SoftLidWake;
4501 SYSTEM_POWER_STATE RtcWake;
4502 SYSTEM_POWER_STATE MinDeviceWakeState;
4503 SYSTEM_POWER_STATE DefaultLowLatencyWake;
4504 } SYSTEM_POWER_CAPABILITIES, *PSYSTEM_POWER_CAPABILITIES;
4505
4506 typedef struct _SYSTEM_BATTERY_STATE {
4507 BOOLEAN AcOnLine;
4508 BOOLEAN BatteryPresent;
4509 BOOLEAN Charging;
4510 BOOLEAN Discharging;
4511 BOOLEAN Spare1[4];
4512 ULONG MaxCapacity;
4513 ULONG RemainingCapacity;
4514 ULONG Rate;
4515 ULONG EstimatedTime;
4516 ULONG DefaultAlert1;
4517 ULONG DefaultAlert2;
4518 } SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
4519
4520 typedef struct _PROCESSOR_POWER_INFORMATION {
4521 ULONG Number;
4522 ULONG MaxMhz;
4523 ULONG CurrentMhz;
4524 ULONG MhzLimit;
4525 ULONG MaxIdleState;
4526 ULONG CurrentIdleState;
4527 } PROCESSOR_POWER_INFORMATION, *PPROCESSOR_POWER_INFORMATION;
4528
4529 typedef DWORD EXECUTION_STATE;
4530 typedef enum _POWER_INFORMATION_LEVEL {
4531 SystemPowerPolicyAc,
4532 SystemPowerPolicyDc,
4533 VerifySystemPolicyAc,
4534 VerifySystemPolicyDc,
4535 SystemPowerCapabilities,
4536 SystemBatteryState,
4537 SystemPowerStateHandler,
4538 ProcessorStateHandler,
4539 SystemPowerPolicyCurrent,
4540 AdministratorPowerPolicy,
4541 SystemReserveHiberFile,
4542 ProcessorInformation,
4543 SystemPowerInformation,
4544 ProcessorStateHandler2,
4545 LastWakeTime,
4546 LastSleepTime,
4547 SystemExecutionState,
4548 SystemPowerStateNotifyHandler,
4549 ProcessorPowerPolicyAc,
4550 ProcessorPowerPolicyDc,
4551 VerifyProcessorPowerPolicyAc,
4552 VerifyProcessorPowerPolicyDc,
4553 ProcessorPowerPolicyCurrent
4554 } POWER_INFORMATION_LEVEL;
4555
4556 #if 1 /* (WIN32_WINNT >= 0x0500) */
4557 typedef struct _SYSTEM_POWER_INFORMATION {
4558 ULONG MaxIdlenessAllowed;
4559 ULONG Idleness;
4560 ULONG TimeRemaining;
4561 UCHAR CoolingMode;
4562 } SYSTEM_POWER_INFORMATION,*PSYSTEM_POWER_INFORMATION;
4563 #endif
4564
4565 #if (_WIN32_WINNT >= 0x0500)
4566 #define _AUDIT_EVENT_TYPE_HACK 1
4567 typedef enum _AUDIT_EVENT_TYPE {
4568 AuditEventObjectAccess,
4569 AuditEventDirectoryServiceAccess
4570 } AUDIT_EVENT_TYPE, *PAUDIT_EVENT_TYPE;
4571 #endif
4572
4573 #if (_WIN32_WINNT >= 0x0501)
4574 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
4575 ActivationContextBasicInformation = 1,
4576 ActivationContextDetailedInformation,
4577 AssemblyDetailedInformationInActivationContext,
4578 FileInformationInAssemblyOfAssemblyInActivationContext
4579 } ACTIVATION_CONTEXT_INFO_CLASS;
4580 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
4581 DWORD ulFlags;
4582 DWORD ulEncodedAssemblyIdentityLength;
4583 DWORD ulManifestPathType;
4584 DWORD ulManifestPathLength;
4585 LARGE_INTEGER liManifestLastWriteTime;
4586 DWORD ulPolicyPathType;
4587 DWORD ulPolicyPathLength;
4588 LARGE_INTEGER liPolicyLastWriteTime;
4589 DWORD ulMetadataSatelliteRosterIndex;
4590 DWORD ulManifestVersionMajor;
4591 DWORD ulManifestVersionMinor;
4592 DWORD ulPolicyVersionMajor;
4593 DWORD ulPolicyVersionMinor;
4594 DWORD ulAssemblyDirectoryNameLength;
4595 PCWSTR lpAssemblyEncodedAssemblyIdentity;
4596 PCWSTR lpAssemblyManifestPath;
4597 PCWSTR lpAssemblyPolicyPath;
4598 PCWSTR lpAssemblyDirectoryName;
4599 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
4600 typedef const ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
4601 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
4602 DWORD dwFlags;
4603 DWORD ulFormatVersion;
4604 DWORD ulAssemblyCount;
4605 DWORD ulRootManifestPathType;
4606 DWORD ulRootManifestPathChars;
4607 DWORD ulRootConfigurationPathType;
4608 DWORD ulRootConfigurationPathChars;
4609 DWORD ulAppDirPathType;
4610 DWORD ulAppDirPathChars;
4611 PCWSTR lpRootManifestPath;
4612 PCWSTR lpRootConfigurationPath;
4613 PCWSTR lpAppDirPath;
4614 } ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
4615 typedef const ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
4616 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
4617 ULONG ulAssemblyIndex;
4618 ULONG ulFileIndexInAssembly;
4619 } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
4620 typedef const ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
4621 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
4622 DWORD ulFlags;
4623 DWORD ulFilenameLength;
4624 DWORD ulPathLength;
4625 PCWSTR lpFileName;
4626 PCWSTR lpFilePath;
4627 } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
4628 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
4629
4630 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE 1
4631 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE 2
4632 #define ACTIVATION_CONTEXT_PATH_TYPE_URL 3
4633 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF 4
4634
4635 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION 1
4636 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION 2
4637 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION 3
4638 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION 4
4639 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION 5
4640 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION 6
4641 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION 7
4642 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE 8
4643 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES 9
4644
4645 #endif /* (WIN32_WINNT >= 0x0501) */
4646
4647 typedef struct _PROCESSOR_POWER_POLICY_INFO {
4648 ULONG TimeCheck;
4649 ULONG DemoteLimit;
4650 ULONG PromoteLimit;
4651 UCHAR DemotePercent;
4652 UCHAR PromotePercent;
4653 UCHAR Spare[2];
4654 ULONG AllowDemotion : 1;
4655 ULONG AllowPromotion : 1;
4656 ULONG Reserved : 30;
4657 } PROCESSOR_POWER_POLICY_INFO, *PPROCESSOR_POWER_POLICY_INFO;
4658 typedef struct _PROCESSOR_POWER_POLICY {
4659 ULONG Revision;
4660 UCHAR DynamicThrottle;
4661 UCHAR Spare[3];
4662 ULONG Reserved;
4663 ULONG PolicyCount;
4664 PROCESSOR_POWER_POLICY_INFO Policy[3];
4665 } PROCESSOR_POWER_POLICY, *PPROCESSOR_POWER_POLICY;
4666 typedef struct _ADMINISTRATOR_POWER_POLICY {
4667 SYSTEM_POWER_STATE MinSleep;
4668 SYSTEM_POWER_STATE MaxSleep;
4669 ULONG MinVideoTimeout;
4670 ULONG MaxVideoTimeout;
4671 ULONG MinSpindownTimeout;
4672 ULONG MaxSpindownTimeout;
4673 } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
4674 #endif /* WINVER >= 0x0500 */
4675
4676 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
4677
4678 #ifdef UNICODE
4679 typedef OSVERSIONINFOW OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
4680 typedef OSVERSIONINFOEXW OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
4681 #else
4682 typedef OSVERSIONINFOA OSVERSIONINFO,*POSVERSIONINFO,*LPOSVERSIONINFO;
4683 typedef OSVERSIONINFOEXA OSVERSIONINFOEX,*POSVERSIONINFOEX,*LPOSVERSIONINFOEX;
4684 #endif
4685
4686 #define VER_SET_CONDITION(lc,t,c) ((lc) = VerSetConditionMask((lc),(t),(c)))
4687
4688 #if (_WIN32_WINNT >= 0x0500)
4689 ULONGLONG WINAPI VerSetConditionMask(ULONGLONG,DWORD,BYTE);
4690 #endif
4691
4692 typedef enum _HEAP_INFORMATION_CLASS {
4693
4694 HeapCompatibilityInformation
4695
4696 } HEAP_INFORMATION_CLASS;
4697
4698 NTSYSAPI
4699 DWORD
4700 NTAPI
4701 RtlSetHeapInformation (
4702 IN PVOID HeapHandle,
4703 IN HEAP_INFORMATION_CLASS HeapInformationClass,
4704 IN PVOID HeapInformation OPTIONAL,
4705 IN SIZE_T HeapInformationLength OPTIONAL
4706 );
4707
4708 NTSYSAPI
4709 DWORD
4710 NTAPI
4711 RtlQueryHeapInformation (
4712 IN PVOID HeapHandle,
4713 IN HEAP_INFORMATION_CLASS HeapInformationClass,
4714 OUT PVOID HeapInformation OPTIONAL,
4715 IN SIZE_T HeapInformationLength OPTIONAL,
4716 OUT PSIZE_T ReturnLength OPTIONAL
4717 );
4718
4719 //
4720 // Multiple alloc-free APIS
4721 //
4722
4723 DWORD
4724 NTAPI
4725 RtlMultipleAllocateHeap (
4726 IN PVOID HeapHandle,
4727 IN DWORD Flags,
4728 IN SIZE_T Size,
4729 IN DWORD Count,
4730 OUT PVOID * Array
4731 );
4732
4733 DWORD
4734 NTAPI
4735 RtlMultipleFreeHeap (
4736 IN PVOID HeapHandle,
4737 IN DWORD Flags,
4738 IN DWORD Count,
4739 OUT PVOID * Array
4740 );
4741
4742 typedef enum _PROCESSOR_CACHE_TYPE {
4743 CacheUnified,
4744 CacheInstruction,
4745 CacheData,
4746 CacheTrace
4747 } PROCESSOR_CACHE_TYPE;
4748
4749 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
4750 RelationProcessorCore,
4751 RelationNumaNode,
4752 RelationCache,
4753 RelationProcessorPackage
4754 } LOGICAL_PROCESSOR_RELATIONSHIP;
4755
4756 #define CACHE_FULLY_ASSOCIATIVE 0xFF
4757
4758 typedef struct _CACHE_DESCRIPTOR {
4759 BYTE Level;
4760 BYTE Associativity;
4761 WORD LineSize;
4762 DWORD Size;
4763 PROCESSOR_CACHE_TYPE Type;
4764 } CACHE_DESCRIPTOR, *PCACHE_DESCRIPTOR;
4765
4766 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
4767 ULONG_PTR ProcessorMask;
4768 LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
4769 union {
4770 struct {
4771 BYTE Flags;
4772 } ProcessorCore;
4773 struct {
4774 DWORD NodeNumber;
4775 } NumaNode;
4776 CACHE_DESCRIPTOR Cache;
4777 ULONGLONG Reserved[2];
4778 };
4779 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
4780
4781 NTSYSAPI
4782 SIZE_T
4783 NTAPI
4784 RtlCompareMemory (
4785 const VOID *Source1,
4786 const VOID *Source2,
4787 SIZE_T Length
4788 );
4789
4790 #define RtlMoveMemory memmove
4791 #define RtlCopyMemory memcpy
4792 #define RtlFillMemory(d,l,f) memset((d), (f), (l))
4793 #define RtlZeroMemory(d,l) RtlFillMemory((d),(l),0)
4794
4795 FORCEINLINE
4796 PVOID
4797 RtlSecureZeroMemory(IN PVOID Buffer,
4798 IN SIZE_T Length)
4799 {
4800 volatile char *VolatilePointer;
4801
4802 /* Get a volatile pointer to prevent any compiler optimizations */
4803 VolatilePointer = (volatile char *)Buffer;
4804
4805 /* Loop the whole buffer */
4806 while (Length)
4807 {
4808 /* Zero the current byte and move on */
4809 *VolatilePointer++ = 0;
4810 Length--;
4811 }
4812
4813 /* Return the pointer to ensure the compiler won't optimize this away */
4814 return Buffer;
4815 }
4816
4817 typedef struct _OBJECT_TYPE_LIST {
4818 WORD Level;
4819 WORD Sbz;
4820 GUID *ObjectType;
4821 } OBJECT_TYPE_LIST, *POBJECT_TYPE_LIST;
4822
4823 #if defined(__GNUC__)
4824
4825 #if defined(_M_IX86)
4826 static __inline__ PVOID GetCurrentFiber(void)
4827 {
4828 void* ret;
4829 __asm__ __volatile__ (
4830 "movl %%fs:0x10,%0"
4831 : "=r" (ret) /* allow use of reg eax,ebx,ecx,edx,esi,edi */
4832 );
4833 return ret;
4834 }
4835 #elif defined (_M_AMD64)
4836 FORCEINLINE PVOID GetCurrentFiber(VOID)
4837 {
4838 #ifdef NONAMELESSUNION
4839 return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, DUMMYUNIONNAME.FiberData));
4840 #else
4841 return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, FiberData));
4842 #endif
4843 }
4844 #elif defined (_M_ARM)
4845 PVOID WINAPI GetCurrentFiber(VOID);
4846 #else
4847 #if defined(_M_PPC)
4848 static __inline__ __attribute__((always_inline)) unsigned long __readfsdword_winnt(const unsigned long Offset)
4849 {
4850 unsigned long result;
4851 __asm__("\tadd 7,13,%1\n"
4852 "\tlwz %0,0(7)\n"
4853 : "=r" (result)
4854 : "r" (Offset)
4855 : "r7");
4856 return result;
4857 }
4858
4859 #else
4860 #error Unknown architecture
4861 #endif
4862 static __inline__ PVOID GetCurrentFiber(void)
4863 {
4864 return __readfsdword_winnt(0x10);
4865 }
4866 #endif
4867
4868 #if defined(_M_IX86)
4869 static __inline__ struct _TEB * NtCurrentTeb(void)
4870 {
4871 struct _TEB *ret;
4872
4873 __asm__ __volatile__ (
4874 "movl %%fs:0x18, %0\n"
4875 : "=r" (ret)
4876 : /* no inputs */
4877 );
4878
4879 return ret;
4880 }
4881 #elif defined(_M_ARM)
4882
4883 //
4884 // NT-ARM is not documented
4885 //
4886 #include <armddk.h>
4887
4888 #elif defined(_M_AMD64)
4889 FORCEINLINE struct _TEB * NtCurrentTeb(VOID)
4890 {
4891 return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
4892 }
4893 #elif defined(_M_PPC)
4894 static __inline__ struct _TEB * NtCurrentTeb(void)
4895 {
4896 return __readfsdword_winnt(0x18);
4897 }
4898 #else
4899 static __inline__ struct _TEB * NtCurrentTeb(void)
4900 {
4901 return __readfsdword_winnt(0x18);
4902 }
4903 #endif
4904
4905 #elif defined(__WATCOMC__)
4906
4907 extern PVOID GetCurrentFiber(void);
4908 #pragma aux GetCurrentFiber = \
4909 "mov eax, dword ptr fs:0x10" \
4910 value [eax] \
4911 modify [eax];
4912
4913 extern struct _TEB * NtCurrentTeb(void);
4914 #pragma aux NtCurrentTeb = \
4915 "mov eax, dword ptr fs:0x18" \
4916 value [eax] \
4917 modify [eax];
4918
4919 #elif defined(_MSC_VER)
4920
4921 #if (_MSC_FULL_VER >= 13012035)
4922
4923 __inline PVOID GetCurrentFiber(void) { return (PVOID)(ULONG_PTR)__readfsdword(0x10); }
4924 __inline struct _TEB * NtCurrentTeb(void) { return (struct _TEB *)(ULONG_PTR)__readfsdword(0x18); }
4925
4926 #else
4927
4928 static __inline PVOID GetCurrentFiber(void)
4929 {
4930 PVOID p;
4931 __asm mov eax, fs:[10h]
4932 __asm mov [p], eax
4933 return p;
4934 }
4935
4936 static __inline struct _TEB * NtCurrentTeb(void)
4937 {
4938 struct _TEB *p;
4939 __asm mov eax, fs:[18h]
4940 __asm mov [p], eax
4941 return p;
4942 }
4943
4944 #endif /* _MSC_FULL_VER */
4945
4946 #endif /* __GNUC__/__WATCOMC__/_MSC_VER */
4947
4948 static __inline PVOID GetFiberData(void)
4949 {
4950 return *((PVOID *)GetCurrentFiber());
4951 }
4952
4953 #if defined(__GNUC__)
4954
4955 static __inline__ BOOLEAN
4956 InterlockedBitTestAndSet(IN LONG volatile *Base,
4957 IN LONG Bit)
4958 {
4959 #if defined(_M_IX86)
4960 LONG OldBit;
4961 __asm__ __volatile__("lock "
4962 "btsl %2,%1\n\t"
4963 "sbbl %0,%0\n\t"
4964 :"=r" (OldBit),"+m" (*Base)
4965 :"Ir" (Bit)
4966 : "memory");
4967 return OldBit;
4968 #else
4969 return (_InterlockedOr(Base, 1 << Bit) >> Bit) & 1;
4970 #endif
4971 }
4972
4973 static __inline__ BOOLEAN
4974 InterlockedBitTestAndReset(IN LONG volatile *Base,
4975 IN LONG Bit)
4976 {
4977 #if defined(_M_IX86)
4978 LONG OldBit;
4979 __asm__ __volatile__("lock "
4980 "btrl %2,%1\n\t"
4981 "sbbl %0,%0\n\t"
4982 :"=r" (OldBit),"+m" (*Base)
4983 :"Ir" (Bit)
4984 : "memory");
4985 return OldBit;
4986 #else
4987 return (_InterlockedAnd(Base, ~(1 << Bit)) >> Bit) & 1;
4988 #endif
4989 }
4990
4991 #endif
4992
4993 #define BitScanForward _BitScanForward
4994 #define BitScanReverse _BitScanReverse
4995
4996 /* TODO: Other architectures than X86 */
4997 #if defined(_M_IX86)
4998 #define PF_TEMPORAL_LEVEL_1
4999 #define PF_NON_TEMPORAL_LEVEL_ALL
5000 #define PreFetchCacheLine(l, a)
5001 #elif defined (_M_AMD64)
5002 #define PreFetchCacheLine(l, a)
5003 #elif defined(_M_PPC)
5004 #define PreFetchCacheLine(l, a)
5005 #elif defined(_M_ARM)
5006 #define PreFetchCacheLine(l, a)
5007 #else
5008 #error Unknown architecture
5009 #endif
5010
5011 /* TODO: Other architectures than X86 */
5012 #if defined(_M_IX86)
5013 #if defined(_MSC_VER)
5014 FORCEINLINE
5015 VOID
5016 MemoryBarrier (VOID)
5017 {
5018 LONG Barrier;
5019 __asm { xchg Barrier, eax }
5020 }
5021 #else
5022 FORCEINLINE
5023 VOID
5024 MemoryBarrier(VOID)
5025 {
5026 LONG Barrier;
5027 __asm__ __volatile__("xchgl %%eax, %[Barrier]" : : [Barrier] "m" (Barrier) : "memory");
5028 }
5029 #endif
5030 #elif defined (_M_AMD64)
5031 #define MemoryBarrier __faststorefence
5032 #elif defined(_M_PPC)
5033 #define MemoryBarrier()
5034 #elif defined(_M_ARM)
5035 #define MemoryBarrier()
5036 #else
5037 #error Unknown architecture
5038 #endif
5039
5040 #if defined(_M_IX86)
5041 #ifdef _MSC_VER
5042 #pragma intrinsic(_mm_pause)
5043 #define YieldProcessor _mm_pause
5044 #else
5045 #define YieldProcessor() __asm__ __volatile__("pause");
5046 #endif
5047 #elif defined (_M_AMD64)
5048 #ifdef _MSC_VER
5049 #pragma intrinsic(_mm_pause)
5050 #define YieldProcessor _mm_pause
5051 #else
5052 #define YieldProcessor() __asm__ __volatile__("pause");
5053 #endif
5054 #elif defined(_M_PPC)
5055 #define YieldProcessor() __asm__ __volatile__("nop");
5056 #elif defined(_M_MIPS)
5057 #define YieldProcessor() __asm__ __volatile__("nop");
5058 #elif defined(_M_ARM)
5059 #define YieldProcessor()
5060 #else
5061 #error Unknown architecture
5062 #endif
5063
5064 #if defined(_AMD64_)
5065 #if defined(_M_AMD64)
5066
5067 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
5068
5069 #define InterlockedAnd _InterlockedAnd
5070 #define InterlockedExchange _InterlockedExchange
5071 #define InterlockedOr _InterlockedOr
5072
5073 #define InterlockedAnd64 _InterlockedAnd64
5074 #define InterlockedOr64 _InterlockedOr64
5075
5076 #define InterlockedBitTestAndSet _interlockedbittestandset
5077 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
5078 #define InterlockedBitTestAndReset _interlockedbittestandreset
5079 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
5080
5081
5082 #endif
5083
5084 #else
5085
5086 #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
5087
5088 #endif
5089
5090 #ifdef _MSC_VER
5091 #pragma warning(pop)
5092 #endif
5093
5094 #endif /* RC_INVOKED */
5095
5096 #ifdef __cplusplus
5097 }
5098 #endif
5099 #endif