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