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