• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * This file is part of the mingw-w64 runtime package.
3  * No warranty is given; refer to the file DISCLAIMER within this package.
4  */
5 
6 #ifndef _WINNT_
7 #define _WINNT_
8 
9 #include <_mingw_unicode.h>
10 
11 #ifdef __cplusplus
12 extern "C" {
13 #endif
14 
15 #include <_mingw.h>
16 #include <ctype.h>
17 #include <excpt.h>
18 #include <winapifamily.h>
19 #include <apiset.h>
20 
21 #define ANYSIZE_ARRAY 1
22 
23 #include <specstrings.h>
24 
25 #ifndef __WIDL__
26 #define __INTRINSIC_GROUP_WINNT /* only define the intrinsics in this file */
27 #include <psdk_inc/intrin-impl.h>
28 #endif
29 
30 #if defined(__x86_64) && \
31   !(defined(_X86_) || defined(__i386__) || defined(_IA64_) || defined (__arm__) || defined(__aarch64__))
32 #if !defined(_AMD64_)
33 #define _AMD64_
34 #endif
35 #endif /* _AMD64_ */
36 
37 #if defined(__arm__) && \
38   !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__ia64__) || defined(__aarch64__))
39 #if !defined(_ARM_)
40 #define _ARM_
41 #endif
42 #endif /* _ARM_ */
43 
44 #if defined(__aarch64__) && \
45   !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__ia64__) || defined(__arm__))
46 #if !defined(_ARM64_)
47 #define _ARM64_
48 #endif
49 #endif /* _ARM64_ */
50 
51 #if defined(__ia64__) && \
52   !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__arm__) || defined(__aarch64__))
53 #if !defined(_IA64_)
54 #define _IA64_
55 #endif
56 #endif /* _IA64_ */
57 
58 #include <sdkddkver.h>
59 
60 #ifndef DUMMYUNIONNAME
61 #if defined (NONAMELESSUNION)
62 #define DUMMYUNIONNAME u
63 #define DUMMYUNIONNAME2 u2
64 #define DUMMYUNIONNAME3 u3
65 #define DUMMYUNIONNAME4 u4
66 #define DUMMYUNIONNAME5 u5
67 #define DUMMYUNIONNAME6 u6
68 #define DUMMYUNIONNAME7 u7
69 #define DUMMYUNIONNAME8 u8
70 #define DUMMYUNIONNAME9 u9
71 #else
72 #define DUMMYUNIONNAME
73 #define DUMMYUNIONNAME2
74 #define DUMMYUNIONNAME3
75 #define DUMMYUNIONNAME4
76 #define DUMMYUNIONNAME5
77 #define DUMMYUNIONNAME6
78 #define DUMMYUNIONNAME7
79 #define DUMMYUNIONNAME8
80 #define DUMMYUNIONNAME9
81 #endif
82 #endif
83 
84 #ifndef DUMMYSTRUCTNAME
85 #if defined (NONAMELESSUNION)
86 #define DUMMYSTRUCTNAME s
87 #define DUMMYSTRUCTNAME2 s2
88 #define DUMMYSTRUCTNAME3 s3
89 #define DUMMYSTRUCTNAME4 s4
90 #define DUMMYSTRUCTNAME5 s5
91 #else
92 #define DUMMYSTRUCTNAME
93 #define DUMMYSTRUCTNAME2
94 #define DUMMYSTRUCTNAME3
95 #define DUMMYSTRUCTNAME4
96 #define DUMMYSTRUCTNAME5
97 #endif
98 #endif
99 
100 #define RESTRICTED_POINTER
101 
102 #undef  UNALIGNED	/* avoid redefinition warnings vs _mingw.h */
103 #undef  UNALIGNED64
104 #if defined (__ia64__) || defined (__x86_64__) || defined (__arm__) || defined(__aarch64__)
105 #define ALIGNMENT_MACHINE
106 #define UNALIGNED __unaligned
107 #if defined (_WIN64)
108 #define UNALIGNED64 __unaligned
109 #else
110 #define UNALIGNED64
111 #endif
112 #else
113 #undef ALIGNMENT_MACHINE
114 #define UNALIGNED
115 #define UNALIGNED64
116 #endif
117 
118 #ifdef _WIN64
119 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
120 #define MEMORY_ALLOCATION_ALIGNMENT 16
121 #else
122 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
123 #define MEMORY_ALLOCATION_ALIGNMENT 8
124 #endif
125 
126 #ifdef __cplusplus
127 #define TYPE_ALIGNMENT(t) __alignof__ (t)
128 #else
129 #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
130 #endif
131 
132 #if defined (__x86_64__) || defined (__i386__)
133 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT (DWORD)
134 #elif defined (__ia64__) || defined (__arm__) || defined(__aarch64__)
135 #define PROBE_ALIGNMENT(_s) (TYPE_ALIGNMENT (_s) > TYPE_ALIGNMENT (DWORD) ? TYPE_ALIGNMENT (_s) : TYPE_ALIGNMENT (DWORD))
136 #elif !defined (RC_INVOKED) && !defined (__WIDL__)
137 #error No supported target architecture.
138 #endif
139 
140 #ifdef _WIN64
141 #define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT (DWORD)
142 #endif
143 
144 #if defined(_MSC_VER)
145 # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
146 #else
147 # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
148 #endif
149 
150 #include <basetsd.h>
151 
152 #ifndef DECLSPEC_IMPORT
153 #if (defined (__i386__) || defined (__ia64__) || defined (__x86_64__) || defined (__arm__) || defined(__aarch64__)) && !defined (__WIDL__)
154 #define DECLSPEC_IMPORT __declspec (dllimport)
155 #else
156 #define DECLSPEC_IMPORT
157 #endif
158 #endif
159 
160 #ifndef DECLSPEC_NORETURN
161 #ifndef __WIDL__
162 #define DECLSPEC_NORETURN __declspec (noreturn)
163 #else
164 #define DECLSPEC_NORETURN
165 #endif
166 #endif
167 
168 #ifndef DECLSPEC_NOTHROW
169 #ifndef __WIDL__
170 #define DECLSPEC_NOTHROW __declspec (nothrow)
171 #else
172 #define DECLSPEC_NOTHROW
173 #endif
174 #endif
175 
176 #ifndef DECLSPEC_ALIGN
177 #ifndef __WIDL__
178 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
179 #define DECLSPEC_ALIGN(x) __declspec(align(x))
180 #elif defined(__GNUC__)
181 #define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x)))
182 #else
183 #define DECLSPEC_ALIGN(x) /*__declspec (align (x))*/
184 #endif
185 #else
186 #define DECLSPEC_ALIGN(x)
187 #endif
188 #endif /* DECLSPEC_ALIGN */
189 
190 #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
191 #if defined(__x86_64__) || defined(__i386__)
192 #define SYSTEM_CACHE_ALIGNMENT_SIZE 64
193 #else
194 #define SYSTEM_CACHE_ALIGNMENT_SIZE 128
195 #endif
196 #endif
197 
198 #ifndef DECLSPEC_CACHEALIGN
199 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
200 #endif
201 
202 #ifndef DECLSPEC_UUID
203 #define DECLSPEC_UUID(x)
204 #endif
205 
206 #ifndef DECLSPEC_NOVTABLE
207 #define DECLSPEC_NOVTABLE
208 #endif
209 
210 #ifndef DECLSPEC_SELECTANY
211 #define DECLSPEC_SELECTANY __declspec(selectany)
212 #endif
213 
214 #ifndef NOP_FUNCTION
215 #if (_MSC_VER >= 1210)
216 #define NOP_FUNCTION __noop
217 #else
218 #define NOP_FUNCTION (void)0
219 #endif
220 #endif
221 
222 #ifndef DECLSPEC_ADDRSAFE
223 #define DECLSPEC_ADDRSAFE
224 #endif
225 
226 #ifndef DECLSPEC_NOINLINE
227 #if (_MSC_VER >= 1300)
228 #define DECLSPEC_NOINLINE  __declspec(noinline)
229 #elif defined(__GNUC__)
230 #define DECLSPEC_NOINLINE __attribute__((noinline))
231 #else
232 #define DECLSPEC_NOINLINE
233 #endif
234 #endif /* DECLSPEC_NOINLINE */
235 
236 #ifndef FORCEINLINE
237 #if !defined(_MSC_VER) || (_MSC_VER >=1200)
238 #define FORCEINLINE __forceinline
239 #else
240 #define FORCEINLINE __inline
241 #endif
242 #endif /* FORCEINLINE */
243 
244 #ifndef DECLSPEC_DEPRECATED
245 #if !defined (__WIDL__)
246 #define DECLSPEC_DEPRECATED __declspec(deprecated)
247 #define DEPRECATE_SUPPORTED
248 #else
249 #define DECLSPEC_DEPRECATED
250 #undef DEPRECATE_SUPPORTED
251 #endif
252 #endif
253 
254 #define DECLSPEC_DEPRECATED_DDK
255 #define PRAGMA_DEPRECATED_DDK 0
256 
257   typedef void *PVOID;
258   typedef void *PVOID64;
259 
260 #ifndef FASTCALL
261 #if defined (__i386__) && !defined (__WIDL__)
262 #define FASTCALL __fastcall
263 #else
264 #define FASTCALL
265 #endif
266 #endif /* FASTCALL */
267 
268 #if defined(_ARM_) || defined(_ARM64_)
269 #define NTAPI
270 #else
271 #define NTAPI __stdcall
272 #endif
273 #define NTAPI_INLINE NTAPI
274 
275 #if !defined(_NTSYSTEM_)
276 #define NTSYSAPI DECLSPEC_IMPORT
277 #define NTSYSCALLAPI DECLSPEC_IMPORT
278 #else
279 #define NTSYSAPI
280 #define NTSYSCALLAPI DECLSPEC_ADDRSAFE
281 #endif
282 
283 #ifndef VOID
284 #define VOID void
285   typedef char CHAR;
286   typedef short SHORT;
287   typedef __LONG32 LONG;
288 #if !defined (__WIDL__)
289   typedef int INT;
290 #endif
291 #endif
292 
293 #ifndef __WCHAR_DEFINED
294 #define __WCHAR_DEFINED
295   typedef wchar_t WCHAR;
296 #endif
297   typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
298   typedef CONST WCHAR *LPCWCH,*PCWCH;
299   typedef WCHAR *NWPSTR,*LPWSTR,*PWSTR;
300   typedef PWSTR *PZPWSTR;
301   typedef CONST PWSTR *PCZPWSTR;
302   typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
303   typedef CONST WCHAR *LPCWSTR,*PCWSTR;
304   typedef PCWSTR *PZPCWSTR;
305   typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
306   typedef WCHAR *PZZWSTR;
307   typedef CONST WCHAR *PCZZWSTR;
308   typedef WCHAR UNALIGNED *PUZZWSTR;
309   typedef CONST WCHAR UNALIGNED *PCUZZWSTR;
310   typedef WCHAR *PNZWCH;
311   typedef CONST WCHAR *PCNZWCH;
312   typedef WCHAR UNALIGNED *PUNZWCH;
313   typedef CONST WCHAR UNALIGNED *PCUNZWCH;
314 
315 #if _WIN32_WINNT >= 0x0600 || (defined (__cplusplus) && defined (WINDOWS_ENABLE_CPLUSPLUS))
316   typedef CONST WCHAR *LPCWCHAR,*PCWCHAR;
317   typedef CONST WCHAR UNALIGNED *LPCUWCHAR,*PCUWCHAR;
318   typedef unsigned long UCSCHAR;
319 
320 #define UCSCHAR_INVALID_CHARACTER (0xffffffff)
321 #define MIN_UCSCHAR (0)
322 #define MAX_UCSCHAR (0x0010ffff)
323 
324   typedef UCSCHAR *PUCSCHAR;
325   typedef const UCSCHAR *PCUCSCHAR;
326   typedef UCSCHAR *PUCSSTR;
327   typedef UCSCHAR UNALIGNED *PUUCSSTR;
328   typedef const UCSCHAR *PCUCSSTR;
329   typedef const UCSCHAR UNALIGNED *PCUUCSSTR;
330   typedef UCSCHAR UNALIGNED *PUUCSCHAR;
331   typedef const UCSCHAR UNALIGNED *PCUUCSCHAR;
332 #endif
333 
334   typedef CHAR *PCHAR,*LPCH,*PCH;
335   typedef CONST CHAR *LPCCH,*PCCH;
336   typedef CHAR *NPSTR,*LPSTR,*PSTR;
337   typedef PSTR *PZPSTR;
338   typedef CONST PSTR *PCZPSTR;
339   typedef CONST CHAR *LPCSTR,*PCSTR;
340   typedef PCSTR *PZPCSTR;
341   typedef CHAR *PZZSTR;
342   typedef CONST CHAR *PCZZSTR;
343   typedef CHAR *PNZCH;
344   typedef CONST CHAR *PCNZCH;
345 
346 #ifdef UNICODE
347 #ifndef _TCHAR_DEFINED
348 #define _TCHAR_DEFINED
349   typedef WCHAR TCHAR, *PTCHAR;
350   typedef WCHAR TBYTE, *PTBYTE;
351 #endif
352 
353   typedef LPWSTR LPTCH,PTCH;
354   typedef LPWSTR PTSTR,LPTSTR;
355   typedef LPCWSTR PCTSTR,LPCTSTR;
356   typedef LPUWSTR PUTSTR,LPUTSTR;
357   typedef LPCUWSTR PCUTSTR,LPCUTSTR;
358   typedef LPWSTR LP;
359   typedef PZZWSTR PZZTSTR;
360   typedef PCZZWSTR PCZZTSTR;
361   typedef PUZZWSTR PUZZTSTR;
362   typedef PCUZZWSTR PCUZZTSTR;
363   typedef PZPWSTR PZPTSTR;
364   typedef PNZWCH PNZTCH;
365   typedef PCNZWCH PCNZTCH;
366   typedef PUNZWCH PUNZTCH;
367   typedef PCUNZWCH PCUNZTCH;
368 
369 #define __TEXT(quote) L##quote
370 #else
371 #ifndef _TCHAR_DEFINED
372 #define _TCHAR_DEFINED
373   typedef char TCHAR, *PTCHAR;
374   typedef unsigned char TBYTE, *PTBYTE;
375 #endif
376 
377   typedef LPSTR LPTCH,PTCH;
378   typedef LPCCH LPCTCH,PCTCH;
379   typedef LPSTR PTSTR,LPTSTR,PUTSTR,LPUTSTR;
380   typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
381   typedef PZZSTR PZZTSTR, PUZZTSTR;
382   typedef PCZZSTR PCZZTSTR, PCUZZTSTR;
383   typedef PZPSTR PZPTSTR;
384   typedef PNZCH PNZTCH, PUNZTCH;
385   typedef PCNZCH PCNZTCH, PCUNZTCH;
386 
387 #define __TEXT(quote) quote
388 #endif
389 
390 #define TEXT(quote) __TEXT(quote)
391 
392   typedef SHORT *PSHORT;
393   typedef LONG *PLONG;
394 
395 #ifndef ___GROUP_AFFINITY_DEFINED
396 #define ___GROUP_AFFINITY_DEFINED
397 typedef struct _GROUP_AFFINITY {
398   KAFFINITY Mask;
399   WORD      Group;
400   WORD      Reserved[3];
401 } GROUP_AFFINITY, *PGROUP_AFFINITY;
402 #endif /* !___GROUP_AFFINITY_DEFINED */
403 
404 #ifdef STRICT
405   typedef void *HANDLE;
406 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
407 #else
408 typedef PVOID HANDLE;
409 #define DECLARE_HANDLE(name) typedef HANDLE name
410 #endif
411 
412   typedef HANDLE *PHANDLE;
413   typedef BYTE FCHAR;
414   typedef WORD FSHORT;
415   typedef DWORD FLONG;
416 
417 #ifndef _HRESULT_DEFINED
418 #define _HRESULT_DEFINED
419   typedef LONG HRESULT;
420 #endif
421 
422 #ifdef __cplusplus
423 #define EXTERN_C extern "C"
424 #else
425 #define EXTERN_C extern
426 #endif
427 
428 /* Keep in sync with basetyps.h header.  */
429 #ifndef STDMETHODCALLTYPE
430 #define STDMETHODCALLTYPE WINAPI
431 #define STDMETHODVCALLTYPE __cdecl
432 #define STDAPICALLTYPE WINAPI
433 #define STDAPIVCALLTYPE __cdecl
434 
435 #define STDAPI EXTERN_C HRESULT WINAPI
436 #define STDAPI_(type) EXTERN_C type WINAPI
437 
438 #define STDMETHODIMP HRESULT WINAPI
439 #define STDMETHODIMP_(type) type WINAPI
440 
441 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
442 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
443 
444 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
445 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
446 #endif
447 
448 #define IFACEMETHODIMP STDMETHODIMP
449 #define IFACEMETHODIMP_(type) STDMETHODIMP_(type)
450 #define IFACEMETHODIMPV STDMETHODIMPV
451 #define IFACEMETHODIMPV_(type) STDMETHODIMPV_(type)
452 
453   typedef char CCHAR;
454 #ifndef _LCID_DEFINED
455 #define _LCID_DEFINED
456 typedef DWORD LCID;
457 #endif
458   typedef PDWORD PLCID;
459 #ifndef _LANGID_DEFINED
460 #define _LANGID_DEFINED
461   typedef WORD LANGID;
462 #endif
463 
464 #ifndef __COMPARTMENT_ID_DEFINED__
465 #define __COMPARTMENT_ID_DEFINED__
466 
467 typedef enum {
468   UNSPECIFIED_COMPARTMENT_ID = 0,
469   DEFAULT_COMPARTMENT_ID
470 } COMPARTMENT_ID,*PCOMPARTMENT_ID;
471 #endif
472 
473 #define APPLICATION_ERROR_MASK 0x20000000
474 #define ERROR_SEVERITY_SUCCESS 0x00000000
475 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
476 #define ERROR_SEVERITY_WARNING 0x80000000
477 #define ERROR_SEVERITY_ERROR 0xC0000000
478 
479 #if defined (__ia64__) && !defined (__WIDL__)
480   __declspec(align(16))
481 #endif
482     typedef struct _FLOAT128 {
483       __MINGW_EXTENSION __int64 LowPart;
484       __MINGW_EXTENSION __int64 HighPart;
485   } FLOAT128;
486 
487   typedef FLOAT128 *PFLOAT128;
488 
489 #define _ULONGLONG_
490   __MINGW_EXTENSION typedef __int64 LONGLONG;
491   __MINGW_EXTENSION typedef unsigned __int64 ULONGLONG;
492 
493 #define MAXLONGLONG (0x7fffffffffffffffll)
494 
495   typedef LONGLONG *PLONGLONG;
496   typedef ULONGLONG *PULONGLONG;
497   typedef LONGLONG USN;
498 
499 #ifndef _LARGE_INTEGER_DEFINED
500 #define _LARGE_INTEGER_DEFINED
501 
502 #if defined (__WIDL__)
503 typedef struct _LARGE_INTEGER {
504 #else
505   typedef union _LARGE_INTEGER {
506     __C89_NAMELESS struct {
507       DWORD LowPart;
508       LONG HighPart;
509     } DUMMYSTRUCTNAME;
510     struct {
511       DWORD LowPart;
512       LONG HighPart;
513     } u;
514 #endif
515     LONGLONG QuadPart;
516   } LARGE_INTEGER;
517 
518   typedef LARGE_INTEGER *PLARGE_INTEGER;
519 
520 #if defined (__WIDL__)
521   typedef struct _ULARGE_INTEGER {
522 #else
523   typedef union _ULARGE_INTEGER {
524     __C89_NAMELESS struct {
525       DWORD LowPart;
526       DWORD HighPart;
527     } DUMMYSTRUCTNAME;
528     struct {
529       DWORD LowPart;
530       DWORD HighPart;
531     } u;
532 #endif
533     ULONGLONG QuadPart;
534   } ULARGE_INTEGER;
535 
536   typedef ULARGE_INTEGER *PULARGE_INTEGER;
537 
538   typedef struct _LUID {
539     DWORD LowPart;
540     LONG HighPart;
541   } LUID,*PLUID;
542 
543 #endif /* _LARGE_INTEGER_DEFINED */
544 
545 #define _DWORDLONG_
546   typedef ULONGLONG DWORDLONG;
547   typedef DWORDLONG *PDWORDLONG;
548 
549 #define Int32x32To64(a, b) (((LONGLONG) ((LONG) (a))) * ((LONGLONG) ((LONG) (b))))
550 #define UInt32x32To64(a, b) (((ULONGLONG) ((unsigned int) (a))) *((ULONGLONG) ((unsigned int) (b))))
551 #define Int64ShllMod32(a, b) (((ULONGLONG) (a)) << (b))
552 #define Int64ShraMod32(a, b) (((LONGLONG) (a)) >> (b))
553 #define Int64ShrlMod32(a, b) (((ULONGLONG) (a)) >> (b))
554 
555 #ifdef __cplusplus
556   extern "C" {
557 #endif
558 
559 #ifdef __x86_64
560 
561 #define RotateLeft8 _rotl8
562 #define RotateLeft16 _rotl16
563 #define RotateRight8 _rotr8
564 #define RotateRight16 _rotr16
565 
566     unsigned char __cdecl _rotl8(unsigned char Value,unsigned char Shift);
567     unsigned short __cdecl _rotl16(unsigned short Value,unsigned char Shift);
568     unsigned char __cdecl _rotr8(unsigned char Value,unsigned char Shift);
569     unsigned short __cdecl _rotr16(unsigned short Value,unsigned char Shift);
570 #endif /* __x86_64 */
571 
572 #define RotateLeft32 _rotl
573 #define RotateLeft64 _rotl64
574 #define RotateRight32 _rotr
575 #define RotateRight64 _rotr64
576 
577 #pragma push_macro ("_rotl")
578 #pragma push_macro ("_rotr")
579 #undef _rotl
580 #undef _rotr
581     unsigned int __cdecl _rotl(unsigned int Value,int Shift);
582     unsigned int __cdecl _rotr(unsigned int Value,int Shift);
583 #pragma pop_macro ("_rotr")
584 #pragma pop_macro ("_rotl")
585 #pragma push_macro ("_rotr64")
586 #pragma push_macro ("_rotl64")
587 #undef _rotl64
588 #undef _rotr64
589     __MINGW_EXTENSION unsigned __int64 __cdecl _rotl64(unsigned __int64 Value,int Shift);
590     __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 Value,int Shift);
591 #pragma pop_macro ("_rotl64")
592 #pragma pop_macro ("_rotr64")
593 
594 #ifdef __cplusplus
595   }
596 #endif
597 
598 #define ANSI_NULL ((CHAR)0)
599 #define UNICODE_NULL ((WCHAR)0)
600 #define UNICODE_STRING_MAX_BYTES ((WORD) 65534)
601 #define UNICODE_STRING_MAX_CHARS (32767)
602 
603 #ifndef _BOOLEAN_
604 #define _BOOLEAN_
605   typedef BYTE BOOLEAN;
606 #endif
607   typedef BOOLEAN *PBOOLEAN;
608 
609 #ifndef _LIST_ENTRY_DEFINED
610 #define _LIST_ENTRY_DEFINED
611 
612   typedef struct _LIST_ENTRY {
613     struct _LIST_ENTRY *Flink;
614     struct _LIST_ENTRY *Blink;
615   } LIST_ENTRY,*PLIST_ENTRY,*RESTRICTED_POINTER PRLIST_ENTRY;
616 
617   typedef struct _SINGLE_LIST_ENTRY {
618     struct _SINGLE_LIST_ENTRY *Next;
619   } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
620 
621   typedef struct LIST_ENTRY32 {
622     DWORD Flink;
623     DWORD Blink;
624   } LIST_ENTRY32;
625   typedef LIST_ENTRY32 *PLIST_ENTRY32;
626 
627   typedef struct LIST_ENTRY64 {
628     ULONGLONG Flink;
629     ULONGLONG Blink;
630   } LIST_ENTRY64;
631   typedef LIST_ENTRY64 *PLIST_ENTRY64;
632 
633 #endif /* _LIST_ENTRY_DEFINED */
634 
635 #include <guiddef.h>
636 
637 #ifndef __OBJECTID_DEFINED
638 #define __OBJECTID_DEFINED
639   typedef struct _OBJECTID {
640     GUID Lineage;
641     DWORD Uniquifier;
642   } OBJECTID;
643 #endif
644 
645 #define MINCHAR 0x80
646 #define MAXCHAR 0x7f
647 #define MINSHORT 0x8000
648 #define MAXSHORT 0x7fff
649 #define MINLONG 0x80000000
650 #define MAXLONG 0x7fffffff
651 #define MAXBYTE 0xff
652 #define MAXWORD 0xffff
653 #define MAXDWORD 0xffffffff
654 
655 #define FIELD_OFFSET(Type, Field) ((LONG) __builtin_offsetof(Type, Field))
656 #define RTL_FIELD_SIZE(type,field) (sizeof(((type *)0)->field))
657 #define RTL_SIZEOF_THROUGH_FIELD(type,field) (FIELD_OFFSET(type,field) + RTL_FIELD_SIZE(type,field))
658 #define RTL_CONTAINS_FIELD(Struct,Size,Field) ((((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)))
659 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
660 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
661 
662 #ifdef ENABLE_RTL_NUMBER_OF_V2
663 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
664 #else
665 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
666 #endif
667 
668 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
669 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
670 
671 #define RTL_FIELD_TYPE(type,field) (((type*)0)->field)
672 #define RTL_NUMBER_OF_FIELD(type,field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type,field)))
673 #define RTL_PADDING_BETWEEN_FIELDS(T,F1,F2) ((FIELD_OFFSET(T,F2) > FIELD_OFFSET(T,F1)) ? (FIELD_OFFSET(T,F2) - FIELD_OFFSET(T,F1) - RTL_FIELD_SIZE(T,F1)) : (FIELD_OFFSET(T,F1) - FIELD_OFFSET(T,F2) - RTL_FIELD_SIZE(T,F2)))
674 
675 #ifdef __cplusplus
676 #define RTL_CONST_CAST(type) const_cast<type>
677 #else
678 #define RTL_CONST_CAST(type) (type)
679 #endif
680 
681 #ifdef __cplusplus
682 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
683 extern "C++" { \
684 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) | ((int)b)); } \
685 inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
686 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) & ((int)b)); } \
687 inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
688 inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((int)a)); } \
689 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) ^ ((int)b)); } \
690 inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
691 }
692 #else
693 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
694 #endif
695 
696 #define COMPILETIME_OR_2FLAGS(a, b) ((UINT) (a) | (UINT) (b))
697 #define COMPILETIME_OR_3FLAGS(a, b, c) ((UINT) (a) | (UINT) (b) | (UINT) (c))
698 #define COMPILETIME_OR_4FLAGS(a, b, c, d) ((UINT) (a) | (UINT) (b) | (UINT) (c) | (UINT) (d))
699 #define COMPILETIME_OR_5FLAGS(a, b, c, d, e) ((UINT) (a) | (UINT) (b) | (UINT) (c) | (UINT) (d) | (UINT) (e))
700 
701 
702 #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8)
703 #define RTL_BITS_OF_FIELD(type,field) (RTL_BITS_OF(RTL_FIELD_TYPE(type,field)))
704 #define CONTAINING_RECORD(address,type,field) ((type *)((PCHAR)(address) - (ULONG_PTR)(&((type *)0)->field)))
705 
706     typedef EXCEPTION_DISPOSITION NTAPI EXCEPTION_ROUTINE (struct _EXCEPTION_RECORD *ExceptionRecord, PVOID EstablisherFrame, struct _CONTEXT *ContextRecord, PVOID DispatcherContext);
707 #ifndef __PEXCEPTION_ROUTINE_DEFINED
708 #define __PEXCEPTION_ROUTINE_DEFINED
709     typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
710 #endif
711 
712 #define VER_WORKSTATION_NT                  0x40000000
713 #define VER_SERVER_NT                       0x80000000
714 #define VER_SUITE_SMALLBUSINESS             0x00000001
715 #define VER_SUITE_ENTERPRISE                0x00000002
716 #define VER_SUITE_BACKOFFICE                0x00000004
717 #define VER_SUITE_COMMUNICATIONS            0x00000008
718 #define VER_SUITE_TERMINAL                  0x00000010
719 #define VER_SUITE_SMALLBUSINESS_RESTRICTED  0x00000020
720 #define VER_SUITE_EMBEDDEDNT                0x00000040
721 #define VER_SUITE_DATACENTER                0x00000080
722 #define VER_SUITE_SINGLEUSERTS              0x00000100
723 #define VER_SUITE_PERSONAL                  0x00000200
724 #define VER_SUITE_BLADE                     0x00000400
725 #define VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
726 #define VER_SUITE_SECURITY_APPLIANCE        0x00001000
727 #define VER_SUITE_STORAGE_SERVER            0x00002000
728 #define VER_SUITE_COMPUTE_SERVER            0x00004000
729 #define VER_SUITE_WH_SERVER                 0x00008000
730 
731 #define PRODUCT_UNDEFINED                         0x0
732 
733 #define PRODUCT_ULTIMATE                          0x1
734 #define PRODUCT_HOME_BASIC                        0x2
735 #define PRODUCT_HOME_PREMIUM                      0x3
736 #define PRODUCT_ENTERPRISE                        0x4
737 #define PRODUCT_HOME_BASIC_N                      0x5
738 #define PRODUCT_BUSINESS                          0x6
739 #define PRODUCT_STANDARD_SERVER                   0x7
740 #define PRODUCT_DATACENTER_SERVER                 0x8
741 #define PRODUCT_SMALLBUSINESS_SERVER              0x9
742 #define PRODUCT_ENTERPRISE_SERVER                 0xa
743 #define PRODUCT_STARTER                           0xb
744 #define PRODUCT_DATACENTER_SERVER_CORE            0xc
745 #define PRODUCT_STANDARD_SERVER_CORE              0xd
746 #define PRODUCT_ENTERPRISE_SERVER_CORE            0xe
747 #define PRODUCT_ENTERPRISE_SERVER_IA64            0xf
748 #define PRODUCT_BUSINESS_N                        0x10
749 #define PRODUCT_WEB_SERVER                        0x11
750 #define PRODUCT_CLUSTER_SERVER                    0x12
751 #define PRODUCT_HOME_SERVER                       0x13
752 #define PRODUCT_STORAGE_EXPRESS_SERVER            0x14
753 #define PRODUCT_STORAGE_STANDARD_SERVER           0x15
754 #define PRODUCT_STORAGE_WORKGROUP_SERVER          0x16
755 #define PRODUCT_STORAGE_ENTERPRISE_SERVER         0x17
756 #define PRODUCT_SERVER_FOR_SMALLBUSINESS          0x18
757 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM      0x19
758 #define PRODUCT_HOME_PREMIUM_N                    0x1a
759 #define PRODUCT_ENTERPRISE_N                      0x1b
760 #define PRODUCT_ULTIMATE_N                        0x1c
761 #define PRODUCT_WEB_SERVER_CORE                   0x1d
762 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT  0x1e
763 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY    0x1f
764 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING   0x20
765 #define PRODUCT_SERVER_FOUNDATION                 0x21
766 #define PRODUCT_HOME_PREMIUM_SERVER               0x22
767 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V        0x23
768 #define PRODUCT_STANDARD_SERVER_V                 0x24
769 #define PRODUCT_DATACENTER_SERVER_V               0x25
770 #define PRODUCT_SERVER_V                          0x25
771 #define PRODUCT_ENTERPRISE_SERVER_V               0x26
772 #define PRODUCT_DATACENTER_SERVER_CORE_V          0x27
773 #define PRODUCT_STANDARD_SERVER_CORE_V            0x28
774 #define PRODUCT_ENTERPRISE_SERVER_CORE_V          0x29
775 #define PRODUCT_HYPERV                            0x2a
776 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE       0x2b
777 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE      0x2c
778 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE     0x2d
779 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE    0x2e
780 #define PRODUCT_STARTER_N                         0x2f
781 #define PRODUCT_PROFESSIONAL                      0x30
782 #define PRODUCT_PROFESSIONAL_N                    0x31
783 #define PRODUCT_SB_SOLUTION_SERVER                0x32
784 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS           0x33
785 #define PRODUCT_STANDARD_SERVER_SOLUTIONS         0x34
786 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE    0x35
787 #define PRODUCT_SB_SOLUTION_SERVER_EM             0x36
788 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM        0x37
789 #define PRODUCT_SOLUTION_EMBEDDEDSERVER           0x38
790 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE      0x39
791 #define PRODUCT_PROFESSIONAL_EMBEDDED             0x3A
792 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT     0x3B
793 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL     0x3C
794 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC  0x3D
795 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC  0x3E
796 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x3f
797 #define PRODUCT_CLUSTER_SERVER_V                  0x40
798 #define PRODUCT_EMBEDDED                          0x41
799 #define PRODUCT_STARTER_E                         0x42
800 #define PRODUCT_HOME_BASIC_E                      0x43
801 #define PRODUCT_HOME_PREMIUM_E                    0x44
802 #define PRODUCT_PROFESSIONAL_E                    0x45
803 #define PRODUCT_ENTERPRISE_E                      0x46
804 #define PRODUCT_ULTIMATE_E                        0x47
805 #define PRODUCT_ENTERPRISE_EVALUATION             0x48
806 #define PRODUCT_MULTIPOINT_STANDARD_SERVER        0x4C
807 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER         0x4D
808 #define PRODUCT_STANDARD_EVALUATION_SERVER        0x4F
809 #define PRODUCT_DATACENTER_EVALUATION_SERVER      0x50
810 #define PRODUCT_ENTERPRISE_N_EVALUATION           0x54
811 #define PRODUCT_EMBEDDED_AUTOMOTIVE               0x55
812 #define PRODUCT_EMBEDDED_INDUSTRY_A               0x56
813 #define PRODUCT_THINPC                            0x57
814 #define PRODUCT_EMBEDDED_A                        0x58
815 #define PRODUCT_EMBEDDED_INDUSTRY                 0x59
816 #define PRODUCT_EMBEDDED_E                        0x5A
817 #define PRODUCT_EMBEDDED_INDUSTRY_E               0x5B
818 #define PRODUCT_EMBEDDED_INDUSTRY_A_E             0x5C
819 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x5F
820 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER  0x60
821 #define PRODUCT_CORE_ARM                          0x61
822 #define PRODUCT_CORE_N                            0x62
823 #define PRODUCT_CORE_COUNTRYSPECIFIC              0x63
824 #define PRODUCT_CORE_SINGLELANGUAGE               0x64
825 #define PRODUCT_CORE_LANGUAGESPECIFIC             0x64
826 #define PRODUCT_CORE                              0x65
827 #define PRODUCT_PROFESSIONAL_WMC                  0x67
828 #define PRODUCT_MOBILE_CORE                       0x68
829 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL            0x69
830 #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL          0x6A
831 #define PRODUCT_EMBEDDED_EVAL                     0x6B
832 #define PRODUCT_EMBEDDED_E_EVAL                   0x6C
833 #define PRODUCT_NANO_SERVER                       0x6D
834 #define PRODUCT_CLOUD_STORAGE_SERVER              0x6E
835 #define PRODUCT_CORE_CONNECTED                    0x6F
836 #define PRODUCT_PROFESSIONAL_STUDENT              0x70
837 #define PRODUCT_CORE_CONNECTED_N                  0x71
838 #define PRODUCT_PROFESSIONAL_STUDENT_N            0x72
839 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE     0x73
840 #define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC    0x74
841 #define PRODUCT_CONNECTED_CAR                     0x75
842 #define PRODUCT_INDUSTRY_HANDHELD                 0x76
843 #define PRODUCT_PPI_PRO                           0x77
844 #define PRODUCT_ARM64_SERVER                      0x78
845 #define PRODUCT_EDUCATION                         0x79
846 #define PRODUCT_EDUCATION_N                       0x7a
847 #define PRODUCT_IOTUAP                            0x7B
848 #define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER  0x7C
849 #define PRODUCT_ENTERPRISE_S                      0x7D
850 #define PRODUCT_ENTERPRISE_S_N                    0x7E
851 #define PRODUCT_PROFESSIONAL_S                    0x7F
852 #define PRODUCT_PROFESSIONAL_S_N                  0x80
853 #define PRODUCT_ENTERPRISE_S_EVALUATION           0x81
854 #define PRODUCT_ENTERPRISE_S_N_EVALUATION         0x82
855 #define PRODUCT_MOBILE_ENTERPRISE                 0x85
856 
857 #define PRODUCT_UNLICENSED                        0xabcdabcd
858 
859 #define LANG_NEUTRAL                              0x00
860 #define LANG_INVARIANT                            0x7f
861 
862 #define LANG_AFRIKAANS                            0x36
863 #define LANG_ALBANIAN                             0x1c
864 #define LANG_ALSATIAN                             0x84
865 #define LANG_AMHARIC                              0x5e
866 #define LANG_ARABIC                               0x01
867 #define LANG_ARMENIAN                             0x2b
868 #define LANG_ASSAMESE                             0x4d
869 #define LANG_AZERI                                0x2c
870 #define LANG_AZERBAIJANI			  0x2c
871 #define LANG_BANGLA				  0x45
872 #define LANG_BASHKIR                              0x6d
873 #define LANG_BASQUE                               0x2d
874 #define LANG_BELARUSIAN                           0x23
875 #define LANG_BENGALI                              0x45
876 #define LANG_BRETON                               0x7e
877 #define LANG_BOSNIAN                              0x1a
878 #define LANG_BOSNIAN_NEUTRAL                    0x781a
879 #define LANG_BULGARIAN                            0x02
880 #define LANG_CATALAN                              0x03
881 #define LANG_CENTRAL_KURDISH			  0x92
882 #define LANG_CHEROKEE				  0x5c
883 #define LANG_CHINESE                              0x04
884 #define LANG_CHINESE_SIMPLIFIED                   0x04
885 #define LANG_CHINESE_TRADITIONAL                0x7c04
886 #define LANG_CORSICAN                             0x83
887 #define LANG_CROATIAN                             0x1a
888 #define LANG_CZECH                                0x05
889 #define LANG_DANISH                               0x06
890 #define LANG_DARI                                 0x8c
891 #define LANG_DIVEHI                               0x65
892 #define LANG_DUTCH                                0x13
893 #define LANG_ENGLISH                              0x09
894 #define LANG_ESTONIAN                             0x25
895 #define LANG_FAEROESE                             0x38
896 #define LANG_FARSI                                0x29
897 #define LANG_FILIPINO                             0x64
898 #define LANG_FINNISH                              0x0b
899 #define LANG_FRENCH                               0x0c
900 #define LANG_FRISIAN                              0x62
901 #define LANG_FULAH				  0x67
902 #define LANG_GALICIAN                             0x56
903 #define LANG_GEORGIAN                             0x37
904 #define LANG_GERMAN                               0x07
905 #define LANG_GREEK                                0x08
906 #define LANG_GREENLANDIC                          0x6f
907 #define LANG_GUJARATI                             0x47
908 #define LANG_HAUSA                                0x68
909 #define LANG_HEBREW                               0x0d
910 #define LANG_HINDI                                0x39
911 #define LANG_HUNGARIAN                            0x0e
912 #define LANG_ICELANDIC                            0x0f
913 #define LANG_IGBO                                 0x70
914 #define LANG_INDONESIAN                           0x21
915 #define LANG_INUKTITUT                            0x5d
916 #define LANG_IRISH                                0x3c
917 #define LANG_ITALIAN                              0x10
918 #define LANG_JAPANESE                             0x11
919 #define LANG_KANNADA                              0x4b
920 #define LANG_KASHMIRI                             0x60
921 #define LANG_KAZAK                                0x3f
922 #define LANG_KHMER                                0x53
923 #define LANG_KICHE                                0x86
924 #define LANG_KINYARWANDA                          0x87
925 #define LANG_KONKANI                              0x57
926 #define LANG_KOREAN                               0x12
927 #define LANG_KYRGYZ                               0x40
928 #define LANG_LAO                                  0x54
929 #define LANG_LATVIAN                              0x26
930 #define LANG_LITHUANIAN                           0x27
931 #define LANG_LOWER_SORBIAN                        0x2e
932 #define LANG_LUXEMBOURGISH                        0x6e
933 #define LANG_MACEDONIAN                           0x2f
934 #define LANG_MALAY                                0x3e
935 #define LANG_MALAYALAM                            0x4c
936 #define LANG_MALTESE                              0x3a
937 #define LANG_MANIPURI                             0x58
938 #define LANG_MAORI                                0x81
939 #define LANG_MAPUDUNGUN                           0x7a
940 #define LANG_MARATHI                              0x4e
941 #define LANG_MOHAWK                               0x7c
942 #define LANG_MONGOLIAN                            0x50
943 #define LANG_NEPALI                               0x61
944 #define LANG_NORWEGIAN                            0x14
945 #define LANG_OCCITAN                              0x82
946 #define LANG_ODIA				  0x48
947 #define LANG_ORIYA                                0x48
948 #define LANG_PASHTO                               0x63
949 #define LANG_PERSIAN                              0x29
950 #define LANG_POLISH                               0x15
951 #define LANG_PORTUGUESE                           0x16
952 #define LANG_PULAR				  0x67
953 #define LANG_PUNJABI                              0x46
954 #define LANG_QUECHUA                              0x6b
955 #define LANG_ROMANIAN                             0x18
956 #define LANG_ROMANSH                              0x17
957 #define LANG_RUSSIAN                              0x19
958 #define LANG_SAKHA				  0x85
959 #define LANG_SAMI                                 0x3b
960 #define LANG_SANSKRIT                             0x4f
961 #define LANG_SCOTTISH_GAELIC			  0x91
962 #define LANG_SERBIAN                              0x1a
963 #define LANG_SERBIAN_NEUTRAL                    0x7c1a
964 #define LANG_SINDHI                               0x59
965 #define LANG_SINHALESE                            0x5b
966 #define LANG_SLOVAK                               0x1b
967 #define LANG_SLOVENIAN                            0x24
968 #define LANG_SOTHO                                0x6c
969 #define LANG_SPANISH                              0x0a
970 #define LANG_SWAHILI                              0x41
971 #define LANG_SWEDISH                              0x1d
972 #define LANG_SYRIAC                               0x5a
973 #define LANG_TAJIK                                0x28
974 #define LANG_TAMAZIGHT                            0x5f
975 #define LANG_TAMIL                                0x49
976 #define LANG_TATAR                                0x44
977 #define LANG_TELUGU                               0x4a
978 #define LANG_THAI                                 0x1e
979 #define LANG_TIBETAN                              0x51
980 #define LANG_TIGRIGNA                             0x73
981 #define LANG_TIGRINYA				  0x73
982 #define LANG_TSWANA                               0x32
983 #define LANG_TURKISH                              0x1f
984 #define LANG_TURKMEN                              0x42
985 #define LANG_UIGHUR                               0x80
986 #define LANG_UKRAINIAN                            0x22
987 #define LANG_UPPER_SORBIAN                        0x2e
988 #define LANG_URDU                                 0x20
989 #define LANG_UZBEK                                0x43
990 #define LANG_VALENCIAN				  0x03
991 #define LANG_VIETNAMESE                           0x2a
992 #define LANG_WELSH                                0x52
993 #define LANG_WOLOF                                0x88
994 #define LANG_XHOSA                                0x34
995 #define LANG_YAKUT                                0x85
996 #define LANG_YI                                   0x78
997 #define LANG_YORUBA                               0x6a
998 #define LANG_ZULU                                 0x35
999 
1000 #define SUBLANG_NEUTRAL                           0x00
1001 #define SUBLANG_DEFAULT                           0x01
1002 #define SUBLANG_SYS_DEFAULT                       0x02
1003 #define SUBLANG_CUSTOM_DEFAULT                    0x03
1004 #define SUBLANG_CUSTOM_UNSPECIFIED                0x04
1005 #define SUBLANG_UI_CUSTOM_DEFAULT                 0x05
1006 
1007 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA            0x01
1008 #define SUBLANG_ALBANIAN_ALBANIA                  0x01
1009 #define SUBLANG_ALSATIAN_FRANCE                   0x01
1010 #define SUBLANG_AMHARIC_ETHIOPIA                  0x01
1011 #define SUBLANG_ARABIC_SAUDI_ARABIA               0x01
1012 #define SUBLANG_ARABIC_IRAQ                       0x02
1013 #define SUBLANG_ARABIC_EGYPT                      0x03
1014 #define SUBLANG_ARABIC_LIBYA                      0x04
1015 #define SUBLANG_ARABIC_ALGERIA                    0x05
1016 #define SUBLANG_ARABIC_MOROCCO                    0x06
1017 #define SUBLANG_ARABIC_TUNISIA                    0x07
1018 #define SUBLANG_ARABIC_OMAN                       0x08
1019 #define SUBLANG_ARABIC_YEMEN                      0x09
1020 #define SUBLANG_ARABIC_SYRIA                      0x0a
1021 #define SUBLANG_ARABIC_JORDAN                     0x0b
1022 #define SUBLANG_ARABIC_LEBANON                    0x0c
1023 #define SUBLANG_ARABIC_KUWAIT                     0x0d
1024 #define SUBLANG_ARABIC_UAE                        0x0e
1025 #define SUBLANG_ARABIC_BAHRAIN                    0x0f
1026 #define SUBLANG_ARABIC_QATAR                      0x10
1027 #define SUBLANG_ARMENIAN_ARMENIA                  0x01
1028 #define SUBLANG_ASSAMESE_INDIA                    0x01
1029 #define SUBLANG_AZERI_LATIN                       0x01
1030 #define SUBLANG_AZERI_CYRILLIC                    0x02
1031 #define SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN      0x01
1032 #define SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC   0x02
1033 #define SUBLANG_BANGLA_INDIA                      0x01
1034 #define SUBLANG_BANGLA_BANGLADESH                 0x02
1035 #define SUBLANG_BASHKIR_RUSSIA                    0x01
1036 #define SUBLANG_BASQUE_BASQUE                     0x01
1037 #define SUBLANG_BELARUSIAN_BELARUS                0x01
1038 #define SUBLANG_BENGALI_INDIA                     0x01
1039 #define SUBLANG_BENGALI_BANGLADESH                0x02
1040 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN  0x05
1041 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
1042 #define SUBLANG_BRETON_FRANCE                     0x01
1043 #define SUBLANG_BULGARIAN_BULGARIA                0x01
1044 #define SUBLANG_CATALAN_CATALAN                   0x01
1045 #define SUBLANG_CENTRAL_KURDISH_IRAQ              0x01
1046 #define SUBLANG_CHEROKEE_CHEROKEE                 0x01
1047 #define SUBLANG_CHINESE_TRADITIONAL               0x01
1048 #define SUBLANG_CHINESE_SIMPLIFIED                0x02
1049 #define SUBLANG_CHINESE_HONGKONG                  0x03
1050 #define SUBLANG_CHINESE_SINGAPORE                 0x04
1051 #define SUBLANG_CHINESE_MACAU                     0x05
1052 #define SUBLANG_CORSICAN_FRANCE                   0x01
1053 #define SUBLANG_CZECH_CZECH_REPUBLIC              0x01
1054 #define SUBLANG_CROATIAN_CROATIA                  0x01
1055 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
1056 #define SUBLANG_DANISH_DENMARK                    0x01
1057 #define SUBLANG_DARI_AFGHANISTAN                  0x01
1058 #define SUBLANG_DIVEHI_MALDIVES                   0x01
1059 #define SUBLANG_DUTCH                             0x01
1060 #define SUBLANG_DUTCH_BELGIAN                     0x02
1061 #define SUBLANG_ENGLISH_US                        0x01
1062 #define SUBLANG_ENGLISH_UK                        0x02
1063 #define SUBLANG_ENGLISH_AUS                       0x03
1064 #define SUBLANG_ENGLISH_CAN                       0x04
1065 #define SUBLANG_ENGLISH_NZ                        0x05
1066 #define SUBLANG_ENGLISH_IRELAND                   0x06
1067 #define SUBLANG_ENGLISH_EIRE                      0x06
1068 #define SUBLANG_ENGLISH_SOUTH_AFRICA              0x07
1069 #define SUBLANG_ENGLISH_JAMAICA                   0x08
1070 #define SUBLANG_ENGLISH_CARIBBEAN                 0x09
1071 #define SUBLANG_ENGLISH_BELIZE                    0x0a
1072 #define SUBLANG_ENGLISH_TRINIDAD                  0x0b
1073 #define SUBLANG_ENGLISH_ZIMBABWE                  0x0c
1074 #define SUBLANG_ENGLISH_PHILIPPINES               0x0d
1075 #define SUBLANG_ENGLISH_INDIA                     0x10
1076 #define SUBLANG_ENGLISH_MALAYSIA                  0x11
1077 #define SUBLANG_ENGLISH_SINGAPORE                 0x12
1078 #define SUBLANG_ESTONIAN_ESTONIA                  0x01
1079 #define SUBLANG_FAEROESE_FAROE_ISLANDS            0x01
1080 #define SUBLANG_FILIPINO_PHILIPPINES              0x01
1081 #define SUBLANG_FINNISH_FINLAND                   0x01
1082 #define SUBLANG_FRENCH                            0x01
1083 #define SUBLANG_FRENCH_BELGIAN                    0x02
1084 #define SUBLANG_FRENCH_CANADIAN                   0x03
1085 #define SUBLANG_FRENCH_SWISS                      0x04
1086 #define SUBLANG_FRENCH_LUXEMBOURG                 0x05
1087 #define SUBLANG_FRENCH_MONACO                     0x06
1088 #define SUBLANG_FRISIAN_NETHERLANDS               0x01
1089 #define SUBLANG_FULAH_SENEGAL                     0x02
1090 #define SUBLANG_GALICIAN_GALICIAN                 0x01
1091 #define SUBLANG_GEORGIAN_GEORGIA                  0x01
1092 #define SUBLANG_GERMAN                            0x01
1093 #define SUBLANG_GERMAN_SWISS                      0x02
1094 #define SUBLANG_GERMAN_AUSTRIAN                   0x03
1095 #define SUBLANG_GERMAN_LUXEMBOURG                 0x04
1096 #define SUBLANG_GERMAN_LIECHTENSTEIN              0x05
1097 #define SUBLANG_GREEK_GREECE                      0x01
1098 #define SUBLANG_GREENLANDIC_GREENLAND             0x01
1099 #define SUBLANG_GUJARATI_INDIA                    0x01
1100 #define SUBLANG_HAUSA_NIGERIA_LATIN               0x01
1101 #define SUBLANG_HAUSA_NIGERIA    SUBLANG_HAUSA_NIGERIA_LATIN	/* SUBLANG_HAUSA_NIGERIA_LATIN is what MS defines */
1102 #define SUBLANG_HAWAIIAN_US                       0x01
1103 #define SUBLANG_HEBREW_ISRAEL                     0x01
1104 #define SUBLANG_HINDI_INDIA                       0x01
1105 #define SUBLANG_HUNGARIAN_HUNGARY                 0x01
1106 #define SUBLANG_ICELANDIC_ICELAND                 0x01
1107 #define SUBLANG_IGBO_NIGERIA                      0x01
1108 #define SUBLANG_INDONESIAN_INDONESIA              0x01
1109 #define SUBLANG_INUKTITUT_CANADA                  0x01
1110 #define SUBLANG_INUKTITUT_CANADA_LATIN            0x02
1111 #define SUBLANG_IRISH_IRELAND                     0x02
1112 #define SUBLANG_ITALIAN                           0x01
1113 #define SUBLANG_ITALIAN_SWISS                     0x02
1114 #define SUBLANG_JAPANESE_JAPAN                    0x01
1115 #define SUBLANG_KANNADA_INDIA                     0x01
1116 #define SUBLANG_KASHMIRI_INDIA                    0x02
1117 #define SUBLANG_KASHMIRI_SASIA                    0x02
1118 #define SUBLANG_KAZAK_KAZAKHSTAN                  0x01
1119 #define SUBLANG_KHMER_CAMBODIA                    0x01
1120 #define SUBLANG_KICHE_GUATEMALA                   0x01
1121 #define SUBLANG_KINYARWANDA_RWANDA                0x01
1122 #define SUBLANG_KONKANI_INDIA                     0x01
1123 #define SUBLANG_KOREAN                            0x01
1124 #define SUBLANG_KYRGYZ_KYRGYZSTAN                 0x01
1125 #define SUBLANG_LAO_LAO                           0x01
1126 #define SUBLANG_LAO_LAO_PDR            SUBLANG_LAO_LAO		/* SUBLANG_LAO_LAO is what MS defines */
1127 #define SUBLANG_LATVIAN_LATVIA                    0x01
1128 #if (WINVER >= 0x0600)
1129 #define SUBLANG_LITHUANIAN_LITHUANIA              0x01
1130 #endif /* WINVER >= 0x0600 */
1131 #define SUBLANG_LITHUANIAN                        0x01
1132 #define SUBLANG_LOWER_SORBIAN_GERMANY             0x02
1133 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG          0x01
1134 #define SUBLANG_MACEDONIAN_MACEDONIA              0x01
1135 #define SUBLANG_MALAY_MALAYSIA                    0x01
1136 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM           0x02
1137 #define SUBLANG_MALAYALAM_INDIA                   0x01
1138 #define SUBLANG_MALTESE_MALTA                     0x01
1139 #define SUBLANG_MAORI_NEW_ZEALAND                 0x01
1140 #define SUBLANG_MAPUDUNGUN_CHILE                  0x01
1141 #define SUBLANG_MARATHI_INDIA                     0x01
1142 #define SUBLANG_MOHAWK_MOHAWK                     0x01
1143 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA       0x01
1144 #define SUBLANG_MONGOLIAN_PRC                     0x02
1145 #define SUBLANG_NEPALI_NEPAL                      0x01
1146 #define SUBLANG_NEPALI_INDIA                      0x02
1147 #define SUBLANG_NORWEGIAN_BOKMAL                  0x01
1148 #define SUBLANG_NORWEGIAN_NYNORSK                 0x02
1149 #define SUBLANG_OCCITAN_FRANCE                    0x01
1150 #define SUBLANG_ORIYA_INDIA                       0x01
1151 #define SUBLANG_PASHTO_AFGHANISTAN                0x01
1152 #define SUBLANG_PERSIAN_IRAN                      0x01
1153 #define SUBLANG_POLISH_POLAND                     0x01
1154 #define SUBLANG_PORTUGUESE_BRAZILIAN              0x01
1155 #if (WINVER >= 0x0600)
1156 #define SUBLANG_PORTUGUESE_PORTUGAL               0x02
1157 #endif /* WINVER >= 0x0600 */
1158 #define SUBLANG_PORTUGUESE                        0x02
1159 #define SUBLANG_PULAR_SENEGAL                     0x02
1160 #define SUBLANG_PUNJABI_INDIA                     0x01
1161 #define SUBLANG_PUNJABI_PAKISTAN                  0x02
1162 #define SUBLANG_QUECHUA_BOLIVIA                   0x01
1163 #define SUBLANG_QUECHUA_ECUADOR                   0x02
1164 #define SUBLANG_QUECHUA_PERU                      0x03
1165 #define SUBLANG_ROMANIAN_ROMANIA                  0x01
1166 /* ??? #define SUBLANG_ROMANIAN_MOLDOVA                  0x01 ??? */
1167 #define SUBLANG_ROMANSH_SWITZERLAND               0x01
1168 #define SUBLANG_RUSSIAN_RUSSIA                    0x01
1169 #define SUBLANG_SAKHA_RUSSIA                      0x01
1170 #define SUBLANG_SAMI_NORTHERN_NORWAY              0x01
1171 #define SUBLANG_SAMI_NORTHERN_SWEDEN              0x02
1172 #define SUBLANG_SAMI_NORTHERN_FINLAND             0x03
1173 #define SUBLANG_SAMI_LULE_NORWAY                  0x04
1174 #define SUBLANG_SAMI_LULE_SWEDEN                  0x05
1175 #define SUBLANG_SAMI_SOUTHERN_NORWAY              0x06
1176 #define SUBLANG_SAMI_SOUTHERN_SWEDEN              0x07
1177 #define SUBLANG_SAMI_SKOLT_FINLAND                0x08
1178 #define SUBLANG_SAMI_INARI_FINLAND                0x09
1179 #define SUBLANG_SANSKRIT_INDIA                    0x01
1180 #define SUBLANG_SCOTTISH_GAELIC                    0x01
1181 #define SUBLANG_SERBIAN_LATIN                     0x02
1182 #define SUBLANG_SERBIAN_CYRILLIC                  0x03
1183 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN  0x06
1184 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
1185 #define SUBLANG_SERBIAN_MONTENEGRO_LATIN          0x0b
1186 #define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC       0x0c
1187 #define SUBLANG_SERBIAN_SERBIA_LATIN              0x09
1188 #define SUBLANG_SERBIAN_SERBIA_CYRILLIC           0x0a
1189 #define SUBLANG_SINDHI_INDIA                      0x01
1190 #define SUBLANG_SINDHI_AFGHANISTAN                0x02
1191 #define SUBLANG_SINDHI_PAKISTAN                   0x02
1192 #define SUBLANG_SINHALESE_SRI_LANKA               0x01
1193 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA       0x01
1194 #define SUBLANG_SLOVAK_SLOVAKIA                   0x01
1195 #define SUBLANG_SLOVENIAN_SLOVENIA                0x01
1196 #define SUBLANG_SPANISH                           0x01
1197 #define SUBLANG_SPANISH_MEXICAN                   0x02
1198 #define SUBLANG_SPANISH_MODERN                    0x03
1199 #define SUBLANG_SPANISH_GUATEMALA                 0x04
1200 #define SUBLANG_SPANISH_COSTA_RICA                0x05
1201 #define SUBLANG_SPANISH_PANAMA                    0x06
1202 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC        0x07
1203 #define SUBLANG_SPANISH_VENEZUELA                 0x08
1204 #define SUBLANG_SPANISH_COLOMBIA                  0x09
1205 #define SUBLANG_SPANISH_PERU                      0x0a
1206 #define SUBLANG_SPANISH_ARGENTINA                 0x0b
1207 #define SUBLANG_SPANISH_ECUADOR                   0x0c
1208 #define SUBLANG_SPANISH_CHILE                     0x0d
1209 #define SUBLANG_SPANISH_URUGUAY                   0x0e
1210 #define SUBLANG_SPANISH_PARAGUAY                  0x0f
1211 #define SUBLANG_SPANISH_BOLIVIA                   0x10
1212 #define SUBLANG_SPANISH_EL_SALVADOR               0x11
1213 #define SUBLANG_SPANISH_HONDURAS                  0x12
1214 #define SUBLANG_SPANISH_NICARAGUA                 0x13
1215 #define SUBLANG_SPANISH_PUERTO_RICO               0x14
1216 #define SUBLANG_SPANISH_US                        0x15
1217 #define SUBLANG_SWAHILI_KENYA                     0x01
1218 #if (WINVER >= 0x0600)
1219 #define SUBLANG_SWEDISH_SWEDEN                    0x01
1220 #endif /* WINVER >= 0x0600 */
1221 #define SUBLANG_SWEDISH                           0x01
1222 #define SUBLANG_SWEDISH_FINLAND                   0x02
1223 #define SUBLANG_SYRIAC                            0x01
1224 #define SUBLANG_SYRIAC_SYRIA            SUBLANG_SYRIAC		/* SUBLANG_SYRIAC_SYRIA is what MSDN mentions */
1225 #define SUBLANG_TAJIK_TAJIKISTAN                  0x01
1226 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN           0x02
1227 #define SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH        0x04
1228 #define SUBLANG_TAMIL_INDIA                       0x01
1229 #define SUBLANG_TAMIL_SRI_LANKA                   0x02
1230 #define SUBLANG_TATAR_RUSSIA                      0x01
1231 #define SUBLANG_TELUGU_INDIA                      0x01
1232 #define SUBLANG_THAI_THAILAND                     0x01
1233 #define SUBLANG_TIBETAN_PRC                       0x01
1234 #define SUBLANG_TIBETAN_BHUTAN                    0x02
1235 #define SUBLANG_TIGRIGNA_ERITREA                  0x02
1236 #define SUBLANG_TIGRINYA_ERITREA                  0x02
1237 #define SUBLANG_TIGRINYA_ETHIOPIA                 0x01
1238 #define SUBLANG_TSWANA_BOTSWANA                   0x02
1239 #define SUBLANG_TSWANA_SOUTH_AFRICA               0x01
1240 #define SUBLANG_TURKISH_TURKEY                    0x01
1241 #define SUBLANG_TURKMEN_TURKMENISTAN              0x01
1242 #define SUBLANG_UIGHUR_PRC                        0x01
1243 #define SUBLANG_UKRAINIAN_UKRAINE                 0x01
1244 #define SUBLANG_UPPER_SORBIAN_GERMANY             0x01
1245 #define SUBLANG_URDU_PAKISTAN                     0x01
1246 #define SUBLANG_URDU_INDIA                        0x02
1247 #define SUBLANG_UZBEK_LATIN                       0x01
1248 #define SUBLANG_UZBEK_CYRILLIC                    0x02
1249 #define SUBLANG_VALENCIAN_VALENCIA                0x02
1250 #define SUBLANG_VIETNAMESE_VIETNAM                0x01
1251 #define SUBLANG_WELSH_UNITED_KINGDOM              0x01
1252 #define SUBLANG_WOLOF_SENEGAL                     0x01
1253 #define SUBLANG_YORUBA_NIGERIA                    0x01
1254 #define SUBLANG_XHOSA_SOUTH_AFRICA                0x01
1255 #define SUBLANG_YAKUT_RUSSIA                      0x01
1256 #define SUBLANG_YI_PRC                            0x01
1257 #define SUBLANG_ZULU_SOUTH_AFRICA                 0x01
1258 
1259 #define SORT_DEFAULT                              0x0
1260 #define SORT_INVARIANT_MATH                       0x1
1261 
1262 #define SORT_JAPANESE_XJIS                        0x0
1263 #define SORT_JAPANESE_UNICODE                     0x1
1264 #define SORT_JAPANESE_RADICALSTROKE               0x4
1265 
1266 #define SORT_CHINESE_BIG5                         0x0
1267 #define SORT_CHINESE_PRCP                         0x0
1268 #define SORT_CHINESE_UNICODE                      0x1
1269 #define SORT_CHINESE_PRC                          0x2
1270 #define SORT_CHINESE_BOPOMOFO                     0x3
1271 #define SORT_CHINESE_RADICALSTROKE		  0x4
1272 
1273 #define SORT_KOREAN_KSC                           0x0
1274 #define SORT_KOREAN_UNICODE                       0x1
1275 
1276 #define SORT_GERMAN_PHONE_BOOK                    0x1
1277 
1278 #define SORT_HUNGARIAN_DEFAULT                    0x0
1279 #define SORT_HUNGARIAN_TECHNICAL                  0x1
1280 
1281 #define SORT_GEORGIAN_TRADITIONAL                 0x0
1282 #define SORT_GEORGIAN_MODERN                      0x1
1283 
1284 #define MAKELANGID(p,s) ((((WORD)(s)) << 10) | (WORD)(p))
1285 #define PRIMARYLANGID(lgid) ((WORD)(lgid) & 0x3ff)
1286 #define SUBLANGID(lgid) ((WORD)(lgid) >> 10)
1287 
1288 #define NLS_VALID_LOCALE_MASK 0x000fffff
1289 
1290 #define MAKELCID(lgid,srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))
1291 #define MAKESORTLCID(lgid,srtid,ver) ((DWORD)((MAKELCID(lgid,srtid)) | (((DWORD)((WORD)(ver))) << 20)))
1292 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
1293 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0xf))
1294 #define SORTVERSIONFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 20) & 0xf))
1295 
1296 #define LOCALE_NAME_MAX_LENGTH 85
1297 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT))
1298 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT))
1299 
1300 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT,SORT_DEFAULT))
1301 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT,SORT_DEFAULT))
1302 
1303 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
1304 
1305 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
1306 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
1307 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
1308 
1309 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
1310 
1311 #define UNREFERENCED_PARAMETER(P) {(P) = (P);}
1312 #define UNREFERENCED_LOCAL_VARIABLE(V) {(V) = (V);}
1313 #define DBG_UNREFERENCED_PARAMETER(P) (P)
1314 #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
1315 
1316 #define DEFAULT_UNREACHABLE
1317 
1318 #ifndef UMDF_USING_NTSTATUS
1319 #ifndef WIN32_NO_STATUS
1320 #define STATUS_WAIT_0 ((DWORD)0x00000000)
1321 #define STATUS_ABANDONED_WAIT_0 ((DWORD)0x00000080)
1322 #define STATUS_USER_APC ((DWORD)0x000000C0)
1323 #define STATUS_TIMEOUT ((DWORD)0x00000102)
1324 #define STATUS_PENDING ((DWORD)0x00000103)
1325 #define DBG_EXCEPTION_HANDLED ((DWORD)0x00010001)
1326 #define DBG_CONTINUE ((DWORD)0x00010002)
1327 #define STATUS_SEGMENT_NOTIFICATION ((DWORD)0x40000005)
1328 #define STATUS_FATAL_APP_EXIT ((DWORD)0x40000015)
1329 #define DBG_TERMINATE_THREAD ((DWORD)0x40010003)
1330 #define DBG_TERMINATE_PROCESS ((DWORD)0x40010004)
1331 #define DBG_CONTROL_C ((DWORD)0x40010005)
1332 #define DBG_PRINTEXCEPTION_C ((DWORD)0x40010006)
1333 #define DBG_RIPEXCEPTION ((DWORD)0x40010007)
1334 #define DBG_CONTROL_BREAK ((DWORD)0x40010008)
1335 #define DBG_COMMAND_EXCEPTION ((DWORD)0x40010009)
1336 #define DBG_PRINTEXCEPTION_WIDE_C ((DWORD)0x4001000A)
1337 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001)
1338 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002)
1339 #define STATUS_BREAKPOINT ((DWORD)0x80000003)
1340 #define STATUS_SINGLE_STEP ((DWORD)0x80000004)
1341 #define STATUS_LONGJUMP ((DWORD)0x80000026)
1342 #define STATUS_UNWIND_CONSOLIDATE ((DWORD)0x80000029)
1343 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD)0x80010001)
1344 #define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005)
1345 #define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006)
1346 #define STATUS_INVALID_HANDLE ((DWORD)0xC0000008)
1347 #define STATUS_INVALID_PARAMETER ((DWORD)0xC000000D)
1348 #define STATUS_NO_MEMORY ((DWORD)0xC0000017)
1349 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001D)
1350 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025)
1351 #define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026)
1352 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008C)
1353 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008D)
1354 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008E)
1355 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008F)
1356 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090)
1357 #define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091)
1358 #define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092)
1359 #define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093)
1360 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094)
1361 #define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095)
1362 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096)
1363 #define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FD)
1364 #define STATUS_DLL_NOT_FOUND ((DWORD)0xC0000135)
1365 #define STATUS_ORDINAL_NOT_FOUND ((DWORD)0xC0000138)
1366 #define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD)0xC0000139)
1367 #define STATUS_CONTROL_C_EXIT ((DWORD)0xC000013A)
1368 #define STATUS_DLL_INIT_FAILED ((DWORD)0xC0000142)
1369 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD)0xC00002B4)
1370 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD)0xC00002B5)
1371 #define STATUS_REG_NAT_CONSUMPTION ((DWORD)0xC00002C9)
1372 #define STATUS_STACK_BUFFER_OVERRUN ((DWORD)0xC0000409)
1373 #define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD)0xC0000417)
1374 #define STATUS_ASSERTION_FAILURE ((DWORD)0xC0000420)
1375 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD)0xC015000F)
1376 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD)0xC0150010)
1377 #endif
1378 #endif
1379 
1380 #define MAXIMUM_WAIT_OBJECTS 64
1381 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
1382 
1383   typedef ULONG_PTR KSPIN_LOCK;
1384   typedef KSPIN_LOCK *PKSPIN_LOCK;
1385 
1386     typedef struct DECLSPEC_ALIGN (16) _M128A {
1387       ULONGLONG Low;
1388       LONGLONG High;
1389     } M128A,*PM128A;
1390 
1391     typedef struct DECLSPEC_ALIGN (16) _XSAVE_FORMAT {
1392       WORD ControlWord;
1393       WORD StatusWord;
1394       BYTE TagWord;
1395       BYTE Reserved1;
1396       WORD ErrorOpcode;
1397       DWORD ErrorOffset;
1398       WORD ErrorSelector;
1399       WORD Reserved2;
1400       DWORD DataOffset;
1401       WORD DataSelector;
1402       WORD Reserved3;
1403       DWORD MxCsr;
1404       DWORD MxCsr_Mask;
1405       M128A FloatRegisters[8];
1406 #ifdef _WIN64
1407       M128A XmmRegisters[16];
1408       BYTE Reserved4[96];
1409 #else
1410       M128A XmmRegisters[8];
1411       BYTE Reserved4[220];
1412       DWORD Cr0NpxState;
1413 #endif
1414     } XSAVE_FORMAT,*PXSAVE_FORMAT;
1415 
1416     typedef struct DECLSPEC_ALIGN (8) _XSAVE_AREA_HEADER {
1417       DWORD64 Mask;
1418       DWORD64 Reserved[7];
1419     } XSAVE_AREA_HEADER,*PXSAVE_AREA_HEADER;
1420 
1421     typedef struct DECLSPEC_ALIGN (16) _XSAVE_AREA {
1422       XSAVE_FORMAT LegacyState;
1423       XSAVE_AREA_HEADER Header;
1424     } XSAVE_AREA,*PXSAVE_AREA;
1425 
1426     typedef struct _XSTATE_CONTEXT {
1427       DWORD64 Mask;
1428       DWORD Length;
1429       DWORD Reserved1;
1430       PXSAVE_AREA Area;
1431 #if defined (__i386__)
1432       DWORD Reserved2;
1433 #endif
1434       PVOID Buffer;
1435 #if defined (__i386__)
1436       DWORD Reserved3;
1437 #endif
1438     } XSTATE_CONTEXT,*PXSTATE_CONTEXT;
1439 
1440     typedef struct _SCOPE_TABLE_AMD64 {
1441       DWORD Count;
1442       struct {
1443 	DWORD BeginAddress;
1444 	DWORD EndAddress;
1445 	DWORD HandlerAddress;
1446 	DWORD JumpTarget;
1447       } ScopeRecord[1];
1448     } SCOPE_TABLE_AMD64,*PSCOPE_TABLE_AMD64;
1449 
1450 #ifdef _AMD64_
1451 
1452 #if defined(__x86_64) && !defined(RC_INVOKED)
1453 
1454 #ifdef __cplusplus
1455   extern "C" {
1456 #endif
1457 
1458 #define BitTest _bittest
1459 #define BitTestAndComplement _bittestandcomplement
1460 #define BitTestAndSet _bittestandset
1461 #define BitTestAndReset _bittestandreset
1462 #define BitTest64 _bittest64
1463 #define BitTestAndComplement64 _bittestandcomplement64
1464 #define BitTestAndSet64 _bittestandset64
1465 #define BitTestAndReset64 _bittestandreset64
1466 
1467     /* BOOLEAN _bittest(LONG const *Base,LONG Offset);  moved to psdk_inc/intrin-impl.h */
1468     /* BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1469     /* BOOLEAN _bittestandset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1470     /* BOOLEAN _bittestandreset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1471     /* BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1472     /* BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1473     /* BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1474     /* BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1475 
1476 #define BitScanForward _BitScanForward
1477 #define BitScanReverse _BitScanReverse
1478 #define BitScanForward64 _BitScanForward64
1479 #define BitScanReverse64 _BitScanReverse64
1480 
1481     /* BOOLEAN _BitScanForward(DWORD *Index,DWORD Mask); moved to psdk_inc/intrin-impl.h */
1482     /* BOOLEAN _BitScanReverse(DWORD *Index,DWORD Mask); moved to psdk_inc/intrin-impl.h */
1483     /* BOOLEAN _BitScanForward64(DWORD *Index,DWORD64 Mask); moved to psdk_inc/intrin-impl.h */
1484     /* BOOLEAN _BitScanReverse64(DWORD *Index,DWORD64 Mask); moved to psdk_inc/intrin-impl.h */
1485 
1486 #define InterlockedIncrement16 _InterlockedIncrement16
1487 #define InterlockedDecrement16 _InterlockedDecrement16
1488 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
1489 
1490 #define InterlockedAnd _InterlockedAnd
1491 #define InterlockedOr _InterlockedOr
1492 #define InterlockedXor _InterlockedXor
1493 #define InterlockedIncrement _InterlockedIncrement
1494 #define InterlockedIncrementAcquire InterlockedIncrement
1495 #define InterlockedIncrementRelease InterlockedIncrement
1496 #define InterlockedDecrement _InterlockedDecrement
1497 #define InterlockedDecrementAcquire InterlockedDecrement
1498 #define InterlockedDecrementRelease InterlockedDecrement
1499 #define InterlockedAdd _InterlockedAdd
1500 #define InterlockedExchange _InterlockedExchange
1501 #define InterlockedExchangeAdd _InterlockedExchangeAdd
1502 #define InterlockedCompareExchange _InterlockedCompareExchange
1503 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
1504 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
1505 
1506 #define InterlockedAnd64 _InterlockedAnd64
1507 #define InterlockedAndAffinity InterlockedAnd64
1508 #define InterlockedOr64 _InterlockedOr64
1509 #define InterlockedOrAffinity InterlockedOr64
1510 #define InterlockedXor64 _InterlockedXor64
1511 #define InterlockedIncrement64 _InterlockedIncrement64
1512 #define InterlockedDecrement64 _InterlockedDecrement64
1513 #define InterlockedAdd64 _InterlockedAdd64
1514 #define InterlockedExchange64 _InterlockedExchange64
1515 #define InterlockedExchangeAcquire64 InterlockedExchange64
1516 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
1517 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
1518 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
1519 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
1520 
1521 #define InterlockedExchangePointer _InterlockedExchangePointer
1522 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1523 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1524 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1525 
1526 #define InterlockedExchangeAddSizeT(a,b) InterlockedExchangeAdd64((LONG64 *)a,b)
1527 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
1528 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
1529 
1530     /* SHORT InterlockedIncrement16(SHORT volatile *Addend); moved to psdk_inc/intrin-impl.h */
1531     /* SHORT InterlockedDecrement16(SHORT volatile *Addend); moved to psdk_inc/intrin-impl.h */
1532     /* SHORT InterlockedCompareExchange16(SHORT volatile *Destination,SHORT ExChange,SHORT Comperand); moved to psdk_inc/intrin-impl.h */
1533     /* LONG InterlockedIncrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
1534     /* LONG InterlockedDecrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
1535     /* LONG InterlockedExchange(LONG volatile *Target,LONG Value); moved to psdk_inc/intrin-impl.h */
1536 
1537     /* LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
1538     /* LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand); moved to psdk_inc/intrin-impl.h */
1539     /* LONG InterlockedAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
1540     /* LONG64 InterlockedIncrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
1541     /* LONG64 InterlockedDecrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
1542     /* LONG64 InterlockedExchange64(LONG64 volatile *Target,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1543     /* LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1544     /* LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1545     /* LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand); moved to psdk_inc/intrin-impl.h */
1546     /* PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand); moved to psdk_inc/intrin-impl.h */
1547     /* PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value); moved to psdk_inc/intrin-impl.h */
1548 
1549 #define CacheLineFlush(Address) _mm_clflush(Address)
1550 
1551 # if defined(__cplusplus)
1552 extern "C" {
1553 # endif
1554 # include <x86intrin.h>
1555 # if defined(__cplusplus)
1556 }
1557 # endif
1558 #include <emmintrin.h>
1559 
1560 #define FastFence __faststorefence
1561 #define LoadFence _mm_lfence
1562 #define MemoryFence _mm_mfence
1563 #define StoreFence _mm_sfence
1564 
1565 #define YieldProcessor _mm_pause
1566 #define MemoryBarrier _mm_mfence
1567 #define PreFetchCacheLine(l,a) _mm_prefetch((CHAR CONST *) a,l)
1568 #define PrefetchForWrite(p) _m_prefetchw(p)
1569 #define ReadForWriteAccess(p) (_m_prefetchw(p),*(p))
1570 
1571 #define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
1572 #define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
1573 #define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
1574 #define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
1575 
1576 #define ReadMxCsr _mm_getcsr
1577 #define WriteMxCsr _mm_setcsr
1578 
1579 #define DbgRaiseAssertionFailure __int2c
1580 #define GetCallersEflags() __getcallerseflags()
1581 
1582     unsigned __int32 __getcallerseflags(VOID);
1583 
1584 #define GetSegmentLimit __segmentlimit
1585 
1586     DWORD __segmentlimit(DWORD Selector);
1587 
1588 #define ReadTimeStampCounter() __rdtsc()
1589 
1590     /* VOID __movsb(PBYTE Destination,BYTE const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1591     /* VOID __movsw(PWORD Destination,WORD const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1592     /* VOID __movsd(PDWORD Destination,DWORD const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1593     /* VOID __movsq(PDWORD64 Destination,DWORD64 const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1594 
1595 #define MultiplyHigh __mulh
1596 #define UnsignedMultiplyHigh __umulh
1597 
1598     LONGLONG MultiplyHigh(LONGLONG Multiplier,LONGLONG Multiplicand);
1599     ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
1600 
1601 #define ShiftLeft128 __shiftleft128
1602 #define ShiftRight128 __shiftright128
1603 
1604     DWORD64 ShiftLeft128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1605     DWORD64 ShiftRight128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1606 
1607 #define Multiply128 _mul128
1608 
1609     LONG64 Multiply128(LONG64 Multiplier,LONG64 Multiplicand,LONG64 *HighProduct);
1610 
1611 #define UnsignedMultiply128 _umul128
1612 
1613     DWORD64 UnsignedMultiply128(DWORD64 Multiplier,DWORD64 Multiplicand,DWORD64 *HighProduct);
1614 
1615     LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift);
1616     DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift);
1617 
1618 #ifndef __CRT__NO_INLINE
MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift)1619     __CRT_INLINE LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift) {
1620       LONG64 extractedProduct;
1621       LONG64 highProduct;
1622       LONG64 lowProduct;
1623       lowProduct = Multiply128(Multiplier,Multiplicand,&highProduct);
1624       extractedProduct = (LONG64)ShiftRight128((LONG64)lowProduct,(LONG64)highProduct,Shift);
1625       return extractedProduct;
1626     }
1627 
UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift)1628     __CRT_INLINE DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift) {
1629       DWORD64 extractedProduct;
1630       DWORD64 highProduct;
1631       DWORD64 lowProduct;
1632       lowProduct = UnsignedMultiply128(Multiplier,Multiplicand,&highProduct);
1633       extractedProduct = ShiftRight128(lowProduct,highProduct,Shift);
1634       return extractedProduct;
1635     }
1636 #endif
1637 
1638     /* unsigned char __readgsbyte(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1639     /* unsigned short __readgsword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1640     /* unsigned __LONG32 __readgsdword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1641     /* __MINGW_EXTENSION unsigned __int64 __readgsqword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1642 
1643     /* void __writegsbyte(unsigned __LONG32 Offset,unsigned char Data); moved to psdk_inc/intrin-impl.h */
1644     /* void __writegsword(unsigned __LONG32 Offset,unsigned short Data); moved to psdk_inc/intrin-impl.h */
1645     /* void __writegsdword(unsigned __LONG32 Offset,unsigned __LONG32 Data); moved to psdk_inc/intrin-impl.h */
1646 
1647 #ifdef __cplusplus
1648   }
1649 #endif
1650 #endif /* defined(__x86_64) && !defined(RC_INVOKED) */
1651 
1652 #define EXCEPTION_READ_FAULT 0
1653 #define EXCEPTION_WRITE_FAULT 1
1654 #define EXCEPTION_EXECUTE_FAULT 8
1655 
1656 #if !defined(RC_INVOKED)
1657 
1658 #define CONTEXT_AMD64 0x100000
1659 
1660 #define CONTEXT_CONTROL (CONTEXT_AMD64 | __MSABI_LONG(0x1))
1661 #define CONTEXT_INTEGER (CONTEXT_AMD64 | __MSABI_LONG(0x2))
1662 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | __MSABI_LONG(0x4))
1663 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | __MSABI_LONG(0x8))
1664 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | __MSABI_LONG(0x10))
1665 
1666 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1667 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1668 
1669 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1670 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1671 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1672 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1673 #endif /* !defined(RC_INVOKED) */
1674 
1675 #define INITIAL_MXCSR 0x1f80
1676 #define INITIAL_FPCSR 0x027f
1677 
1678   typedef struct _XMM_SAVE_AREA32 {
1679     WORD ControlWord;
1680     WORD StatusWord;
1681     BYTE TagWord;
1682     BYTE Reserved1;
1683     WORD ErrorOpcode;
1684     DWORD ErrorOffset;
1685     WORD ErrorSelector;
1686     WORD Reserved2;
1687     DWORD DataOffset;
1688     WORD DataSelector;
1689     WORD Reserved3;
1690     DWORD MxCsr;
1691     DWORD MxCsr_Mask;
1692     M128A FloatRegisters[8];
1693     M128A XmmRegisters[16];
1694     BYTE Reserved4[96];
1695   } XMM_SAVE_AREA32,*PXMM_SAVE_AREA32;
1696 
1697 #define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
1698 
1699   typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
1700     DWORD64 P1Home;
1701     DWORD64 P2Home;
1702     DWORD64 P3Home;
1703     DWORD64 P4Home;
1704     DWORD64 P5Home;
1705     DWORD64 P6Home;
1706     DWORD ContextFlags;
1707     DWORD MxCsr;
1708     WORD SegCs;
1709     WORD SegDs;
1710     WORD SegEs;
1711     WORD SegFs;
1712     WORD SegGs;
1713     WORD SegSs;
1714     DWORD EFlags;
1715     DWORD64 Dr0;
1716     DWORD64 Dr1;
1717     DWORD64 Dr2;
1718     DWORD64 Dr3;
1719     DWORD64 Dr6;
1720     DWORD64 Dr7;
1721     DWORD64 Rax;
1722     DWORD64 Rcx;
1723     DWORD64 Rdx;
1724     DWORD64 Rbx;
1725     DWORD64 Rsp;
1726     DWORD64 Rbp;
1727     DWORD64 Rsi;
1728     DWORD64 Rdi;
1729     DWORD64 R8;
1730     DWORD64 R9;
1731     DWORD64 R10;
1732     DWORD64 R11;
1733     DWORD64 R12;
1734     DWORD64 R13;
1735     DWORD64 R14;
1736     DWORD64 R15;
1737     DWORD64 Rip;
1738     __C89_NAMELESS union {
1739       XMM_SAVE_AREA32 FltSave;
1740       XMM_SAVE_AREA32 FloatSave;
1741       __C89_NAMELESS struct {
1742 	M128A Header[2];
1743 	M128A Legacy[8];
1744 	M128A Xmm0;
1745 	M128A Xmm1;
1746 	M128A Xmm2;
1747 	M128A Xmm3;
1748 	M128A Xmm4;
1749 	M128A Xmm5;
1750 	M128A Xmm6;
1751 	M128A Xmm7;
1752 	M128A Xmm8;
1753 	M128A Xmm9;
1754 	M128A Xmm10;
1755 	M128A Xmm11;
1756 	M128A Xmm12;
1757 	M128A Xmm13;
1758 	M128A Xmm14;
1759 	M128A Xmm15;
1760       };
1761     };
1762     M128A VectorRegister[26];
1763     DWORD64 VectorControl;
1764     DWORD64 DebugControl;
1765     DWORD64 LastBranchToRip;
1766     DWORD64 LastBranchFromRip;
1767     DWORD64 LastExceptionToRip;
1768     DWORD64 LastExceptionFromRip;
1769   } CONTEXT,*PCONTEXT;
1770 
1771 #define RUNTIME_FUNCTION_INDIRECT 0x1
1772 
1773   typedef struct _RUNTIME_FUNCTION {
1774     DWORD BeginAddress;
1775     DWORD EndAddress;
1776     DWORD UnwindData;
1777   } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
1778 
1779   typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
1780   typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
1781 
1782 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1783 
1784 #define UNW_FLAG_NHANDLER   0x0
1785 #define UNW_FLAG_EHANDLER   0x1
1786 #define UNW_FLAG_UHANDLER   0x2
1787 #define UNW_FLAG_CHAININFO  0x4
1788 
1789 #endif /* end of _AMD64_ */
1790 
1791 
1792 #ifdef _ARM_
1793 
1794 #if defined(__arm__) && !defined(RC_INVOKED)
1795 
1796 #ifdef __cplusplus
1797   extern "C" {
1798 #endif
1799 
1800 #define BitTest _bittest
1801 #define BitTestAndComplement _bittestandcomplement
1802 #define BitTestAndSet _bittestandset
1803 #define BitTestAndReset _bittestandreset
1804 
1805 #define BitScanForward _BitScanForward
1806 #define BitScanReverse _BitScanReverse
1807 
1808 #define InterlockedIncrement16 _InterlockedIncrement16
1809 #define InterlockedDecrement16 _InterlockedDecrement16
1810 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
1811 
1812 #define InterlockedAnd _InterlockedAnd
1813 #define InterlockedOr _InterlockedOr
1814 #define InterlockedXor _InterlockedXor
1815 #define InterlockedIncrement _InterlockedIncrement
1816 #define InterlockedIncrementAcquire InterlockedIncrement
1817 #define InterlockedIncrementRelease InterlockedIncrement
1818 #define InterlockedDecrement _InterlockedDecrement
1819 #define InterlockedDecrementAcquire InterlockedDecrement
1820 #define InterlockedDecrementRelease InterlockedDecrement
1821 #define InterlockedAdd _InterlockedAdd
1822 #define InterlockedExchange _InterlockedExchange
1823 #define InterlockedExchangeAdd _InterlockedExchangeAdd
1824 #define InterlockedCompareExchange _InterlockedCompareExchange
1825 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
1826 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
1827 
1828 #define InterlockedAnd64 _InterlockedAnd64
1829 #define InterlockedAndAffinity InterlockedAnd64
1830 #define InterlockedOr64 _InterlockedOr64
1831 #define InterlockedOrAffinity InterlockedOr64
1832 #define InterlockedXor64 _InterlockedXor64
1833 #define InterlockedIncrement64 _InterlockedIncrement64
1834 #define InterlockedDecrement64 _InterlockedDecrement64
1835 #define InterlockedAdd64 _InterlockedAdd64
1836 #define InterlockedExchange64 _InterlockedExchange64
1837 #define InterlockedExchangeAcquire64 InterlockedExchange64
1838 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
1839 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
1840 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
1841 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
1842 
1843 #define InterlockedExchangePointer _InterlockedExchangePointer
1844 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1845 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1846 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1847 
1848 #ifdef __cplusplus
1849   }
1850 #endif
1851 #endif /* defined(__arm__) && !defined(RC_INVOKED) */
1852 
1853 #define EXCEPTION_READ_FAULT    0
1854 #define EXCEPTION_WRITE_FAULT   1
1855 #define EXCEPTION_EXECUTE_FAULT 8
1856 
1857 #if !defined(RC_INVOKED)
1858 
1859 #define CONTEXT_ARM    0x0200000
1860 
1861 #define CONTEXT_CONTROL         (CONTEXT_ARM | 0x00000001)
1862 #define CONTEXT_INTEGER         (CONTEXT_ARM | 0x00000002)
1863 #define CONTEXT_FLOATING_POINT  (CONTEXT_ARM | 0x00000004)
1864 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
1865 
1866 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1867 
1868 #define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1869 
1870 #define CONTEXT_EXCEPTION_ACTIVE    0x08000000
1871 #define CONTEXT_SERVICE_ACTIVE      0x10000000
1872 #define CONTEXT_EXCEPTION_REQUEST   0x40000000
1873 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1874 
1875 #define CONTEXT_UNWOUND_TO_CALL     0x20000000
1876 
1877 #endif /* !defined(RC_INVOKED) */
1878 
1879 #define INITIAL_CPSR  0x10
1880 #define INITIAL_FPSCR 0x00
1881 
1882 #define ARM_MAX_BREAKPOINTS 8
1883 #define ARM_MAX_WATCHPOINTS 1
1884 
1885 
1886   typedef struct _NEON128 {
1887     ULONGLONG Low;
1888     LONGLONG High;
1889   } NEON128, *PNEON128;
1890 
1891   typedef struct DECLSPEC_ALIGN(8) _CONTEXT {
1892     DWORD ContextFlags;
1893 
1894     DWORD R0;
1895     DWORD R1;
1896     DWORD R2;
1897     DWORD R3;
1898     DWORD R4;
1899     DWORD R5;
1900     DWORD R6;
1901     DWORD R7;
1902     DWORD R8;
1903     DWORD R9;
1904     DWORD R10;
1905     DWORD R11;
1906     DWORD R12;
1907 
1908     DWORD Sp;
1909     DWORD Lr;
1910     DWORD Pc;
1911     DWORD Cpsr;
1912 
1913     DWORD Fpscr;
1914     DWORD Padding;
1915     union {
1916         NEON128   Q[16];
1917         ULONGLONG D[32];
1918         DWORD     S[32];
1919     } DUMMYUNIONNAME;
1920 
1921     DWORD Bvr[ARM_MAX_BREAKPOINTS];
1922     DWORD Bcr[ARM_MAX_BREAKPOINTS];
1923     DWORD Wvr[ARM_MAX_WATCHPOINTS];
1924     DWORD Wcr[ARM_MAX_WATCHPOINTS];
1925 
1926     DWORD Padding2[2];
1927   } CONTEXT, *PCONTEXT;
1928 
1929   typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
1930   typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD ControlPc,PVOID Context);
1931 
1932 #define UNW_FLAG_NHANDLER   0x0
1933 #define UNW_FLAG_EHANDLER   0x1
1934 #define UNW_FLAG_UHANDLER   0x2
1935 
1936 #define UNWIND_HISTORY_TABLE_SIZE 12
1937 
1938   typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
1939     DWORD ImageBase;
1940     PRUNTIME_FUNCTION FunctionEntry;
1941   } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
1942 
1943   typedef struct _UNWIND_HISTORY_TABLE {
1944     DWORD Count;
1945     BYTE  LocalHint;
1946     BYTE  GlobalHint;
1947     BYTE  Search;
1948     BYTE  Once;
1949     DWORD LowAddress;
1950     DWORD HighAddress;
1951     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
1952   } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
1953 
1954   struct _DISPATCHER_CONTEXT;
1955   typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
1956   typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
1957 
1958   struct _DISPATCHER_CONTEXT {
1959     ULONG ControlPc;
1960     ULONG ImageBase;
1961     PRUNTIME_FUNCTION FunctionEntry;
1962     ULONG EstablisherFrame;
1963     ULONG TargetPc;
1964     PCONTEXT ContextRecord;
1965     PEXCEPTION_ROUTINE LanguageHandler;
1966     PVOID HandlerData;
1967     PUNWIND_HISTORY_TABLE HistoryTable;
1968     ULONG ScopeIndex;
1969     BOOLEAN ControlPcIsUnwound;
1970     PBYTE NonVolatileRegisters;
1971     ULONG VirtualVfpHead;
1972   };
1973 
1974   typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
1975     PDWORD R4;
1976     PDWORD R5;
1977     PDWORD R6;
1978     PDWORD R7;
1979     PDWORD R8;
1980     PDWORD R9;
1981     PDWORD R10;
1982     PDWORD R11;
1983     PDWORD Lr;
1984     PULONGLONG D8;
1985     PULONGLONG D9;
1986     PULONGLONG D10;
1987     PULONGLONG D11;
1988     PULONGLONG D12;
1989     PULONGLONG D13;
1990     PULONGLONG D14;
1991     PULONGLONG D15;
1992   } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
1993 
1994 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1995 
1996 #endif /* _ARM_ */
1997 
1998 
1999 #ifdef _ARM64_
2000 
2001 #if defined(__aarch64__) && !defined(RC_INVOKED)
2002 
2003 #ifdef __cplusplus
2004   extern "C" {
2005 #endif
2006 
2007 #define BitTest _bittest
2008 #define BitTestAndComplement _bittestandcomplement
2009 #define BitTestAndSet _bittestandset
2010 #define BitTestAndReset _bittestandreset
2011 
2012 #define BitScanForward _BitScanForward
2013 #define BitScanReverse _BitScanReverse
2014 #define BitScanForward64 _BitScanForward64
2015 #define BitScanReverse64 _BitScanReverse64
2016 
2017 #define InterlockedIncrement16 _InterlockedIncrement16
2018 #define InterlockedDecrement16 _InterlockedDecrement16
2019 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
2020 
2021 #define InterlockedAnd _InterlockedAnd
2022 #define InterlockedOr _InterlockedOr
2023 #define InterlockedXor _InterlockedXor
2024 #define InterlockedIncrement _InterlockedIncrement
2025 #define InterlockedIncrementAcquire InterlockedIncrement
2026 #define InterlockedIncrementRelease InterlockedIncrement
2027 #define InterlockedDecrement _InterlockedDecrement
2028 #define InterlockedDecrementAcquire InterlockedDecrement
2029 #define InterlockedDecrementRelease InterlockedDecrement
2030 #define InterlockedAdd _InterlockedAdd
2031 #define InterlockedExchange _InterlockedExchange
2032 #define InterlockedExchangeAdd _InterlockedExchangeAdd
2033 #define InterlockedCompareExchange _InterlockedCompareExchange
2034 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
2035 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
2036 
2037 #define InterlockedAnd64 _InterlockedAnd64
2038 #define InterlockedAndAffinity InterlockedAnd64
2039 #define InterlockedOr64 _InterlockedOr64
2040 #define InterlockedOrAffinity InterlockedOr64
2041 #define InterlockedXor64 _InterlockedXor64
2042 #define InterlockedIncrement64 _InterlockedIncrement64
2043 #define InterlockedDecrement64 _InterlockedDecrement64
2044 #define InterlockedAdd64 _InterlockedAdd64
2045 #define InterlockedExchange64 _InterlockedExchange64
2046 #define InterlockedExchangeAcquire64 InterlockedExchange64
2047 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
2048 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
2049 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
2050 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
2051 
2052 #define InterlockedExchangePointer _InterlockedExchangePointer
2053 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
2054 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
2055 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
2056 
2057 #ifdef __cplusplus
2058   }
2059 #endif
2060 #endif /* defined(__aarch64__) && !defined(RC_INVOKED) */
2061 
2062 #define EXCEPTION_READ_FAULT    0
2063 #define EXCEPTION_WRITE_FAULT   1
2064 #define EXCEPTION_EXECUTE_FAULT 8
2065 
2066 #if !defined(RC_INVOKED)
2067 
2068 #define CONTEXT_ARM64           0x400000
2069 #define CONTEXT_CONTROL         (CONTEXT_ARM64 | 0x00000001)
2070 #define CONTEXT_INTEGER         (CONTEXT_ARM64 | 0x00000002)
2071 #define CONTEXT_FLOATING_POINT  (CONTEXT_ARM64 | 0x00000004)
2072 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
2073 
2074 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER)
2075 #define CONTEXT_ALL  (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
2076 
2077 #define EXCEPTION_READ_FAULT    0
2078 #define EXCEPTION_WRITE_FAULT   1
2079 #define EXCEPTION_EXECUTE_FAULT 8
2080 
2081 #define ARM64_MAX_BREAKPOINTS   8
2082 #define ARM64_MAX_WATCHPOINTS   2
2083 
2084 #endif /* !defined(RC_INVOKED) */
2085 
2086   typedef union _NEON128 {
2087     struct
2088     {
2089         ULONGLONG Low;
2090         LONGLONG High;
2091     } DUMMYSTRUCTNAME;
2092     double D[2];
2093     float S[4];
2094     WORD  H[8];
2095     BYTE  B[16];
2096   } NEON128, *PNEON128;
2097 
2098   typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
2099     ULONG ContextFlags;                 /* 000 */
2100     /* CONTEXT_INTEGER */
2101     ULONG Cpsr;                         /* 004 */
2102     union
2103     {
2104         struct
2105         {
2106             DWORD64 X0;                 /* 008 */
2107             DWORD64 X1;                 /* 010 */
2108             DWORD64 X2;                 /* 018 */
2109             DWORD64 X3;                 /* 020 */
2110             DWORD64 X4;                 /* 028 */
2111             DWORD64 X5;                 /* 030 */
2112             DWORD64 X6;                 /* 038 */
2113             DWORD64 X7;                 /* 040 */
2114             DWORD64 X8;                 /* 048 */
2115             DWORD64 X9;                 /* 050 */
2116             DWORD64 X10;                /* 058 */
2117             DWORD64 X11;                /* 060 */
2118             DWORD64 X12;                /* 068 */
2119             DWORD64 X13;                /* 070 */
2120             DWORD64 X14;                /* 078 */
2121             DWORD64 X15;                /* 080 */
2122             DWORD64 X16;                /* 088 */
2123             DWORD64 X17;                /* 090 */
2124             DWORD64 X18;                /* 098 */
2125             DWORD64 X19;                /* 0a0 */
2126             DWORD64 X20;                /* 0a8 */
2127             DWORD64 X21;                /* 0b0 */
2128             DWORD64 X22;                /* 0b8 */
2129             DWORD64 X23;                /* 0c0 */
2130             DWORD64 X24;                /* 0c8 */
2131             DWORD64 X25;                /* 0d0 */
2132             DWORD64 X26;                /* 0d8 */
2133             DWORD64 X27;                /* 0e0 */
2134             DWORD64 X28;                /* 0e8 */
2135             DWORD64 Fp;                 /* 0f0 */
2136             DWORD64 Lr;                 /* 0f8 */
2137         } DUMMYSTRUCTNAME;
2138         DWORD64 X[31];                  /* 008 */
2139     } DUMMYUNIONNAME;
2140     /* CONTEXT_CONTROL */
2141     DWORD64 Sp;                         /* 100 */
2142     DWORD64 Pc;                         /* 108 */
2143     /* CONTEXT_FLOATING_POINT */
2144     NEON128 V[32];                      /* 110 */
2145     DWORD Fpcr;                         /* 310 */
2146     DWORD Fpsr;                         /* 314 */
2147     /* CONTEXT_DEBUG_REGISTERS */
2148     DWORD Bcr[ARM64_MAX_BREAKPOINTS];   /* 318 */
2149     DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */
2150     DWORD Wcr[ARM64_MAX_WATCHPOINTS];   /* 378 */
2151     DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */
2152   } CONTEXT, *PCONTEXT;
2153 
2154   typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
2155   typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
2156 
2157 #define UNW_FLAG_NHANDLER   0x0
2158 #define UNW_FLAG_EHANDLER   0x1
2159 #define UNW_FLAG_UHANDLER   0x2
2160 
2161 #define UNWIND_HISTORY_TABLE_SIZE 12
2162 
2163   typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
2164     DWORD64 ImageBase;
2165     PRUNTIME_FUNCTION FunctionEntry;
2166   } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
2167 
2168   typedef struct _UNWIND_HISTORY_TABLE {
2169     DWORD   Count;
2170     BYTE    LocalHint;
2171     BYTE    GlobalHint;
2172     BYTE    Search;
2173     BYTE    Once;
2174     DWORD64 LowAddress;
2175     DWORD64 HighAddress;
2176     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
2177   } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
2178 
2179   struct _DISPATCHER_CONTEXT;
2180   typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
2181   typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
2182 
2183   struct _DISPATCHER_CONTEXT {
2184     ULONG_PTR ControlPc;
2185     ULONG_PTR ImageBase;
2186     PRUNTIME_FUNCTION FunctionEntry;
2187     ULONG_PTR EstablisherFrame;
2188     ULONG_PTR TargetPc;
2189     PCONTEXT ContextRecord;
2190     PEXCEPTION_ROUTINE LanguageHandler;
2191     PVOID HandlerData;
2192     PUNWIND_HISTORY_TABLE HistoryTable;
2193     ULONG ScopeIndex;
2194     BOOLEAN ControlPcIsUnwound;
2195     PBYTE NonVolatileRegisters;
2196   };
2197 
2198   typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
2199     PDWORD64 X19;
2200     PDWORD64 X20;
2201     PDWORD64 X21;
2202     PDWORD64 X22;
2203     PDWORD64 X23;
2204     PDWORD64 X24;
2205     PDWORD64 X25;
2206     PDWORD64 X26;
2207     PDWORD64 X27;
2208     PDWORD64 X28;
2209     PDWORD64 Fp;
2210     PDWORD64 Lr;
2211 
2212     PDWORD64 D8;
2213     PDWORD64 D9;
2214     PDWORD64 D10;
2215     PDWORD64 D11;
2216     PDWORD64 D12;
2217     PDWORD64 D13;
2218     PDWORD64 D14;
2219     PDWORD64 D15;
2220   } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2221 
2222 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
2223 
2224 #endif /* _ARM64_ */
2225 
2226 
2227 #ifdef _X86_
2228 
2229 #if defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED)
2230 #ifdef __cplusplus
2231   extern "C" {
2232 #endif
2233 
2234 #define BitTest _bittest
2235 #define BitTestAndComplement _bittestandcomplement
2236 #define BitTestAndSet _bittestandset
2237 #define BitTestAndReset _bittestandreset
2238 
2239 #define BitScanForward _BitScanForward
2240 #define BitScanReverse _BitScanReverse
2241 
2242 #define InterlockedIncrement16 _InterlockedIncrement16
2243 #define InterlockedDecrement16 _InterlockedDecrement16
2244 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
2245 
2246 #define InterlockedAnd _InterlockedAnd
2247 #define InterlockedOr _InterlockedOr
2248 #define InterlockedXor _InterlockedXor
2249 #define InterlockedIncrement _InterlockedIncrement
2250 #define InterlockedIncrementAcquire InterlockedIncrement
2251 #define InterlockedIncrementRelease InterlockedIncrement
2252 #define InterlockedDecrement _InterlockedDecrement
2253 #define InterlockedDecrementAcquire InterlockedDecrement
2254 #define InterlockedDecrementRelease InterlockedDecrement
2255 #define InterlockedAdd _InterlockedAdd
2256 #define InterlockedExchange _InterlockedExchange
2257 #define InterlockedExchangeAdd _InterlockedExchangeAdd
2258 #define InterlockedCompareExchange _InterlockedCompareExchange
2259 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
2260 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
2261 
2262 #define InterlockedAnd64 _InterlockedAnd64
2263 #define InterlockedAndAffinity InterlockedAnd64
2264 #define InterlockedOr64 _InterlockedOr64
2265 #define InterlockedOrAffinity InterlockedOr64
2266 #define InterlockedXor64 _InterlockedXor64
2267 #define InterlockedIncrement64 _InterlockedIncrement64
2268 #define InterlockedDecrement64 _InterlockedDecrement64
2269 #define InterlockedAdd64 _InterlockedAdd64
2270 #define InterlockedExchange64 _InterlockedExchange64
2271 #define InterlockedExchangeAcquire64 InterlockedExchange64
2272 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
2273 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
2274 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
2275 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
2276 
2277 #define InterlockedExchangePointer _InterlockedExchangePointer
2278 #define InterlockedCompareExchangePointer(Destination, ExChange, Comperand) (PVOID) (LONG_PTR)InterlockedCompareExchange ((LONG volatile *) (Destination),(LONG) (LONG_PTR) (ExChange),(LONG) (LONG_PTR) (Comperand))
2279 #define InterlockedCompareExchangePointerAcquire InterlockedCompareExchangePointer
2280 #define InterlockedCompareExchangePointerRelease InterlockedCompareExchangePointer
2281 
2282 #ifdef _PREFIX_
2283     /* BYTE __readfsbyte(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2284     /* WORD __readfsword(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2285     /* DWORD __readfsdword(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2286     /* VOID __writefsbyte(DWORD Offset,BYTE Data); moved to psdk_inc/intrin-impl.h */
2287     /* VOID __writefsword(DWORD Offset,WORD Data); moved to psdk_inc/intrin-impl.h */
2288     /* VOID __writefsdword(DWORD Offset,DWORD Data); moved to psdk_inc/intrin-impl.h */
2289 #endif
2290 
2291 #ifdef __cplusplus
2292   }
2293 #endif
2294 #endif /* defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED) */
2295 
2296 #if defined(__i386__) && !defined(__x86_64)
2297 
2298 #ifdef __SSE2__
2299 #include <emmintrin.h>
2300 #define YieldProcessor _mm_pause
2301 #define MemoryBarrier _mm_mfence
2302 #else
2303 #define YieldProcessor __buildpause
2304 VOID MemoryBarrier(VOID);
2305 FORCEINLINE VOID MemoryBarrier(VOID)
2306 __buildmemorybarrier()
2307 #endif
2308 
2309 #define PreFetchCacheLine(l,a)
2310 #define ReadForWriteAccess(p) (*(p))
2311 
2312 #define PF_TEMPORAL_LEVEL_1
2313 #define PF_NON_TEMPORAL_LEVEL_ALL
2314 
2315 #define PcTeb 0x18
2316   struct _TEB *NtCurrentTeb(void);
2317   PVOID GetCurrentFiber(void);
2318   PVOID GetFiberData(void);
2319 
2320 #define DbgRaiseAssertionFailure __int2c
2321 
NtCurrentTeb(void)2322   FORCEINLINE struct _TEB *NtCurrentTeb(void)
2323   {
2324     return (struct _TEB *)__readfsdword(PcTeb);
2325   }
GetCurrentFiber(void)2326   FORCEINLINE PVOID GetCurrentFiber(void)
2327   {
2328     return(PVOID)__readfsdword(0x10);
2329   }
GetFiberData(void)2330   FORCEINLINE PVOID GetFiberData(void)
2331   {
2332       return *(PVOID *)GetCurrentFiber();
2333   }
2334 #endif /* defined(__i386__) && !defined(__x86_64) */
2335 
2336 #define EXCEPTION_READ_FAULT 0
2337 #define EXCEPTION_WRITE_FAULT 1
2338 #define EXCEPTION_EXECUTE_FAULT 8
2339 
2340 #define SIZE_OF_80387_REGISTERS 80
2341 
2342 #if !defined(RC_INVOKED)
2343 
2344 #define CONTEXT_i386 0x00010000
2345 #define CONTEXT_i486 0x00010000
2346 
2347 #define CONTEXT_CONTROL (CONTEXT_i386 | __MSABI_LONG(0x00000001))
2348 #define CONTEXT_INTEGER (CONTEXT_i386 | __MSABI_LONG(0x00000002))
2349 #define CONTEXT_SEGMENTS (CONTEXT_i386 | __MSABI_LONG(0x00000004))
2350 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | __MSABI_LONG(0x00000008))
2351 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000010))
2352 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000020))
2353 
2354 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
2355 
2356 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
2357 #endif /* !defined(RC_INVOKED) */
2358 
2359 #define MAXIMUM_SUPPORTED_EXTENSION 512
2360 
2361     typedef struct _FLOATING_SAVE_AREA {
2362       DWORD ControlWord;
2363       DWORD StatusWord;
2364       DWORD TagWord;
2365       DWORD ErrorOffset;
2366       DWORD ErrorSelector;
2367       DWORD DataOffset;
2368       DWORD DataSelector;
2369       BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
2370       DWORD Cr0NpxState;
2371     } FLOATING_SAVE_AREA;
2372 
2373     typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
2374 
2375     typedef struct _CONTEXT {
2376       DWORD ContextFlags;
2377       DWORD Dr0;
2378       DWORD Dr1;
2379       DWORD Dr2;
2380       DWORD Dr3;
2381       DWORD Dr6;
2382       DWORD Dr7;
2383       FLOATING_SAVE_AREA FloatSave;
2384       DWORD SegGs;
2385       DWORD SegFs;
2386       DWORD SegEs;
2387       DWORD SegDs;
2388 
2389       DWORD Edi;
2390       DWORD Esi;
2391       DWORD Ebx;
2392       DWORD Edx;
2393       DWORD Ecx;
2394       DWORD Eax;
2395       DWORD Ebp;
2396       DWORD Eip;
2397       DWORD SegCs;
2398       DWORD EFlags;
2399       DWORD Esp;
2400       DWORD SegSs;
2401       BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
2402     } CONTEXT;
2403 
2404     typedef CONTEXT *PCONTEXT;
2405 
2406 #endif /* end of _X86_ */
2407 
2408   /* LONG WINAPI InterlockedIncrement(LONG volatile *); moved to psdk_inc/intrin-impl.h */
2409   /* LONG WINAPI InterlockedDecrement(LONG volatile *); moved to psdk_inc/intrin-impl.h */
2410   /* LONG WINAPI InterlockedExchange(LONG volatile *, LONG); moved to psdk_inc/intrin-impl.h */
2411 
2412 #ifndef _LDT_ENTRY_DEFINED
2413 #define _LDT_ENTRY_DEFINED
2414 
2415     typedef struct _LDT_ENTRY {
2416       WORD LimitLow;
2417       WORD BaseLow;
2418       union {
2419 	struct {
2420 	  BYTE BaseMid;
2421 	  BYTE Flags1;
2422 	  BYTE Flags2;
2423 	  BYTE BaseHi;
2424 	} Bytes;
2425 	struct {
2426 	  DWORD BaseMid : 8;
2427 	  DWORD Type : 5;
2428 	  DWORD Dpl : 2;
2429 	  DWORD Pres : 1;
2430 	  DWORD LimitHi : 4;
2431 	  DWORD Sys : 1;
2432 	  DWORD Reserved_0 : 1;
2433 	  DWORD Default_Big : 1;
2434 	  DWORD Granularity : 1;
2435 	  DWORD BaseHi : 8;
2436 	} Bits;
2437       } HighWord;
2438     } LDT_ENTRY,*PLDT_ENTRY;
2439 #endif /* _LDT_ENTRY_DEFINED */
2440 
2441 #if defined(__ia64__) && !defined(RC_INVOKED)
2442 
2443 #ifdef __cplusplus
2444     extern "C" {
2445 #endif
2446 
2447       BOOLEAN BitScanForward64(DWORD *Index,DWORD64 Mask);
2448       BOOLEAN BitScanReverse64(DWORD *Index,DWORD64 Mask);
2449 
2450 #ifdef __cplusplus
2451     }
2452 #endif
2453 #endif /* defined(__ia64__) && !defined(RC_INVOKED) */
2454 
2455 #if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
2456 
2457     void *_cdecl _rdteb(void);
2458 
2459 #ifdef __ia64__
2460 #define NtCurrentTeb() ((struct _TEB *)_rdteb())
2461 #define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
2462 #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
2463 
2464 #ifdef __cplusplus
2465     extern "C" {
2466 #endif
2467 
2468       void __break(int);
2469       void __yield(void);
2470       void __mf(void);
2471       void __lfetch(int Level,VOID CONST *Address);
2472       void __lfetchfault(int Level,VOID CONST *Address);
2473       void __lfetch_excl(int Level,VOID CONST *Address);
2474       void __lfetchfault_excl(int Level,VOID CONST *Address);
2475 
2476 #define MD_LFHINT_NONE 0x00
2477 #define MD_LFHINT_NT1 0x01
2478 #define MD_LFHINT_NT2 0x02
2479 #define MD_LFHINT_NTA 0x03
2480 
2481 #ifdef __cplusplus
2482     }
2483 #endif
2484 
2485 #define YieldProcessor __yield
2486 #define MemoryBarrier __mf
2487 #define PreFetchCacheLine __lfetch
2488 #define ReadForWriteAccess(p) (*(p))
2489 #define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
2490 
2491 #define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
2492 #define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
2493 
2494 #define UnsignedMultiplyHigh __UMULH
2495 
2496     ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
2497 #else  /* __ia64__ */
2498     struct _TEB *NtCurrentTeb(void);
2499 #endif /* __ia64__ */
2500 #endif /* !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_) */
2501 
2502 #ifdef _IA64_
2503 
2504 #define EXCEPTION_READ_FAULT 0
2505 #define EXCEPTION_WRITE_FAULT 1
2506 #define EXCEPTION_EXECUTE_FAULT 2
2507 
2508 #if !defined(RC_INVOKED)
2509 
2510 #define CONTEXT_IA64 0x00080000
2511 
2512 #define CONTEXT_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000001))
2513 #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000002))
2514 #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000004))
2515 #define CONTEXT_INTEGER (CONTEXT_IA64 | __MSABI_LONG(0x00000008))
2516 #define CONTEXT_DEBUG (CONTEXT_IA64 | __MSABI_LONG(0x00000010))
2517 #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000020))
2518 
2519 #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
2520 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
2521 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
2522 
2523 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
2524 #define CONTEXT_SERVICE_ACTIVE 0x10000000
2525 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
2526 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
2527 #endif /* !defined(RC_INVOKED) */
2528 
2529     typedef struct _CONTEXT {
2530       DWORD ContextFlags;
2531       DWORD Fill1[3];
2532       ULONGLONG DbI0;
2533       ULONGLONG DbI1;
2534       ULONGLONG DbI2;
2535       ULONGLONG DbI3;
2536       ULONGLONG DbI4;
2537       ULONGLONG DbI5;
2538       ULONGLONG DbI6;
2539       ULONGLONG DbI7;
2540       ULONGLONG DbD0;
2541       ULONGLONG DbD1;
2542       ULONGLONG DbD2;
2543       ULONGLONG DbD3;
2544       ULONGLONG DbD4;
2545       ULONGLONG DbD5;
2546       ULONGLONG DbD6;
2547       ULONGLONG DbD7;
2548       FLOAT128 FltS0;
2549       FLOAT128 FltS1;
2550       FLOAT128 FltS2;
2551       FLOAT128 FltS3;
2552       FLOAT128 FltT0;
2553       FLOAT128 FltT1;
2554       FLOAT128 FltT2;
2555       FLOAT128 FltT3;
2556       FLOAT128 FltT4;
2557       FLOAT128 FltT5;
2558       FLOAT128 FltT6;
2559       FLOAT128 FltT7;
2560       FLOAT128 FltT8;
2561       FLOAT128 FltT9;
2562       FLOAT128 FltS4;
2563       FLOAT128 FltS5;
2564       FLOAT128 FltS6;
2565       FLOAT128 FltS7;
2566       FLOAT128 FltS8;
2567       FLOAT128 FltS9;
2568       FLOAT128 FltS10;
2569       FLOAT128 FltS11;
2570       FLOAT128 FltS12;
2571       FLOAT128 FltS13;
2572       FLOAT128 FltS14;
2573       FLOAT128 FltS15;
2574       FLOAT128 FltS16;
2575       FLOAT128 FltS17;
2576       FLOAT128 FltS18;
2577       FLOAT128 FltS19;
2578       FLOAT128 FltF32;
2579       FLOAT128 FltF33;
2580       FLOAT128 FltF34;
2581       FLOAT128 FltF35;
2582       FLOAT128 FltF36;
2583       FLOAT128 FltF37;
2584       FLOAT128 FltF38;
2585       FLOAT128 FltF39;
2586       FLOAT128 FltF40;
2587       FLOAT128 FltF41;
2588       FLOAT128 FltF42;
2589       FLOAT128 FltF43;
2590       FLOAT128 FltF44;
2591       FLOAT128 FltF45;
2592       FLOAT128 FltF46;
2593       FLOAT128 FltF47;
2594       FLOAT128 FltF48;
2595       FLOAT128 FltF49;
2596       FLOAT128 FltF50;
2597       FLOAT128 FltF51;
2598       FLOAT128 FltF52;
2599       FLOAT128 FltF53;
2600       FLOAT128 FltF54;
2601       FLOAT128 FltF55;
2602       FLOAT128 FltF56;
2603       FLOAT128 FltF57;
2604       FLOAT128 FltF58;
2605       FLOAT128 FltF59;
2606       FLOAT128 FltF60;
2607       FLOAT128 FltF61;
2608       FLOAT128 FltF62;
2609       FLOAT128 FltF63;
2610       FLOAT128 FltF64;
2611       FLOAT128 FltF65;
2612       FLOAT128 FltF66;
2613       FLOAT128 FltF67;
2614       FLOAT128 FltF68;
2615       FLOAT128 FltF69;
2616       FLOAT128 FltF70;
2617       FLOAT128 FltF71;
2618       FLOAT128 FltF72;
2619       FLOAT128 FltF73;
2620       FLOAT128 FltF74;
2621       FLOAT128 FltF75;
2622       FLOAT128 FltF76;
2623       FLOAT128 FltF77;
2624       FLOAT128 FltF78;
2625       FLOAT128 FltF79;
2626       FLOAT128 FltF80;
2627       FLOAT128 FltF81;
2628       FLOAT128 FltF82;
2629       FLOAT128 FltF83;
2630       FLOAT128 FltF84;
2631       FLOAT128 FltF85;
2632       FLOAT128 FltF86;
2633       FLOAT128 FltF87;
2634       FLOAT128 FltF88;
2635       FLOAT128 FltF89;
2636       FLOAT128 FltF90;
2637       FLOAT128 FltF91;
2638       FLOAT128 FltF92;
2639       FLOAT128 FltF93;
2640       FLOAT128 FltF94;
2641       FLOAT128 FltF95;
2642       FLOAT128 FltF96;
2643       FLOAT128 FltF97;
2644       FLOAT128 FltF98;
2645       FLOAT128 FltF99;
2646       FLOAT128 FltF100;
2647       FLOAT128 FltF101;
2648       FLOAT128 FltF102;
2649       FLOAT128 FltF103;
2650       FLOAT128 FltF104;
2651       FLOAT128 FltF105;
2652       FLOAT128 FltF106;
2653       FLOAT128 FltF107;
2654       FLOAT128 FltF108;
2655       FLOAT128 FltF109;
2656       FLOAT128 FltF110;
2657       FLOAT128 FltF111;
2658       FLOAT128 FltF112;
2659       FLOAT128 FltF113;
2660       FLOAT128 FltF114;
2661       FLOAT128 FltF115;
2662       FLOAT128 FltF116;
2663       FLOAT128 FltF117;
2664       FLOAT128 FltF118;
2665       FLOAT128 FltF119;
2666       FLOAT128 FltF120;
2667       FLOAT128 FltF121;
2668       FLOAT128 FltF122;
2669       FLOAT128 FltF123;
2670       FLOAT128 FltF124;
2671       FLOAT128 FltF125;
2672       FLOAT128 FltF126;
2673       FLOAT128 FltF127;
2674       ULONGLONG StFPSR;
2675       ULONGLONG IntGp;
2676       ULONGLONG IntT0;
2677       ULONGLONG IntT1;
2678       ULONGLONG IntS0;
2679       ULONGLONG IntS1;
2680       ULONGLONG IntS2;
2681       ULONGLONG IntS3;
2682       ULONGLONG IntV0;
2683       ULONGLONG IntT2;
2684       ULONGLONG IntT3;
2685       ULONGLONG IntT4;
2686       ULONGLONG IntSp;
2687       ULONGLONG IntTeb;
2688       ULONGLONG IntT5;
2689       ULONGLONG IntT6;
2690       ULONGLONG IntT7;
2691       ULONGLONG IntT8;
2692       ULONGLONG IntT9;
2693       ULONGLONG IntT10;
2694       ULONGLONG IntT11;
2695       ULONGLONG IntT12;
2696       ULONGLONG IntT13;
2697       ULONGLONG IntT14;
2698       ULONGLONG IntT15;
2699       ULONGLONG IntT16;
2700       ULONGLONG IntT17;
2701       ULONGLONG IntT18;
2702       ULONGLONG IntT19;
2703       ULONGLONG IntT20;
2704       ULONGLONG IntT21;
2705       ULONGLONG IntT22;
2706       ULONGLONG IntNats;
2707       ULONGLONG Preds;
2708       ULONGLONG BrRp;
2709       ULONGLONG BrS0;
2710       ULONGLONG BrS1;
2711       ULONGLONG BrS2;
2712       ULONGLONG BrS3;
2713       ULONGLONG BrS4;
2714       ULONGLONG BrT0;
2715       ULONGLONG BrT1;
2716       ULONGLONG ApUNAT;
2717       ULONGLONG ApLC;
2718       ULONGLONG ApEC;
2719       ULONGLONG ApCCV;
2720       ULONGLONG ApDCR;
2721       ULONGLONG RsPFS;
2722       ULONGLONG RsBSP;
2723       ULONGLONG RsBSPSTORE;
2724       ULONGLONG RsRSC;
2725       ULONGLONG RsRNAT;
2726       ULONGLONG StIPSR;
2727       ULONGLONG StIIP;
2728       ULONGLONG StIFS;
2729       ULONGLONG StFCR;
2730       ULONGLONG Eflag;
2731       ULONGLONG SegCSD;
2732       ULONGLONG SegSSD;
2733       ULONGLONG Cflag;
2734       ULONGLONG StFSR;
2735       ULONGLONG StFIR;
2736       ULONGLONG StFDR;
2737       ULONGLONG UNUSEDPACK;
2738     } CONTEXT,*PCONTEXT;
2739 
2740     typedef struct _PLABEL_DESCRIPTOR {
2741       ULONGLONG EntryPoint;
2742       ULONGLONG GlobalPointer;
2743     } PLABEL_DESCRIPTOR,*PPLABEL_DESCRIPTOR;
2744 
2745     typedef struct _RUNTIME_FUNCTION {
2746       DWORD BeginAddress;
2747       DWORD EndAddress;
2748       DWORD UnwindInfoAddress;
2749     } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
2750 
2751     typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
2752     typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
2753 
2754 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
2755 
2756     VOID __jump_unwind(ULONGLONG TargetMsFrame,ULONGLONG TargetBsFrame,ULONGLONG TargetPc);
2757 #endif /* end of _IA64_ */
2758 
2759 /* http://www.nynaeve.net/?p=99 */
2760 
2761 #define EXCEPTION_NONCONTINUABLE 0x1
2762 #define EXCEPTION_UNWINDING	   0x2
2763 #define EXCEPTION_EXIT_UNWIND      0x4
2764 #define EXCEPTION_STACK_INVALID    0x8
2765 #define EXCEPTION_NESTED_CALL      0x10
2766 #define EXCEPTION_TARGET_UNWIND    0x20
2767 #define EXCEPTION_COLLIDED_UNWIND  0x40
2768 #define EXCEPTION_UNWIND           0x66
2769 
2770 #define IS_UNWINDING(f) ((f & EXCEPTION_UNWIND) != 0)
2771 #define IS_DISPATCHING(f) ((f & EXCEPTION_UNWIND) == 0)
2772 #define IS_TARGET_UNWIND(f) ((f & EXCEPTION_TARGET_UNWIND) != 0)
2773 
2774 #define EXCEPTION_MAXIMUM_PARAMETERS 15
2775 
2776     typedef struct _EXCEPTION_RECORD {
2777       DWORD ExceptionCode;
2778       DWORD ExceptionFlags;
2779       struct _EXCEPTION_RECORD *ExceptionRecord;
2780       PVOID ExceptionAddress;
2781       DWORD NumberParameters;
2782       ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2783     } EXCEPTION_RECORD;
2784 
2785     typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
2786 
2787     typedef struct _EXCEPTION_RECORD32 {
2788       DWORD ExceptionCode;
2789       DWORD ExceptionFlags;
2790       DWORD ExceptionRecord;
2791       DWORD ExceptionAddress;
2792       DWORD NumberParameters;
2793       DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2794     } EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
2795 
2796     typedef struct _EXCEPTION_RECORD64 {
2797       DWORD ExceptionCode;
2798       DWORD ExceptionFlags;
2799       DWORD64 ExceptionRecord;
2800       DWORD64 ExceptionAddress;
2801       DWORD NumberParameters;
2802       DWORD __unusedAlignment;
2803       DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
2804     } EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
2805 
2806     typedef struct _EXCEPTION_POINTERS {
2807       PEXCEPTION_RECORD ExceptionRecord;
2808       PCONTEXT ContextRecord;
2809     } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS;
2810 
2811 #ifdef __ia64__
2812     NTSYSAPI VOID NTAPI RtlUnwind2 (FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord);
2813 #endif
2814 
2815 #ifdef __x86_64__
2816 
2817     /* http://msdn.microsoft.com/en-us/library/ms680597(VS.85).aspx */
2818 
2819 #define UNWIND_HISTORY_TABLE_SIZE 12
2820 
2821   typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
2822     ULONG64 ImageBase;
2823     PRUNTIME_FUNCTION FunctionEntry;
2824   } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
2825 
2826 #define UNWIND_HISTORY_TABLE_NONE    0
2827 #define UNWIND_HISTORY_TABLE_GLOBAL  1
2828 #define UNWIND_HISTORY_TABLE_LOCAL   2
2829 
2830   typedef struct _UNWIND_HISTORY_TABLE {
2831     ULONG Count;
2832     BYTE  LocalHint;
2833     BYTE  GlobalHint;
2834     BYTE  Search;
2835     BYTE  Once;
2836     ULONG64 LowAddress;
2837     ULONG64 HighAddress;
2838     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
2839   } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
2840 
2841   /* http://msdn.microsoft.com/en-us/library/b6sf5kbd(VS.80).aspx */
2842 
2843   struct _DISPATCHER_CONTEXT;
2844   typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
2845   typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
2846 
2847   struct _DISPATCHER_CONTEXT {
2848     ULONG64 ControlPc;
2849     ULONG64 ImageBase;
2850     PRUNTIME_FUNCTION FunctionEntry;
2851     ULONG64 EstablisherFrame;
2852     ULONG64 TargetIp;
2853     PCONTEXT ContextRecord;
2854     PEXCEPTION_ROUTINE LanguageHandler;
2855     PVOID HandlerData;
2856     /* http://www.nynaeve.net/?p=99 */
2857     PUNWIND_HISTORY_TABLE HistoryTable;
2858     ULONG ScopeIndex;
2859     ULONG Fill0;
2860   };
2861 
2862   /* http://msdn.microsoft.com/en-us/library/ms680617(VS.85).aspx */
2863 
2864   typedef struct _KNONVOLATILE_CONTEXT_POINTERS
2865   {
2866     PM128A FloatingContext[16];
2867     PULONG64 IntegerContext[16];
2868   } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2869 #endif /* defined(__x86_64__) */
2870 
2871     typedef PVOID PACCESS_TOKEN;
2872     typedef PVOID PSECURITY_DESCRIPTOR;
2873     typedef PVOID PSID;
2874     typedef PVOID PCLAIMS_BLOB;
2875     typedef DWORD ACCESS_MASK;
2876     typedef ACCESS_MASK *PACCESS_MASK;
2877 
2878 #define DELETE (__MSABI_LONG(0x00010000))
2879 #define READ_CONTROL (__MSABI_LONG(0x00020000))
2880 #define WRITE_DAC (__MSABI_LONG(0x00040000))
2881 #define WRITE_OWNER (__MSABI_LONG(0x00080000))
2882 #define SYNCHRONIZE (__MSABI_LONG(0x00100000))
2883 
2884 #define STANDARD_RIGHTS_REQUIRED (__MSABI_LONG(0x000F0000))
2885 
2886 #define STANDARD_RIGHTS_READ (READ_CONTROL)
2887 #define STANDARD_RIGHTS_WRITE (READ_CONTROL)
2888 #define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
2889 
2890 #define STANDARD_RIGHTS_ALL (__MSABI_LONG(0x001F0000))
2891 
2892 #define SPECIFIC_RIGHTS_ALL (__MSABI_LONG(0x0000FFFF))
2893 
2894 #define ACCESS_SYSTEM_SECURITY (__MSABI_LONG(0x01000000))
2895 #define MAXIMUM_ALLOWED (__MSABI_LONG(0x02000000))
2896 
2897 #define GENERIC_READ (__MSABI_LONG(0x80000000))
2898 #define GENERIC_WRITE (__MSABI_LONG(0x40000000))
2899 #define GENERIC_EXECUTE (__MSABI_LONG(0x20000000))
2900 #define GENERIC_ALL (__MSABI_LONG(0x10000000))
2901 
2902     typedef struct _GENERIC_MAPPING {
2903       ACCESS_MASK GenericRead;
2904       ACCESS_MASK GenericWrite;
2905       ACCESS_MASK GenericExecute;
2906       ACCESS_MASK GenericAll;
2907     } GENERIC_MAPPING;
2908     typedef GENERIC_MAPPING *PGENERIC_MAPPING;
2909 
2910 #include <pshpack4.h>
2911     typedef struct _LUID_AND_ATTRIBUTES {
2912       LUID Luid;
2913       DWORD Attributes;
2914     } LUID_AND_ATTRIBUTES,*PLUID_AND_ATTRIBUTES;
2915     typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2916     typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
2917 #include <poppack.h>
2918 
2919 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
2920 #define SID_IDENTIFIER_AUTHORITY_DEFINED
2921     typedef struct _SID_IDENTIFIER_AUTHORITY {
2922       BYTE Value[6];
2923     } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
2924 #endif /* SID_IDENTIFIER_AUTHORITY_DEFINED */
2925 
2926 #ifndef SID_DEFINED
2927 #define SID_DEFINED
2928     typedef struct _SID {
2929       BYTE Revision;
2930       BYTE SubAuthorityCount;
2931       SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
2932       DWORD SubAuthority[ANYSIZE_ARRAY];
2933     } SID,*PISID;
2934 #endif /* SID_DEFINED */
2935 
2936 #define SID_REVISION (1)
2937 #define SID_MAX_SUB_AUTHORITIES (15)
2938 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)
2939 #ifndef __WIDL__
2940 #define SECURITY_MAX_SID_SIZE (sizeof (SID) - sizeof (DWORD) + (SID_MAX_SUB_AUTHORITIES *sizeof (DWORD)))
2941 #endif
2942 
2943 #define SID_HASH_SIZE 32
2944 
2945     typedef enum _SID_NAME_USE {
2946       SidTypeUser = 1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown,SidTypeComputer,SidTypeLabel,SidTypeLogonSession
2947     } SID_NAME_USE,*PSID_NAME_USE;
2948 
2949     typedef struct _SID_AND_ATTRIBUTES {
2950 #ifdef __WIDL__
2951       PISID Sid;
2952 #else
2953       PSID Sid;
2954 #endif
2955       DWORD Attributes;
2956     } SID_AND_ATTRIBUTES,*PSID_AND_ATTRIBUTES;
2957 
2958     typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2959     typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
2960 
2961     typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
2962 
2963     typedef struct _SID_AND_ATTRIBUTES_HASH {
2964       DWORD SidCount;
2965       PSID_AND_ATTRIBUTES SidAttr;
2966       SID_HASH_ENTRY Hash[SID_HASH_SIZE];
2967     } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
2968 
2969 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
2970 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
2971 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
2972 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
2973 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
2974 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
2975 
2976 #define SECURITY_NULL_RID (__MSABI_LONG(0x00000000))
2977 #define SECURITY_WORLD_RID (__MSABI_LONG(0x00000000))
2978 #define SECURITY_LOCAL_RID (__MSABI_LONG(0x00000000))
2979 #define SECURITY_LOCAL_LOGON_RID (__MSABI_LONG(0x00000001))
2980 
2981 #define SECURITY_CREATOR_OWNER_RID (__MSABI_LONG(0x00000000))
2982 #define SECURITY_CREATOR_GROUP_RID (__MSABI_LONG(0x00000001))
2983 #define SECURITY_CREATOR_OWNER_SERVER_RID (__MSABI_LONG(0x00000002))
2984 #define SECURITY_CREATOR_GROUP_SERVER_RID (__MSABI_LONG(0x00000003))
2985 #define SECURITY_CREATOR_OWNER_RIGHTS_RID (__MSABI_LONG(0x00000004))
2986 
2987 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
2988 
2989 #define SECURITY_DIALUP_RID (__MSABI_LONG(0x00000001))
2990 #define SECURITY_NETWORK_RID (__MSABI_LONG(0x00000002))
2991 #define SECURITY_BATCH_RID (__MSABI_LONG(0x00000003))
2992 #define SECURITY_INTERACTIVE_RID (__MSABI_LONG(0x00000004))
2993 #define SECURITY_LOGON_IDS_RID (__MSABI_LONG(0x00000005))
2994 #define SECURITY_LOGON_IDS_RID_COUNT (__MSABI_LONG(3))
2995 #define SECURITY_SERVICE_RID (__MSABI_LONG(0x00000006))
2996 #define SECURITY_ANONYMOUS_LOGON_RID (__MSABI_LONG(0x00000007))
2997 #define SECURITY_PROXY_RID (__MSABI_LONG(0x00000008))
2998 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (__MSABI_LONG(0x00000009))
2999 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
3000 #define SECURITY_PRINCIPAL_SELF_RID (__MSABI_LONG(0x0000000A))
3001 #define SECURITY_AUTHENTICATED_USER_RID (__MSABI_LONG(0x0000000B))
3002 #define SECURITY_RESTRICTED_CODE_RID (__MSABI_LONG(0x0000000C))
3003 #define SECURITY_TERMINAL_SERVER_RID (__MSABI_LONG(0x0000000D))
3004 #define SECURITY_REMOTE_LOGON_RID (__MSABI_LONG(0x0000000E))
3005 #define SECURITY_THIS_ORGANIZATION_RID (__MSABI_LONG(0x0000000F))
3006 #define SECURITY_IUSER_RID (__MSABI_LONG(0x00000011))
3007 #define SECURITY_LOCAL_SYSTEM_RID (__MSABI_LONG(0x00000012))
3008 #define SECURITY_LOCAL_SERVICE_RID (__MSABI_LONG(0x00000013))
3009 #define SECURITY_NETWORK_SERVICE_RID (__MSABI_LONG(0x00000014))
3010 
3011 #define SECURITY_NT_NON_UNIQUE (__MSABI_LONG(0x00000015))
3012 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (__MSABI_LONG(3))
3013 
3014 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (__MSABI_LONG(0x00000016))
3015 
3016 #define SECURITY_BUILTIN_DOMAIN_RID (__MSABI_LONG(0x00000020))
3017 #define SECURITY_WRITE_RESTRICTED_CODE_RID (__MSABI_LONG(0x00000021))
3018 
3019 #define SECURITY_PACKAGE_BASE_RID (__MSABI_LONG(0x00000040))
3020 #define SECURITY_PACKAGE_RID_COUNT (__MSABI_LONG(2))
3021 #define SECURITY_PACKAGE_NTLM_RID (__MSABI_LONG(0x0000000A))
3022 #define SECURITY_PACKAGE_SCHANNEL_RID (__MSABI_LONG(0x0000000E))
3023 #define SECURITY_PACKAGE_DIGEST_RID (__MSABI_LONG(0x00000015))
3024 
3025 #define SECURITY_CRED_TYPE_BASE_RID (__MSABI_LONG(0x00000041))
3026 #define SECURITY_CRED_TYPE_RID_COUNT (__MSABI_LONG(2))
3027 #define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (__MSABI_LONG(0x00000001))
3028 
3029 #define SECURITY_MIN_BASE_RID (__MSABI_LONG(0x00000050))
3030 
3031 #define SECURITY_SERVICE_ID_BASE_RID (__MSABI_LONG(0x00000050))
3032 #define SECURITY_SERVICE_ID_RID_COUNT (__MSABI_LONG(6))
3033 
3034 #define SECURITY_RESERVED_ID_BASE_RID (__MSABI_LONG(0x00000051))
3035 
3036 #define SECURITY_APPPOOL_ID_BASE_RID (__MSABI_LONG(0x00000052))
3037 #define SECURITY_APPPOOL_ID_RID_COUNT (__MSABI_LONG(6))
3038 
3039 #define SECURITY_VIRTUALSERVER_ID_BASE_RID (__MSABI_LONG(0x00000053))
3040 #define SECURITY_VIRTUALSERVER_ID_RID_COUNT (__MSABI_LONG(6))
3041 
3042 #define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (__MSABI_LONG(0x00000054))
3043 #define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (__MSABI_LONG(6))
3044 
3045 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (__MSABI_LONG(0x00000055))
3046 #define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (__MSABI_LONG(6))
3047 
3048 #define SECURITY_WMIHOST_ID_BASE_RID (__MSABI_LONG(0x00000056))
3049 #define SECURITY_WMIHOST_ID_RID_COUNT (__MSABI_LONG(6))
3050 
3051 #define SECURITY_TASK_ID_BASE_RID (__MSABI_LONG(0x00000057))
3052 
3053 #define SECURITY_NFS_ID_BASE_RID (__MSABI_LONG(0x00000058))
3054 
3055 #define SECURITY_COM_ID_BASE_RID (__MSABI_LONG(0x00000059))
3056 
3057 #define SECURITY_WINDOW_MANAGER_BASE_RID (__MSABI_LONG(0x0000005a))
3058 
3059 #define SECURITY_RDV_GFX_BASE_RID (__MSABI_LONG(0x0000005b))
3060 
3061 #define SECURITY_DASHOST_ID_BASE_RID (__MSABI_LONG(0x0000005c))
3062 #define SECURITY_DASHOST_ID_RID_COUNT (__MSABI_LONG(6))
3063 
3064 #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (__MSABI_LONG(6))
3065 
3066 #define SECURITY_MAX_BASE_RID (__MSABI_LONG(0x0000006f))
3067 
3068 #define SECURITY_MAX_ALWAYS_FILTERED (__MSABI_LONG(0x000003E7))
3069 #define SECURITY_MIN_NEVER_FILTERED (__MSABI_LONG(0x000003E8))
3070 
3071 #define SECURITY_OTHER_ORGANIZATION_RID (__MSABI_LONG(0x000003E8))
3072 
3073 #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (__MSABI_LONG(0x00000070))
3074 
3075 #define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED (__MSABI_LONG(0x000001f0))
3076 #define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS (__MSABI_LONG(0x000001f1))
3077 #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (__MSABI_LONG(0x000001f2))
3078 
3079 #define FOREST_USER_RID_MAX (__MSABI_LONG(0x000001F3))
3080 
3081 #define DOMAIN_USER_RID_ADMIN (__MSABI_LONG(0x000001F4))
3082 #define DOMAIN_USER_RID_GUEST (__MSABI_LONG(0x000001F5))
3083 #define DOMAIN_USER_RID_KRBTGT (__MSABI_LONG(0x000001F6))
3084 
3085 #define DOMAIN_USER_RID_MAX (__MSABI_LONG(0x000003E7))
3086 
3087 #define DOMAIN_GROUP_RID_ADMINS (__MSABI_LONG(0x00000200))
3088 #define DOMAIN_GROUP_RID_USERS (__MSABI_LONG(0x00000201))
3089 #define DOMAIN_GROUP_RID_GUESTS (__MSABI_LONG(0x00000202))
3090 #define DOMAIN_GROUP_RID_COMPUTERS (__MSABI_LONG(0x00000203))
3091 #define DOMAIN_GROUP_RID_CONTROLLERS (__MSABI_LONG(0x00000204))
3092 #define DOMAIN_GROUP_RID_CERT_ADMINS (__MSABI_LONG(0x00000205))
3093 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (__MSABI_LONG(0x00000206))
3094 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (__MSABI_LONG(0x00000207))
3095 #define DOMAIN_GROUP_RID_POLICY_ADMINS (__MSABI_LONG(0x00000208))
3096 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (__MSABI_LONG(0x00000209))
3097 #define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS (__MSABI_LONG(0x0000020a))
3098 
3099 #define DOMAIN_ALIAS_RID_ADMINS (__MSABI_LONG(0x00000220))
3100 #define DOMAIN_ALIAS_RID_USERS (__MSABI_LONG(0x00000221))
3101 #define DOMAIN_ALIAS_RID_GUESTS (__MSABI_LONG(0x00000222))
3102 #define DOMAIN_ALIAS_RID_POWER_USERS (__MSABI_LONG(0x00000223))
3103 
3104 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (__MSABI_LONG(0x00000224))
3105 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (__MSABI_LONG(0x00000225))
3106 #define DOMAIN_ALIAS_RID_PRINT_OPS (__MSABI_LONG(0x00000226))
3107 #define DOMAIN_ALIAS_RID_BACKUP_OPS (__MSABI_LONG(0x00000227))
3108 
3109 #define DOMAIN_ALIAS_RID_REPLICATOR (__MSABI_LONG(0x00000228))
3110 #define DOMAIN_ALIAS_RID_RAS_SERVERS (__MSABI_LONG(0x00000229))
3111 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (__MSABI_LONG(0x0000022A))
3112 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (__MSABI_LONG(0x0000022B))
3113 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (__MSABI_LONG(0x0000022C))
3114 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (__MSABI_LONG(0x0000022D))
3115 
3116 #define DOMAIN_ALIAS_RID_MONITORING_USERS (__MSABI_LONG(0x0000022E))
3117 #define DOMAIN_ALIAS_RID_LOGGING_USERS (__MSABI_LONG(0x0000022F))
3118 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (__MSABI_LONG(0x00000230))
3119 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (__MSABI_LONG(0x00000231))
3120 #define DOMAIN_ALIAS_RID_DCOM_USERS (__MSABI_LONG(0x00000232))
3121 
3122 #define DOMAIN_ALIAS_RID_IUSERS (__MSABI_LONG(0x00000238))
3123 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (__MSABI_LONG(0x00000239))
3124 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023B))
3125 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023C))
3126 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (__MSABI_LONG(0x0000023D))
3127 #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (__MSABI_LONG(0x0000023e))
3128 #define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS (__MSABI_LONG(0x0000023f))
3129 #define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS (__MSABI_LONG(0x00000240))
3130 #define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS (__MSABI_LONG(0x00000241))
3131 #define DOMAIN_ALIAS_RID_HYPER_V_ADMINS (__MSABI_LONG(0x00000242))
3132 #define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS (__MSABI_LONG(0x00000243))
3133 #define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS (__MSABI_LONG(0x00000244))
3134 
3135 #define SECURITY_APP_PACKAGE_AUTHORITY {0, 0, 0, 0, 0, 15}
3136 
3137 #define SECURITY_APP_PACKAGE_BASE_RID (__MSABI_LONG(0x00000002))
3138 #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT (__MSABI_LONG(2))
3139 #define SECURITY_APP_PACKAGE_RID_COUNT (__MSABI_LONG(8))
3140 #define SECURITY_CAPABILITY_BASE_RID (__MSABI_LONG(0x00000003))
3141 #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT (__MSABI_LONG(2))
3142 #define SECURITY_CAPABILITY_RID_COUNT (__MSABI_LONG(5))
3143 
3144 #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE (__MSABI_LONG(0x00000001))
3145 #define SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE (__MSABI_LONG(0x00000002))
3146 
3147 #define SECURITY_CAPABILITY_INTERNET_CLIENT (__MSABI_LONG(0x00000001))
3148 #define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER (__MSABI_LONG(0x00000002))
3149 #define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER (__MSABI_LONG(0x00000003))
3150 #define SECURITY_CAPABILITY_PICTURES_LIBRARY (__MSABI_LONG(0x00000004))
3151 #define SECURITY_CAPABILITY_VIDEOS_LIBRARY (__MSABI_LONG(0x00000005))
3152 #define SECURITY_CAPABILITY_MUSIC_LIBRARY (__MSABI_LONG(0x00000006))
3153 #define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY (__MSABI_LONG(0x00000007))
3154 #define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION (__MSABI_LONG(0x00000008))
3155 #define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES (__MSABI_LONG(0x00000009))
3156 #define SECURITY_CAPABILITY_REMOVABLE_STORAGE (__MSABI_LONG(0x0000000a))
3157 #define SECURITY_CAPABILITY_APPOINTMENTS (__MSABI_LONG(0x0000000b))
3158 #define SECURITY_CAPABILITY_CONTACTS (__MSABI_LONG(0x0000000c))
3159 #define SECURITY_CAPABILITY_INTERNET_EXPLORER (__MSABI_LONG(0x00001000))
3160 
3161 
3162 
3163 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
3164 #define SECURITY_MANDATORY_UNTRUSTED_RID (__MSABI_LONG(0x00000000))
3165 #define SECURITY_MANDATORY_LOW_RID (__MSABI_LONG(0x00001000))
3166 #define SECURITY_MANDATORY_MEDIUM_RID (__MSABI_LONG(0x00002000))
3167 #define SECURITY_MANDATORY_HIGH_RID (__MSABI_LONG(0x00003000))
3168 #define SECURITY_MANDATORY_SYSTEM_RID (__MSABI_LONG(0x00004000))
3169 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (__MSABI_LONG(0x00005000))
3170 
3171 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
3172 
3173 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
3174 
3175 #define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0, 0, 0, 0, 0, 17}
3176 
3177 #define SECURITY_AUTHENTICATION_AUTHORITY {0, 0, 0, 0, 0, 18}
3178 #define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT (__MSABI_LONG(1))
3179 #define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (__MSABI_LONG(0x00000001))
3180 #define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID (__MSABI_LONG(0x00000002))
3181 
3182 #define SECURITY_TRUSTED_INSTALLER_RID1 956008885
3183 #define SECURITY_TRUSTED_INSTALLER_RID2 3418522649
3184 #define SECURITY_TRUSTED_INSTALLER_RID3 1831038044
3185 #define SECURITY_TRUSTED_INSTALLER_RID4 1853292631
3186 #define SECURITY_TRUSTED_INSTALLER_RID5 2271478464
3187 
3188     typedef enum {
3189       WinNullSid = 0,WinWorldSid = 1,WinLocalSid = 2,WinCreatorOwnerSid = 3,
3190       WinCreatorGroupSid = 4,WinCreatorOwnerServerSid = 5,
3191       WinCreatorGroupServerSid = 6,WinNtAuthoritySid = 7,WinDialupSid = 8,
3192       WinNetworkSid = 9,WinBatchSid = 10,WinInteractiveSid = 11,
3193       WinServiceSid = 12,WinAnonymousSid = 13,WinProxySid = 14,
3194       WinEnterpriseControllersSid = 15,WinSelfSid = 16,
3195       WinAuthenticatedUserSid = 17,WinRestrictedCodeSid = 18,
3196       WinTerminalServerSid = 19,WinRemoteLogonIdSid = 20,WinLogonIdsSid = 21,
3197       WinLocalSystemSid = 22,WinLocalServiceSid = 23,WinNetworkServiceSid = 24,
3198       WinBuiltinDomainSid = 25,WinBuiltinAdministratorsSid = 26,
3199       WinBuiltinUsersSid = 27,WinBuiltinGuestsSid = 28,
3200       WinBuiltinPowerUsersSid = 29,WinBuiltinAccountOperatorsSid = 30,
3201       WinBuiltinSystemOperatorsSid = 31,WinBuiltinPrintOperatorsSid = 32,
3202       WinBuiltinBackupOperatorsSid = 33,WinBuiltinReplicatorSid = 34,
3203       WinBuiltinPreWindows2000CompatibleAccessSid = 35,
3204       WinBuiltinRemoteDesktopUsersSid = 36,
3205       WinBuiltinNetworkConfigurationOperatorsSid = 37,
3206       WinAccountAdministratorSid = 38,WinAccountGuestSid = 39,
3207       WinAccountKrbtgtSid = 40,WinAccountDomainAdminsSid = 41,
3208       WinAccountDomainUsersSid = 42,WinAccountDomainGuestsSid = 43,
3209       WinAccountComputersSid = 44,WinAccountControllersSid = 45,
3210       WinAccountCertAdminsSid = 46,WinAccountSchemaAdminsSid = 47,
3211       WinAccountEnterpriseAdminsSid = 48,WinAccountPolicyAdminsSid = 49,
3212       WinAccountRasAndIasServersSid = 50,WinNTLMAuthenticationSid = 51,
3213       WinDigestAuthenticationSid = 52,WinSChannelAuthenticationSid = 53,
3214       WinThisOrganizationSid = 54,WinOtherOrganizationSid = 55,
3215       WinBuiltinIncomingForestTrustBuildersSid = 56,
3216       WinBuiltinPerfMonitoringUsersSid = 57,WinBuiltinPerfLoggingUsersSid = 58,
3217       WinBuiltinAuthorizationAccessSid = 59,
3218       WinBuiltinTerminalServerLicenseServersSid = 60,
3219       WinBuiltinDCOMUsersSid = 61,WinBuiltinIUsersSid = 62,
3220       WinIUserSid = 63, WinBuiltinCryptoOperatorsSid = 64,
3221       WinUntrustedLabelSid = 65, WinLowLabelSid = 66, WinMediumLabelSid = 67,
3222       WinHighLabelSid = 68, WinSystemLabelSid = 69, WinWriteRestrictedCodeSid = 70,
3223       WinCreatorOwnerRightsSid = 71, WinCacheablePrincipalsGroupSid = 72,
3224       WinNonCacheablePrincipalsGroupSid = 73, WinEnterpriseReadonlyControllersSid = 74,
3225       WinAccountReadonlyControllersSid = 75, WinBuiltinEventLogReadersGroup = 76,
3226       WinNewEnterpriseReadonlyControllersSid = 77, WinBuiltinCertSvcDComAccessGroup = 78,
3227       WinMediumPlusLabelSid = 79, WinLocalLogonSid = 80, WinConsoleLogonSid = 81,
3228       WinThisOrganizationCertificateSid = 82, WinApplicationPackageAuthoritySid = 83,
3229       WinBuiltinAnyPackageSid = 84, WinCapabilityInternetClientSid = 85,
3230       WinCapabilityInternetClientServerSid = 86,
3231       WinCapabilityPrivateNetworkClientServerSid = 87,
3232       WinCapabilityPicturesLibrarySid = 88, WinCapabilityVideosLibrarySid = 89,
3233       WinCapabilityMusicLibrarySid = 90, WinCapabilityDocumentsLibrarySid = 91,
3234       WinCapabilitySharedUserCertificatesSid = 92, WinCapabilityEnterpriseAuthenticationSid = 93,
3235       WinCapabilityRemovableStorageSid = 94, WinBuiltinRDSRemoteAccessServersSid = 95,
3236       WinBuiltinRDSEndpointServersSid = 96, WinBuiltinRDSManagementServersSid = 97,
3237       WinUserModeDriversSid = 98, WinBuiltinHyperVAdminsSid = 99,
3238       WinAccountCloneableControllersSid = 100,
3239       WinBuiltinAccessControlAssistanceOperatorsSid = 101,
3240       WinBuiltinRemoteManagementUsersSid = 102, WinAuthenticationAuthorityAssertedSid = 103,
3241       WinAuthenticationServiceAssertedSid = 104,
3242       WinLocalAccountSid = 105,
3243       WinLocalAccountAndAdministratorSid = 106,
3244       WinAccountProtectedUsersSid = 107,
3245       WinCapabilityAppointmentsSid = 108,
3246       WinCapabilityContactsSid = 109,
3247       WinAccountDefaultSystemManagedSid = 110,
3248       WinBuiltinDefaultSystemManagedGroupSid = 111,
3249       WinBuiltinStorageReplicaAdminsSid = 112,
3250       WinAccountKeyAdminsSid = 113,
3251       WinAccountEnterpriseKeyAdminsSid = 114,
3252       WinAuthenticationKeyTrustSid = 115,
3253       WinAuthenticationKeyPropertyMFASid = 116,
3254       WinAuthenticationKeyPropertyAttestationSid = 117
3255 } WELL_KNOWN_SID_TYPE;
3256 
3257 #define SYSTEM_LUID { 0x3e7, 0x0 }
3258 #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
3259 #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
3260 #define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
3261 #define IUSER_LUID { 0x3e3, 0x0 }
3262 
3263 #define SE_GROUP_MANDATORY (__MSABI_LONG(0x00000001))
3264 #define SE_GROUP_ENABLED_BY_DEFAULT (__MSABI_LONG(0x00000002))
3265 #define SE_GROUP_ENABLED (__MSABI_LONG(0x00000004))
3266 #define SE_GROUP_OWNER (__MSABI_LONG(0x00000008))
3267 #define SE_GROUP_USE_FOR_DENY_ONLY (__MSABI_LONG(0x00000010))
3268 #define SE_GROUP_INTEGRITY (__MSABI_LONG(0x00000020))
3269 #define SE_GROUP_INTEGRITY_ENABLED (__MSABI_LONG(0x00000040))
3270 #define SE_GROUP_LOGON_ID (__MSABI_LONG(0xC0000000))
3271 #define SE_GROUP_RESOURCE (__MSABI_LONG(0x20000000))
3272 
3273 #define SE_GROUP_VALID_ATTRIBUTES (SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED)
3274 
3275 #define ACL_REVISION (2)
3276 #define ACL_REVISION_DS (4)
3277 
3278 #define ACL_REVISION1 (1)
3279 #define MIN_ACL_REVISION ACL_REVISION2
3280 #define ACL_REVISION2 (2)
3281 #define ACL_REVISION3 (3)
3282 #define ACL_REVISION4 (4)
3283 #define MAX_ACL_REVISION ACL_REVISION4
3284 
3285     typedef struct _ACL {
3286       BYTE AclRevision;
3287       BYTE Sbz1;
3288       WORD AclSize;
3289       WORD AceCount;
3290       WORD Sbz2;
3291     } ACL;
3292     typedef ACL *PACL;
3293 
3294     typedef struct _ACE_HEADER {
3295       BYTE AceType;
3296       BYTE AceFlags;
3297       WORD AceSize;
3298     } ACE_HEADER;
3299     typedef ACE_HEADER *PACE_HEADER;
3300 
3301 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
3302 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
3303 #define ACCESS_DENIED_ACE_TYPE (0x1)
3304 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
3305 #define SYSTEM_ALARM_ACE_TYPE (0x3)
3306 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
3307 
3308 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
3309 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
3310 
3311 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
3312 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
3313 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
3314 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
3315 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
3316 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
3317 
3318 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
3319 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
3320 
3321 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
3322 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
3323 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
3324 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
3325 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
3326 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
3327 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
3328 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
3329 
3330 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
3331 #define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE (0x12)
3332 #define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE (0x13)
3333 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x13)
3334 
3335 #define OBJECT_INHERIT_ACE (0x1)
3336 #define CONTAINER_INHERIT_ACE (0x2)
3337 #define NO_PROPAGATE_INHERIT_ACE (0x4)
3338 #define INHERIT_ONLY_ACE (0x8)
3339 #define INHERITED_ACE (0x10)
3340 #define VALID_INHERIT_FLAGS (0x1F)
3341 
3342 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
3343 #define FAILED_ACCESS_ACE_FLAG (0x80)
3344 
3345     typedef struct _ACCESS_ALLOWED_ACE {
3346       ACE_HEADER Header;
3347       ACCESS_MASK Mask;
3348       DWORD SidStart;
3349     } ACCESS_ALLOWED_ACE;
3350 
3351     typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
3352 
3353     typedef struct _ACCESS_DENIED_ACE {
3354       ACE_HEADER Header;
3355       ACCESS_MASK Mask;
3356       DWORD SidStart;
3357     } ACCESS_DENIED_ACE;
3358     typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
3359 
3360     typedef struct _SYSTEM_AUDIT_ACE {
3361       ACE_HEADER Header;
3362       ACCESS_MASK Mask;
3363       DWORD SidStart;
3364     } SYSTEM_AUDIT_ACE;
3365     typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
3366 
3367     typedef struct _SYSTEM_ALARM_ACE {
3368       ACE_HEADER Header;
3369       ACCESS_MASK Mask;
3370       DWORD SidStart;
3371     } SYSTEM_ALARM_ACE;
3372     typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
3373 
3374     typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE {
3375       ACE_HEADER Header;
3376       ACCESS_MASK Mask;
3377       DWORD SidStart;
3378     } SYSTEM_RESOURCE_ATTRIBUTE_ACE,*PSYSTEM_RESOURCE_ATTRIBUTE_ACE;
3379 
3380     typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE {
3381       ACE_HEADER Header;
3382       ACCESS_MASK Mask;
3383       DWORD SidStart;
3384     } SYSTEM_SCOPED_POLICY_ID_ACE,*PSYSTEM_SCOPED_POLICY_ID_ACE;
3385 
3386     typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
3387       ACE_HEADER Header;
3388       ACCESS_MASK Mask;
3389       DWORD SidStart;
3390     } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
3391 
3392 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
3393 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
3394 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
3395 
3396 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
3397 
3398     typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
3399       ACE_HEADER Header;
3400       ACCESS_MASK Mask;
3401       DWORD Flags;
3402       GUID ObjectType;
3403       GUID InheritedObjectType;
3404       DWORD SidStart;
3405     } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
3406 
3407     typedef struct _ACCESS_DENIED_OBJECT_ACE {
3408       ACE_HEADER Header;
3409       ACCESS_MASK Mask;
3410       DWORD Flags;
3411       GUID ObjectType;
3412       GUID InheritedObjectType;
3413       DWORD SidStart;
3414     } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
3415 
3416     typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
3417       ACE_HEADER Header;
3418       ACCESS_MASK Mask;
3419       DWORD Flags;
3420       GUID ObjectType;
3421       GUID InheritedObjectType;
3422       DWORD SidStart;
3423     } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
3424 
3425     typedef struct _SYSTEM_ALARM_OBJECT_ACE {
3426       ACE_HEADER Header;
3427       ACCESS_MASK Mask;
3428       DWORD Flags;
3429       GUID ObjectType;
3430       GUID InheritedObjectType;
3431       DWORD SidStart;
3432     } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
3433 
3434     typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
3435       ACE_HEADER Header;
3436       ACCESS_MASK Mask;
3437       DWORD SidStart;
3438     } ACCESS_ALLOWED_CALLBACK_ACE,*PACCESS_ALLOWED_CALLBACK_ACE;
3439 
3440     typedef struct _ACCESS_DENIED_CALLBACK_ACE {
3441       ACE_HEADER Header;
3442       ACCESS_MASK Mask;
3443       DWORD SidStart;
3444     } ACCESS_DENIED_CALLBACK_ACE,*PACCESS_DENIED_CALLBACK_ACE;
3445 
3446     typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
3447       ACE_HEADER Header;
3448       ACCESS_MASK Mask;
3449       DWORD SidStart;
3450     } SYSTEM_AUDIT_CALLBACK_ACE,*PSYSTEM_AUDIT_CALLBACK_ACE;
3451 
3452     typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
3453       ACE_HEADER Header;
3454       ACCESS_MASK Mask;
3455       DWORD SidStart;
3456     } SYSTEM_ALARM_CALLBACK_ACE,*PSYSTEM_ALARM_CALLBACK_ACE;
3457 
3458     typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
3459       ACE_HEADER Header;
3460       ACCESS_MASK Mask;
3461       DWORD Flags;
3462       GUID ObjectType;
3463       GUID InheritedObjectType;
3464       DWORD SidStart;
3465 
3466     } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE,*PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
3467 
3468     typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
3469       ACE_HEADER Header;
3470       ACCESS_MASK Mask;
3471       DWORD Flags;
3472       GUID ObjectType;
3473       GUID InheritedObjectType;
3474       DWORD SidStart;
3475     } ACCESS_DENIED_CALLBACK_OBJECT_ACE,*PACCESS_DENIED_CALLBACK_OBJECT_ACE;
3476 
3477     typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
3478       ACE_HEADER Header;
3479       ACCESS_MASK Mask;
3480       DWORD Flags;
3481       GUID ObjectType;
3482       GUID InheritedObjectType;
3483       DWORD SidStart;
3484     } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE,*PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
3485 
3486     typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
3487       ACE_HEADER Header;
3488       ACCESS_MASK Mask;
3489       DWORD Flags;
3490       GUID ObjectType;
3491       GUID InheritedObjectType;
3492       DWORD SidStart;
3493 
3494     } SYSTEM_ALARM_CALLBACK_OBJECT_ACE,*PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
3495 
3496 #define ACE_OBJECT_TYPE_PRESENT 0x1
3497 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
3498 
3499     typedef enum _ACL_INFORMATION_CLASS {
3500       AclRevisionInformation = 1,AclSizeInformation
3501     } ACL_INFORMATION_CLASS;
3502 
3503     typedef struct _ACL_REVISION_INFORMATION {
3504       DWORD AclRevision;
3505     } ACL_REVISION_INFORMATION;
3506     typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
3507 
3508     typedef struct _ACL_SIZE_INFORMATION {
3509       DWORD AceCount;
3510       DWORD AclBytesInUse;
3511       DWORD AclBytesFree;
3512     } ACL_SIZE_INFORMATION;
3513     typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
3514 
3515 #define SECURITY_DESCRIPTOR_REVISION (1)
3516 #define SECURITY_DESCRIPTOR_REVISION1 (1)
3517 
3518 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
3519 
3520     typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
3521 
3522 #define SE_OWNER_DEFAULTED (0x0001)
3523 #define SE_GROUP_DEFAULTED (0x0002)
3524 #define SE_DACL_PRESENT (0x0004)
3525 #define SE_DACL_DEFAULTED (0x0008)
3526 #define SE_SACL_PRESENT (0x0010)
3527 #define SE_SACL_DEFAULTED (0x0020)
3528 #define SE_DACL_AUTO_INHERIT_REQ (0x0100)
3529 #define SE_SACL_AUTO_INHERIT_REQ (0x0200)
3530 #define SE_DACL_AUTO_INHERITED (0x0400)
3531 #define SE_SACL_AUTO_INHERITED (0x0800)
3532 #define SE_DACL_PROTECTED (0x1000)
3533 #define SE_SACL_PROTECTED (0x2000)
3534 #define SE_RM_CONTROL_VALID (0x4000)
3535 #define SE_SELF_RELATIVE (0x8000)
3536 
3537     typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
3538       BYTE Revision;
3539       BYTE Sbz1;
3540       SECURITY_DESCRIPTOR_CONTROL Control;
3541       DWORD Owner;
3542       DWORD Group;
3543       DWORD Sacl;
3544       DWORD Dacl;
3545     } SECURITY_DESCRIPTOR_RELATIVE,*PISECURITY_DESCRIPTOR_RELATIVE;
3546 
3547     typedef struct _SECURITY_DESCRIPTOR {
3548       BYTE Revision;
3549       BYTE Sbz1;
3550       SECURITY_DESCRIPTOR_CONTROL Control;
3551       PSID Owner;
3552       PSID Group;
3553       PACL Sacl;
3554       PACL Dacl;
3555     } SECURITY_DESCRIPTOR,*PISECURITY_DESCRIPTOR;
3556 
3557     typedef struct _OBJECT_TYPE_LIST {
3558       WORD Level;
3559       WORD Sbz;
3560       GUID *ObjectType;
3561     } OBJECT_TYPE_LIST,*POBJECT_TYPE_LIST;
3562 
3563 #define ACCESS_OBJECT_GUID 0
3564 #define ACCESS_PROPERTY_SET_GUID 1
3565 #define ACCESS_PROPERTY_GUID 2
3566 
3567 #define ACCESS_MAX_LEVEL 4
3568 
3569     typedef enum _AUDIT_EVENT_TYPE {
3570       AuditEventObjectAccess,AuditEventDirectoryServiceAccess
3571     } AUDIT_EVENT_TYPE,*PAUDIT_EVENT_TYPE;
3572 
3573 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
3574 
3575 #define ACCESS_DS_SOURCE_A "DS"
3576 #define ACCESS_DS_SOURCE_W L"DS"
3577 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
3578 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
3579 
3580 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (__MSABI_LONG(0x00000001))
3581 #define SE_PRIVILEGE_ENABLED (__MSABI_LONG(0x00000002))
3582 #define SE_PRIVILEGE_REMOVED (0X00000004L)
3583 #define SE_PRIVILEGE_USED_FOR_ACCESS (__MSABI_LONG(0x80000000))
3584 
3585 #define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS)
3586 
3587 #define PRIVILEGE_SET_ALL_NECESSARY (1)
3588 
3589     typedef struct _PRIVILEGE_SET {
3590       DWORD PrivilegeCount;
3591       DWORD Control;
3592       LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
3593     } PRIVILEGE_SET,*PPRIVILEGE_SET;
3594 
3595 #define ACCESS_REASON_TYPE_MASK 0x00ff0000
3596 #define ACCESS_REASON_DATA_MASK 0x0000ffff
3597 
3598 #define ACCESS_REASON_STAGING_MASK 0x80000000
3599 #define ACCESS_REASON_EXDATA_MASK 0x7f000000
3600 
3601     typedef enum _ACCESS_REASON_TYPE {
3602       AccessReasonNone = 0x00000000,
3603       AccessReasonAllowedAce = 0x00010000,
3604       AccessReasonDeniedAce = 0x00020000,
3605       AccessReasonAllowedParentAce = 0x00030000,
3606       AccessReasonDeniedParentAce = 0x00040000,
3607       AccessReasonNotGrantedByCape = 0x00050000,
3608       AccessReasonNotGrantedByParentCape = 0x00060000,
3609       AccessReasonNotGrantedToAppContainer = 0x00070000,
3610       AccessReasonMissingPrivilege = 0x00100000,
3611       AccessReasonFromPrivilege = 0x00200000,
3612       AccessReasonIntegrityLevel = 0x00300000,
3613       AccessReasonOwnership = 0x00400000,
3614       AccessReasonNullDacl = 0x00500000,
3615       AccessReasonEmptyDacl = 0x00600000,
3616       AccessReasonNoSD = 0x00700000,
3617       AccessReasonNoGrant = 0x00800000
3618     } ACCESS_REASON_TYPE;
3619     typedef DWORD ACCESS_REASON;
3620 
3621     typedef struct _ACCESS_REASONS {
3622       ACCESS_REASON Data[32];
3623     } ACCESS_REASONS,*PACCESS_REASONS;
3624 
3625 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
3626 #define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
3627 #define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000003
3628 
3629     typedef struct _SE_SECURITY_DESCRIPTOR {
3630       DWORD Size;
3631       DWORD Flags;
3632       PSECURITY_DESCRIPTOR SecurityDescriptor;
3633     } SE_SECURITY_DESCRIPTOR,*PSE_SECURITY_DESCRIPTOR;
3634 
3635     typedef struct _SE_ACCESS_REQUEST {
3636       DWORD Size;
3637       PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
3638       ACCESS_MASK DesiredAccess;
3639       ACCESS_MASK PreviouslyGrantedAccess;
3640       PSID PrincipalSelfSid;
3641       PGENERIC_MAPPING GenericMapping;
3642       DWORD ObjectTypeListCount;
3643       POBJECT_TYPE_LIST ObjectTypeList;
3644     } SE_ACCESS_REQUEST,*PSE_ACCESS_REQUEST;
3645 
3646     typedef struct _SE_ACCESS_REPLY {
3647       DWORD Size;
3648       DWORD ResultListCount;
3649       PACCESS_MASK GrantedAccess;
3650       PDWORD AccessStatus;
3651       PACCESS_REASONS AccessReason;
3652       PPRIVILEGE_SET *Privileges;
3653     } SE_ACCESS_REPLY,*PSE_ACCESS_REPLY;
3654 
3655 #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
3656 #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
3657 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
3658 #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
3659 #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
3660 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
3661 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
3662 #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
3663 #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
3664 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
3665 #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
3666 #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
3667 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
3668 #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
3669 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
3670 #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
3671 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
3672 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
3673 #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
3674 #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
3675 #define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
3676 #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
3677 #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
3678 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
3679 #define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
3680 #define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
3681 #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
3682 #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
3683 #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
3684 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
3685 #define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
3686 #define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
3687 #define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
3688 #define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
3689 #define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
3690 
3691     typedef enum _SECURITY_IMPERSONATION_LEVEL {
3692       SecurityAnonymous,SecurityIdentification,SecurityImpersonation,SecurityDelegation
3693     } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
3694 
3695 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
3696 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
3697 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
3698 #define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
3699 
3700 #define TOKEN_ASSIGN_PRIMARY (0x0001)
3701 #define TOKEN_DUPLICATE (0x0002)
3702 #define TOKEN_IMPERSONATE (0x0004)
3703 #define TOKEN_QUERY (0x0008)
3704 #define TOKEN_QUERY_SOURCE (0x0010)
3705 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
3706 #define TOKEN_ADJUST_GROUPS (0x0040)
3707 #define TOKEN_ADJUST_DEFAULT (0x0080)
3708 #define TOKEN_ADJUST_SESSIONID (0x0100)
3709 
3710 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
3711 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID)
3712 #define TOKEN_READ (STANDARD_RIGHTS_READ | TOKEN_QUERY)
3713 
3714 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
3715 
3716 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
3717 
3718     typedef enum _TOKEN_TYPE {
3719       TokenPrimary = 1,TokenImpersonation
3720     } TOKEN_TYPE;
3721     typedef TOKEN_TYPE *PTOKEN_TYPE;
3722 
3723     typedef enum _TOKEN_ELEVATION_TYPE {
3724       TokenElevationTypeDefault   = 1,
3725       TokenElevationTypeFull,
3726       TokenElevationTypeLimited
3727     } TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
3728 
3729     typedef enum _TOKEN_INFORMATION_CLASS {
3730       TokenUser = 1,
3731       TokenGroups,
3732       TokenPrivileges,
3733       TokenOwner,
3734       TokenPrimaryGroup,
3735       TokenDefaultDacl,
3736       TokenSource,
3737       TokenType,
3738       TokenImpersonationLevel,
3739       TokenStatistics,
3740       TokenRestrictedSids,
3741       TokenSessionId,
3742       TokenGroupsAndPrivileges,
3743       TokenSessionReference,
3744       TokenSandBoxInert,
3745       TokenAuditPolicy,
3746       TokenOrigin,
3747       TokenElevationType,
3748       TokenLinkedToken,
3749       TokenElevation,
3750       TokenHasRestrictions,
3751       TokenAccessInformation,
3752       TokenVirtualizationAllowed,
3753       TokenVirtualizationEnabled,
3754       TokenIntegrityLevel,
3755       TokenUIAccess,
3756       TokenMandatoryPolicy,
3757       TokenLogonSid,
3758       TokenIsAppContainer,
3759       TokenCapabilities,
3760       TokenAppContainerSid,
3761       TokenAppContainerNumber,
3762       TokenUserClaimAttributes,
3763       TokenDeviceClaimAttributes,
3764       TokenRestrictedUserClaimAttributes,
3765       TokenRestrictedDeviceClaimAttributes,
3766       TokenDeviceGroups,
3767       TokenRestrictedDeviceGroups,
3768       TokenSecurityAttributes,
3769       TokenIsRestricted,
3770       MaxTokenInfoClass
3771     } TOKEN_INFORMATION_CLASS,*PTOKEN_INFORMATION_CLASS;
3772 
3773     typedef struct _TOKEN_USER {
3774       SID_AND_ATTRIBUTES User;
3775     } TOKEN_USER,*PTOKEN_USER;
3776 
3777     typedef struct _TOKEN_GROUPS {
3778       DWORD GroupCount;
3779 #ifdef __WIDL__
3780       [size_is (GroupCount)] SID_AND_ATTRIBUTES Groups[*];
3781 #else
3782       SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
3783 #endif
3784     } TOKEN_GROUPS,*PTOKEN_GROUPS;
3785 
3786     typedef struct _TOKEN_PRIVILEGES {
3787       DWORD PrivilegeCount;
3788       LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
3789     } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES;
3790 
3791     typedef struct _TOKEN_OWNER {
3792       PSID Owner;
3793     } TOKEN_OWNER,*PTOKEN_OWNER;
3794 
3795     typedef struct _TOKEN_PRIMARY_GROUP {
3796       PSID PrimaryGroup;
3797     } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
3798 
3799     typedef struct _TOKEN_DEFAULT_DACL {
3800       PACL DefaultDacl;
3801     } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
3802 
3803     typedef struct _TOKEN_USER_CLAIMS {
3804       PCLAIMS_BLOB UserClaims;
3805     } TOKEN_USER_CLAIMS,*PTOKEN_USER_CLAIMS;
3806 
3807     typedef struct _TOKEN_DEVICE_CLAIMS {
3808       PCLAIMS_BLOB DeviceClaims;
3809     } TOKEN_DEVICE_CLAIMS,*PTOKEN_DEVICE_CLAIMS;
3810 
3811     typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
3812       DWORD SidCount;
3813       DWORD SidLength;
3814       PSID_AND_ATTRIBUTES Sids;
3815       DWORD RestrictedSidCount;
3816       DWORD RestrictedSidLength;
3817       PSID_AND_ATTRIBUTES RestrictedSids;
3818       DWORD PrivilegeCount;
3819       DWORD PrivilegeLength;
3820       PLUID_AND_ATTRIBUTES Privileges;
3821       LUID AuthenticationId;
3822     } TOKEN_GROUPS_AND_PRIVILEGES,*PTOKEN_GROUPS_AND_PRIVILEGES;
3823 
3824     typedef struct _TOKEN_LINKED_TOKEN {
3825       HANDLE LinkedToken;
3826     } TOKEN_LINKED_TOKEN,*PTOKEN_LINKED_TOKEN;
3827 
3828     typedef struct _TOKEN_ELEVATION {
3829       DWORD TokenIsElevated;
3830     } TOKEN_ELEVATION,*PTOKEN_ELEVATION;
3831 
3832     typedef struct _TOKEN_MANDATORY_LABEL {
3833       SID_AND_ATTRIBUTES Label;
3834     } TOKEN_MANDATORY_LABEL,*PTOKEN_MANDATORY_LABEL;
3835 
3836 #define TOKEN_MANDATORY_POLICY_OFF 0x0
3837 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
3838 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
3839 
3840 #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
3841 
3842     typedef struct _TOKEN_MANDATORY_POLICY {
3843       DWORD Policy;
3844     } TOKEN_MANDATORY_POLICY,*PTOKEN_MANDATORY_POLICY;
3845 
3846     typedef struct _TOKEN_ACCESS_INFORMATION {
3847       PSID_AND_ATTRIBUTES_HASH SidHash;
3848       PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
3849       PTOKEN_PRIVILEGES Privileges;
3850       LUID AuthenticationId;
3851       TOKEN_TYPE TokenType;
3852       SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
3853       TOKEN_MANDATORY_POLICY MandatoryPolicy;
3854       DWORD Flags;
3855       DWORD AppContainerNumber;
3856       PSID PackageSid;
3857       PSID_AND_ATTRIBUTES_HASH CapabilitiesHash;
3858     } TOKEN_ACCESS_INFORMATION,*PTOKEN_ACCESS_INFORMATION;
3859 
3860 #define POLICY_AUDIT_SUBCATEGORY_COUNT (56)
3861 
3862     typedef struct _TOKEN_AUDIT_POLICY {
3863       UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
3864     } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
3865 
3866 #define TOKEN_SOURCE_LENGTH 8
3867 
3868     typedef struct _TOKEN_SOURCE {
3869       CHAR SourceName[TOKEN_SOURCE_LENGTH];
3870       LUID SourceIdentifier;
3871     } TOKEN_SOURCE,*PTOKEN_SOURCE;
3872 
3873     typedef struct _TOKEN_STATISTICS {
3874       LUID TokenId;
3875       LUID AuthenticationId;
3876       LARGE_INTEGER ExpirationTime;
3877       TOKEN_TYPE TokenType;
3878       SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
3879       DWORD DynamicCharged;
3880       DWORD DynamicAvailable;
3881       DWORD GroupCount;
3882       DWORD PrivilegeCount;
3883       LUID ModifiedId;
3884     } TOKEN_STATISTICS,*PTOKEN_STATISTICS;
3885 
3886     typedef struct _TOKEN_CONTROL {
3887       LUID TokenId;
3888       LUID AuthenticationId;
3889       LUID ModifiedId;
3890       TOKEN_SOURCE TokenSource;
3891     } TOKEN_CONTROL,*PTOKEN_CONTROL;
3892 
3893     typedef struct _TOKEN_ORIGIN {
3894       LUID OriginatingLogonSession;
3895     } TOKEN_ORIGIN,*PTOKEN_ORIGIN;
3896 
3897     typedef enum _MANDATORY_LEVEL {
3898       MandatoryLevelUntrusted = 0,
3899       MandatoryLevelLow,
3900       MandatoryLevelMedium,
3901       MandatoryLevelHigh,
3902       MandatoryLevelSystem,
3903       MandatoryLevelSecureProcess,
3904       MandatoryLevelCount
3905     } MANDATORY_LEVEL,*PMANDATORY_LEVEL;
3906 
3907     typedef struct _TOKEN_APPCONTAINER_INFORMATION {
3908       PSID TokenAppContainer;
3909     } TOKEN_APPCONTAINER_INFORMATION,*PTOKEN_APPCONTAINER_INFORMATION;
3910 
3911 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00
3912 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 0x01
3913 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02
3914 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING 0x03
3915 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04
3916 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_SID 0x05
3917 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06
3918 
3919     typedef struct _CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE {
3920       DWORD64 Version;
3921       PWSTR Name;
3922     } CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE,*PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE;
3923 
3924     typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {
3925       PVOID pValue;
3926       DWORD ValueLength;
3927     } CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE, *PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
3928 
3929 #define CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10
3930 #define CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x0001
3931 #define CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x0002
3932 #define CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY 0x0004
3933 #define CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT 0x0008
3934 #define CLAIM_SECURITY_ATTRIBUTE_DISABLED 0x0010
3935 #define CLAIM_SECURITY_ATTRIBUTE_MANDATORY 0x0020
3936 
3937 #define CLAIM_SECURITY_ATTRIBUTE_VALID_FLAGS (CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE | CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE | CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY | CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT | CLAIM_SECURITY_ATTRIBUTE_DISABLED | CLAIM_SECURITY_ATTRIBUTE_MANDATORY)
3938 #define CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS 0xffff0000
3939 
3940     typedef struct _CLAIM_SECURITY_ATTRIBUTE_V1 {
3941       PWSTR Name;
3942       WORD ValueType;
3943       WORD Reserved;
3944       DWORD Flags;
3945       DWORD ValueCount;
3946       union {
3947 	PLONG64 pInt64;
3948 	PDWORD64 pUint64;
3949 	PWSTR *ppString;
3950 	PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;
3951 	PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;
3952       } Values;
3953     } CLAIM_SECURITY_ATTRIBUTE_V1,*PCLAIM_SECURITY_ATTRIBUTE_V1;
3954 
3955     typedef struct _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
3956       DWORD Name;
3957       WORD ValueType;
3958       WORD Reserved;
3959       DWORD Flags;
3960       DWORD ValueCount;
3961       union {
3962 	DWORD pInt64[ANYSIZE_ARRAY];
3963 	DWORD pUint64[ANYSIZE_ARRAY];
3964 	DWORD ppString[ANYSIZE_ARRAY];
3965 	DWORD pFqbn[ANYSIZE_ARRAY];
3966 	DWORD pOctetString[ANYSIZE_ARRAY];
3967       } Values;
3968     } CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1,*PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
3969 
3970 #define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1 1
3971 
3972 #define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1
3973 
3974     typedef struct _CLAIM_SECURITY_ATTRIBUTES_INFORMATION {
3975       WORD Version;
3976       WORD Reserved;
3977       DWORD AttributeCount;
3978       union {
3979 	PCLAIM_SECURITY_ATTRIBUTE_V1 pAttributeV1;
3980       } Attribute;
3981     } CLAIM_SECURITY_ATTRIBUTES_INFORMATION,*PCLAIM_SECURITY_ATTRIBUTES_INFORMATION;
3982 
3983 #define SECURITY_DYNAMIC_TRACKING (TRUE)
3984 #define SECURITY_STATIC_TRACKING (FALSE)
3985 
3986     typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
3987 
3988     typedef struct _SECURITY_QUALITY_OF_SERVICE {
3989       DWORD Length;
3990       SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
3991       SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
3992       BOOLEAN EffectiveOnly;
3993     } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
3994 
3995     typedef struct _SE_IMPERSONATION_STATE {
3996       PACCESS_TOKEN Token;
3997       BOOLEAN CopyOnOpen;
3998       BOOLEAN EffectiveOnly;
3999       SECURITY_IMPERSONATION_LEVEL Level;
4000     } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
4001 
4002 #define DISABLE_MAX_PRIVILEGE 0x1
4003 #define SANDBOX_INERT 0x2
4004 #define LUA_TOKEN 0x4
4005 #define WRITE_RESTRICTED 0x8
4006 
4007     typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
4008 
4009 #define OWNER_SECURITY_INFORMATION (__MSABI_LONG(0x00000001))
4010 #define GROUP_SECURITY_INFORMATION (__MSABI_LONG(0x00000002))
4011 #define DACL_SECURITY_INFORMATION (__MSABI_LONG(0x00000004))
4012 #define SACL_SECURITY_INFORMATION (__MSABI_LONG(0x00000008))
4013 #define LABEL_SECURITY_INFORMATION (__MSABI_LONG(0x00000010))
4014 #define ATTRIBUTE_SECURITY_INFORMATION (__MSABI_LONG(0x00000020))
4015 #define SCOPE_SECURITY_INFORMATION (__MSABI_LONG(0x00000040))
4016 #define BACKUP_SECURITY_INFORMATION (__MSABI_LONG(0x00010000))
4017 
4018 #define PROTECTED_DACL_SECURITY_INFORMATION (__MSABI_LONG(0x80000000))
4019 #define PROTECTED_SACL_SECURITY_INFORMATION (__MSABI_LONG(0x40000000))
4020 #define UNPROTECTED_DACL_SECURITY_INFORMATION (__MSABI_LONG(0x20000000))
4021 #define UNPROTECTED_SACL_SECURITY_INFORMATION (__MSABI_LONG(0x10000000))
4022 
4023     typedef enum _SE_LEARNING_MODE_DATA_TYPE {
4024       SeLearningModeInvalidType = 0,
4025       SeLearningModeSettings,
4026       SeLearningModeMax
4027     } SE_LEARNING_MODE_DATA_TYPE;
4028 
4029 #define SE_LEARNING_MODE_FLAG_PERMISSIVE 0x00000001
4030 
4031     typedef struct _SECURITY_CAPABILITIES {
4032       PSID AppContainerSid;
4033       PSID_AND_ATTRIBUTES Capabilities;
4034       DWORD CapabilityCount;
4035       DWORD Reserved;
4036     } SECURITY_CAPABILITIES,*PSECURITY_CAPABILITIES,*LPSECURITY_CAPABILITIES;
4037 
4038 #define PROCESS_TERMINATE (0x0001)
4039 #define PROCESS_CREATE_THREAD (0x0002)
4040 #define PROCESS_SET_SESSIONID (0x0004)
4041 #define PROCESS_VM_OPERATION (0x0008)
4042 #define PROCESS_VM_READ (0x0010)
4043 #define PROCESS_VM_WRITE (0x0020)
4044 #define PROCESS_DUP_HANDLE (0x0040)
4045 #define PROCESS_CREATE_PROCESS (0x0080)
4046 #define PROCESS_SET_QUOTA (0x0100)
4047 #define PROCESS_SET_INFORMATION (0x0200)
4048 #define PROCESS_QUERY_INFORMATION (0x0400)
4049 #define PROCESS_SUSPEND_RESUME (0x0800)
4050 #define PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
4051 
4052 #if NTDDI_VERSION >= 0x06000000
4053 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff)
4054 #else
4055 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xfff)
4056 #endif
4057 
4058 #ifdef _WIN64
4059 #define MAXIMUM_PROC_PER_GROUP 64
4060 #else
4061 #define MAXIMUM_PROC_PER_GROUP 32
4062 #endif
4063 
4064 #define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
4065 
4066 #define THREAD_TERMINATE (0x0001)
4067 #define THREAD_SUSPEND_RESUME (0x0002)
4068 #define THREAD_GET_CONTEXT (0x0008)
4069 #define THREAD_SET_CONTEXT (0x0010)
4070 #define THREAD_SET_INFORMATION (0x0020)
4071 #define THREAD_QUERY_INFORMATION (0x0040)
4072 #define THREAD_SET_THREAD_TOKEN (0x0080)
4073 #define THREAD_IMPERSONATE (0x0100)
4074 #define THREAD_DIRECT_IMPERSONATION (0x0200)
4075 #define THREAD_SET_LIMITED_INFORMATION (0x0400)
4076 #define THREAD_QUERY_LIMITED_INFORMATION (0x0800)
4077 
4078 #if NTDDI_VERSION >= 0x06000000
4079 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff)
4080 #else
4081 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3ff)
4082 #endif
4083 
4084 #define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
4085 #define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
4086 #define JOB_OBJECT_QUERY (0x0004)
4087 #define JOB_OBJECT_TERMINATE (0x0008)
4088 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
4089 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F)
4090 
4091     typedef struct _JOB_SET_ARRAY {
4092       HANDLE JobHandle;
4093       DWORD MemberLevel;
4094       DWORD Flags;
4095     } JOB_SET_ARRAY,*PJOB_SET_ARRAY;
4096 
4097 #define FLS_MAXIMUM_AVAILABLE 128
4098 #define TLS_MINIMUM_AVAILABLE 64
4099 
4100 #ifndef __MINGW_EXCPT_DEFINE_PSDK
4101     typedef struct _EXCEPTION_REGISTRATION_RECORD {
4102       __C89_NAMELESS union {
4103         struct _EXCEPTION_REGISTRATION_RECORD *Next;
4104         struct _EXCEPTION_REGISTRATION_RECORD *prev;
4105       };
4106       __C89_NAMELESS union {
4107         PEXCEPTION_ROUTINE Handler;
4108         PEXCEPTION_ROUTINE handler;
4109       };
4110     } EXCEPTION_REGISTRATION_RECORD;
4111 
4112     typedef EXCEPTION_REGISTRATION_RECORD *PEXCEPTION_REGISTRATION_RECORD;
4113 
4114     typedef EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION;
4115     typedef PEXCEPTION_REGISTRATION_RECORD PEXCEPTION_REGISTRATION;
4116 #endif
4117 
4118 #ifndef _NT_TIB_DEFINED
4119 #define _NT_TIB_DEFINED
4120     __C89_NAMELESS typedef struct _NT_TIB {
4121       struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
4122       PVOID StackBase;
4123       PVOID StackLimit;
4124       PVOID SubSystemTib;
4125       __C89_NAMELESS union {
4126 	PVOID FiberData;
4127 	DWORD Version;
4128       };
4129       PVOID ArbitraryUserPointer;
4130       struct _NT_TIB *Self;
4131     } NT_TIB;
4132     typedef NT_TIB *PNT_TIB;
4133 #endif /* _NT_TIB_DEFINED */
4134 
4135     __C89_NAMELESS typedef struct _NT_TIB32 {
4136       DWORD ExceptionList;
4137       DWORD StackBase;
4138       DWORD StackLimit;
4139       DWORD SubSystemTib;
4140       __C89_NAMELESS union {
4141 	DWORD FiberData;
4142 	DWORD Version;
4143       };
4144       DWORD ArbitraryUserPointer;
4145       DWORD Self;
4146     } NT_TIB32,*PNT_TIB32;
4147 
4148     __C89_NAMELESS typedef struct _NT_TIB64 {
4149       DWORD64 ExceptionList;
4150       DWORD64 StackBase;
4151       DWORD64 StackLimit;
4152       DWORD64 SubSystemTib;
4153       __C89_NAMELESS union {
4154 	DWORD64 FiberData;
4155 	DWORD Version;
4156       };
4157       DWORD64 ArbitraryUserPointer;
4158       DWORD64 Self;
4159     } NT_TIB64,*PNT_TIB64;
4160 
4161 #if !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_)
4162 #define WX86
4163 #endif
4164 
4165 #define THREAD_BASE_PRIORITY_LOWRT 15
4166 #define THREAD_BASE_PRIORITY_MAX 2
4167 #define THREAD_BASE_PRIORITY_MIN (-2)
4168 #define THREAD_BASE_PRIORITY_IDLE (-15)
4169 
4170     typedef struct _UMS_CREATE_THREAD_ATTRIBUTES {
4171       DWORD UmsVersion;
4172       PVOID UmsContext;
4173       PVOID UmsCompletionList;
4174     } UMS_CREATE_THREAD_ATTRIBUTES,*PUMS_CREATE_THREAD_ATTRIBUTES;
4175 
4176     typedef struct _QUOTA_LIMITS {
4177       SIZE_T PagedPoolLimit;
4178       SIZE_T NonPagedPoolLimit;
4179       SIZE_T MinimumWorkingSetSize;
4180       SIZE_T MaximumWorkingSetSize;
4181       SIZE_T PagefileLimit;
4182       LARGE_INTEGER TimeLimit;
4183     } QUOTA_LIMITS,*PQUOTA_LIMITS;
4184 
4185 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
4186 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
4187 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
4188 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
4189 #define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
4190 
4191     typedef union _RATE_QUOTA_LIMIT {
4192       DWORD RateData;
4193       __C89_NAMELESS struct {
4194         DWORD RatePercent : 7;
4195         DWORD Reserved0   : 25;
4196       } DUMMYSTRUCTNAME;
4197     } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
4198 
4199     typedef struct _QUOTA_LIMITS_EX {
4200       SIZE_T PagedPoolLimit;
4201       SIZE_T NonPagedPoolLimit;
4202       SIZE_T MinimumWorkingSetSize;
4203       SIZE_T MaximumWorkingSetSize;
4204       SIZE_T PagefileLimit;
4205       LARGE_INTEGER TimeLimit;
4206       SIZE_T WorkingSetLimit;
4207       SIZE_T Reserved2;
4208       SIZE_T Reserved3;
4209       SIZE_T Reserved4;
4210       DWORD Flags;
4211       RATE_QUOTA_LIMIT CpuRateLimit;
4212     } QUOTA_LIMITS_EX,*PQUOTA_LIMITS_EX;
4213 
4214     typedef struct _IO_COUNTERS {
4215       ULONGLONG ReadOperationCount;
4216       ULONGLONG WriteOperationCount;
4217       ULONGLONG OtherOperationCount;
4218       ULONGLONG ReadTransferCount;
4219       ULONGLONG WriteTransferCount;
4220       ULONGLONG OtherTransferCount;
4221     } IO_COUNTERS;
4222     typedef IO_COUNTERS *PIO_COUNTERS;
4223 
4224 #define MAX_HW_COUNTERS 16
4225 #define THREAD_PROFILING_FLAG_DISPATCH 0x1
4226 
4227     typedef enum _HARDWARE_COUNTER_TYPE {
4228       PMCCounter,
4229       MaxHardwareCounterType
4230     } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
4231 
4232     typedef enum _PROCESS_MITIGATION_POLICY {
4233       ProcessDEPPolicy,
4234       ProcessASLRPolicy,
4235       ProcessDynamicCodePolicy,
4236       ProcessStrictHandleCheckPolicy,
4237       ProcessSystemCallDisablePolicy,
4238       ProcessMitigationOptionsMask,
4239       ProcessExtensionPointDisablePolicy,
4240       ProcessControlFlowGuardPolicy,
4241       ProcessSignaturePolicy,
4242       ProcessFontDisablePolicy,
4243       ProcessImageLoadPolicy,
4244       MaxProcessMitigationPolicy
4245     } PROCESS_MITIGATION_POLICY,*PPROCESS_MITIGATION_POLICY;
4246 
4247     typedef struct _PROCESS_MITIGATION_ASLR_POLICY {
4248       __C89_NAMELESS union {
4249         DWORD Flags;
4250         __C89_NAMELESS struct {
4251           DWORD EnableBottomUpRandomization : 1;
4252           DWORD EnableForceRelocateImages : 1;
4253           DWORD EnableHighEntropy : 1;
4254           DWORD DisallowStrippedImages : 1;
4255           DWORD ReservedFlags : 28;
4256         };
4257       };
4258     } PROCESS_MITIGATION_ASLR_POLICY,*PPROCESS_MITIGATION_ASLR_POLICY;
4259 
4260     typedef struct _PROCESS_MITIGATION_DEP_POLICY {
4261       __C89_NAMELESS union {
4262         DWORD Flags;
4263         __C89_NAMELESS struct {
4264           DWORD Enable : 1;
4265           DWORD DisableAtlThunkEmulation : 1;
4266           DWORD ReservedFlags : 30;
4267         };
4268       };
4269       BOOLEAN Permanent;
4270     } PROCESS_MITIGATION_DEP_POLICY,*PPROCESS_MITIGATION_DEP_POLICY;
4271 
4272     typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
4273       __C89_NAMELESS union {
4274         DWORD Flags;
4275         __C89_NAMELESS struct {
4276           DWORD RaiseExceptionOnInvalidHandleReference : 1;
4277           DWORD HandleExceptionsPermanentlyEnabled : 1;
4278           DWORD ReservedFlags : 30;
4279         };
4280       };
4281     } PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY,*PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
4282 
4283     typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
4284       __C89_NAMELESS union {
4285         DWORD Flags;
4286         __C89_NAMELESS struct {
4287           DWORD DisallowWin32kSystemCalls : 1;
4288           DWORD ReservedFlags : 31;
4289         };
4290       };
4291     } PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY,*PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
4292 
4293     typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
4294       __C89_NAMELESS union {
4295         DWORD Flags;
4296         __C89_NAMELESS struct {
4297           DWORD DisableExtensionPoints : 1;
4298           DWORD ReservedFlags : 31;
4299         };
4300       };
4301     } PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY,*PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
4302 
4303     typedef struct _PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
4304       __C89_NAMELESS union {
4305         DWORD  Flags;
4306         __C89_NAMELESS struct {
4307           DWORD EnableControlFlowGuard  :1;
4308           DWORD EnableExportSuppression  :1;
4309           DWORD StrictMode  :1;
4310           DWORD ReservedFlags  :29;
4311         };
4312       };
4313     } PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY, *PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY;
4314 
4315     typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
4316       __C89_NAMELESS union {
4317         DWORD  Flags;
4318         __C89_NAMELESS struct {
4319           DWORD MicrosoftSignedOnly  :1;
4320           DWORD StoreSignedOnly  :1;
4321           DWORD MitigationOptIn  :1;
4322           DWORD ReservedFlags  :29;
4323         };
4324       };
4325     } PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY, *PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY;
4326 
4327     typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
4328       __C89_NAMELESS union {
4329         DWORD  Flags;
4330         __C89_NAMELESS struct {
4331           DWORD ProhibitDynamicCode  :1;
4332           DWORD AllowThreadOptOut  :1;
4333           DWORD AllowRemoteDowngrade  :1;
4334           DWORD ReservedFlags  :30;
4335         };
4336       };
4337     } PROCESS_MITIGATION_DYNAMIC_CODE_POLICY, *PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY;
4338 
4339     typedef struct _PROCESS_MITIGATION_FONT_DISABLE_POLICY {
4340       __C89_NAMELESS union {
4341         DWORD  Flags;
4342         __C89_NAMELESS struct {
4343           DWORD DisableNonSystemFonts  :1;
4344           DWORD AuditNonSystemFontLoading  :1;
4345           DWORD ReservedFlags  :30;
4346         };
4347       };
4348     } PROCESS_MITIGATION_FONT_DISABLE_POLICY, *PPROCESS_MITIGATION_FONT_DISABLE_POLICY;
4349 
4350     typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
4351       __C89_NAMELESS union {
4352         DWORD  Flags;
4353         __C89_NAMELESS struct {
4354           DWORD NoRemoteImages  :1;
4355           DWORD NoLowMandatoryLabelImages  :1;
4356           DWORD PreferSystem32Images  :1;
4357           DWORD ReservedFlags  :29;
4358         };
4359       };
4360     } PROCESS_MITIGATION_IMAGE_LOAD_POLICY, *PPROCESS_MITIGATION_IMAGE_LOAD_POLICY;
4361 
4362     typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
4363       LARGE_INTEGER TotalUserTime;
4364       LARGE_INTEGER TotalKernelTime;
4365       LARGE_INTEGER ThisPeriodTotalUserTime;
4366       LARGE_INTEGER ThisPeriodTotalKernelTime;
4367       DWORD TotalPageFaultCount;
4368       DWORD TotalProcesses;
4369       DWORD ActiveProcesses;
4370       DWORD TotalTerminatedProcesses;
4371     } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
4372 
4373     typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
4374       LARGE_INTEGER PerProcessUserTimeLimit;
4375       LARGE_INTEGER PerJobUserTimeLimit;
4376       DWORD LimitFlags;
4377       SIZE_T MinimumWorkingSetSize;
4378       SIZE_T MaximumWorkingSetSize;
4379       DWORD ActiveProcessLimit;
4380       ULONG_PTR Affinity;
4381       DWORD PriorityClass;
4382       DWORD SchedulingClass;
4383     } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
4384 
4385     typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
4386       JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
4387       IO_COUNTERS IoInfo;
4388       SIZE_T ProcessMemoryLimit;
4389       SIZE_T JobMemoryLimit;
4390       SIZE_T PeakProcessMemoryUsed;
4391       SIZE_T PeakJobMemoryUsed;
4392     } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
4393 
4394     typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
4395       DWORD NumberOfAssignedProcesses;
4396       DWORD NumberOfProcessIdsInList;
4397       ULONG_PTR ProcessIdList[1];
4398     } JOBOBJECT_BASIC_PROCESS_ID_LIST,*PJOBOBJECT_BASIC_PROCESS_ID_LIST;
4399 
4400     typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
4401       DWORD UIRestrictionsClass;
4402     } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
4403 
4404     typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
4405       DWORD SecurityLimitFlags;
4406       HANDLE JobToken;
4407       PTOKEN_GROUPS SidsToDisable;
4408       PTOKEN_PRIVILEGES PrivilegesToDelete;
4409       PTOKEN_GROUPS RestrictedSids;
4410     } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
4411 
4412     typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
4413       DWORD EndOfJobTimeAction;
4414     } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
4415 
4416     typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
4417       PVOID CompletionKey;
4418       HANDLE CompletionPort;
4419     } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
4420 
4421     typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
4422       JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
4423       IO_COUNTERS IoInfo;
4424     } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
4425 
4426     typedef struct _JOBOBJECT_JOBSET_INFORMATION {
4427       DWORD MemberLevel;
4428     } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
4429 
4430     typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE {
4431       ToleranceLow = 1,
4432       ToleranceMedium,
4433       ToleranceHigh
4434     } JOBOBJECT_RATE_CONTROL_TOLERANCE;
4435 
4436     typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL {
4437       ToleranceIntervalShort = 1,
4438       ToleranceIntervalMedium,
4439       ToleranceIntervalLong
4440     } JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL;
4441 
4442     typedef struct _JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
4443       DWORD64 IoReadBytesLimit;
4444       DWORD64 IoWriteBytesLimit;
4445       LARGE_INTEGER PerJobUserTimeLimit;
4446       DWORD64 JobMemoryLimit;
4447       JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
4448       JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
4449       DWORD LimitFlags;
4450     } JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION,*PJOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;
4451 
4452     typedef struct _JOBOBJECT_LIMIT_VIOLATION_INFORMATION {
4453       DWORD LimitFlags;
4454       DWORD ViolationLimitFlags;
4455       DWORD64 IoReadBytes;
4456       DWORD64 IoReadBytesLimit;
4457       DWORD64 IoWriteBytes;
4458       DWORD64 IoWriteBytesLimit;
4459       LARGE_INTEGER PerJobUserTime;
4460       LARGE_INTEGER PerJobUserTimeLimit;
4461       DWORD64 JobMemory;
4462       DWORD64 JobMemoryLimit;
4463       JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
4464       JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceLimit;
4465     } JOBOBJECT_LIMIT_VIOLATION_INFORMATION,*PJOBOBJECT_LIMIT_VIOLATION_INFORMATION;
4466 
4467     typedef struct _JOBOBJECT_CPU_RATE_CONTROL_INFORMATION {
4468       DWORD ControlFlags;
4469       __C89_NAMELESS union {
4470 	DWORD CpuRate;
4471 	DWORD Weight;
4472       };
4473     } JOBOBJECT_CPU_RATE_CONTROL_INFORMATION,*PJOBOBJECT_CPU_RATE_CONTROL_INFORMATION;
4474 
4475 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
4476 #define JOB_OBJECT_POST_AT_END_OF_JOB 1
4477 
4478 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
4479 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
4480 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
4481 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
4482 #define JOB_OBJECT_MSG_NEW_PROCESS 6
4483 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
4484 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
4485 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
4486 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
4487 #define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 11
4488 #define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 12
4489 
4490 #define JOB_OBJECT_MSG_MINIMUM 1
4491 #define JOB_OBJECT_MSG_MAXIMUM 12
4492 
4493 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
4494 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
4495 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
4496 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
4497 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
4498 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
4499 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
4500 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
4501 
4502 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
4503 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
4504 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
4505 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
4506 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
4507 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
4508 
4509 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
4510 #define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
4511 #define JOB_OBJECT_LIMIT_JOB_READ_BYTES 0x00010000
4512 #define JOB_OBJECT_LIMIT_JOB_WRITE_BYTES 0x00020000
4513 #define JOB_OBJECT_LIMIT_RATE_CONTROL 0x00040000
4514 
4515 #define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
4516 #define JOB_OBJECT_LIMIT_RESERVED4 0x00010000
4517 #define JOB_OBJECT_LIMIT_RESERVED5 0x00020000
4518 #define JOB_OBJECT_LIMIT_RESERVED6 0x00040000
4519 
4520 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
4521 
4522 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
4523 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
4524 #define JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS 0x0007ffff
4525 #define JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS 0x00070204
4526 
4527 #define JOB_OBJECT_UILIMIT_NONE 0x00000000
4528 
4529 #define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
4530 #define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
4531 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
4532 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
4533 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
4534 #define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
4535 #define JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
4536 #define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
4537 
4538 #define JOB_OBJECT_UILIMIT_ALL 0x000000FF
4539 
4540 #define JOB_OBJECT_UI_VALID_FLAGS 0x000000FF
4541 
4542 #define JOB_OBJECT_SECURITY_NO_ADMIN 0x00000001
4543 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x00000002
4544 #define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x00000004
4545 #define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x00000008
4546 
4547 #define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
4548 
4549 #define JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x1
4550 #define JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x2
4551 #define JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x4
4552 #define JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x8
4553 #define JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS 0xf
4554 
4555     typedef enum _JOBOBJECTINFOCLASS {
4556       JobObjectBasicAccountingInformation = 1, JobObjectBasicLimitInformation,
4557       JobObjectBasicProcessIdList, JobObjectBasicUIRestrictions,
4558       JobObjectSecurityLimitInformation, JobObjectEndOfJobTimeInformation,
4559       JobObjectAssociateCompletionPortInformation, JobObjectBasicAndIoAccountingInformation,
4560       JobObjectExtendedLimitInformation, JobObjectJobSetInformation,
4561       JobObjectGroupInformation,
4562       JobObjectNotificationLimitInformation,
4563       JobObjectLimitViolationInformation,
4564       JobObjectGroupInformationEx,
4565       JobObjectCpuRateControlInformation,
4566       JobObjectCompletionFilter,
4567       JobObjectCompletionCounter,
4568       JobObjectReserved1Information = 18,
4569       JobObjectReserved2Information,
4570       JobObjectReserved3Information,
4571       JobObjectReserved4Information,
4572       JobObjectReserved5Information,
4573       JobObjectReserved6Information,
4574       JobObjectReserved7Information,
4575       JobObjectReserved8Information,
4576       MaxJobObjectInfoClass
4577     } JOBOBJECTINFOCLASS;
4578 
4579     typedef enum _FIRMWARE_TYPE {
4580       FirmwareTypeUnknown,
4581       FirmwareTypeBios,
4582       FirmwareTypeUefi,
4583       FirmwareTypeMax
4584     } FIRMWARE_TYPE,*PFIRMWARE_TYPE;
4585 
4586 #define EVENT_MODIFY_STATE 0x0002
4587 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4588 
4589 #define MUTANT_QUERY_STATE 0x0001
4590 
4591 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| MUTANT_QUERY_STATE)
4592 #define SEMAPHORE_MODIFY_STATE 0x0002
4593 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
4594 
4595 #define TIMER_QUERY_STATE 0x0001
4596 #define TIMER_MODIFY_STATE 0x0002
4597 
4598 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
4599 
4600 #define TIME_ZONE_ID_UNKNOWN 0
4601 #define TIME_ZONE_ID_STANDARD 1
4602 #define TIME_ZONE_ID_DAYLIGHT 2
4603 
4604     typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
4605       RelationProcessorCore,RelationNumaNode,RelationCache,
4606       RelationProcessorPackage,RelationGroup,RelationAll=0xffff
4607     } LOGICAL_PROCESSOR_RELATIONSHIP;
4608 
4609 #define LTP_PC_SMT 0x1
4610 
4611     typedef enum _PROCESSOR_CACHE_TYPE {
4612       CacheUnified,CacheInstruction,CacheData,CacheTrace
4613     } PROCESSOR_CACHE_TYPE;
4614 
4615 #define CACHE_FULLY_ASSOCIATIVE 0xFF
4616 
4617     typedef struct _CACHE_DESCRIPTOR {
4618       BYTE Level;
4619       BYTE Associativity;
4620       WORD LineSize;
4621       DWORD Size;
4622       PROCESSOR_CACHE_TYPE Type;
4623     } CACHE_DESCRIPTOR,*PCACHE_DESCRIPTOR;
4624 
4625     typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
4626       ULONG_PTR ProcessorMask;
4627       LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
4628       __C89_NAMELESS union {
4629 	struct {
4630 	  BYTE Flags;
4631 	} ProcessorCore;
4632 	struct {
4633 	  DWORD NodeNumber;
4634 	} NumaNode;
4635 	CACHE_DESCRIPTOR Cache;
4636 	ULONGLONG Reserved[2];
4637       } DUMMYUNIONNAME;
4638     } SYSTEM_LOGICAL_PROCESSOR_INFORMATION,*PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
4639 
4640     typedef struct _PROCESSOR_RELATIONSHIP {
4641       BYTE Flags;
4642       BYTE Reserved[21];
4643       WORD GroupCount;
4644       GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
4645     } PROCESSOR_RELATIONSHIP,*PPROCESSOR_RELATIONSHIP;
4646 
4647     typedef struct _NUMA_NODE_RELATIONSHIP {
4648       DWORD NodeNumber;
4649       BYTE Reserved[20];
4650       GROUP_AFFINITY GroupMask;
4651     } NUMA_NODE_RELATIONSHIP,*PNUMA_NODE_RELATIONSHIP;
4652 
4653     typedef struct _CACHE_RELATIONSHIP {
4654       BYTE Level;
4655       BYTE Associativity;
4656       WORD LineSize;
4657       DWORD CacheSize;
4658       PROCESSOR_CACHE_TYPE Type;
4659       BYTE Reserved[20];
4660       GROUP_AFFINITY GroupMask;
4661     } CACHE_RELATIONSHIP,*PCACHE_RELATIONSHIP;
4662 
4663     typedef struct _PROCESSOR_GROUP_INFO {
4664       BYTE MaximumProcessorCount;
4665       BYTE ActiveProcessorCount;
4666       BYTE Reserved[38];
4667       KAFFINITY ActiveProcessorMask;
4668     } PROCESSOR_GROUP_INFO,*PPROCESSOR_GROUP_INFO;
4669 
4670     typedef struct _GROUP_RELATIONSHIP {
4671       WORD MaximumGroupCount;
4672       WORD ActiveGroupCount;
4673       BYTE Reserved[20];
4674       PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
4675     } GROUP_RELATIONSHIP,*PGROUP_RELATIONSHIP;
4676 
4677     struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
4678       LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
4679       DWORD Size;
4680       __C89_NAMELESS union {
4681 	PROCESSOR_RELATIONSHIP Processor;
4682 	NUMA_NODE_RELATIONSHIP NumaNode;
4683 	CACHE_RELATIONSHIP Cache;
4684 	GROUP_RELATIONSHIP Group;
4685       } DUMMYUNIONNAME;
4686     };
4687 
4688     typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX,*PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
4689 
4690     typedef struct _SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION {
4691       DWORD64 CycleTime;
4692     } SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION,*PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION;
4693 
4694 #define PROCESSOR_INTEL_386 386
4695 #define PROCESSOR_INTEL_486 486
4696 #define PROCESSOR_INTEL_PENTIUM 586
4697 #define PROCESSOR_INTEL_IA64 2200
4698 #define PROCESSOR_AMD_X8664 8664
4699 #define PROCESSOR_MIPS_R4000 4000
4700 #define PROCESSOR_ALPHA_21064 21064
4701 #define PROCESSOR_PPC_601 601
4702 #define PROCESSOR_PPC_603 603
4703 #define PROCESSOR_PPC_604 604
4704 #define PROCESSOR_PPC_620 620
4705 #define PROCESSOR_HITACHI_SH3 10003
4706 #define PROCESSOR_HITACHI_SH3E 10004
4707 #define PROCESSOR_HITACHI_SH4 10005
4708 #define PROCESSOR_MOTOROLA_821 821
4709 #define PROCESSOR_SHx_SH3 103
4710 #define PROCESSOR_SHx_SH4 104
4711 #define PROCESSOR_STRONGARM 2577
4712 #define PROCESSOR_ARM720 1824
4713 #define PROCESSOR_ARM820 2080
4714 #define PROCESSOR_ARM920 2336
4715 #define PROCESSOR_ARM_7TDMI 70001
4716 #define PROCESSOR_OPTIL 0x494f
4717 
4718 #define PROCESSOR_ARCHITECTURE_INTEL 0
4719 #define PROCESSOR_ARCHITECTURE_MIPS 1
4720 #define PROCESSOR_ARCHITECTURE_ALPHA 2
4721 #define PROCESSOR_ARCHITECTURE_PPC 3
4722 #define PROCESSOR_ARCHITECTURE_SHX 4
4723 #define PROCESSOR_ARCHITECTURE_ARM 5
4724 #define PROCESSOR_ARCHITECTURE_IA64 6
4725 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
4726 #define PROCESSOR_ARCHITECTURE_MSIL 8
4727 #define PROCESSOR_ARCHITECTURE_AMD64 9
4728 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
4729 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
4730 #define PROCESSOR_ARCHITECTURE_ARM64 12
4731 #define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
4732 #define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
4733 
4734 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xffff
4735 
4736 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
4737 #define PF_FLOATING_POINT_EMULATED 1
4738 #define PF_COMPARE_EXCHANGE_DOUBLE 2
4739 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
4740 #define PF_PPC_MOVEMEM_64BIT_OK 4
4741 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
4742 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
4743 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
4744 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
4745 #define PF_PAE_ENABLED 9
4746 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
4747 #define PF_SSE_DAZ_MODE_AVAILABLE 11
4748 #define PF_NX_ENABLED 12
4749 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
4750 #define PF_COMPARE_EXCHANGE128 14
4751 #define PF_COMPARE64_EXCHANGE128 15
4752 #define PF_CHANNELS_ENABLED 16
4753 #define PF_XSAVE_ENABLED 17
4754 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
4755 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
4756 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
4757 #define PF_VIRT_FIRMWARE_ENABLED 21
4758 #define PF_RDWRFSGSBASE_AVAILABLE 22
4759 #define PF_FASTFAIL_AVAILABLE 23
4760 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
4761 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
4762 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
4763 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
4764 #define PF_RDRAND_INSTRUCTION_AVAILABLE 28
4765 #define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
4766 #define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
4767 #define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
4768 #define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
4769 #define PF_RDPID_INSTRUCTION_AVAILABLE 33
4770 
4771 #define XSTATE_LEGACY_FLOATING_POINT (0)
4772 #define XSTATE_LEGACY_SSE (1)
4773 #define XSTATE_GSSE (2)
4774 #define XSTATE_AVX (XSTATE_GSSE)
4775 
4776 #define XSTATE_MASK_LEGACY_FLOATING_POINT (1ULL << (XSTATE_LEGACY_FLOATING_POINT))
4777 #define XSTATE_MASK_LEGACY_SSE (1ULL << (XSTATE_LEGACY_SSE))
4778 #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
4779 #define XSTATE_MASK_GSSE (1LLU << (XSTATE_GSSE))
4780 #define XSTATE_MASK_AVX (XSTATE_MASK_GSSE)
4781 
4782 #define MAXIMUM_XSTATE_FEATURES (64)
4783 
4784     typedef struct _XSTATE_FEATURE {
4785       DWORD Offset;
4786       DWORD Size;
4787     } XSTATE_FEATURE,*PXSTATE_FEATURE;
4788 
4789     typedef struct _XSTATE_CONFIGURATION {
4790       DWORD64 EnabledFeatures;
4791       DWORD64 EnabledVolatileFeatures;
4792       DWORD Size;
4793       DWORD OptimizedSave : 1;
4794       XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
4795     } XSTATE_CONFIGURATION,*PXSTATE_CONFIGURATION;
4796 
4797     typedef struct _MEMORY_BASIC_INFORMATION {
4798       PVOID BaseAddress;
4799       PVOID AllocationBase;
4800       DWORD AllocationProtect;
4801       SIZE_T RegionSize;
4802       DWORD State;
4803       DWORD Protect;
4804       DWORD Type;
4805     } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
4806 
4807     typedef struct _MEMORY_BASIC_INFORMATION32 {
4808       DWORD BaseAddress;
4809       DWORD AllocationBase;
4810       DWORD AllocationProtect;
4811       DWORD RegionSize;
4812       DWORD State;
4813       DWORD Protect;
4814       DWORD Type;
4815     } MEMORY_BASIC_INFORMATION32,*PMEMORY_BASIC_INFORMATION32;
4816 
4817     typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 {
4818       ULONGLONG BaseAddress;
4819       ULONGLONG AllocationBase;
4820       DWORD AllocationProtect;
4821       DWORD __alignment1;
4822       ULONGLONG RegionSize;
4823       DWORD State;
4824       DWORD Protect;
4825       DWORD Type;
4826       DWORD __alignment2;
4827     } MEMORY_BASIC_INFORMATION64,*PMEMORY_BASIC_INFORMATION64;
4828 
4829 #define SECTION_QUERY 0x0001
4830 #define SECTION_MAP_WRITE 0x0002
4831 #define SECTION_MAP_READ 0x0004
4832 #define SECTION_MAP_EXECUTE 0x0008
4833 #define SECTION_EXTEND_SIZE 0x0010
4834 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
4835 
4836 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE)
4837 
4838 #define SESSION_QUERY_ACCESS 0x1
4839 #define SESSION_MODIFY_ACCESS 0x2
4840 
4841 #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SESSION_QUERY_ACCESS | SESSION_MODIFY_ACCESS)
4842 
4843 #define PAGE_NOACCESS 0x01
4844 #define PAGE_READONLY 0x02
4845 #define PAGE_READWRITE 0x04
4846 #define PAGE_WRITECOPY 0x08
4847 #define PAGE_EXECUTE 0x10
4848 #define PAGE_EXECUTE_READ 0x20
4849 #define PAGE_EXECUTE_READWRITE 0x40
4850 #define PAGE_EXECUTE_WRITECOPY 0x80
4851 #define PAGE_GUARD 0x100
4852 #define PAGE_NOCACHE 0x200
4853 #define PAGE_WRITECOMBINE 0x400
4854 #define MEM_COMMIT 0x1000
4855 #define MEM_RESERVE 0x2000
4856 #define MEM_DECOMMIT 0x4000
4857 #define MEM_RELEASE 0x8000
4858 #define MEM_FREE 0x10000
4859 #define MEM_PRIVATE 0x20000
4860 #define MEM_MAPPED 0x40000
4861 #define MEM_RESET 0x80000
4862 #define MEM_TOP_DOWN 0x100000
4863 #define MEM_WRITE_WATCH 0x200000
4864 #define MEM_PHYSICAL 0x400000
4865 #define MEM_ROTATE 0x800000
4866 #define MEM_LARGE_PAGES 0x20000000
4867 #define MEM_4MB_PAGES 0x80000000
4868 #define SEC_FILE 0x800000
4869 #define SEC_IMAGE 0x1000000
4870 #define SEC_PROTECTED_IMAGE 0x2000000
4871 #define SEC_RESERVE 0x4000000
4872 #define SEC_COMMIT 0x8000000
4873 #define SEC_NOCACHE 0x10000000
4874 #define SEC_WRITECOMBINE 0x40000000
4875 #define SEC_LARGE_PAGES 0x80000000
4876 
4877 #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
4878 #define MEM_IMAGE SEC_IMAGE
4879 #define WRITE_WATCH_FLAG_RESET 0x01
4880 #define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x01
4881 
4882 #define FILE_READ_DATA (0x0001)
4883 #define FILE_LIST_DIRECTORY (0x0001)
4884 
4885 #define FILE_WRITE_DATA (0x0002)
4886 #define FILE_ADD_FILE (0x0002)
4887 
4888 #define FILE_APPEND_DATA (0x0004)
4889 #define FILE_ADD_SUBDIRECTORY (0x0004)
4890 #define FILE_CREATE_PIPE_INSTANCE (0x0004)
4891 
4892 #define FILE_READ_EA (0x0008)
4893 #define FILE_WRITE_EA (0x0010)
4894 #define FILE_EXECUTE (0x0020)
4895 #define FILE_TRAVERSE (0x0020)
4896 #define FILE_DELETE_CHILD (0x0040)
4897 #define FILE_READ_ATTRIBUTES (0x0080)
4898 #define FILE_WRITE_ATTRIBUTES (0x0100)
4899 
4900 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
4901 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)
4902 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
4903 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
4904 
4905 #define FILE_SUPERSEDE                    0x00000000
4906 #define FILE_OPEN                         0x00000001
4907 #define FILE_CREATE                       0x00000002
4908 #define FILE_OPEN_IF                      0x00000003
4909 #define FILE_OVERWRITE                    0x00000004
4910 #define FILE_OVERWRITE_IF                 0x00000005
4911 #define FILE_MAXIMUM_DISPOSITION          0x00000005
4912 
4913 #define FILE_DIRECTORY_FILE               0x00000001
4914 #define FILE_WRITE_THROUGH                0x00000002
4915 #define FILE_SEQUENTIAL_ONLY              0x00000004
4916 #define FILE_NO_INTERMEDIATE_BUFFERING    0x00000008
4917 #define FILE_SYNCHRONOUS_IO_ALERT         0x00000010
4918 #define FILE_SYNCHRONOUS_IO_NONALERT      0x00000020
4919 #define FILE_NON_DIRECTORY_FILE           0x00000040
4920 #define FILE_CREATE_TREE_CONNECTION       0x00000080
4921 #define FILE_COMPLETE_IF_OPLOCKED         0x00000100
4922 #define FILE_NO_EA_KNOWLEDGE              0x00000200
4923 #define FILE_OPEN_REMOTE_INSTANCE         0x00000400
4924 #define FILE_RANDOM_ACCESS                0x00000800
4925 #define FILE_DELETE_ON_CLOSE              0x00001000
4926 #define FILE_OPEN_BY_FILE_ID              0x00002000
4927 #define FILE_OPEN_FOR_BACKUP_INTENT       0x00004000
4928 #define FILE_NO_COMPRESSION               0x00008000
4929 #if (NTDDI_VERSION >= NTDDI_WIN7)
4930 #define FILE_OPEN_REQUIRING_OPLOCK        0x00010000
4931 #define FILE_DISALLOW_EXCLUSIVE           0x00020000
4932 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4933 #define FILE_RESERVE_OPFILTER             0x00100000
4934 #define FILE_OPEN_REPARSE_POINT           0x00200000
4935 #define FILE_OPEN_NO_RECALL               0x00400000
4936 #define FILE_OPEN_FOR_FREE_SPACE_QUERY    0x00800000
4937 
4938 #define FILE_SHARE_READ 0x00000001
4939 #define FILE_SHARE_WRITE 0x00000002
4940 #define FILE_SHARE_DELETE 0x00000004
4941 #define FILE_SHARE_VALID_FLAGS 0x00000007
4942 #define FILE_ATTRIBUTE_READONLY 0x00000001
4943 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
4944 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
4945 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
4946 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
4947 #define FILE_ATTRIBUTE_DEVICE 0x00000040
4948 #define FILE_ATTRIBUTE_NORMAL 0x00000080
4949 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
4950 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
4951 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
4952 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
4953 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
4954 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
4955 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
4956 #define FILE_ATTRIBUTE_VIRTUAL 0x00010000
4957 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
4958 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
4959 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
4960 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
4961 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
4962 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
4963 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
4964 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
4965 #define FILE_ACTION_ADDED 0x00000001
4966 #define FILE_ACTION_REMOVED 0x00000002
4967 #define FILE_ACTION_MODIFIED 0x00000003
4968 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
4969 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
4970 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
4971 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
4972 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
4973 #define FILE_CASE_PRESERVED_NAMES 0x00000002
4974 #define FILE_UNICODE_ON_DISK 0x00000004
4975 #define FILE_PERSISTENT_ACLS 0x00000008
4976 #define FILE_FILE_COMPRESSION 0x00000010
4977 #define FILE_VOLUME_QUOTAS 0x00000020
4978 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
4979 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
4980 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
4981 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
4982 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
4983 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
4984 #define FILE_NAMED_STREAMS 0x00040000
4985 #define FILE_READ_ONLY_VOLUME 0x00080000
4986 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
4987 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
4988 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
4989 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
4990 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
4991 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
4992 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
4993 
4994     typedef struct FILE_ID_128 {
4995       BYTE Identifier[16];
4996     } FILE_ID_128, *PFILE_ID_128;
4997 
4998     typedef struct _FILE_NOTIFY_INFORMATION {
4999       DWORD NextEntryOffset;
5000       DWORD Action;
5001       DWORD FileNameLength;
5002       WCHAR FileName[1];
5003     } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
5004 
5005     typedef union _FILE_SEGMENT_ELEMENT {
5006       PVOID64 Buffer;
5007       ULONGLONG Alignment;
5008     } FILE_SEGMENT_ELEMENT,*PFILE_SEGMENT_ELEMENT;
5009 
5010     typedef struct _REPARSE_GUID_DATA_BUFFER {
5011       DWORD ReparseTag;
5012       WORD ReparseDataLength;
5013       WORD Reserved;
5014       GUID ReparseGuid;
5015       struct {
5016 	BYTE DataBuffer[1];
5017       } GenericReparseBuffer;
5018     } REPARSE_GUID_DATA_BUFFER,*PREPARSE_GUID_DATA_BUFFER;
5019 
5020 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER,GenericReparseBuffer)
5021 
5022 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 *1024)
5023 
5024 #define SYMLINK_FLAG_RELATIVE   1
5025 
5026 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
5027 #define IO_REPARSE_TAG_RESERVED_ONE (1)
5028 
5029 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
5030 
5031 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
5032 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
5033 
5034 #define IO_REPARSE_TAG_MOUNT_POINT (__MSABI_LONG(0xA0000003))
5035 #define IO_REPARSE_TAG_HSM (__MSABI_LONG(0xC0000004))
5036 #define IO_REPARSE_TAG_DRIVE_EXTENDER (__MSABI_LONG(0x80000005))
5037 #define IO_REPARSE_TAG_HSM2 (__MSABI_LONG(0x80000006))
5038 #define IO_REPARSE_TAG_SIS (__MSABI_LONG(0x80000007))
5039 #define IO_REPARSE_TAG_WIM (__MSABI_LONG(0x80000008))
5040 #define IO_REPARSE_TAG_CSV (__MSABI_LONG(0x80000009))
5041 #define IO_REPARSE_TAG_DFS (__MSABI_LONG(0x8000000A))
5042 #define IO_REPARSE_TAG_FILTER_MANAGER (__MSABI_LONG(0x8000000B))
5043 #define IO_REPARSE_TAG_SYMLINK (__MSABI_LONG(0xA000000C))
5044 #define IO_REPARSE_TAG_IIS_CACHE (__MSABI_LONG(0xA0000010))
5045 #define IO_REPARSE_TAG_DFSR (__MSABI_LONG(0x80000012))
5046 #define IO_REPARSE_TAG_DEDUP (__MSABI_LONG(0x80000013))
5047 #define IO_REPARSE_TAG_NFS (__MSABI_LONG(0x80000014))
5048 #define IO_REPARSE_TAG_FILE_PLACEHOLDER (__MSABI_LONG(0x80000015))
5049 #define IO_REPARSE_TAG_WOF (__MSABI_LONG(0x80000017))
5050 #define IO_REPARSE_TAG_WCI (__MSABI_LONG(0x80000018))
5051 #define IO_REPARSE_TAG_WCI_1 (__MSABI_LONG(0x90001018))
5052 #define IO_REPARSE_TAG_GLOBAL_REPARSE (__MSABI_LONG(0xA0000019))
5053 #define IO_REPARSE_TAG_CLOUD (__MSABI_LONG(0x9000001A))
5054 #define IO_REPARSE_TAG_CLOUD_1 (__MSABI_LONG(0x9000101A))
5055 #define IO_REPARSE_TAG_CLOUD_2 (__MSABI_LONG(0x9000201A))
5056 #define IO_REPARSE_TAG_CLOUD_3 (__MSABI_LONG(0x9000301A))
5057 #define IO_REPARSE_TAG_CLOUD_4 (__MSABI_LONG(0x9000401A))
5058 #define IO_REPARSE_TAG_CLOUD_5 (__MSABI_LONG(0x9000501A))
5059 #define IO_REPARSE_TAG_CLOUD_6 (__MSABI_LONG(0x9000601A))
5060 #define IO_REPARSE_TAG_CLOUD_7 (__MSABI_LONG(0x9000701A))
5061 #define IO_REPARSE_TAG_CLOUD_8 (__MSABI_LONG(0x9000801A))
5062 #define IO_REPARSE_TAG_CLOUD_9 (__MSABI_LONG(0x9000901A))
5063 #define IO_REPARSE_TAG_CLOUD_A (__MSABI_LONG(0x9000A01A))
5064 #define IO_REPARSE_TAG_CLOUD_B (__MSABI_LONG(0x9000B01A))
5065 #define IO_REPARSE_TAG_CLOUD_C (__MSABI_LONG(0x9000C01A))
5066 #define IO_REPARSE_TAG_CLOUD_D (__MSABI_LONG(0x9000D01A))
5067 #define IO_REPARSE_TAG_CLOUD_E (__MSABI_LONG(0x9000E01A))
5068 #define IO_REPARSE_TAG_CLOUD_F (__MSABI_LONG(0x9000F01A))
5069 #define IO_REPARSE_TAG_CLOUD_MASK (__MSABI_LONG(0x0000F000))
5070 #define IO_REPARSE_TAG_APPEXECLINK (__MSABI_LONG(0x8000001B))
5071 #define IO_REPARSE_TAG_PROJFS (__MSABI_LONG(0x9000001C))
5072 #define IO_REPARSE_TAG_STORAGE_SYNC (__MSABI_LONG(0x8000001E))
5073 #define IO_REPARSE_TAG_WCI_TOMBSTONE (__MSABI_LONG(0xA000001F))
5074 #define IO_REPARSE_TAG_UNHANDLED (__MSABI_LONG(0x80000020))
5075 #define IO_REPARSE_TAG_ONEDRIVE (__MSABI_LONG(0x80000021))
5076 #define IO_REPARSE_TAG_PROJFS_TOMBSTONE (__MSABI_LONG(0xA0000022))
5077 #define IO_REPARSE_TAG_AF_UNIX (__MSABI_LONG(0x80000023))
5078 
5079 #if _WIN32_WINNT >= 0x0602
5080 #define SCRUB_DATA_INPUT_FLAG_RESUME 0x00000001
5081 #define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x00000002
5082 #define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x00000004
5083 
5084 #define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x00000001
5085 #define SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE 0x00010000
5086 
5087     typedef struct _SCRUB_DATA_INPUT {
5088       DWORD Size;
5089       DWORD Flags;
5090       DWORD MaximumIos;
5091       DWORD Reserved[17];
5092       BYTE ResumeContext[816];
5093     } SCRUB_DATA_INPUT,*PSCRUB_DATA_INPUT;
5094 
5095     typedef struct _SCRUB_DATA_OUTPUT {
5096       DWORD Size;
5097       DWORD Flags;
5098       DWORD Status;
5099       ULONGLONG ErrorFileOffset;
5100       ULONGLONG ErrorLength;
5101       ULONGLONG NumberOfBytesRepaired;
5102       ULONGLONG NumberOfBytesFailed;
5103       ULONGLONG InternalFileReference;
5104       DWORD Reserved[6];
5105       BYTE ResumeContext[816];
5106     } SCRUB_DATA_OUTPUT,*PSCRUB_DATA_OUTPUT;
5107 #endif
5108 
5109 #define IO_COMPLETION_MODIFY_STATE 0x0002
5110 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5111 #define DUPLICATE_CLOSE_SOURCE 0x00000001
5112 #define DUPLICATE_SAME_ACCESS 0x00000002
5113 
5114 #define POWERBUTTON_ACTION_INDEX_NOTHING 0
5115 #define POWERBUTTON_ACTION_INDEX_SLEEP 1
5116 #define POWERBUTTON_ACTION_INDEX_HIBERNATE 2
5117 #define POWERBUTTON_ACTION_INDEX_SHUTDOWN 3
5118 
5119 #define POWERBUTTON_ACTION_VALUE_NOTHING 0
5120 #define POWERBUTTON_ACTION_VALUE_SLEEP 2
5121 #define POWERBUTTON_ACTION_VALUE_HIBERNATE 3
5122 #define POWERBUTTON_ACTION_VALUE_SHUTDOWN 6
5123 
5124 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
5125 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
5126 #define PERFSTATE_POLICY_CHANGE_ROCKET 2
5127 #define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
5128 
5129 #define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
5130 #define PROCESSOR_PERF_BOOST_POLICY_MAX 100
5131 
5132 #define PROCESSOR_PERF_BOOST_MODE_DISABLED 0
5133 #define PROCESSOR_PERF_BOOST_MODE_ENABLED 1
5134 #define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 2
5135 #define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 3
5136 #define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 4
5137 #define PROCESSOR_PERF_BOOST_MODE_MAX PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE
5138 
5139 #define CORE_PARKING_POLICY_CHANGE_IDEAL 0
5140 #define CORE_PARKING_POLICY_CHANGE_SINGLE 1
5141 #define CORE_PARKING_POLICY_CHANGE_ROCKET 2
5142 #define CORE_PARKING_POLICY_CHANGE_MULTISTEP 3
5143 #define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_MULTISTEP
5144 
5145 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
5146 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
5147 
5148     DEFINE_GUID (GUID_MAX_POWER_SAVINGS, 0xa1841308, 0x3541, 0x4fab, 0xbc, 0x81, 0xf7, 0x15, 0x56, 0xf2, 0x0b, 0x4a);
5149     DEFINE_GUID (GUID_MIN_POWER_SAVINGS, 0x8c5e7fda, 0xe8bf, 0x4a96, 0x9a, 0x85, 0xa6, 0xe2, 0x3a, 0x8c, 0x63, 0x5c);
5150     DEFINE_GUID (GUID_TYPICAL_POWER_SAVINGS, 0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e);
5151     DEFINE_GUID (NO_SUBGROUP_GUID, 0xfea3413e, 0x7e05, 0x4911, 0x9a, 0x71, 0x70, 0x03, 0x31, 0xf1, 0xc2, 0x94);
5152     DEFINE_GUID (ALL_POWERSCHEMES_GUID, 0x68a1e95e, 0x13ea, 0x41e1, 0x80, 0x11, 0x0c, 0x49, 0x6c, 0xa4, 0x90, 0xb0);
5153     DEFINE_GUID (GUID_POWERSCHEME_PERSONALITY, 0x245d8541, 0x3943, 0x4422, 0xb0, 0x25, 0x13, 0xa7, 0x84, 0xf6, 0x79, 0xb7);
5154     DEFINE_GUID (GUID_ACTIVE_POWERSCHEME, 0x31f9f286, 0x5084, 0x42fe, 0xb7, 0x20, 0x2b, 0x02, 0x64, 0x99, 0x37, 0x63);
5155     DEFINE_GUID (GUID_IDLE_RESILIENCY_SUBGROUP, 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4, 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54);
5156     DEFINE_GUID (GUID_IDLE_RESILIENCY_PERIOD, 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28);
5157     DEFINE_GUID (GUID_DISK_COALESCING_POWERDOWN_TIMEOUT, 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33);
5158     DEFINE_GUID (GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT, 0x3166bc41, 0x7e98, 0x4e03, 0xb3, 0x4e, 0xec, 0xf, 0x5f, 0x2b, 0x21, 0x8e);
5159     DEFINE_GUID (GUID_VIDEO_SUBGROUP, 0x7516b95f, 0xf776, 0x4464, 0x8c, 0x53, 0x06, 0x16, 0x7f, 0x40, 0xcc, 0x99);
5160     DEFINE_GUID (GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3c0bc021, 0xc8a8, 0x4e07, 0xa9, 0x73, 0x6b, 0x14, 0xcb, 0xcb, 0x2b, 0x7e);
5161     DEFINE_GUID (GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82dbcf2d, 0xcd67, 0x40c5, 0xbf, 0xdc, 0x9f, 0x1a, 0x5c, 0xcd, 0x46, 0x63);
5162     DEFINE_GUID (GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xeed904df, 0xb142, 0x4183, 0xb1, 0x0b, 0x5a, 0x11, 0x97, 0xa3, 0x78, 0x64);
5163     DEFINE_GUID (GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
5164     DEFINE_GUID (GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959d22, 0xd6a1, 0x49b9, 0xaf, 0x93, 0xbc, 0xe8, 0x85, 0xad, 0x33, 0x5b);
5165     DEFINE_GUID (GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xe6, 0xe5, 0xa1, 0x7e, 0xbd, 0x1a, 0xea);
5166     DEFINE_GUID (GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, __MSABI_LONG(0xaded5e82), 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
5167     DEFINE_GUID (GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
5168     DEFINE_GUID (GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
5169     DEFINE_GUID (GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xfbd9aa66, 0x9553, 0x4097, 0xba, 0x44, 0xed, 0x6e, 0x9d, 0x65, 0xea, 0xb8);
5170     DEFINE_GUID (GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
5171     DEFINE_GUID (GUID_ALLOW_DISPLAY_REQUIRED, 0xa9ceb8da, 0xcd46, 0x44fb, 0xa9, 0x8b, 0x02, 0xaf, 0x69, 0xde, 0x46, 0x23);
5172     DEFINE_GUID (GUID_VIDEO_CONSOLE_LOCK_TIMEOUT, 0x8ec4b3a5, 0x6868, 0x48c2, 0xbe, 0x75, 0x4f, 0x30, 0x44, 0xbe, 0x88, 0xa7);
5173     DEFINE_GUID (GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP, 0x8619b916, 0xe004, 0x4dd8, 0x9b, 0x66, 0xda, 0xe8, 0x6f, 0x80, 0x66, 0x98);
5174     DEFINE_GUID (GUID_NON_ADAPTIVE_INPUT_TIMEOUT, 0x5adbbfbc, 0x74e, 0x4da1, 0xba, 0x38, 0xdb, 0x8b, 0x36, 0xb2, 0xc8, 0xf3);
5175     DEFINE_GUID (GUID_DISK_SUBGROUP, 0x0012ee47, 0x9041, 0x4b5d, 0x9b, 0x77, 0x53, 0x5f, 0xba, 0x8b, 0x14, 0x42);
5176     DEFINE_GUID (GUID_DISK_POWERDOWN_TIMEOUT, 0x6738e2c4, 0xe8a5, 0x4a42, 0xb1, 0x6a, 0xe0, 0x40, 0xe7, 0x69, 0x75, 0x6e);
5177     DEFINE_GUID (GUID_DISK_IDLE_TIMEOUT, 0x58e39ba8, 0xb8e6, 0x4ef6, 0x90, 0xd0, 0x89, 0xae, 0x32, 0xb2, 0x58, 0xd6);
5178     DEFINE_GUID (GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
5179     DEFINE_GUID (GUID_DISK_ADAPTIVE_POWERDOWN, 0x396a32e1, 0x499a, 0x40b2, 0x91, 0x24, 0xa9, 0x6a, 0xfe, 0x70, 0x76, 0x67);
5180     DEFINE_GUID (GUID_SLEEP_SUBGROUP, 0x238c9fa8, 0x0aad, 0x41ed, 0x83, 0xf4, 0x97, 0xbe, 0x24, 0x2c, 0x8f, 0x20);
5181     DEFINE_GUID (GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
5182     DEFINE_GUID (GUID_STANDBY_TIMEOUT, 0x29f6c1db, 0x86da, 0x48c5, 0x9f, 0xdb, 0xf2, 0xb6, 0x7b, 0x1f, 0x44, 0xda);
5183     DEFINE_GUID (GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
5184     DEFINE_GUID (GUID_HIBERNATE_TIMEOUT, 0x9d7815a6, 0x7ee4, 0x497e, 0x88, 0x88, 0x51, 0x5a, 0x05, 0xf0, 0x23, 0x64);
5185     DEFINE_GUID (GUID_HIBERNATE_FASTS4_POLICY, 0x94ac6d29, 0x73ce, 0x41a6, 0x80, 0x9f, 0x63, 0x63, 0xba, 0x21, 0xb4, 0x7e);
5186     DEFINE_GUID (GUID_CRITICAL_POWER_TRANSITION, 0xb7a27025, 0xe569, 0x46c2, 0xa5, 0x04, 0x2b, 0x96, 0xca, 0xd2, 0x25, 0xa1);
5187     DEFINE_GUID (GUID_SYSTEM_AWAYMODE, 0x98a7f580, 0x01f7, 0x48aa, 0x9c, 0x0f, 0x44, 0x35, 0x2c, 0x29, 0xe5, 0xc0);
5188     DEFINE_GUID (GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
5189     DEFINE_GUID (GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
5190     DEFINE_GUID (GUID_ALLOW_RTC_WAKE, 0xbd3b718a, 0x0680, 0x4d9d, 0x8a, 0xb2, 0xe1, 0xd2, 0xb4, 0xac, 0x80, 0x6d);
5191     DEFINE_GUID (GUID_ALLOW_SYSTEM_REQUIRED, 0xa4b195f5, 0x8225, 0x47d8, 0x80, 0x12, 0x9d, 0x41, 0x36, 0x97, 0x86, 0xe2);
5192     DEFINE_GUID (GUID_SYSTEM_BUTTON_SUBGROUP, 0x4f971e89, 0xeebd, 0x4455, 0xa8, 0xde, 0x9e, 0x59, 0x04, 0x0e, 0x73, 0x47);
5193     DEFINE_GUID (GUID_POWERBUTTON_ACTION, 0x7648efa3, 0xdd9c, 0x4e3e, 0xb5, 0x66, 0x50, 0xf9, 0x29, 0x38, 0x62, 0x80);
5194     DEFINE_GUID (GUID_SLEEPBUTTON_ACTION, 0x96996bc0, 0xad50, 0x47ec, 0x92, 0x3b, 0x6f, 0x41, 0x87, 0x4d, 0xd9, 0xeb);
5195     DEFINE_GUID (GUID_USERINTERFACEBUTTON_ACTION, 0xa7066653, 0x8d6c, 0x40a8, 0x91, 0x0e, 0xa1, 0xf5, 0x4b, 0x84, 0xc7, 0xe5);
5196     DEFINE_GUID (GUID_LIDCLOSE_ACTION, 0x5ca83367, 0x6e45, 0x459f, 0xa2, 0x7b, 0x47, 0x6b, 0x1d, 0x01, 0xc9, 0x36);
5197     DEFINE_GUID (GUID_LIDOPEN_POWERSTATE, 0x99ff10e7, 0x23b1, 0x4c07, 0xa9, 0xd1, 0x5c, 0x32, 0x06, 0xd7, 0x41, 0xb4);
5198     DEFINE_GUID (GUID_BATTERY_SUBGROUP, 0xe73a048d, 0xbf27, 0x4f12, 0x97, 0x31, 0x8b, 0x20, 0x76, 0xe8, 0x89, 0x1f);
5199     DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_0, 0x637ea02f, 0xbbcb, 0x4015, 0x8e, 0x2c, 0xa1, 0xc7, 0xb9, 0xc0, 0xb5, 0x46);
5200     DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9a66d8d7, 0x4ff7, 0x4ef9, 0xb5, 0xa2, 0x5a, 0x32, 0x6c, 0xa2, 0xa4, 0x69);
5201     DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
5202     DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_1, 0xd8742dcb, 0x3e6a, 0x4b3c, 0xb3, 0xfe, 0x37, 0x46, 0x23, 0xcd, 0xcf, 0x06);
5203     DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183ba9a, 0xe910, 0x48da, 0x87, 0x69, 0x14, 0xae, 0x6d, 0xc1, 0x17, 0x0a);
5204     DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
5205     DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_2, 0x421cba38, 0x1a8e, 0x4881, 0xac, 0x89, 0xe3, 0x3a, 0x8b, 0x04, 0xec, 0xe4);
5206     DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07a07ca2, 0xadaf, 0x40d7, 0xb0, 0x77, 0x53, 0x3a, 0xad, 0xed, 0x1b, 0xfa);
5207     DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
5208     DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455e, 0xb3, 0x08, 0x72, 0xd3, 0x00, 0x3c, 0xf2, 0xf8);
5209     DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58afd5a6, 0xc2dd, 0x47d2, 0x9f, 0xbf, 0xef, 0x70, 0xcc, 0x5c, 0x59, 0x65);
5210     DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
5211     DEFINE_GUID (GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82be, 0x4824, 0x96, 0xc1, 0x47, 0xb6, 0x0b, 0x74, 0x0d, 0x00);
5212     DEFINE_GUID (GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4af6, 0x4104, 0x92, 0x60, 0xe3, 0xd9, 0x52, 0x48, 0xfc, 0x36);
5213     DEFINE_GUID (GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xec);
5214     DEFINE_GUID (GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4c);
5215     DEFINE_GUID (GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
5216     DEFINE_GUID (GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
5217     DEFINE_GUID (GUID_PROCESSOR_PERFSTATE_POLICY, 0xbbdc3814, 0x18e9, 0x4463, 0x8a, 0x55, 0xd1, 0x97, 0x32, 0x7c, 0x45, 0xc0);
5218     DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
5219     DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
5220     DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
5221     DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
5222     DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
5223     DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
5224     DEFINE_GUID (GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
5225     DEFINE_GUID (GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
5226     DEFINE_GUID (GUID_PROCESSOR_PERF_BOOST_MODE, 0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7);
5227     DEFINE_GUID (GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
5228     DEFINE_GUID (GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
5229     DEFINE_GUID (GUID_PROCESSOR_IDLE_STATE_MAXIMUM, 0x9943e905, 0x9a30, 0x4ec1, 0x9b, 0x99, 0x44, 0xdd, 0x3b, 0x76, 0xf7, 0xa2);
5230     DEFINE_GUID (GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
5231     DEFINE_GUID (GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
5232     DEFINE_GUID (GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
5233     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
5234     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
5235     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
5236     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
5237     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
5238     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
5239     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
5240     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
5241     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
5242     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
5243     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
5244     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
5245     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
5246     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
5247     DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
5248     DEFINE_GUID (GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
5249     DEFINE_GUID (GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
5250     DEFINE_GUID (GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD, 0x2430ab6f, 0xa520, 0x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1);
5251     DEFINE_GUID (GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD, 0xf735a673, 0x2066, 0x4f80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d);
5252     DEFINE_GUID (GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
5253     DEFINE_GUID (GUID_PROCESSOR_PERF_LATENCY_HINT, 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b);
5254     DEFINE_GUID (GUID_PROCESSOR_DISTRIBUTE_UTILITY, 0xe0007330, 0xf589, 0x42ed, 0xa4, 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3);
5255     DEFINE_GUID (GUID_SYSTEM_COOLING_POLICY, 0x94d3a615, 0xa899, 0x4ac5, 0xae, 0x2b, 0xe4, 0xd8, 0xf6, 0x34, 0x36, 0x7f);
5256     DEFINE_GUID (GUID_LOCK_CONSOLE_ON_WAKE, 0x0e796bdb, 0x100d, 0x47d6, 0xa2, 0xd5, 0xf7, 0xd2, 0xda, 0xa5, 0x1f, 0x51);
5257     DEFINE_GUID (GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
5258     DEFINE_GUID (GUID_ACDC_POWER_SOURCE, 0x5d3e9a59, 0xe9d5, 0x4b00, 0xa6, 0xbd, 0xff, 0x34, 0xff, 0x51, 0x65, 0x48);
5259     DEFINE_GUID (GUID_LIDSWITCH_STATE_CHANGE, 0xba3e0f4d, 0xb817, 0x4094, 0xa2, 0xd1, 0xd5, 0x63, 0x79, 0xe6, 0xa0, 0xf3);
5260     DEFINE_GUID (GUID_BATTERY_PERCENTAGE_REMAINING, 0xa7ad8041, 0xb45a, 0x4cae, 0x87, 0xa3, 0xee, 0xcb, 0xb4, 0x68, 0xa9, 0xe1);
5261     DEFINE_GUID (GUID_GLOBAL_USER_PRESENCE, 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9);
5262     DEFINE_GUID (GUID_SESSION_DISPLAY_STATUS, 0x2b84c20e, 0xad23, 0x4ddf, 0x93, 0xdb, 0x5, 0xff, 0xbd, 0x7e, 0xfc, 0xa5);
5263     DEFINE_GUID (GUID_SESSION_USER_PRESENCE, 0x3c0f4548, 0xc03f, 0x4c4d, 0xb9, 0xf2, 0x23, 0x7e, 0xde, 0x68, 0x63, 0x76);
5264     DEFINE_GUID (GUID_IDLE_BACKGROUND_TASK, 0x515c31d8, 0xf734, 0x163d, 0xa0, 0xfd, 0x11, 0xa0, 0x8c, 0x91, 0xe8, 0xf1);
5265     DEFINE_GUID (GUID_BACKGROUND_TASK_NOTIFICATION, 0xcf23f240, 0x2a54, 0x48d8, 0xb1, 0x14, 0xde, 0x15, 0x18, 0xff, 0x05, 0x2e);
5266     DEFINE_GUID (GUID_APPLAUNCH_BUTTON, 0x1a689231, 0x7399, 0x4e9a, 0x8f, 0x99, 0xb7, 0x1f, 0x99, 0x9d, 0xb3, 0xfa);
5267     DEFINE_GUID (GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af, 0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
5268     DEFINE_GUID (GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
5269     DEFINE_GUID (GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
5270 
5271   typedef enum _SYSTEM_POWER_STATE {
5272     PowerSystemUnspecified = 0,PowerSystemWorking = 1,PowerSystemSleeping1 = 2,PowerSystemSleeping2 = 3,PowerSystemSleeping3 = 4,PowerSystemHibernate = 5,PowerSystemShutdown = 6,PowerSystemMaximum = 7
5273   } SYSTEM_POWER_STATE,*PSYSTEM_POWER_STATE;
5274 
5275 #define POWER_SYSTEM_MAXIMUM 7
5276 
5277   typedef enum {
5278     PowerActionNone = 0, PowerActionReserved, PowerActionSleep, PowerActionHibernate,
5279     PowerActionShutdown, PowerActionShutdownReset, PowerActionShutdownOff,
5280     PowerActionWarmEject
5281   } POWER_ACTION,*PPOWER_ACTION;
5282 
5283   typedef enum _DEVICE_POWER_STATE {
5284     PowerDeviceUnspecified = 0, PowerDeviceD0, PowerDeviceD1, PowerDeviceD2, PowerDeviceD3,
5285     PowerDeviceMaximum
5286   } DEVICE_POWER_STATE,*PDEVICE_POWER_STATE;
5287 
5288   typedef enum _MONITOR_DISPLAY_STATE {
5289     PowerMonitorOff = 0, PowerMonitorOn, PowerMonitorDim
5290   } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
5291 
5292   typedef enum _USER_ACTIVITY_PRESENCE {
5293     PowerUserPresent = 0,
5294     PowerUserNotPresent,
5295     PowerUserInactive,
5296     PowerUserMaximum,
5297     PowerUserInvalid = PowerUserMaximum
5298   } USER_ACTIVITY_PRESENCE,*PUSER_ACTIVITY_PRESENCE;
5299 
5300 #define ES_SYSTEM_REQUIRED ((DWORD)0x00000001)
5301 #define ES_DISPLAY_REQUIRED ((DWORD)0x00000002)
5302 #define ES_USER_PRESENT ((DWORD)0x00000004)
5303 #define ES_AWAYMODE_REQUIRED ((DWORD)0x00000040)
5304 #define ES_CONTINUOUS ((DWORD)0x80000000)
5305 
5306   typedef DWORD EXECUTION_STATE, *PEXECUTION_STATE;
5307 
5308   typedef enum {
5309     LT_DONT_CARE,LT_LOWEST_LATENCY
5310   } LATENCY_TIME;
5311 
5312 #define DIAGNOSTIC_REASON_VERSION 0
5313 #define POWER_REQUEST_CONTEXT_VERSION 0
5314 
5315 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
5316 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
5317 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
5318 #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
5319 
5320 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
5321 #define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
5322 
5323   typedef enum _POWER_REQUEST_TYPE {
5324     PowerRequestDisplayRequired,
5325     PowerRequestSystemRequired,
5326     PowerRequestAwayModeRequired,
5327     PowerRequestExecutionRequired
5328   } POWER_REQUEST_TYPE,*PPOWER_REQUEST_TYPE;
5329 
5330 #define PDCAP_D0_SUPPORTED 0x00000001
5331 #define PDCAP_D1_SUPPORTED 0x00000002
5332 #define PDCAP_D2_SUPPORTED 0x00000004
5333 #define PDCAP_D3_SUPPORTED 0x00000008
5334 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
5335 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
5336 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
5337 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
5338 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
5339 
5340     typedef struct CM_Power_Data_s {
5341       DWORD PD_Size;
5342       DEVICE_POWER_STATE PD_MostRecentPowerState;
5343       DWORD PD_Capabilities;
5344       DWORD PD_D1Latency;
5345       DWORD PD_D2Latency;
5346       DWORD PD_D3Latency;
5347       DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
5348       SYSTEM_POWER_STATE PD_DeepestSystemWake;
5349     } CM_POWER_DATA,*PCM_POWER_DATA;
5350 
5351     typedef enum {
5352       SystemPowerPolicyAc,
5353       SystemPowerPolicyDc,
5354       VerifySystemPolicyAc,
5355       VerifySystemPolicyDc,
5356       SystemPowerCapabilities,
5357       SystemBatteryState,
5358       SystemPowerStateHandler,
5359       ProcessorStateHandler,
5360       SystemPowerPolicyCurrent,
5361       AdministratorPowerPolicy,
5362       SystemReserveHiberFile,
5363       ProcessorInformation,
5364       SystemPowerInformation,
5365       ProcessorStateHandler2,
5366       LastWakeTime,
5367       LastSleepTime,
5368       SystemExecutionState,
5369       SystemPowerStateNotifyHandler,
5370       ProcessorPowerPolicyAc,
5371       ProcessorPowerPolicyDc,
5372       VerifyProcessorPowerPolicyAc,
5373       VerifyProcessorPowerPolicyDc,
5374       ProcessorPowerPolicyCurrent,
5375       SystemPowerStateLogging,
5376       SystemPowerLoggingEntry,
5377       SetPowerSettingValue,
5378       NotifyUserPowerSetting,
5379       PowerInformationLevelUnused0,
5380       SystemMonitorHiberBootPowerOff,
5381       SystemVideoState,
5382       TraceApplicationPowerMessage,
5383       TraceApplicationPowerMessageEnd,
5384       ProcessorPerfStates,
5385       ProcessorIdleStates,
5386       ProcessorCap,
5387       SystemWakeSource,
5388       SystemHiberFileInformation,
5389       TraceServicePowerMessage,
5390       ProcessorLoad,
5391       PowerShutdownNotification,
5392       MonitorCapabilities,
5393       SessionPowerInit,
5394       SessionDisplayState,
5395       PowerRequestCreate,
5396       PowerRequestAction,
5397       GetPowerRequestList,
5398       ProcessorInformationEx,
5399       NotifyUserModeLegacyPowerEvent,
5400       GroupPark,
5401       ProcessorIdleDomains,
5402       WakeTimerList,
5403       SystemHiberFileSize,
5404       ProcessorIdleStatesHv,
5405       ProcessorPerfStatesHv,
5406       ProcessorPerfCapHv,
5407       ProcessorSetIdle,
5408       LogicalProcessorIdling,
5409       UserPresence,
5410       PowerSettingNotificationName,
5411       GetPowerSettingValue,
5412       IdleResiliency,
5413       SessionRITState,
5414       SessionConnectNotification,
5415       SessionPowerCleanup,
5416       SessionLockState,
5417       SystemHiberbootState,
5418       PlatformInformation,
5419       PdcInvocation,
5420       MonitorInvocation,
5421       FirmwareTableInformationRegistered,
5422       SetShutdownSelectedTime,
5423       SuspendResumeInvocation,
5424       PlmPowerRequestCreate,
5425       ScreenOff,
5426       CsDeviceNotification,
5427       PlatformRole,
5428       LastResumePerformance,
5429       DisplayBurst,
5430       ExitLatencySamplingPercentage,
5431       ApplyLowPowerScenarioSettings,
5432       PowerInformationLevelMaximum
5433     } POWER_INFORMATION_LEVEL;
5434 
5435     typedef enum {
5436       UserNotPresent = 0,
5437       UserPresent = 1,
5438       UserUnknown = 0xff
5439     } POWER_USER_PRESENCE_TYPE,*PPOWER_USER_PRESENCE_TYPE;
5440 
5441     typedef struct _POWER_USER_PRESENCE {
5442       POWER_USER_PRESENCE_TYPE UserPresence;
5443     } POWER_USER_PRESENCE,*PPOWER_USER_PRESENCE;
5444 
5445     typedef struct _POWER_SESSION_CONNECT {
5446       BOOLEAN Connected;
5447       BOOLEAN Console;
5448     } POWER_SESSION_CONNECT,*PPOWER_SESSION_CONNECT;
5449 
5450     typedef struct _POWER_SESSION_TIMEOUTS {
5451       DWORD InputTimeout;
5452       DWORD DisplayTimeout;
5453     } POWER_SESSION_TIMEOUTS,*PPOWER_SESSION_TIMEOUTS;
5454 
5455     typedef struct _POWER_SESSION_RIT_STATE {
5456       BOOLEAN Active;
5457       DWORD LastInputTime;
5458     } POWER_SESSION_RIT_STATE,*PPOWER_SESSION_RIT_STATE;
5459 
5460     typedef struct _POWER_SESSION_WINLOGON {
5461       DWORD SessionId;
5462       BOOLEAN Console;
5463       BOOLEAN Locked;
5464     } POWER_SESSION_WINLOGON,*PPOWER_SESSION_WINLOGON;
5465 
5466     typedef struct _POWER_IDLE_RESILIENCY {
5467       DWORD CoalescingTimeout;
5468       DWORD IdleResiliencyPeriod;
5469     } POWER_IDLE_RESILIENCY,*PPOWER_IDLE_RESILIENCY;
5470 
5471     typedef enum {
5472       MonitorRequestReasonUnknown,
5473       MonitorRequestReasonPowerButton,
5474       MonitorRequestReasonRemoteConnection,
5475       MonitorRequestReasonScMonitorpower,
5476       MonitorRequestReasonUserInput,
5477       MonitorRequestReasonAcDcDisplayBurst,
5478       MonitorRequestReasonUserDisplayBurst,
5479       MonitorRequestReasonPoSetSystemState,
5480       MonitorRequestReasonSetThreadExecutionState,
5481       MonitorRequestReasonFullWake,
5482       MonitorRequestReasonSessionUnlock,
5483       MonitorRequestReasonScreenOffRequest,
5484       MonitorRequestReasonIdleTimeout,
5485       MonitorRequestReasonPolicyChange,
5486       MonitorRequestReasonMax
5487     } POWER_MONITOR_REQUEST_REASON;
5488 
5489     typedef struct _POWER_MONITOR_INVOCATION {
5490       BOOLEAN On;
5491       BOOLEAN Console;
5492       POWER_MONITOR_REQUEST_REASON RequestReason;
5493     } POWER_MONITOR_INVOCATION,*PPOWER_MONITOR_INVOCATION;
5494 
5495     typedef struct _RESUME_PERFORMANCE {
5496       DWORD PostTimeMs;
5497       ULONGLONG TotalResumeTimeMs;
5498       ULONGLONG ResumeCompleteTimestamp;
5499     } RESUME_PERFORMANCE,*PRESUME_PERFORMANCE;
5500 
5501     typedef enum {
5502       PoAc,
5503       PoDc,
5504       PoHot,
5505       PoConditionMaximum
5506     } SYSTEM_POWER_CONDITION;
5507 
5508     typedef struct {
5509       DWORD Version;
5510       GUID Guid;
5511       SYSTEM_POWER_CONDITION PowerCondition;
5512       DWORD DataLength;
5513       BYTE Data[ANYSIZE_ARRAY];
5514     } SET_POWER_SETTING_VALUE,*PSET_POWER_SETTING_VALUE;
5515 
5516 #define POWER_SETTING_VALUE_VERSION (0x1)
5517 
5518     typedef struct {
5519       GUID Guid;
5520     } NOTIFY_USER_POWER_SETTING,*PNOTIFY_USER_POWER_SETTING;
5521 
5522     typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
5523       LARGE_INTEGER ActivationTime;
5524       DWORD Flags;
5525       DWORD ButtonInstanceID;
5526     } APPLICATIONLAUNCH_SETTING_VALUE,*PAPPLICATIONLAUNCH_SETTING_VALUE;
5527 
5528     typedef enum _POWER_PLATFORM_ROLE {
5529       PlatformRoleUnspecified = 0,
5530       PlatformRoleDesktop,
5531       PlatformRoleMobile,
5532       PlatformRoleWorkstation,
5533       PlatformRoleEnterpriseServer,
5534       PlatformRoleSOHOServer,
5535       PlatformRoleAppliancePC,
5536       PlatformRolePerformanceServer,
5537       PlatformRoleSlate,
5538       PlatformRoleMaximum
5539     } POWER_PLATFORM_ROLE,*PPOWER_PLATFORM_ROLE;
5540 
5541     typedef struct _POWER_PLATFORM_INFORMATION {
5542       BOOLEAN AoAc;
5543     } POWER_PLATFORM_INFORMATION,*PPOWER_PLATFORM_INFORMATION;
5544 
5545 #define POWER_PLATFORM_ROLE_V1 (0x00000001)
5546 #define POWER_PLATFORM_ROLE_V1_MAX (PlatformRolePerformanceServer + 1)
5547 
5548 #define POWER_PLATFORM_ROLE_V2 (0x00000002)
5549 #define POWER_PLATFORM_ROLE_V2_MAX (PlatformRoleSlate + 1)
5550 
5551 #if _WIN32_WINNT >= 0x0602
5552 #define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V2
5553 #define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V2_MAX
5554 #else
5555 #define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V1
5556 #define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V1_MAX
5557 #endif
5558 
5559     typedef struct {
5560       DWORD Granularity;
5561       DWORD Capacity;
5562     } BATTERY_REPORTING_SCALE,*PBATTERY_REPORTING_SCALE;
5563 
5564     typedef struct {
5565       DWORD Frequency;
5566       DWORD Flags;
5567       DWORD PercentFrequency;
5568     } PPM_WMI_LEGACY_PERFSTATE,*PPPM_WMI_LEGACY_PERFSTATE;
5569 
5570     typedef struct {
5571       DWORD Latency;
5572       DWORD Power;
5573       DWORD TimeCheck;
5574       BYTE PromotePercent;
5575       BYTE DemotePercent;
5576       BYTE StateType;
5577       BYTE Reserved;
5578       DWORD StateFlags;
5579       DWORD Context;
5580       DWORD IdleHandler;
5581       DWORD Reserved1;
5582     } PPM_WMI_IDLE_STATE,*PPPM_WMI_IDLE_STATE;
5583 
5584     typedef struct {
5585       DWORD Type;
5586       DWORD Count;
5587       DWORD TargetState;
5588       DWORD OldState;
5589       DWORD64 TargetProcessors;
5590       PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
5591     } PPM_WMI_IDLE_STATES,*PPPM_WMI_IDLE_STATES;
5592 
5593     typedef struct {
5594       DWORD Type;
5595       DWORD Count;
5596       DWORD TargetState;
5597       DWORD OldState;
5598       PVOID TargetProcessors;
5599       PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
5600     } PPM_WMI_IDLE_STATES_EX,*PPPM_WMI_IDLE_STATES_EX;
5601 
5602     typedef struct {
5603       DWORD Frequency;
5604       DWORD Power;
5605       BYTE PercentFrequency;
5606       BYTE IncreaseLevel;
5607       BYTE DecreaseLevel;
5608       BYTE Type;
5609       DWORD IncreaseTime;
5610       DWORD DecreaseTime;
5611       DWORD64 Control;
5612       DWORD64 Status;
5613       DWORD HitCount;
5614       DWORD Reserved1;
5615       DWORD64 Reserved2;
5616       DWORD64 Reserved3;
5617     } PPM_WMI_PERF_STATE,*PPPM_WMI_PERF_STATE;
5618 
5619     typedef struct {
5620       DWORD Count;
5621       DWORD MaxFrequency;
5622       DWORD CurrentState;
5623       DWORD MaxPerfState;
5624       DWORD MinPerfState;
5625       DWORD LowestPerfState;
5626       DWORD ThermalConstraint;
5627       BYTE BusyAdjThreshold;
5628       BYTE PolicyType;
5629       BYTE Type;
5630       BYTE Reserved;
5631       DWORD TimerInterval;
5632       DWORD64 TargetProcessors;
5633       DWORD PStateHandler;
5634       DWORD PStateContext;
5635       DWORD TStateHandler;
5636       DWORD TStateContext;
5637       DWORD FeedbackHandler;
5638       DWORD Reserved1;
5639       DWORD64 Reserved2;
5640       PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
5641     } PPM_WMI_PERF_STATES,*PPPM_WMI_PERF_STATES;
5642 
5643     typedef struct {
5644       DWORD Count;
5645       DWORD MaxFrequency;
5646       DWORD CurrentState;
5647       DWORD MaxPerfState;
5648       DWORD MinPerfState;
5649       DWORD LowestPerfState;
5650       DWORD ThermalConstraint;
5651       BYTE BusyAdjThreshold;
5652       BYTE PolicyType;
5653       BYTE Type;
5654       BYTE Reserved;
5655       DWORD TimerInterval;
5656       PVOID TargetProcessors;
5657       DWORD PStateHandler;
5658       DWORD PStateContext;
5659       DWORD TStateHandler;
5660       DWORD TStateContext;
5661       DWORD FeedbackHandler;
5662       DWORD Reserved1;
5663       DWORD64 Reserved2;
5664       PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
5665     } PPM_WMI_PERF_STATES_EX,*PPPM_WMI_PERF_STATES_EX;
5666 
5667 #define PROC_IDLE_BUCKET_COUNT 6
5668 #define PROC_IDLE_BUCKET_COUNT_EX 16
5669 
5670     typedef struct {
5671       DWORD IdleTransitions;
5672       DWORD FailedTransitions;
5673       DWORD InvalidBucketIndex;
5674       DWORD64 TotalTime;
5675       DWORD IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT];
5676     } PPM_IDLE_STATE_ACCOUNTING,*PPPM_IDLE_STATE_ACCOUNTING;
5677 
5678     typedef struct {
5679       DWORD StateCount;
5680       DWORD TotalTransitions;
5681       DWORD ResetCount;
5682       DWORD64 StartTime;
5683       PPM_IDLE_STATE_ACCOUNTING State[ANYSIZE_ARRAY];
5684     } PPM_IDLE_ACCOUNTING,*PPPM_IDLE_ACCOUNTING;
5685 
5686     typedef struct {
5687       DWORD64 TotalTimeUs;
5688       DWORD MinTimeUs;
5689       DWORD MaxTimeUs;
5690       DWORD Count;
5691     } PPM_IDLE_STATE_BUCKET_EX,*PPPM_IDLE_STATE_BUCKET_EX;
5692 
5693     typedef struct {
5694       DWORD64 TotalTime;
5695       DWORD IdleTransitions;
5696       DWORD FailedTransitions;
5697       DWORD InvalidBucketIndex;
5698       DWORD MinTimeUs;
5699       DWORD MaxTimeUs;
5700       DWORD CancelledTransitions;
5701       PPM_IDLE_STATE_BUCKET_EX IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT_EX];
5702     } PPM_IDLE_STATE_ACCOUNTING_EX,*PPPM_IDLE_STATE_ACCOUNTING_EX;
5703 
5704     typedef struct {
5705       DWORD StateCount;
5706       DWORD TotalTransitions;
5707       DWORD ResetCount;
5708       DWORD AbortCount;
5709       DWORD64 StartTime;
5710       PPM_IDLE_STATE_ACCOUNTING_EX State[ANYSIZE_ARRAY];
5711     } PPM_IDLE_ACCOUNTING_EX,*PPPM_IDLE_ACCOUNTING_EX;
5712 
5713 #define ACPI_PPM_SOFTWARE_ALL 0xfc
5714 #define ACPI_PPM_SOFTWARE_ANY 0xfd
5715 #define ACPI_PPM_HARDWARE_ALL 0xfe
5716 
5717 #define MS_PPM_SOFTWARE_ALL 0x1
5718 
5719 #define PPM_FIRMWARE_ACPI1C2 0x1
5720 #define PPM_FIRMWARE_ACPI1C3 0x2
5721 #define PPM_FIRMWARE_ACPI1TSTATES 0x4
5722 #define PPM_FIRMWARE_CST 0x8
5723 #define PPM_FIRMWARE_CSD 0x10
5724 #define PPM_FIRMWARE_PCT 0x20
5725 #define PPM_FIRMWARE_PSS 0x40
5726 #define PPM_FIRMWARE_XPSS 0x80
5727 #define PPM_FIRMWARE_PPC 0x100
5728 #define PPM_FIRMWARE_PSD 0x200
5729 #define PPM_FIRMWARE_PTC 0x400
5730 #define PPM_FIRMWARE_TSS 0x800
5731 #define PPM_FIRMWARE_TPC 0x1000
5732 #define PPM_FIRMWARE_TSD 0x2000
5733 #define PPM_FIRMWARE_PCCH 0x4000
5734 #define PPM_FIRMWARE_PCCP 0x8000
5735 #define PPM_FIRMWARE_OSC 0x10000
5736 #define PPM_FIRMWARE_PDC 0x20000
5737 #define PPM_FIRMWARE_CPC 0x40000
5738 
5739 #define PPM_PERFORMANCE_IMPLEMENTATION_NONE 0
5740 #define PPM_PERFORMANCE_IMPLEMENTATION_PSTATES 1
5741 #define PPM_PERFORMANCE_IMPLEMENTATION_PCCV1 2
5742 #define PPM_PERFORMANCE_IMPLEMENTATION_CPPC 3
5743 #define PPM_PERFORMANCE_IMPLEMENTATION_PEP 4
5744 
5745 #define PPM_IDLE_IMPLEMENTATION_NONE 0x0
5746 #define PPM_IDLE_IMPLEMENTATION_CSTATES 0x1
5747 #define PPM_IDLE_IMPLEMENTATION_PEP 0x2
5748 
5749     typedef struct {
5750       DWORD State;
5751       DWORD Status;
5752       DWORD Latency;
5753       DWORD Speed;
5754       DWORD Processor;
5755     } PPM_PERFSTATE_EVENT,*PPPM_PERFSTATE_EVENT;
5756 
5757     typedef struct {
5758       DWORD State;
5759       DWORD Latency;
5760       DWORD Speed;
5761       DWORD64 Processors;
5762     } PPM_PERFSTATE_DOMAIN_EVENT,*PPPM_PERFSTATE_DOMAIN_EVENT;
5763 
5764     typedef struct {
5765       DWORD NewState;
5766       DWORD OldState;
5767       DWORD64 Processors;
5768     } PPM_IDLESTATE_EVENT,*PPPM_IDLESTATE_EVENT;
5769 
5770     typedef struct {
5771       DWORD ThermalConstraint;
5772       DWORD64 Processors;
5773     } PPM_THERMALCHANGE_EVENT,*PPPM_THERMALCHANGE_EVENT;
5774     typedef struct {
5775       BYTE Mode;
5776       DWORD64 Processors;
5777     } PPM_THERMAL_POLICY_EVENT,*PPPM_THERMAL_POLICY_EVENT;
5778 
5779     DEFINE_GUID (PPM_PERFSTATE_CHANGE_GUID, 0xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb);
5780     DEFINE_GUID (PPM_PERFSTATE_DOMAIN_CHANGE_GUID, 0x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1);
5781     DEFINE_GUID (PPM_IDLESTATE_CHANGE_GUID, 0x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c);
5782     DEFINE_GUID (PPM_PERFSTATES_DATA_GUID, 0x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26);
5783     DEFINE_GUID (PPM_IDLESTATES_DATA_GUID, 0xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7);
5784     DEFINE_GUID (PPM_IDLE_ACCOUNTING_GUID, 0xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd);
5785     DEFINE_GUID (PPM_IDLE_ACCOUNTING_EX_GUID, 0xd67abd39, 0x81f8, 0x4a5e, 0x81, 0x52, 0x72, 0xe3, 0x1e, 0xc9, 0x12, 0xee);
5786     DEFINE_GUID (PPM_THERMALCONSTRAINT_GUID, 0xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88);
5787     DEFINE_GUID (PPM_PERFMON_PERFSTATE_GUID, 0x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e);
5788     DEFINE_GUID (PPM_THERMAL_POLICY_CHANGE_GUID, 0x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d);
5789 
5790     typedef struct {
5791       POWER_ACTION Action;
5792       DWORD Flags;
5793       DWORD EventCode;
5794     } POWER_ACTION_POLICY,*PPOWER_ACTION_POLICY;
5795 
5796 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
5797 #define POWER_ACTION_UI_ALLOWED 0x00000002
5798 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
5799 #define POWER_ACTION_HIBERBOOT 0x00000008
5800 #define POWER_ACTION_PSEUDO_TRANSITION 0x08000000
5801 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
5802 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
5803 #define POWER_ACTION_DISABLE_WAKES 0x40000000
5804 #define POWER_ACTION_CRITICAL 0x80000000
5805 
5806 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
5807 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
5808 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
5809 #define POWER_USER_NOTIFY_BUTTON 0x00000008
5810 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
5811 #define POWER_USER_NOTIFY_FORCED_SHUTDOWN 0x00000020
5812 #define POWER_FORCE_TRIGGER_RESET 0x80000000
5813 
5814 #define BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK 0x00000007
5815 #define BATTERY_DISCHARGE_FLAGS_ENABLE 0x80000000
5816 
5817 #define DISCHARGE_POLICY_CRITICAL 0
5818 #define DISCHARGE_POLICY_LOW 1
5819 
5820 #define NUM_DISCHARGE_POLICIES 4
5821 
5822 #define PROCESSOR_IDLESTATE_POLICY_COUNT 0x3
5823 
5824     typedef struct {
5825       DWORD TimeCheck;
5826       BYTE DemotePercent;
5827       BYTE PromotePercent;
5828       BYTE Spare[2];
5829     } PROCESSOR_IDLESTATE_INFO,*PPROCESSOR_IDLESTATE_INFO;
5830 
5831     typedef struct {
5832       BOOLEAN Enable;
5833       BYTE Spare[3];
5834       DWORD BatteryLevel;
5835       POWER_ACTION_POLICY PowerPolicy;
5836       SYSTEM_POWER_STATE MinSystemState;
5837     } SYSTEM_POWER_LEVEL,*PSYSTEM_POWER_LEVEL;
5838 
5839     typedef struct _SYSTEM_POWER_POLICY {
5840       DWORD Revision;
5841       POWER_ACTION_POLICY PowerButton;
5842       POWER_ACTION_POLICY SleepButton;
5843       POWER_ACTION_POLICY LidClose;
5844       SYSTEM_POWER_STATE LidOpenWake;
5845       DWORD Reserved;
5846       POWER_ACTION_POLICY Idle;
5847       DWORD IdleTimeout;
5848       BYTE IdleSensitivity;
5849       BYTE DynamicThrottle;
5850       BYTE Spare2[2];
5851       SYSTEM_POWER_STATE MinSleep;
5852       SYSTEM_POWER_STATE MaxSleep;
5853       SYSTEM_POWER_STATE ReducedLatencySleep;
5854       DWORD WinLogonFlags;
5855       DWORD Spare3;
5856       DWORD DozeS4Timeout;
5857       DWORD BroadcastCapacityResolution;
5858       SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
5859       DWORD VideoTimeout;
5860       BOOLEAN VideoDimDisplay;
5861       DWORD VideoReserved[3];
5862       DWORD SpindownTimeout;
5863       BOOLEAN OptimizeForPower;
5864       BYTE FanThrottleTolerance;
5865       BYTE ForcedThrottle;
5866       BYTE MinThrottle;
5867       POWER_ACTION_POLICY OverThrottled;
5868     } SYSTEM_POWER_POLICY,*PSYSTEM_POWER_POLICY;
5869 
5870 #define PO_THROTTLE_NONE 0
5871 #define PO_THROTTLE_CONSTANT 1
5872 #define PO_THROTTLE_DEGRADE 2
5873 #define PO_THROTTLE_ADAPTIVE 3
5874 #define PO_THROTTLE_MAXIMUM 4
5875 
5876     typedef struct {
5877       WORD Revision;
5878       union {
5879 	WORD AsWORD;
5880 	__C89_NAMELESS struct {
5881 	  WORD AllowScaling : 1;
5882 	  WORD Disabled : 1;
5883 	  WORD Reserved : 14;
5884 	} DUMMYSTRUCTNAME;
5885       } Flags;
5886       DWORD PolicyCount;
5887       PROCESSOR_IDLESTATE_INFO Policy[PROCESSOR_IDLESTATE_POLICY_COUNT];
5888     } PROCESSOR_IDLESTATE_POLICY,*PPROCESSOR_IDLESTATE_POLICY;
5889 
5890     typedef struct _PROCESSOR_POWER_POLICY_INFO {
5891       DWORD TimeCheck;
5892       DWORD DemoteLimit;
5893       DWORD PromoteLimit;
5894       BYTE DemotePercent;
5895       BYTE PromotePercent;
5896       BYTE Spare[2];
5897       DWORD AllowDemotion:1;
5898       DWORD AllowPromotion:1;
5899       DWORD Reserved:30;
5900     } PROCESSOR_POWER_POLICY_INFO,*PPROCESSOR_POWER_POLICY_INFO;
5901 
5902     typedef struct _PROCESSOR_POWER_POLICY {
5903       DWORD Revision;
5904       BYTE DynamicThrottle;
5905       BYTE Spare[3];
5906       DWORD DisableCStates:1;
5907       DWORD Reserved:31;
5908       DWORD PolicyCount;
5909       PROCESSOR_POWER_POLICY_INFO Policy[3];
5910     } PROCESSOR_POWER_POLICY,*PPROCESSOR_POWER_POLICY;
5911 
5912     typedef struct {
5913       DWORD Revision;
5914       BYTE MaxThrottle;
5915       BYTE MinThrottle;
5916       BYTE BusyAdjThreshold;
5917       __C89_NAMELESS union {
5918 	BYTE Spare;
5919 	union {
5920 	  BYTE AsBYTE;
5921 	  __C89_NAMELESS struct {
5922 	    BYTE NoDomainAccounting : 1;
5923 	    BYTE IncreasePolicy: 2;
5924 	    BYTE DecreasePolicy: 2;
5925 	    BYTE Reserved : 3;
5926 	  } DUMMYSTRUCTNAME;
5927 	} Flags;
5928       } DUMMYUNIONNAME;
5929       DWORD TimeCheck;
5930       DWORD IncreaseTime;
5931       DWORD DecreaseTime;
5932       DWORD IncreasePercent;
5933       DWORD DecreasePercent;
5934     } PROCESSOR_PERFSTATE_POLICY,*PPROCESSOR_PERFSTATE_POLICY;
5935 
5936     typedef struct _ADMINISTRATOR_POWER_POLICY {
5937       SYSTEM_POWER_STATE MinSleep;
5938       SYSTEM_POWER_STATE MaxSleep;
5939       DWORD MinVideoTimeout;
5940       DWORD MaxVideoTimeout;
5941       DWORD MinSpindownTimeout;
5942       DWORD MaxSpindownTimeout;
5943     } ADMINISTRATOR_POWER_POLICY,*PADMINISTRATOR_POWER_POLICY;
5944 
5945     typedef struct {
5946       BOOLEAN PowerButtonPresent;
5947       BOOLEAN SleepButtonPresent;
5948       BOOLEAN LidPresent;
5949       BOOLEAN SystemS1;
5950       BOOLEAN SystemS2;
5951       BOOLEAN SystemS3;
5952       BOOLEAN SystemS4;
5953       BOOLEAN SystemS5;
5954       BOOLEAN HiberFilePresent;
5955       BOOLEAN FullWake;
5956       BOOLEAN VideoDimPresent;
5957       BOOLEAN ApmPresent;
5958       BOOLEAN UpsPresent;
5959       BOOLEAN ThermalControl;
5960       BOOLEAN ProcessorThrottle;
5961       BYTE ProcessorMinThrottle;
5962       BYTE ProcessorMaxThrottle;
5963       BOOLEAN FastSystemS4;
5964       BYTE spare2[3];
5965       BOOLEAN DiskSpinDown;
5966       BYTE spare3[8];
5967       BOOLEAN SystemBatteriesPresent;
5968       BOOLEAN BatteriesAreShortTerm;
5969       BATTERY_REPORTING_SCALE BatteryScale[3];
5970       SYSTEM_POWER_STATE AcOnLineWake;
5971       SYSTEM_POWER_STATE SoftLidWake;
5972       SYSTEM_POWER_STATE RtcWake;
5973       SYSTEM_POWER_STATE MinDeviceWakeState;
5974       SYSTEM_POWER_STATE DefaultLowLatencyWake;
5975     } SYSTEM_POWER_CAPABILITIES,*PSYSTEM_POWER_CAPABILITIES;
5976 
5977     typedef struct {
5978       BOOLEAN AcOnLine;
5979       BOOLEAN BatteryPresent;
5980       BOOLEAN Charging;
5981       BOOLEAN Discharging;
5982       BOOLEAN Spare1[4];
5983       DWORD MaxCapacity;
5984       DWORD RemainingCapacity;
5985       DWORD Rate;
5986       DWORD EstimatedTime;
5987       DWORD DefaultAlert1;
5988       DWORD DefaultAlert2;
5989     } SYSTEM_BATTERY_STATE,*PSYSTEM_BATTERY_STATE;
5990 
5991 #include "pshpack4.h"
5992 
5993 #define IMAGE_DOS_SIGNATURE 0x5A4D
5994 #define IMAGE_OS2_SIGNATURE 0x454E
5995 #define IMAGE_OS2_SIGNATURE_LE 0x454C
5996 #define IMAGE_VXD_SIGNATURE 0x454C
5997 #define IMAGE_NT_SIGNATURE 0x00004550
5998 
5999 #include "pshpack2.h"
6000 
6001     typedef struct _IMAGE_DOS_HEADER {
6002       WORD e_magic;
6003       WORD e_cblp;
6004       WORD e_cp;
6005       WORD e_crlc;
6006       WORD e_cparhdr;
6007       WORD e_minalloc;
6008       WORD e_maxalloc;
6009       WORD e_ss;
6010       WORD e_sp;
6011       WORD e_csum;
6012       WORD e_ip;
6013       WORD e_cs;
6014       WORD e_lfarlc;
6015       WORD e_ovno;
6016       WORD e_res[4];
6017       WORD e_oemid;
6018       WORD e_oeminfo;
6019       WORD e_res2[10];
6020       LONG e_lfanew;
6021     } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
6022 
6023     typedef struct _IMAGE_OS2_HEADER {
6024       WORD ne_magic;
6025       CHAR ne_ver;
6026       CHAR ne_rev;
6027       WORD ne_enttab;
6028       WORD ne_cbenttab;
6029       LONG ne_crc;
6030       WORD ne_flags;
6031       WORD ne_autodata;
6032       WORD ne_heap;
6033       WORD ne_stack;
6034       LONG ne_csip;
6035       LONG ne_sssp;
6036       WORD ne_cseg;
6037       WORD ne_cmod;
6038       WORD ne_cbnrestab;
6039       WORD ne_segtab;
6040       WORD ne_rsrctab;
6041       WORD ne_restab;
6042       WORD ne_modtab;
6043       WORD ne_imptab;
6044       LONG ne_nrestab;
6045       WORD ne_cmovent;
6046       WORD ne_align;
6047       WORD ne_cres;
6048       BYTE ne_exetyp;
6049       BYTE ne_flagsothers;
6050       WORD ne_pretthunks;
6051       WORD ne_psegrefbytes;
6052       WORD ne_swaparea;
6053       WORD ne_expver;
6054     } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
6055 
6056     typedef struct _IMAGE_VXD_HEADER {
6057       WORD e32_magic;
6058       BYTE e32_border;
6059       BYTE e32_worder;
6060       DWORD e32_level;
6061       WORD e32_cpu;
6062       WORD e32_os;
6063       DWORD e32_ver;
6064       DWORD e32_mflags;
6065       DWORD e32_mpages;
6066       DWORD e32_startobj;
6067       DWORD e32_eip;
6068       DWORD e32_stackobj;
6069       DWORD e32_esp;
6070       DWORD e32_pagesize;
6071       DWORD e32_lastpagesize;
6072       DWORD e32_fixupsize;
6073       DWORD e32_fixupsum;
6074       DWORD e32_ldrsize;
6075       DWORD e32_ldrsum;
6076       DWORD e32_objtab;
6077       DWORD e32_objcnt;
6078       DWORD e32_objmap;
6079       DWORD e32_itermap;
6080       DWORD e32_rsrctab;
6081       DWORD e32_rsrccnt;
6082       DWORD e32_restab;
6083       DWORD e32_enttab;
6084       DWORD e32_dirtab;
6085       DWORD e32_dircnt;
6086       DWORD e32_fpagetab;
6087       DWORD e32_frectab;
6088       DWORD e32_impmod;
6089       DWORD e32_impmodcnt;
6090       DWORD e32_impproc;
6091       DWORD e32_pagesum;
6092       DWORD e32_datapage;
6093       DWORD e32_preload;
6094       DWORD e32_nrestab;
6095       DWORD e32_cbnrestab;
6096       DWORD e32_nressum;
6097       DWORD e32_autodata;
6098       DWORD e32_debuginfo;
6099       DWORD e32_debuglen;
6100       DWORD e32_instpreload;
6101       DWORD e32_instdemand;
6102       DWORD e32_heapsize;
6103       BYTE e32_res3[12];
6104       DWORD e32_winresoff;
6105       DWORD e32_winreslen;
6106       WORD e32_devid;
6107       WORD e32_ddkver;
6108     } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
6109 
6110 #include "poppack.h"
6111 
6112     typedef struct _IMAGE_FILE_HEADER {
6113       WORD Machine;
6114       WORD NumberOfSections;
6115       DWORD TimeDateStamp;
6116       DWORD PointerToSymbolTable;
6117       DWORD NumberOfSymbols;
6118       WORD SizeOfOptionalHeader;
6119       WORD Characteristics;
6120     } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
6121 
6122 #define IMAGE_SIZEOF_FILE_HEADER 20
6123 
6124 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001
6125 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
6126 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
6127 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
6128 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
6129 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
6130 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
6131 #define IMAGE_FILE_32BIT_MACHINE 0x0100
6132 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
6133 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
6134 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
6135 #define IMAGE_FILE_SYSTEM 0x1000
6136 #define IMAGE_FILE_DLL 0x2000
6137 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
6138 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
6139 
6140 #define IMAGE_FILE_MACHINE_UNKNOWN 0
6141 #define IMAGE_FILE_MACHINE_I386 0x014c
6142 #define IMAGE_FILE_MACHINE_R3000 0x0162
6143 #define IMAGE_FILE_MACHINE_R4000 0x0166
6144 #define IMAGE_FILE_MACHINE_R10000 0x0168
6145 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
6146 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
6147 #define IMAGE_FILE_MACHINE_SH3 0x01a2
6148 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
6149 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
6150 #define IMAGE_FILE_MACHINE_SH4 0x01a6
6151 #define IMAGE_FILE_MACHINE_SH5 0x01a8
6152 #define IMAGE_FILE_MACHINE_ARM 0x01c0
6153 #define IMAGE_FILE_MACHINE_ARMV7 0x01c4
6154 #define IMAGE_FILE_MACHINE_ARMNT 0x01c4
6155 #define IMAGE_FILE_MACHINE_ARM64 0xaa64
6156 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
6157 #define IMAGE_FILE_MACHINE_AM33 0x01d3
6158 #define IMAGE_FILE_MACHINE_POWERPC 0x01F0
6159 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
6160 #define IMAGE_FILE_MACHINE_IA64 0x0200
6161 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
6162 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
6163 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
6164 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
6165 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
6166 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
6167 #define IMAGE_FILE_MACHINE_CEF 0x0CEF
6168 #define IMAGE_FILE_MACHINE_EBC 0x0EBC
6169 #define IMAGE_FILE_MACHINE_AMD64 0x8664
6170 #define IMAGE_FILE_MACHINE_M32R 0x9041
6171 #define IMAGE_FILE_MACHINE_CEE 0xc0ee
6172 
6173     typedef struct _IMAGE_DATA_DIRECTORY {
6174       DWORD VirtualAddress;
6175       DWORD Size;
6176     } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
6177 
6178 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
6179 
6180     typedef struct _IMAGE_OPTIONAL_HEADER {
6181 
6182       WORD Magic;
6183       BYTE MajorLinkerVersion;
6184       BYTE MinorLinkerVersion;
6185       DWORD SizeOfCode;
6186       DWORD SizeOfInitializedData;
6187       DWORD SizeOfUninitializedData;
6188       DWORD AddressOfEntryPoint;
6189       DWORD BaseOfCode;
6190       DWORD BaseOfData;
6191       DWORD ImageBase;
6192       DWORD SectionAlignment;
6193       DWORD FileAlignment;
6194       WORD MajorOperatingSystemVersion;
6195       WORD MinorOperatingSystemVersion;
6196       WORD MajorImageVersion;
6197       WORD MinorImageVersion;
6198       WORD MajorSubsystemVersion;
6199       WORD MinorSubsystemVersion;
6200       DWORD Win32VersionValue;
6201       DWORD SizeOfImage;
6202       DWORD SizeOfHeaders;
6203       DWORD CheckSum;
6204       WORD Subsystem;
6205       WORD DllCharacteristics;
6206       DWORD SizeOfStackReserve;
6207       DWORD SizeOfStackCommit;
6208       DWORD SizeOfHeapReserve;
6209       DWORD SizeOfHeapCommit;
6210       DWORD LoaderFlags;
6211       DWORD NumberOfRvaAndSizes;
6212       IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
6213     } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
6214 
6215     typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
6216       WORD Magic;
6217       BYTE MajorLinkerVersion;
6218       BYTE MinorLinkerVersion;
6219       DWORD SizeOfCode;
6220       DWORD SizeOfInitializedData;
6221       DWORD SizeOfUninitializedData;
6222       DWORD AddressOfEntryPoint;
6223       DWORD BaseOfCode;
6224       DWORD BaseOfData;
6225       DWORD BaseOfBss;
6226       DWORD GprMask;
6227       DWORD CprMask[4];
6228       DWORD GpValue;
6229     } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
6230 
6231     typedef struct _IMAGE_OPTIONAL_HEADER64 {
6232       WORD Magic;
6233       BYTE MajorLinkerVersion;
6234       BYTE MinorLinkerVersion;
6235       DWORD SizeOfCode;
6236       DWORD SizeOfInitializedData;
6237       DWORD SizeOfUninitializedData;
6238       DWORD AddressOfEntryPoint;
6239       DWORD BaseOfCode;
6240       ULONGLONG ImageBase;
6241       DWORD SectionAlignment;
6242       DWORD FileAlignment;
6243       WORD MajorOperatingSystemVersion;
6244       WORD MinorOperatingSystemVersion;
6245       WORD MajorImageVersion;
6246       WORD MinorImageVersion;
6247       WORD MajorSubsystemVersion;
6248       WORD MinorSubsystemVersion;
6249       DWORD Win32VersionValue;
6250       DWORD SizeOfImage;
6251       DWORD SizeOfHeaders;
6252       DWORD CheckSum;
6253       WORD Subsystem;
6254       WORD DllCharacteristics;
6255       ULONGLONG SizeOfStackReserve;
6256       ULONGLONG SizeOfStackCommit;
6257       ULONGLONG SizeOfHeapReserve;
6258       ULONGLONG SizeOfHeapCommit;
6259       DWORD LoaderFlags;
6260       DWORD NumberOfRvaAndSizes;
6261       IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
6262     } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
6263 
6264 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
6265 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
6266 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
6267 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
6268 
6269 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
6270 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
6271 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
6272 
6273 #ifdef _WIN64
6274     typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
6275     typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
6276 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
6277 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
6278 #else  /* _WIN64 */
6279     typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
6280     typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
6281 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
6282 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
6283 #endif /* _WIN64 */
6284 
6285     typedef struct _IMAGE_NT_HEADERS64 {
6286       DWORD Signature;
6287       IMAGE_FILE_HEADER FileHeader;
6288       IMAGE_OPTIONAL_HEADER64 OptionalHeader;
6289     } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
6290 
6291     typedef struct _IMAGE_NT_HEADERS {
6292       DWORD Signature;
6293       IMAGE_FILE_HEADER FileHeader;
6294       IMAGE_OPTIONAL_HEADER32 OptionalHeader;
6295     } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
6296 
6297     typedef struct _IMAGE_ROM_HEADERS {
6298       IMAGE_FILE_HEADER FileHeader;
6299       IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
6300     } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
6301 
6302 #ifdef _WIN64
6303     typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
6304     typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
6305 #else  /* _WIN64 */
6306     typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
6307     typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
6308 #endif /* _WIN64 */
6309 
6310 #define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
6311 
6312 #define IMAGE_SUBSYSTEM_UNKNOWN 0
6313 #define IMAGE_SUBSYSTEM_NATIVE 1
6314 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
6315 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
6316 #define IMAGE_SUBSYSTEM_OS2_CUI 5
6317 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
6318 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8
6319 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
6320 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
6321 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
6322 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
6323 #define IMAGE_SUBSYSTEM_EFI_ROM 13
6324 #define IMAGE_SUBSYSTEM_XBOX 14
6325 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
6326 
6327 #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
6328 #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
6329 #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
6330 #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
6331 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
6332 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
6333 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
6334 #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
6335 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
6336 #define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
6337 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
6338 
6339 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
6340 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
6341 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
6342 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
6343 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
6344 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
6345 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
6346 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
6347 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
6348 #define IMAGE_DIRECTORY_ENTRY_TLS 9
6349 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
6350 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
6351 #define IMAGE_DIRECTORY_ENTRY_IAT 12
6352 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
6353 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
6354 
6355     typedef struct ANON_OBJECT_HEADER {
6356       WORD Sig1;
6357       WORD Sig2;
6358       WORD Version;
6359       WORD Machine;
6360       DWORD TimeDateStamp;
6361       CLSID ClassID;
6362       DWORD SizeOfData;
6363     } ANON_OBJECT_HEADER;
6364 
6365     typedef struct ANON_OBJECT_HEADER_V2 {
6366       WORD Sig1;
6367       WORD Sig2;
6368       WORD Version;
6369       WORD Machine;
6370       DWORD TimeDateStamp;
6371       CLSID ClassID;
6372       DWORD SizeOfData;
6373       DWORD Flags;
6374       DWORD MetaDataSize;
6375       DWORD MetaDataOffset;
6376     } ANON_OBJECT_HEADER_V2;
6377 
6378     typedef struct ANON_OBJECT_HEADER_BIGOBJ {
6379       WORD Sig1;
6380       WORD Sig2;
6381       WORD Version;
6382       WORD Machine;
6383       DWORD TimeDateStamp;
6384       CLSID ClassID;
6385       DWORD SizeOfData;
6386       DWORD Flags;
6387       DWORD MetaDataSize;
6388       DWORD MetaDataOffset;
6389       DWORD NumberOfSections;
6390       DWORD PointerToSymbolTable;
6391       DWORD NumberOfSymbols;
6392     } ANON_OBJECT_HEADER_BIGOBJ;
6393 
6394 #define IMAGE_SIZEOF_SHORT_NAME 8
6395 
6396     typedef struct _IMAGE_SECTION_HEADER {
6397       BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
6398       union {
6399 	DWORD PhysicalAddress;
6400 	DWORD VirtualSize;
6401       } Misc;
6402       DWORD VirtualAddress;
6403       DWORD SizeOfRawData;
6404       DWORD PointerToRawData;
6405       DWORD PointerToRelocations;
6406       DWORD PointerToLinenumbers;
6407       WORD NumberOfRelocations;
6408       WORD NumberOfLinenumbers;
6409       DWORD Characteristics;
6410     } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
6411 
6412 #define IMAGE_SIZEOF_SECTION_HEADER 40
6413 
6414 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008
6415 
6416 #define IMAGE_SCN_CNT_CODE 0x00000020
6417 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
6418 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
6419 #define IMAGE_SCN_LNK_OTHER 0x00000100
6420 #define IMAGE_SCN_LNK_INFO 0x00000200
6421 #define IMAGE_SCN_LNK_REMOVE 0x00000800
6422 #define IMAGE_SCN_LNK_COMDAT 0x00001000
6423 #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
6424 #define IMAGE_SCN_GPREL 0x00008000
6425 #define IMAGE_SCN_MEM_FARDATA 0x00008000
6426 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
6427 #define IMAGE_SCN_MEM_16BIT 0x00020000
6428 #define IMAGE_SCN_MEM_LOCKED 0x00040000
6429 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
6430 
6431 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
6432 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
6433 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
6434 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
6435 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000
6436 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
6437 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
6438 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
6439 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
6440 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
6441 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
6442 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
6443 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
6444 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
6445 
6446 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
6447 
6448 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
6449 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
6450 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
6451 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
6452 #define IMAGE_SCN_MEM_SHARED 0x10000000
6453 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
6454 #define IMAGE_SCN_MEM_READ 0x40000000
6455 #define IMAGE_SCN_MEM_WRITE 0x80000000
6456 
6457 #define IMAGE_SCN_SCALE_INDEX 0x00000001
6458 
6459 #include "pshpack2.h"
6460     typedef struct _IMAGE_SYMBOL {
6461       union {
6462 	BYTE ShortName[8];
6463 	struct {
6464 	  DWORD Short;
6465 	  DWORD Long;
6466 	} Name;
6467 	DWORD LongName[2];
6468       } N;
6469       DWORD Value;
6470       SHORT SectionNumber;
6471       WORD Type;
6472       BYTE StorageClass;
6473       BYTE NumberOfAuxSymbols;
6474     } IMAGE_SYMBOL;
6475     typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
6476 
6477 #define IMAGE_SIZEOF_SYMBOL 18
6478 
6479     typedef struct _IMAGE_SYMBOL_EX {
6480       union {
6481 	BYTE ShortName[8];
6482 	struct {
6483 	  DWORD Short;
6484 	  DWORD Long;
6485 	} Name;
6486 	DWORD LongName[2];
6487       } N;
6488       DWORD Value;
6489       LONG SectionNumber;
6490       WORD Type;
6491       BYTE StorageClass;
6492       BYTE NumberOfAuxSymbols;
6493     } IMAGE_SYMBOL_EX,UNALIGNED *PIMAGE_SYMBOL_EX;
6494 
6495 #define IMAGE_SYM_UNDEFINED (SHORT)0
6496 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
6497 #define IMAGE_SYM_DEBUG (SHORT)-2
6498 #define IMAGE_SYM_SECTION_MAX 0xFEFF
6499 #define IMAGE_SYM_SECTION_MAX_EX MAXLONG
6500 
6501 #define IMAGE_SYM_TYPE_NULL 0x0000
6502 #define IMAGE_SYM_TYPE_VOID 0x0001
6503 #define IMAGE_SYM_TYPE_CHAR 0x0002
6504 #define IMAGE_SYM_TYPE_SHORT 0x0003
6505 #define IMAGE_SYM_TYPE_INT 0x0004
6506 #define IMAGE_SYM_TYPE_LONG 0x0005
6507 #define IMAGE_SYM_TYPE_FLOAT 0x0006
6508 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
6509 #define IMAGE_SYM_TYPE_STRUCT 0x0008
6510 #define IMAGE_SYM_TYPE_UNION 0x0009
6511 #define IMAGE_SYM_TYPE_ENUM 0x000A
6512 #define IMAGE_SYM_TYPE_MOE 0x000B
6513 #define IMAGE_SYM_TYPE_BYTE 0x000C
6514 #define IMAGE_SYM_TYPE_WORD 0x000D
6515 #define IMAGE_SYM_TYPE_UINT 0x000E
6516 #define IMAGE_SYM_TYPE_DWORD 0x000F
6517 #define IMAGE_SYM_TYPE_PCODE 0x8000
6518 
6519 #define IMAGE_SYM_DTYPE_NULL 0
6520 #define IMAGE_SYM_DTYPE_POINTER 1
6521 #define IMAGE_SYM_DTYPE_FUNCTION 2
6522 #define IMAGE_SYM_DTYPE_ARRAY 3
6523 
6524 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE)-1
6525 #define IMAGE_SYM_CLASS_NULL 0x0000
6526 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
6527 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
6528 #define IMAGE_SYM_CLASS_STATIC 0x0003
6529 #define IMAGE_SYM_CLASS_REGISTER 0x0004
6530 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
6531 #define IMAGE_SYM_CLASS_LABEL 0x0006
6532 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
6533 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
6534 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
6535 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
6536 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
6537 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
6538 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
6539 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
6540 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
6541 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
6542 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
6543 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
6544 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
6545 #define IMAGE_SYM_CLASS_BLOCK 0x0064
6546 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
6547 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
6548 #define IMAGE_SYM_CLASS_FILE 0x0067
6549 #define IMAGE_SYM_CLASS_SECTION 0x0068
6550 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
6551 #define IMAGE_SYM_CLASS_CLR_TOKEN 0x006B
6552 
6553 #define N_BTMASK 0x000F
6554 #define N_TMASK 0x0030
6555 #define N_TMASK1 0x00C0
6556 #define N_TMASK2 0x00F0
6557 #define N_BTSHFT 4
6558 #define N_TSHIFT 2
6559 
6560 #define BTYPE(x) ((x) & N_BTMASK)
6561 
6562 #ifndef ISPTR
6563 #define ISPTR(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
6564 #endif
6565 
6566 #ifndef ISFCN
6567 #define ISFCN(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
6568 #endif
6569 
6570 #ifndef ISARY
6571 #define ISARY(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
6572 #endif
6573 
6574 #ifndef ISTAG
6575 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
6576 #endif
6577 
6578 #ifndef INCREF
6579 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
6580 #endif
6581 #ifndef DECREF
6582 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
6583 #endif
6584 
6585 #include <pshpack2.h>
6586     typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
6587       BYTE bAuxType;
6588       BYTE bReserved;
6589       DWORD SymbolTableIndex;
6590       BYTE rgbReserved[12];
6591     } IMAGE_AUX_SYMBOL_TOKEN_DEF,UNALIGNED *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
6592 #include <poppack.h>
6593 
6594     typedef union _IMAGE_AUX_SYMBOL {
6595       struct {
6596 	DWORD TagIndex;
6597 	union {
6598 	  struct {
6599 	    WORD Linenumber;
6600 	    WORD Size;
6601 	  } LnSz;
6602 	  DWORD TotalSize;
6603 	} Misc;
6604 	union {
6605 	  struct {
6606 	    DWORD PointerToLinenumber;
6607 	    DWORD PointerToNextFunction;
6608 	  } Function;
6609 	  struct {
6610 	    WORD Dimension[4];
6611 	  } Array;
6612 	} FcnAry;
6613 	WORD TvIndex;
6614       } Sym;
6615       struct {
6616 	BYTE Name[IMAGE_SIZEOF_SYMBOL];
6617       } File;
6618       struct {
6619 	DWORD Length;
6620 	WORD NumberOfRelocations;
6621 	WORD NumberOfLinenumbers;
6622 	DWORD CheckSum;
6623 	SHORT Number;
6624 	BYTE Selection;
6625       } Section;
6626       IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
6627       struct {
6628 	DWORD crc;
6629 	BYTE rgbReserved[14];
6630       } CRC;
6631     } IMAGE_AUX_SYMBOL,UNALIGNED *PIMAGE_AUX_SYMBOL;
6632 
6633     typedef union _IMAGE_AUX_SYMBOL_EX {
6634       struct {
6635 	DWORD WeakDefaultSymIndex;
6636 	DWORD WeakSearchType;
6637 	BYTE rgbReserved[12];
6638       } Sym;
6639       struct {
6640 	BYTE Name[sizeof (IMAGE_SYMBOL_EX)];
6641       } File;
6642       struct {
6643 	DWORD Length;
6644 	WORD NumberOfRelocations;
6645 	WORD NumberOfLinenumbers;
6646 	DWORD CheckSum;
6647 	SHORT Number;
6648 	BYTE Selection;
6649 	BYTE bReserved;
6650 	SHORT HighNumber;
6651 	BYTE rgbReserved[2];
6652       } Section;
6653       __C89_NAMELESS struct {
6654 	IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
6655 	BYTE rgbReserved[2];
6656       };
6657       struct {
6658 	DWORD crc;
6659 	BYTE rgbReserved[16];
6660       } CRC;
6661     } IMAGE_AUX_SYMBOL_EX,UNALIGNED *PIMAGE_AUX_SYMBOL_EX;
6662 
6663 #define IMAGE_SIZEOF_AUX_SYMBOL 18
6664 
6665     typedef enum IMAGE_AUX_SYMBOL_TYPE {
6666       IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1
6667     } IMAGE_AUX_SYMBOL_TYPE;
6668 
6669 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
6670 #define IMAGE_COMDAT_SELECT_ANY 2
6671 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
6672 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
6673 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
6674 #define IMAGE_COMDAT_SELECT_LARGEST 6
6675 #define IMAGE_COMDAT_SELECT_NEWEST 7
6676 
6677 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
6678 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
6679 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
6680 
6681     typedef struct _IMAGE_RELOCATION {
6682       __C89_NAMELESS union {
6683 	DWORD VirtualAddress;
6684 	DWORD RelocCount;
6685       } DUMMYUNIONNAME;
6686       DWORD SymbolTableIndex;
6687       WORD Type;
6688     } IMAGE_RELOCATION;
6689     typedef IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;
6690 
6691 #define IMAGE_SIZEOF_RELOCATION 10
6692 
6693 #define IMAGE_REL_I386_ABSOLUTE 0x0000
6694 #define IMAGE_REL_I386_DIR16 0x0001
6695 #define IMAGE_REL_I386_REL16 0x0002
6696 #define IMAGE_REL_I386_DIR32 0x0006
6697 #define IMAGE_REL_I386_DIR32NB 0x0007
6698 #define IMAGE_REL_I386_SEG12 0x0009
6699 #define IMAGE_REL_I386_SECTION 0x000A
6700 #define IMAGE_REL_I386_SECREL 0x000B
6701 #define IMAGE_REL_I386_TOKEN 0x000C
6702 #define IMAGE_REL_I386_SECREL7 0x000D
6703 #define IMAGE_REL_I386_REL32 0x0014
6704 
6705 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
6706 #define IMAGE_REL_MIPS_REFHALF 0x0001
6707 #define IMAGE_REL_MIPS_REFWORD 0x0002
6708 #define IMAGE_REL_MIPS_JMPADDR 0x0003
6709 #define IMAGE_REL_MIPS_REFHI 0x0004
6710 #define IMAGE_REL_MIPS_REFLO 0x0005
6711 #define IMAGE_REL_MIPS_GPREL 0x0006
6712 #define IMAGE_REL_MIPS_LITERAL 0x0007
6713 #define IMAGE_REL_MIPS_SECTION 0x000A
6714 #define IMAGE_REL_MIPS_SECREL 0x000B
6715 #define IMAGE_REL_MIPS_SECRELLO 0x000C
6716 #define IMAGE_REL_MIPS_SECRELHI 0x000D
6717 #define IMAGE_REL_MIPS_TOKEN 0x000E
6718 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
6719 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
6720 #define IMAGE_REL_MIPS_PAIR 0x0025
6721 
6722 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
6723 #define IMAGE_REL_ALPHA_REFLONG 0x0001
6724 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
6725 #define IMAGE_REL_ALPHA_GPREL32 0x0003
6726 #define IMAGE_REL_ALPHA_LITERAL 0x0004
6727 #define IMAGE_REL_ALPHA_LITUSE 0x0005
6728 #define IMAGE_REL_ALPHA_GPDISP 0x0006
6729 #define IMAGE_REL_ALPHA_BRADDR 0x0007
6730 #define IMAGE_REL_ALPHA_HINT 0x0008
6731 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
6732 #define IMAGE_REL_ALPHA_REFHI 0x000A
6733 #define IMAGE_REL_ALPHA_REFLO 0x000B
6734 #define IMAGE_REL_ALPHA_PAIR 0x000C
6735 #define IMAGE_REL_ALPHA_MATCH 0x000D
6736 #define IMAGE_REL_ALPHA_SECTION 0x000E
6737 #define IMAGE_REL_ALPHA_SECREL 0x000F
6738 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
6739 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
6740 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
6741 #define IMAGE_REL_ALPHA_REFQ3 0x0013
6742 #define IMAGE_REL_ALPHA_REFQ2 0x0014
6743 #define IMAGE_REL_ALPHA_REFQ1 0x0015
6744 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
6745 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
6746 
6747 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
6748 #define IMAGE_REL_PPC_ADDR64 0x0001
6749 #define IMAGE_REL_PPC_ADDR32 0x0002
6750 #define IMAGE_REL_PPC_ADDR24 0x0003
6751 #define IMAGE_REL_PPC_ADDR16 0x0004
6752 #define IMAGE_REL_PPC_ADDR14 0x0005
6753 #define IMAGE_REL_PPC_REL24 0x0006
6754 #define IMAGE_REL_PPC_REL14 0x0007
6755 #define IMAGE_REL_PPC_TOCREL16 0x0008
6756 #define IMAGE_REL_PPC_TOCREL14 0x0009
6757 #define IMAGE_REL_PPC_ADDR32NB 0x000A
6758 #define IMAGE_REL_PPC_SECREL 0x000B
6759 #define IMAGE_REL_PPC_SECTION 0x000C
6760 #define IMAGE_REL_PPC_IFGLUE 0x000D
6761 #define IMAGE_REL_PPC_IMGLUE 0x000E
6762 #define IMAGE_REL_PPC_SECREL16 0x000F
6763 #define IMAGE_REL_PPC_REFHI 0x0010
6764 #define IMAGE_REL_PPC_REFLO 0x0011
6765 #define IMAGE_REL_PPC_PAIR 0x0012
6766 #define IMAGE_REL_PPC_SECRELLO 0x0013
6767 #define IMAGE_REL_PPC_SECRELHI 0x0014
6768 #define IMAGE_REL_PPC_GPREL 0x0015
6769 #define IMAGE_REL_PPC_TOKEN 0x0016
6770 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
6771 #define IMAGE_REL_PPC_NEG 0x0100
6772 #define IMAGE_REL_PPC_BRTAKEN 0x0200
6773 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
6774 #define IMAGE_REL_PPC_TOCDEFN 0x0800
6775 
6776 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
6777 #define IMAGE_REL_SH3_DIRECT16 0x0001
6778 #define IMAGE_REL_SH3_DIRECT32 0x0002
6779 #define IMAGE_REL_SH3_DIRECT8 0x0003
6780 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
6781 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
6782 #define IMAGE_REL_SH3_DIRECT4 0x0006
6783 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
6784 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
6785 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
6786 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
6787 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
6788 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
6789 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
6790 #define IMAGE_REL_SH3_SECTION 0x000E
6791 #define IMAGE_REL_SH3_SECREL 0x000F
6792 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
6793 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
6794 #define IMAGE_REL_SH3_TOKEN 0x0012
6795 
6796 #define IMAGE_REL_SHM_PCRELPT 0x0013
6797 #define IMAGE_REL_SHM_REFLO 0x0014
6798 #define IMAGE_REL_SHM_REFHALF 0x0015
6799 #define IMAGE_REL_SHM_RELLO 0x0016
6800 #define IMAGE_REL_SHM_RELHALF 0x0017
6801 #define IMAGE_REL_SHM_PAIR 0x0018
6802 
6803 #define IMAGE_REL_SH_NOMODE 0x8000
6804 
6805 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
6806 #define IMAGE_REL_ARM_ADDR32 0x0001
6807 #define IMAGE_REL_ARM_ADDR32NB 0x0002
6808 #define IMAGE_REL_ARM_BRANCH24 0x0003
6809 #define IMAGE_REL_ARM_BRANCH11 0x0004
6810 #define IMAGE_REL_ARM_TOKEN 0x0005
6811 #define IMAGE_REL_ARM_GPREL12 0x0006
6812 #define IMAGE_REL_ARM_GPREL7 0x0007
6813 #define IMAGE_REL_ARM_BLX24 0x0008
6814 #define IMAGE_REL_ARM_BLX11 0x0009
6815 #define IMAGE_REL_ARM_SECTION 0x000E
6816 #define IMAGE_REL_ARM_SECREL 0x000F
6817 #define IMAGE_REL_ARM_MOV32A 0x0010
6818 #define IMAGE_REL_ARM_MOV32 0x0010
6819 #define IMAGE_REL_ARM_MOV32T 0x0011
6820 #define IMAGE_REL_THUMB_MOV32 0x0011
6821 #define IMAGE_REL_ARM_BRANCH20T 0x0012
6822 #define IMAGE_REL_THUMB_BRANCH20 0x0012
6823 #define IMAGE_REL_ARM_BRANCH24T 0x0014
6824 #define IMAGE_REL_THUMB_BRANCH24 0x0014
6825 #define IMAGE_REL_ARM_BLX23T 0x0015
6826 #define IMAGE_REL_THUMB_BLX23 0x0015
6827 
6828 #define IMAGE_REL_AM_ABSOLUTE 0x0000
6829 #define IMAGE_REL_AM_ADDR32 0x0001
6830 #define IMAGE_REL_AM_ADDR32NB 0x0002
6831 #define IMAGE_REL_AM_CALL32 0x0003
6832 #define IMAGE_REL_AM_FUNCINFO 0x0004
6833 #define IMAGE_REL_AM_REL32_1 0x0005
6834 #define IMAGE_REL_AM_REL32_2 0x0006
6835 #define IMAGE_REL_AM_SECREL 0x0007
6836 #define IMAGE_REL_AM_SECTION 0x0008
6837 #define IMAGE_REL_AM_TOKEN 0x0009
6838 
6839 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
6840 #define IMAGE_REL_AMD64_ADDR64 0x0001
6841 #define IMAGE_REL_AMD64_ADDR32 0x0002
6842 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
6843 #define IMAGE_REL_AMD64_REL32 0x0004
6844 #define IMAGE_REL_AMD64_REL32_1 0x0005
6845 #define IMAGE_REL_AMD64_REL32_2 0x0006
6846 #define IMAGE_REL_AMD64_REL32_3 0x0007
6847 #define IMAGE_REL_AMD64_REL32_4 0x0008
6848 #define IMAGE_REL_AMD64_REL32_5 0x0009
6849 #define IMAGE_REL_AMD64_SECTION 0x000A
6850 #define IMAGE_REL_AMD64_SECREL 0x000B
6851 #define IMAGE_REL_AMD64_SECREL7 0x000C
6852 #define IMAGE_REL_AMD64_TOKEN 0x000D
6853 #define IMAGE_REL_AMD64_SREL32 0x000E
6854 #define IMAGE_REL_AMD64_PAIR 0x000F
6855 #define IMAGE_REL_AMD64_SSPAN32 0x0010
6856 
6857 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
6858 #define IMAGE_REL_IA64_IMM14 0x0001
6859 #define IMAGE_REL_IA64_IMM22 0x0002
6860 #define IMAGE_REL_IA64_IMM64 0x0003
6861 #define IMAGE_REL_IA64_DIR32 0x0004
6862 #define IMAGE_REL_IA64_DIR64 0x0005
6863 #define IMAGE_REL_IA64_PCREL21B 0x0006
6864 #define IMAGE_REL_IA64_PCREL21M 0x0007
6865 #define IMAGE_REL_IA64_PCREL21F 0x0008
6866 #define IMAGE_REL_IA64_GPREL22 0x0009
6867 #define IMAGE_REL_IA64_LTOFF22 0x000A
6868 #define IMAGE_REL_IA64_SECTION 0x000B
6869 #define IMAGE_REL_IA64_SECREL22 0x000C
6870 #define IMAGE_REL_IA64_SECREL64I 0x000D
6871 #define IMAGE_REL_IA64_SECREL32 0x000E
6872 
6873 #define IMAGE_REL_IA64_DIR32NB 0x0010
6874 #define IMAGE_REL_IA64_SREL14 0x0011
6875 #define IMAGE_REL_IA64_SREL22 0x0012
6876 #define IMAGE_REL_IA64_SREL32 0x0013
6877 #define IMAGE_REL_IA64_UREL32 0x0014
6878 #define IMAGE_REL_IA64_PCREL60X 0x0015
6879 #define IMAGE_REL_IA64_PCREL60B 0x0016
6880 #define IMAGE_REL_IA64_PCREL60F 0x0017
6881 #define IMAGE_REL_IA64_PCREL60I 0x0018
6882 #define IMAGE_REL_IA64_PCREL60M 0x0019
6883 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
6884 #define IMAGE_REL_IA64_TOKEN 0x001B
6885 #define IMAGE_REL_IA64_GPREL32 0x001C
6886 #define IMAGE_REL_IA64_ADDEND 0x001F
6887 
6888 #define IMAGE_REL_CEF_ABSOLUTE 0x0000
6889 #define IMAGE_REL_CEF_ADDR32 0x0001
6890 #define IMAGE_REL_CEF_ADDR64 0x0002
6891 #define IMAGE_REL_CEF_ADDR32NB 0x0003
6892 #define IMAGE_REL_CEF_SECTION 0x0004
6893 #define IMAGE_REL_CEF_SECREL 0x0005
6894 #define IMAGE_REL_CEF_TOKEN 0x0006
6895 
6896 #define IMAGE_REL_CEE_ABSOLUTE 0x0000
6897 #define IMAGE_REL_CEE_ADDR32 0x0001
6898 #define IMAGE_REL_CEE_ADDR64 0x0002
6899 #define IMAGE_REL_CEE_ADDR32NB 0x0003
6900 #define IMAGE_REL_CEE_SECTION 0x0004
6901 #define IMAGE_REL_CEE_SECREL 0x0005
6902 #define IMAGE_REL_CEE_TOKEN 0x0006
6903 
6904 #define IMAGE_REL_M32R_ABSOLUTE 0x0000
6905 #define IMAGE_REL_M32R_ADDR32 0x0001
6906 #define IMAGE_REL_M32R_ADDR32NB 0x0002
6907 #define IMAGE_REL_M32R_ADDR24 0x0003
6908 #define IMAGE_REL_M32R_GPREL16 0x0004
6909 #define IMAGE_REL_M32R_PCREL24 0x0005
6910 #define IMAGE_REL_M32R_PCREL16 0x0006
6911 #define IMAGE_REL_M32R_PCREL8 0x0007
6912 #define IMAGE_REL_M32R_REFHALF 0x0008
6913 #define IMAGE_REL_M32R_REFHI 0x0009
6914 #define IMAGE_REL_M32R_REFLO 0x000A
6915 #define IMAGE_REL_M32R_PAIR 0x000B
6916 #define IMAGE_REL_M32R_SECTION 0x000C
6917 #define IMAGE_REL_M32R_SECREL32 0x000D
6918 #define IMAGE_REL_M32R_TOKEN 0x000E
6919 
6920 #define IMAGE_REL_EBC_ABSOLUTE 0x0000
6921 #define IMAGE_REL_EBC_ADDR32NB 0x0001
6922 #define IMAGE_REL_EBC_REL32 0x0002
6923 #define IMAGE_REL_EBC_SECTION 0x0003
6924 #define IMAGE_REL_EBC_SECREL 0x0004
6925 
6926 #define EXT_IMM64(Value,Address,Size,InstPos,ValPos) Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)
6927 #define INS_IMM64(Value,Address,Size,InstPos,ValPos) *(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | ((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos)
6928 
6929 #define EMARCH_ENC_I17_IMM7B_INST_WORD_X 3
6930 #define EMARCH_ENC_I17_IMM7B_SIZE_X 7
6931 #define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 4
6932 #define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0
6933 
6934 #define EMARCH_ENC_I17_IMM9D_INST_WORD_X 3
6935 #define EMARCH_ENC_I17_IMM9D_SIZE_X 9
6936 #define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 18
6937 #define EMARCH_ENC_I17_IMM9D_VAL_POS_X 7
6938 
6939 #define EMARCH_ENC_I17_IMM5C_INST_WORD_X 3
6940 #define EMARCH_ENC_I17_IMM5C_SIZE_X 5
6941 #define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 13
6942 #define EMARCH_ENC_I17_IMM5C_VAL_POS_X 16
6943 
6944 #define EMARCH_ENC_I17_IC_INST_WORD_X 3
6945 #define EMARCH_ENC_I17_IC_SIZE_X 1
6946 #define EMARCH_ENC_I17_IC_INST_WORD_POS_X 12
6947 #define EMARCH_ENC_I17_IC_VAL_POS_X 21
6948 
6949 #define EMARCH_ENC_I17_IMM41a_INST_WORD_X 1
6950 #define EMARCH_ENC_I17_IMM41a_SIZE_X 10
6951 #define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 14
6952 #define EMARCH_ENC_I17_IMM41a_VAL_POS_X 22
6953 
6954 #define EMARCH_ENC_I17_IMM41b_INST_WORD_X 1
6955 #define EMARCH_ENC_I17_IMM41b_SIZE_X 8
6956 #define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 24
6957 #define EMARCH_ENC_I17_IMM41b_VAL_POS_X 32
6958 
6959 #define EMARCH_ENC_I17_IMM41c_INST_WORD_X 2
6960 #define EMARCH_ENC_I17_IMM41c_SIZE_X 23
6961 #define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0
6962 #define EMARCH_ENC_I17_IMM41c_VAL_POS_X 40
6963 
6964 #define EMARCH_ENC_I17_SIGN_INST_WORD_X 3
6965 #define EMARCH_ENC_I17_SIGN_SIZE_X 1
6966 #define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 27
6967 #define EMARCH_ENC_I17_SIGN_VAL_POS_X 63
6968 
6969 #define X3_OPCODE_INST_WORD_X 3
6970 #define X3_OPCODE_SIZE_X 4
6971 #define X3_OPCODE_INST_WORD_POS_X 28
6972 #define X3_OPCODE_SIGN_VAL_POS_X 0
6973 
6974 #define X3_I_INST_WORD_X 3
6975 #define X3_I_SIZE_X 1
6976 #define X3_I_INST_WORD_POS_X 27
6977 #define X3_I_SIGN_VAL_POS_X 59
6978 
6979 #define X3_D_WH_INST_WORD_X 3
6980 #define X3_D_WH_SIZE_X 3
6981 #define X3_D_WH_INST_WORD_POS_X 24
6982 #define X3_D_WH_SIGN_VAL_POS_X 0
6983 
6984 #define X3_IMM20_INST_WORD_X 3
6985 #define X3_IMM20_SIZE_X 20
6986 #define X3_IMM20_INST_WORD_POS_X 4
6987 #define X3_IMM20_SIGN_VAL_POS_X 0
6988 
6989 #define X3_IMM39_1_INST_WORD_X 2
6990 #define X3_IMM39_1_SIZE_X 23
6991 #define X3_IMM39_1_INST_WORD_POS_X 0
6992 #define X3_IMM39_1_SIGN_VAL_POS_X 36
6993 
6994 #define X3_IMM39_2_INST_WORD_X 1
6995 #define X3_IMM39_2_SIZE_X 16
6996 #define X3_IMM39_2_INST_WORD_POS_X 16
6997 #define X3_IMM39_2_SIGN_VAL_POS_X 20
6998 
6999 #define X3_P_INST_WORD_X 3
7000 #define X3_P_SIZE_X 4
7001 #define X3_P_INST_WORD_POS_X 0
7002 #define X3_P_SIGN_VAL_POS_X 0
7003 
7004 #define X3_TMPLT_INST_WORD_X 0
7005 #define X3_TMPLT_SIZE_X 4
7006 #define X3_TMPLT_INST_WORD_POS_X 0
7007 #define X3_TMPLT_SIGN_VAL_POS_X 0
7008 
7009 #define X3_BTYPE_QP_INST_WORD_X 2
7010 #define X3_BTYPE_QP_SIZE_X 9
7011 #define X3_BTYPE_QP_INST_WORD_POS_X 23
7012 #define X3_BTYPE_QP_INST_VAL_POS_X 0
7013 
7014 #define X3_EMPTY_INST_WORD_X 1
7015 #define X3_EMPTY_SIZE_X 2
7016 #define X3_EMPTY_INST_WORD_POS_X 14
7017 #define X3_EMPTY_INST_VAL_POS_X 0
7018 
7019     typedef struct _IMAGE_LINENUMBER {
7020       union {
7021 	DWORD SymbolTableIndex;
7022 	DWORD VirtualAddress;
7023       } Type;
7024       WORD Linenumber;
7025     } IMAGE_LINENUMBER;
7026     typedef IMAGE_LINENUMBER UNALIGNED *PIMAGE_LINENUMBER;
7027 
7028 #define IMAGE_SIZEOF_LINENUMBER 6
7029 
7030 #include "poppack.h"
7031 
7032     typedef struct _IMAGE_BASE_RELOCATION {
7033       DWORD VirtualAddress;
7034       DWORD SizeOfBlock;
7035     } IMAGE_BASE_RELOCATION;
7036     typedef IMAGE_BASE_RELOCATION UNALIGNED *PIMAGE_BASE_RELOCATION;
7037 
7038 #define IMAGE_SIZEOF_BASE_RELOCATION 8
7039 
7040 #define IMAGE_REL_BASED_ABSOLUTE 0
7041 #define IMAGE_REL_BASED_HIGH 1
7042 #define IMAGE_REL_BASED_LOW 2
7043 #define IMAGE_REL_BASED_HIGHLOW 3
7044 #define IMAGE_REL_BASED_HIGHADJ 4
7045 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
7046 #define IMAGE_REL_BASED_ARM_MOV32 5
7047 #define IMAGE_REL_BASED_THUMB_MOV32 7
7048 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
7049 #define IMAGE_REL_BASED_IA64_IMM64 9
7050 #define IMAGE_REL_BASED_DIR64 10
7051 
7052 #define IMAGE_ARCHIVE_START_SIZE 8
7053 #define IMAGE_ARCHIVE_START "!<arch>\n"
7054 #define IMAGE_ARCHIVE_END "`\n"
7055 #define IMAGE_ARCHIVE_PAD "\n"
7056 #define IMAGE_ARCHIVE_LINKER_MEMBER "/               "
7057 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "//              "
7058 
7059     typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
7060       BYTE Name[16];
7061       BYTE Date[12];
7062       BYTE UserID[6];
7063       BYTE GroupID[6];
7064       BYTE Mode[8];
7065       BYTE Size[10];
7066       BYTE EndHeader[2];
7067     } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
7068 
7069 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
7070 
7071     typedef struct _IMAGE_EXPORT_DIRECTORY {
7072       DWORD Characteristics;
7073       DWORD TimeDateStamp;
7074       WORD MajorVersion;
7075       WORD MinorVersion;
7076       DWORD Name;
7077       DWORD Base;
7078       DWORD NumberOfFunctions;
7079       DWORD NumberOfNames;
7080       DWORD AddressOfFunctions;
7081       DWORD AddressOfNames;
7082       DWORD AddressOfNameOrdinals;
7083     } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
7084 
7085     typedef struct _IMAGE_IMPORT_BY_NAME {
7086       WORD Hint;
7087       CHAR Name[1];
7088     } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
7089 
7090 #include "pshpack8.h"
7091 
7092     typedef struct _IMAGE_THUNK_DATA64 {
7093       union {
7094 	ULONGLONG ForwarderString;
7095 	ULONGLONG Function;
7096 	ULONGLONG Ordinal;
7097 	ULONGLONG AddressOfData;
7098       } u1;
7099     } IMAGE_THUNK_DATA64;
7100     typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
7101 
7102 #include "poppack.h"
7103 
7104     typedef struct _IMAGE_THUNK_DATA32 {
7105       union {
7106 	DWORD ForwarderString;
7107 	DWORD Function;
7108 	DWORD Ordinal;
7109 	DWORD AddressOfData;
7110       } u1;
7111     } IMAGE_THUNK_DATA32;
7112     typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
7113 
7114 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ull
7115 #define IMAGE_ORDINAL_FLAG32 0x80000000
7116 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffffull)
7117 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
7118 #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
7119 #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
7120 
7121     typedef VOID (NTAPI *PIMAGE_TLS_CALLBACK)(PVOID DllHandle,DWORD Reason,PVOID Reserved);
7122 
7123     typedef struct _IMAGE_TLS_DIRECTORY64 {
7124       ULONGLONG StartAddressOfRawData;
7125       ULONGLONG EndAddressOfRawData;
7126       ULONGLONG AddressOfIndex;
7127       ULONGLONG AddressOfCallBacks;
7128       DWORD SizeOfZeroFill;
7129       DWORD Characteristics;
7130     } IMAGE_TLS_DIRECTORY64;
7131     typedef IMAGE_TLS_DIRECTORY64 *PIMAGE_TLS_DIRECTORY64;
7132 
7133     typedef struct _IMAGE_TLS_DIRECTORY32 {
7134       DWORD StartAddressOfRawData;
7135       DWORD EndAddressOfRawData;
7136       DWORD AddressOfIndex;
7137       DWORD AddressOfCallBacks;
7138       DWORD SizeOfZeroFill;
7139       DWORD Characteristics;
7140     } IMAGE_TLS_DIRECTORY32;
7141     typedef IMAGE_TLS_DIRECTORY32 *PIMAGE_TLS_DIRECTORY32;
7142 
7143 #ifdef _WIN64
7144 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
7145 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
7146     typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
7147     typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
7148 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
7149     typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
7150     typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
7151 #else  /* _WIN64 */
7152 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
7153 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
7154     typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
7155     typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
7156 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
7157     typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
7158     typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
7159 #endif /* _WIN64 */
7160 
7161     typedef struct _IMAGE_IMPORT_DESCRIPTOR {
7162       __C89_NAMELESS union {
7163 	DWORD Characteristics;
7164 	DWORD OriginalFirstThunk;
7165       } DUMMYUNIONNAME;
7166       DWORD TimeDateStamp;
7167 
7168       DWORD ForwarderChain;
7169       DWORD Name;
7170       DWORD FirstThunk;
7171     } IMAGE_IMPORT_DESCRIPTOR;
7172     typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
7173 
7174     typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
7175       DWORD TimeDateStamp;
7176       WORD OffsetModuleName;
7177       WORD NumberOfModuleForwarderRefs;
7178     } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
7179 
7180     typedef struct _IMAGE_BOUND_FORWARDER_REF {
7181       DWORD TimeDateStamp;
7182       WORD OffsetModuleName;
7183       WORD Reserved;
7184     } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
7185 
7186     typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR {
7187       union {
7188 	DWORD AllAttributes;
7189 	__C89_NAMELESS struct {
7190 	  DWORD RvaBased : 1;
7191 	  DWORD ReservedAttributes : 31;
7192 	};
7193       } Attributes;
7194       DWORD DllNameRVA;
7195       DWORD ModuleHandleRVA;
7196       DWORD ImportAddressTableRVA;
7197       DWORD ImportNameTableRVA;
7198       DWORD BoundImportAddressTableRVA;
7199       DWORD UnloadInformationTableRVA;
7200       DWORD TimeDateStamp;
7201     } IMAGE_DELAYLOAD_DESCRIPTOR,*PIMAGE_DELAYLOAD_DESCRIPTOR;
7202     typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;
7203 
7204     typedef struct _IMAGE_RESOURCE_DIRECTORY {
7205       DWORD Characteristics;
7206       DWORD TimeDateStamp;
7207       WORD MajorVersion;
7208       WORD MinorVersion;
7209       WORD NumberOfNamedEntries;
7210       WORD NumberOfIdEntries;
7211     } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
7212 
7213 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
7214 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
7215 
7216     typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
7217       __C89_NAMELESS union {
7218 	__C89_NAMELESS struct {
7219 	  DWORD NameOffset:31;
7220 	  DWORD NameIsString:1;
7221 	} DUMMYSTRUCTNAME;
7222 	DWORD Name;
7223 	WORD Id;
7224       } DUMMYUNIONNAME;
7225       __C89_NAMELESS union {
7226 	DWORD OffsetToData;
7227 	__C89_NAMELESS struct {
7228 	  DWORD OffsetToDirectory:31;
7229 	  DWORD DataIsDirectory:1;
7230 	} DUMMYSTRUCTNAME2;
7231       } DUMMYUNIONNAME2;
7232     } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
7233 
7234     typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
7235       WORD Length;
7236       CHAR NameString[1];
7237     } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
7238 
7239     typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
7240       WORD Length;
7241       WCHAR NameString[1];
7242     } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
7243 
7244     typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
7245       DWORD OffsetToData;
7246       DWORD Size;
7247       DWORD CodePage;
7248       DWORD Reserved;
7249     } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
7250 
7251     typedef struct {
7252       DWORD Size;
7253       DWORD TimeDateStamp;
7254       WORD MajorVersion;
7255       WORD MinorVersion;
7256       DWORD GlobalFlagsClear;
7257       DWORD GlobalFlagsSet;
7258       DWORD CriticalSectionDefaultTimeout;
7259       DWORD DeCommitFreeBlockThreshold;
7260       DWORD DeCommitTotalFreeThreshold;
7261       DWORD LockPrefixTable;
7262       DWORD MaximumAllocationSize;
7263       DWORD VirtualMemoryThreshold;
7264       DWORD ProcessHeapFlags;
7265       DWORD ProcessAffinityMask;
7266       WORD CSDVersion;
7267       WORD Reserved1;
7268       DWORD EditList;
7269       DWORD SecurityCookie;
7270       DWORD SEHandlerTable;
7271       DWORD SEHandlerCount;
7272     } IMAGE_LOAD_CONFIG_DIRECTORY32,*PIMAGE_LOAD_CONFIG_DIRECTORY32;
7273 
7274     typedef struct {
7275       DWORD Size;
7276       DWORD TimeDateStamp;
7277       WORD MajorVersion;
7278       WORD MinorVersion;
7279       DWORD GlobalFlagsClear;
7280       DWORD GlobalFlagsSet;
7281       DWORD CriticalSectionDefaultTimeout;
7282       ULONGLONG DeCommitFreeBlockThreshold;
7283       ULONGLONG DeCommitTotalFreeThreshold;
7284       ULONGLONG LockPrefixTable;
7285       ULONGLONG MaximumAllocationSize;
7286       ULONGLONG VirtualMemoryThreshold;
7287       ULONGLONG ProcessAffinityMask;
7288       DWORD ProcessHeapFlags;
7289       WORD CSDVersion;
7290       WORD Reserved1;
7291       ULONGLONG EditList;
7292       ULONGLONG SecurityCookie;
7293       ULONGLONG SEHandlerTable;
7294       ULONGLONG SEHandlerCount;
7295     } IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
7296 
7297 #ifdef _WIN64
7298     typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
7299     typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
7300 #else  /* _WIN64 */
7301     typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
7302     typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
7303 #endif /* _WIN64 */
7304 
7305     typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
7306       DWORD FuncStart;
7307       DWORD PrologLen : 8;
7308       DWORD FuncLen : 22;
7309       DWORD ThirtyTwoBit : 1;
7310       DWORD ExceptionFlag : 1;
7311     } IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
7312 
7313     typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
7314       ULONGLONG BeginAddress;
7315       ULONGLONG EndAddress;
7316       ULONGLONG ExceptionHandler;
7317       ULONGLONG HandlerData;
7318       ULONGLONG PrologEndAddress;
7319     } IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
7320 
7321     typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
7322       DWORD BeginAddress;
7323       DWORD EndAddress;
7324       DWORD ExceptionHandler;
7325       DWORD HandlerData;
7326       DWORD PrologEndAddress;
7327     } IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
7328 
7329     typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY {
7330       DWORD BeginAddress;
7331       __C89_NAMELESS union {
7332 	DWORD UnwindData;
7333 	__C89_NAMELESS struct {
7334 	  DWORD Flag : 2;
7335 	  DWORD FunctionLength : 11;
7336 	  DWORD Ret : 2;
7337 	  DWORD H : 1;
7338 	  DWORD Reg : 3;
7339 	  DWORD R : 1;
7340 	  DWORD L : 1;
7341 	  DWORD C : 1;
7342 	  DWORD StackAdjust : 10;
7343 	} DUMMYSTRUCTNAME;
7344       } DUMMYUNIONNAME;
7345     } IMAGE_ARM_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
7346 
7347     typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
7348       DWORD BeginAddress;
7349       __C89_NAMELESS union {
7350 	DWORD UnwindData;
7351 	__C89_NAMELESS struct {
7352 	  DWORD Flag : 2;
7353 	  DWORD FunctionLength : 11;
7354 	  DWORD RegF : 3;
7355 	  DWORD RegI : 4;
7356 	  DWORD H : 1;
7357 	  DWORD CR : 2;
7358 	  DWORD FrameSize : 9;
7359 	} DUMMYSTRUCTNAME;
7360       } DUMMYUNIONNAME;
7361     } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
7362 
7363     typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
7364       DWORD BeginAddress;
7365       DWORD EndAddress;
7366       __C89_NAMELESS union {
7367 	DWORD UnwindInfoAddress;
7368 	DWORD UnwindData;
7369       } DUMMYUNIONNAME;
7370     } _IMAGE_RUNTIME_FUNCTION_ENTRY,*_PIMAGE_RUNTIME_FUNCTION_ENTRY;
7371 
7372     typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
7373     typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
7374 
7375 #if defined (_AXP64_)
7376     typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
7377     typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
7378     typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
7379     typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
7380 #elif defined (_ALPHA_)
7381     typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
7382     typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
7383 #elif defined (__arm__)
7384     typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
7385     typedef PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
7386 #else
7387     typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
7388     typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
7389 #endif
7390 
7391     typedef struct _IMAGE_DEBUG_DIRECTORY {
7392       DWORD Characteristics;
7393       DWORD TimeDateStamp;
7394       WORD MajorVersion;
7395       WORD MinorVersion;
7396       DWORD Type;
7397       DWORD SizeOfData;
7398       DWORD AddressOfRawData;
7399       DWORD PointerToRawData;
7400     } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
7401 
7402 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
7403 #define IMAGE_DEBUG_TYPE_COFF 1
7404 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
7405 #define IMAGE_DEBUG_TYPE_FPO 3
7406 #define IMAGE_DEBUG_TYPE_MISC 4
7407 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
7408 #define IMAGE_DEBUG_TYPE_FIXUP 6
7409 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
7410 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
7411 #define IMAGE_DEBUG_TYPE_BORLAND 9
7412 #define IMAGE_DEBUG_TYPE_RESERVED10 10
7413 #define IMAGE_DEBUG_TYPE_CLSID 11
7414 
7415     typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
7416       DWORD NumberOfSymbols;
7417       DWORD LvaToFirstSymbol;
7418       DWORD NumberOfLinenumbers;
7419       DWORD LvaToFirstLinenumber;
7420       DWORD RvaToFirstByteOfCode;
7421       DWORD RvaToLastByteOfCode;
7422       DWORD RvaToFirstByteOfData;
7423       DWORD RvaToLastByteOfData;
7424     } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
7425 
7426 #define FRAME_FPO 0
7427 #define FRAME_TRAP 1
7428 #define FRAME_TSS 2
7429 #define FRAME_NONFPO 3
7430 
7431     typedef struct _FPO_DATA {
7432       DWORD ulOffStart;
7433       DWORD cbProcSize;
7434       DWORD cdwLocals;
7435       WORD cdwParams;
7436       WORD cbProlog : 8;
7437       WORD cbRegs : 3;
7438       WORD fHasSEH : 1;
7439       WORD fUseBP : 1;
7440       WORD reserved : 1;
7441       WORD cbFrame : 2;
7442     } FPO_DATA,*PFPO_DATA;
7443 #define SIZEOF_RFPO_DATA 16
7444 
7445 #define IMAGE_DEBUG_MISC_EXENAME 1
7446 
7447     typedef struct _IMAGE_DEBUG_MISC {
7448       DWORD DataType;
7449       DWORD Length;
7450       BOOLEAN Unicode;
7451       BYTE Reserved[3];
7452       BYTE Data[1];
7453     } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
7454 
7455     typedef struct _IMAGE_FUNCTION_ENTRY {
7456       DWORD StartingAddress;
7457       DWORD EndingAddress;
7458       DWORD EndOfPrologue;
7459     } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
7460 
7461     typedef struct _IMAGE_FUNCTION_ENTRY64 {
7462       ULONGLONG StartingAddress;
7463       ULONGLONG EndingAddress;
7464       __C89_NAMELESS union {
7465 	ULONGLONG EndOfPrologue;
7466 	ULONGLONG UnwindInfoAddress;
7467       } DUMMYUNIONNAME;
7468     } IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
7469 
7470     typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
7471       WORD Signature;
7472       WORD Flags;
7473       WORD Machine;
7474       WORD Characteristics;
7475       DWORD TimeDateStamp;
7476       DWORD CheckSum;
7477       DWORD ImageBase;
7478       DWORD SizeOfImage;
7479       DWORD NumberOfSections;
7480       DWORD ExportedNamesSize;
7481       DWORD DebugDirectorySize;
7482       DWORD SectionAlignment;
7483       DWORD Reserved[2];
7484     } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
7485 
7486     typedef struct _NON_PAGED_DEBUG_INFO {
7487       WORD Signature;
7488       WORD Flags;
7489       DWORD Size;
7490       WORD Machine;
7491       WORD Characteristics;
7492       DWORD TimeDateStamp;
7493       DWORD CheckSum;
7494       DWORD SizeOfImage;
7495       ULONGLONG ImageBase;
7496     } NON_PAGED_DEBUG_INFO,*PNON_PAGED_DEBUG_INFO;
7497 
7498 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
7499 #define NON_PAGED_DEBUG_SIGNATURE 0x494E
7500 
7501 #define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
7502 #define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000
7503 
7504     typedef struct _ImageArchitectureHeader {
7505       unsigned int AmaskValue: 1;
7506       int Adummy1 : 7;
7507       unsigned int AmaskShift : 8;
7508       int Adummy2 : 16;
7509       DWORD FirstEntryRVA;
7510     } IMAGE_ARCHITECTURE_HEADER,*PIMAGE_ARCHITECTURE_HEADER;
7511 
7512     typedef struct _ImageArchitectureEntry {
7513       DWORD FixupInstRVA;
7514       DWORD NewInst;
7515     } IMAGE_ARCHITECTURE_ENTRY,*PIMAGE_ARCHITECTURE_ENTRY;
7516 #include "poppack.h"
7517 
7518 #define IMPORT_OBJECT_HDR_SIG2 0xffff
7519 
7520     typedef struct IMPORT_OBJECT_HEADER {
7521       WORD Sig1;
7522       WORD Sig2;
7523       WORD Version;
7524       WORD Machine;
7525       DWORD TimeDateStamp;
7526       DWORD SizeOfData;
7527       __C89_NAMELESS union {
7528 	WORD Ordinal;
7529 	WORD Hint;
7530       };
7531       WORD Type : 2;
7532       WORD NameType : 3;
7533       WORD Reserved : 11;
7534     } IMPORT_OBJECT_HEADER;
7535 
7536     typedef enum IMPORT_OBJECT_TYPE {
7537       IMPORT_OBJECT_CODE = 0,IMPORT_OBJECT_DATA = 1,IMPORT_OBJECT_CONST = 2
7538     } IMPORT_OBJECT_TYPE;
7539 
7540     typedef enum IMPORT_OBJECT_NAME_TYPE {
7541       IMPORT_OBJECT_ORDINAL = 0,IMPORT_OBJECT_NAME = 1,IMPORT_OBJECT_NAME_NO_PREFIX = 2,IMPORT_OBJECT_NAME_UNDECORATE = 3
7542     } IMPORT_OBJECT_NAME_TYPE;
7543 
7544 #ifndef __IMAGE_COR20_HEADER_DEFINED__
7545 #define __IMAGE_COR20_HEADER_DEFINED__
7546     typedef enum ReplacesCorHdrNumericDefines {
7547       COMIMAGE_FLAGS_ILONLY = 0x00000001,COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
7548       COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,COR_VERSION_MAJOR_V2 = 2,
7549       COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,COR_VERSION_MINOR = 0,COR_DELETED_NAME_LENGTH = 8,COR_VTABLEGAP_NAME_LENGTH = 8,
7550       NATIVE_TYPE_MAX_CB = 1,COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= 0xFF,IMAGE_COR_MIH_METHODRVA = 0x01,IMAGE_COR_MIH_EHRVA = 0x02,
7551       IMAGE_COR_MIH_BASICBLOCK = 0x08,COR_VTABLE_32BIT =0x01,COR_VTABLE_64BIT =0x02,COR_VTABLE_FROM_UNMANAGED = 0x04,
7552       COR_VTABLE_CALL_MOST_DERIVED = 0x10,IMAGE_COR_EATJ_THUNK_SIZE = 32,MAX_CLASS_NAME =1024,MAX_PACKAGE_NAME = 1024
7553     } ReplacesCorHdrNumericDefines;
7554 
7555     typedef struct IMAGE_COR20_HEADER {
7556       DWORD cb;
7557       WORD MajorRuntimeVersion;
7558       WORD MinorRuntimeVersion;
7559       IMAGE_DATA_DIRECTORY MetaData;
7560       DWORD Flags;
7561       __C89_NAMELESS union {
7562 	DWORD EntryPointToken;
7563 	DWORD EntryPointRVA;
7564       } DUMMYUNIONNAME;
7565       IMAGE_DATA_DIRECTORY Resources;
7566       IMAGE_DATA_DIRECTORY StrongNameSignature;
7567       IMAGE_DATA_DIRECTORY CodeManagerTable;
7568       IMAGE_DATA_DIRECTORY VTableFixups;
7569       IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
7570       IMAGE_DATA_DIRECTORY ManagedNativeHeader;
7571     } IMAGE_COR20_HEADER,*PIMAGE_COR20_HEADER;
7572 #endif
7573 
7574 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
7575     NTSYSAPI WORD NTAPI RtlCaptureStackBackTrace (DWORD FramesToSkip, DWORD FramesToCapture, PVOID *BackTrace, PDWORD BackTraceHash);
7576     NTSYSAPI VOID NTAPI RtlCaptureContext (PCONTEXT ContextRecord);
7577     NTSYSAPI SIZE_T NTAPI RtlCompareMemory (const VOID *Source1, const VOID *Source2, SIZE_T Length);
7578 #if defined (__x86_64__)
7579 #if _WIN32_WINNT >= 0x0602
7580     NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
7581     NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
7582     NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
7583 #endif
7584     NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD64 BaseAddress);
7585     NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
7586     NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (DWORD64 TableIdentifier, DWORD64 BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
7587     NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
7588     NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, DWORD64 ImageBase, DWORD64 ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PDWORD64 EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
7589 #endif
7590 #if defined (__arm__)
7591 #if _WIN32_WINNT >= 0x0602
7592     NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
7593     NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
7594     NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
7595 #endif
7596     NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD BaseAddress);
7597     NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
7598     NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (DWORD TableIdentifier, DWORD BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
7599     NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
7600     NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, DWORD ImageBase, DWORD ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PDWORD EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
7601 #endif
7602 #if defined (__aarch64__)
7603     NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
7604     NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
7605     NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
7606     NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, ULONG_PTR BaseAddress);
7607     NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
7608     NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (ULONG_PTR TableIdentifier, ULONG_PTR BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
7609     NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
7610     NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, ULONG_PTR ImageBase, ULONG_PTR ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PULONG_PTR EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
7611 #endif
7612 #if defined (__ia64__)
7613     NTSYSAPI BOOLEAN NTAPI RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, ULONGLONG BaseAddress, ULONGLONG TargetGp);
7614     NTSYSAPI BOOLEAN NTAPI RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
7615     NTSYSAPI BOOLEAN NTAPI RtlInstallFunctionTableCallback (DWORD64 TableIdentifier, DWORD64 BaseAddress, DWORD Length, DWORD64 TargetGp, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
7616     NTSYSAPI VOID NTAPI RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
7617     NTSYSAPI ULONGLONG NTAPI RtlVirtualUnwind (ULONGLONG ImageBase, ULONGLONG ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PBOOLEAN InFunction, PFRAME_POINTERS EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
7618 #endif
7619 
7620 #endif
7621 
7622 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
7623     NTSYSAPI VOID NTAPI RtlUnwind (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue);
7624     NTSYSAPI PVOID NTAPI RtlPcToFileHeader (PVOID PcValue, PVOID *BaseOfImage);
7625 #if defined (__x86_64__)
7626     NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (DWORD64 ControlPc, PDWORD64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
7627     NTSYSAPI VOID NTAPI RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
7628 #endif
7629 #if defined (__arm__)
7630     NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONG_PTR ControlPc, PDWORD ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
7631     NTSYSAPI VOID NTAPI RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
7632 #endif
7633 #if defined (__aarch64__)
7634     NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONG_PTR ControlPc, PULONG_PTR ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
7635     NTSYSAPI VOID NTAPI RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
7636 #endif
7637 #if defined (__ia64__)
7638     NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONGLONG ControlPc, PULONGLONG ImageBase, PULONGLONG TargetGp);
7639     NTSYSAPI VOID NTAPI RtlUnwindEx (FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
7640 #endif
7641 #endif
7642 
7643 #include <string.h>
7644 
7645 #ifndef _SLIST_HEADER_
7646 #define _SLIST_HEADER_
7647 
7648 #if defined (_WIN64)
7649     typedef struct DECLSPEC_ALIGN (16) _SLIST_ENTRY {
7650       struct _SLIST_ENTRY *Next;
7651     } SLIST_ENTRY,*PSLIST_ENTRY;
7652 
7653     typedef union DECLSPEC_ALIGN (16) _SLIST_HEADER {
7654       __C89_NAMELESS struct {
7655 	ULONGLONG Alignment;
7656 	ULONGLONG Region;
7657       } DUMMYSTRUCTNAME;
7658       struct {
7659 	ULONGLONG Depth:16;
7660 	ULONGLONG Sequence:9;
7661 	ULONGLONG NextEntry:39;
7662 	ULONGLONG HeaderType:1;
7663 	ULONGLONG Init:1;
7664 	ULONGLONG Reserved:59;
7665 	ULONGLONG Region:3;
7666       } Header8;
7667       struct {
7668 	ULONGLONG Depth:16;
7669 	ULONGLONG Sequence:48;
7670 	ULONGLONG HeaderType:1;
7671 	ULONGLONG Reserved:3;
7672 	ULONGLONG NextEntry:60;
7673       } HeaderX64;
7674     } SLIST_HEADER,*PSLIST_HEADER;
7675 #else  /* _WIN64 */
7676     typedef struct _SINGLE_LIST_ENTRY SLIST_ENTRY,*PSLIST_ENTRY;
7677 
7678     typedef union _SLIST_HEADER {
7679       ULONGLONG Alignment;
7680       __C89_NAMELESS struct {
7681 	SLIST_ENTRY Next;
7682 	WORD Depth;
7683 	WORD Sequence;
7684       } DUMMYSTRUCTNAME;
7685     } SLIST_HEADER,*PSLIST_HEADER;
7686 #endif /* _WIN64 */
7687 
7688 #endif /* _SLIST_HEADER_ */
7689 
7690 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
7691     NTSYSAPI VOID NTAPI RtlInitializeSListHead (PSLIST_HEADER ListHead);
7692     NTSYSAPI PSLIST_ENTRY NTAPI RtlFirstEntrySList (const SLIST_HEADER *ListHead);
7693     NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPopEntrySList (PSLIST_HEADER ListHead);
7694     NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPushEntrySList (PSLIST_HEADER ListHead, PSLIST_ENTRY ListEntry);
7695     NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPushListSListEx (PSLIST_HEADER ListHead, PSLIST_ENTRY List, PSLIST_ENTRY ListEnd, DWORD Count);
7696     NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedFlushSList (PSLIST_HEADER ListHead);
7697     NTSYSAPI WORD NTAPI RtlQueryDepthSList (PSLIST_HEADER ListHead);
7698 #endif
7699 
7700 #ifndef _RTL_RUN_ONCE_DEF
7701 #define _RTL_RUN_ONCE_DEF 1
7702 
7703 typedef struct _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
7704 typedef DWORD (WINAPI *PRTL_RUN_ONCE_INIT_FN)(PRTL_RUN_ONCE, PVOID, PVOID *);
7705 
7706 #define RTL_RUN_ONCE_INIT {0}
7707 #define RTL_RUN_ONCE_CHECK_ONLY __MSABI_LONG(1U)
7708 #define RTL_RUN_ONCE_ASYNC __MSABI_LONG(2U)
7709 #define RTL_RUN_ONCE_INIT_FAILED __MSABI_LONG(4U)
7710 #define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
7711 #endif
7712 
7713   typedef struct _RTL_BARRIER {
7714     DWORD Reserved1;
7715     DWORD Reserved2;
7716     ULONG_PTR Reserved3[2];
7717     DWORD Reserved4;
7718     DWORD Reserved5;
7719   } RTL_BARRIER,*PRTL_BARRIER;
7720 
7721 #define FAST_FAIL_LEGACY_GS_VIOLATION 0
7722 #define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
7723 #define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
7724 #define FAST_FAIL_CORRUPT_LIST_ENTRY 3
7725 #define FAST_FAIL_INCORRECT_STACK 4
7726 #define FAST_FAIL_INVALID_ARG 5
7727 #define FAST_FAIL_GS_COOKIE_INIT 6
7728 #define FAST_FAIL_FATAL_APP_EXIT 7
7729 #define FAST_FAIL_RANGE_CHECK_FAILURE 8
7730 #define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
7731 #define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xffffffff
7732 
7733 /* TODO: Check implementation of
7734    DECLSPEC_NORETURN VOID __fastfail (unsigned int); */
7735 
7736 #define HEAP_NO_SERIALIZE 0x00000001
7737 #define HEAP_GROWABLE 0x00000002
7738 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
7739 #define HEAP_ZERO_MEMORY 0x00000008
7740 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
7741 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
7742 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
7743 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
7744 #define HEAP_CREATE_ALIGN_16 0x00010000
7745 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
7746 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
7747 #define HEAP_MAXIMUM_TAG 0x0FFF
7748 #define HEAP_PSEUDO_TAG_FLAG 0x8000
7749 #define HEAP_TAG_SHIFT 18
7750 /* Let this macro fail for non-desktop mode.  AFAIU this should be better an inline-function ... */
7751 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
7752 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b) + ((o) << 18)))
7753 #endif
7754 
7755 #define IS_TEXT_UNICODE_ASCII16 0x0001
7756 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
7757 
7758 #define IS_TEXT_UNICODE_STATISTICS 0x0002
7759 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
7760 
7761 #define IS_TEXT_UNICODE_CONTROLS 0x0004
7762 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
7763 
7764 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
7765 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
7766 
7767 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
7768 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
7769 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
7770 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
7771 
7772 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
7773 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
7774 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
7775 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
7776 
7777 #define COMPRESSION_FORMAT_NONE (0x0000)
7778 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
7779 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
7780 #define COMPRESSION_FORMAT_XPRESS (0x0003)
7781 #define COMPRESSION_FORMAT_XPRESS_HUFF (0x0004)
7782 #define COMPRESSION_ENGINE_STANDARD (0x0000)
7783 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
7784 #define COMPRESSION_ENGINE_HIBER (0x0200)
7785 
7786 #ifndef __CRT__NO_INLINE
7787 #if _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
7788 #define _MEMCPY_INLINE_
memcpy_inline(void * dst,const void * src,size_t size)7789     __CRT_INLINE PVOID __cdecl memcpy_inline(void *dst,const void *src,size_t size) {
7790       if(((char *)dst > (char *)src) && ((char *)dst < ((char *)src + size))) {
7791 	__debugbreak();
7792       }
7793       return memcpy(dst,src,size);
7794     }
7795 #define memcpy memcpy_inline
7796 #endif /* _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD) */
7797 #endif /* !__CRT__NO_INLINE */
7798 
7799 #define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
7800 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
7801 #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
7802 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
7803 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
7804 
7805     PVOID WINAPI RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt);
7806 
7807 #if !defined (__CRT__NO_INLINE) && !defined (__WIDL__)
RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt)7808     __CRT_INLINE PVOID WINAPI RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt) {
7809       volatile char *vptr =(volatile char *)ptr;
7810 #ifdef __x86_64
7811       __stosb((PBYTE)((DWORD64)vptr),0,cnt);
7812 #else
7813       while(cnt) {
7814 	*vptr++ = 0;
7815 	cnt--;
7816       }
7817 #endif /* __x86_64 */
7818       return ptr;
7819     }
7820 #endif /* !__CRT__NO_INLINE // !__WIDL__ */
7821 
7822     typedef struct _MESSAGE_RESOURCE_ENTRY {
7823       WORD Length;
7824       WORD Flags;
7825       BYTE Text[1];
7826     } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
7827 
7828 #define SEF_DACL_AUTO_INHERIT 0x01
7829 #define SEF_SACL_AUTO_INHERIT 0x02
7830 #define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
7831 #define SEF_AVOID_PRIVILEGE_CHECK 0x08
7832 #define SEF_AVOID_OWNER_CHECK 0x10
7833 #define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
7834 #define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
7835 #define SEF_MACL_NO_WRITE_UP 0x100
7836 #define SEF_MACL_NO_READ_UP 0x200
7837 #define SEF_MACL_NO_EXECUTE_UP 0x400
7838 #define SEF_AVOID_OWNER_RESTRICTION 0x1000
7839 
7840 #define SEF_MACL_VALID_FLAGS (SEF_MACL_NO_WRITE_UP | SEF_MACL_NO_READ_UP | SEF_MACL_NO_EXECUTE_UP)
7841 
7842 #define MESSAGE_RESOURCE_UNICODE 0x0001
7843 
7844     typedef struct _MESSAGE_RESOURCE_BLOCK {
7845       DWORD LowId;
7846       DWORD HighId;
7847       DWORD OffsetToEntries;
7848     } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
7849 
7850     typedef struct _MESSAGE_RESOURCE_DATA {
7851       DWORD NumberOfBlocks;
7852       MESSAGE_RESOURCE_BLOCK Blocks[1];
7853     } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
7854 
7855     typedef struct _OSVERSIONINFOA {
7856       DWORD dwOSVersionInfoSize;
7857       DWORD dwMajorVersion;
7858       DWORD dwMinorVersion;
7859       DWORD dwBuildNumber;
7860       DWORD dwPlatformId;
7861       CHAR szCSDVersion[128];
7862     } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
7863 
7864     typedef struct _OSVERSIONINFOW {
7865       DWORD dwOSVersionInfoSize;
7866       DWORD dwMajorVersion;
7867       DWORD dwMinorVersion;
7868       DWORD dwBuildNumber;
7869       DWORD dwPlatformId;
7870       WCHAR szCSDVersion[128];
7871     } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW,RTL_OSVERSIONINFOW,*PRTL_OSVERSIONINFOW;
7872 
7873     __MINGW_TYPEDEF_AW(OSVERSIONINFO)
7874     __MINGW_TYPEDEF_AW(POSVERSIONINFO)
7875     __MINGW_TYPEDEF_AW(LPOSVERSIONINFO)
7876 
7877     typedef struct _OSVERSIONINFOEXA {
7878       DWORD dwOSVersionInfoSize;
7879       DWORD dwMajorVersion;
7880       DWORD dwMinorVersion;
7881       DWORD dwBuildNumber;
7882       DWORD dwPlatformId;
7883       CHAR szCSDVersion[128];
7884       WORD wServicePackMajor;
7885       WORD wServicePackMinor;
7886       WORD wSuiteMask;
7887       BYTE wProductType;
7888       BYTE wReserved;
7889     } OSVERSIONINFOEXA,*POSVERSIONINFOEXA,*LPOSVERSIONINFOEXA;
7890 
7891     typedef struct _OSVERSIONINFOEXW {
7892       DWORD dwOSVersionInfoSize;
7893       DWORD dwMajorVersion;
7894       DWORD dwMinorVersion;
7895       DWORD dwBuildNumber;
7896       DWORD dwPlatformId;
7897       WCHAR szCSDVersion[128];
7898       WORD wServicePackMajor;
7899       WORD wServicePackMinor;
7900       WORD wSuiteMask;
7901       BYTE wProductType;
7902       BYTE wReserved;
7903     } OSVERSIONINFOEXW,*POSVERSIONINFOEXW,*LPOSVERSIONINFOEXW,RTL_OSVERSIONINFOEXW,*PRTL_OSVERSIONINFOEXW;
7904 
7905     __MINGW_TYPEDEF_AW(OSVERSIONINFOEX)
7906     __MINGW_TYPEDEF_AW(POSVERSIONINFOEX)
7907     __MINGW_TYPEDEF_AW(LPOSVERSIONINFOEX)
7908 
7909 #define VER_EQUAL 1
7910 #define VER_GREATER 2
7911 #define VER_GREATER_EQUAL 3
7912 #define VER_LESS 4
7913 #define VER_LESS_EQUAL 5
7914 #define VER_AND 6
7915 #define VER_OR 7
7916 
7917 #define VER_CONDITION_MASK 7
7918 #define VER_NUM_BITS_PER_CONDITION_MASK 3
7919 
7920 #define VER_MINORVERSION 0x0000001
7921 #define VER_MAJORVERSION 0x0000002
7922 #define VER_BUILDNUMBER 0x0000004
7923 #define VER_PLATFORMID 0x0000008
7924 #define VER_SERVICEPACKMINOR 0x0000010
7925 #define VER_SERVICEPACKMAJOR 0x0000020
7926 #define VER_SUITENAME 0x0000040
7927 #define VER_PRODUCT_TYPE 0x0000080
7928 
7929 #define VER_NT_WORKSTATION 0x0000001
7930 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
7931 #define VER_NT_SERVER 0x0000003
7932 
7933 #define VER_PLATFORM_WIN32s 0
7934 #define VER_PLATFORM_WIN32_WINDOWS 1
7935 #define VER_PLATFORM_WIN32_NT 2
7936 
7937 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
7938 #if !defined (_WINBASE_) && !defined (__WIDL__)
7939     NTSYSAPI ULONGLONG NTAPI VerSetConditionMask (ULONGLONG ConditionMask, DWORD TypeMask, BYTE Condition);
7940 #endif
7941 
7942 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_) = VerSetConditionMask((_m_),(_t_),(_c_)))
7943 
7944 #if _WIN32_WINNT >= 0x0600 && !defined (__WIDL__)
7945     NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo (DWORD OSMajorVersion, DWORD OSMinorVersion, DWORD SpMajorVersion, DWORD SpMinorVersion, PDWORD ReturnedProductType);
7946 #endif
7947 #endif
7948 
7949 #define RTL_UMS_VERSION (0x0100)
7950 
7951     typedef enum _RTL_UMS_THREAD_INFO_CLASS {
7952       UmsThreadInvalidInfoClass = 0,
7953       UmsThreadUserContext,
7954       UmsThreadPriority,
7955       UmsThreadAffinity,
7956       UmsThreadTeb,
7957       UmsThreadIsSuspended,
7958       UmsThreadIsTerminated,
7959       UmsThreadMaxInfoClass
7960     } RTL_UMS_THREAD_INFO_CLASS,*PRTL_UMS_THREAD_INFO_CLASS;
7961 
7962     typedef enum _RTL_UMS_SCHEDULER_REASON {
7963       UmsSchedulerStartup = 0,
7964       UmsSchedulerThreadBlocked,
7965       UmsSchedulerThreadYield,
7966     } RTL_UMS_SCHEDULER_REASON,*PRTL_UMS_SCHEDULER_REASON;
7967 
7968     typedef VOID NTAPI RTL_UMS_SCHEDULER_ENTRY_POINT (RTL_UMS_SCHEDULER_REASON Reason, ULONG_PTR ActivationPayload, PVOID SchedulerParam);
7969     typedef RTL_UMS_SCHEDULER_ENTRY_POINT *PRTL_UMS_SCHEDULER_ENTRY_POINT;
7970 
7971 #if _WIN32_WINNT >= 0x0602
7972 #ifndef IS_VALIDATION_ENABLED
7973 #define IS_VALIDATION_ENABLED(C, L) ((L) & (C))
7974 #define VRL_PREDEFINED_CLASS_BEGIN (1)
7975 #define VRL_CUSTOM_CLASS_BEGIN (1 << 8)
7976 #define VRL_CLASS_CONSISTENCY (VRL_PREDEFINED_CLASS_BEGIN)
7977 #define VRL_ENABLE_KERNEL_BREAKS (1 << 31)
7978 #endif
7979 
7980 #define CTMF_INCLUDE_APPCONTAINER __MSABI_LONG(0x1U)
7981 #define CTMF_VALID_FLAGS (CTMF_INCLUDE_APPCONTAINER)
7982 
7983 #if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
7984     NTSYSAPI DWORD NTAPI RtlCrc32 (const void *Buffer, size_t Size, DWORD InitialCrc);
7985     NTSYSAPI ULONGLONG NTAPI RtlCrc64 (const void *Buffer, size_t Size, ULONGLONG InitialCrc);
7986 #endif
7987 #endif
7988 
7989     typedef struct _RTL_CRITICAL_SECTION_DEBUG {
7990       WORD Type;
7991       WORD CreatorBackTraceIndex;
7992       struct _RTL_CRITICAL_SECTION *CriticalSection;
7993       LIST_ENTRY ProcessLocksList;
7994       DWORD EntryCount;
7995       DWORD ContentionCount;
7996       DWORD Flags;
7997       WORD CreatorBackTraceIndexHigh;
7998       WORD SpareWORD;
7999     } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG,RTL_RESOURCE_DEBUG,*PRTL_RESOURCE_DEBUG;
8000 
8001 #define RTL_CRITSECT_TYPE 0
8002 #define RTL_RESOURCE_TYPE 1
8003 
8004 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000
8005 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000
8006 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000
8007 #define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000
8008 #define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000
8009 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xff000000
8010 
8011 #define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & (~(RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO | RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN | RTL_CRITICAL_SECTION_FLAG_STATIC_INIT | RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE | RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO)))
8012 
8013 #define RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT 0x00000001
8014 
8015 #include <pshpack8.h>
8016     typedef struct _RTL_CRITICAL_SECTION {
8017       PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
8018       LONG LockCount;
8019       LONG RecursionCount;
8020       HANDLE OwningThread;
8021       HANDLE LockSemaphore;
8022       ULONG_PTR SpinCount;
8023     } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
8024 #include <poppack.h>
8025 
8026     typedef struct _RTL_SRWLOCK { PVOID Ptr; } RTL_SRWLOCK,*PRTL_SRWLOCK;
8027     typedef struct _RTL_CONDITION_VARIABLE { PVOID Ptr; } RTL_CONDITION_VARIABLE,*PRTL_CONDITION_VARIABLE;
8028 
8029 #define RTL_SRWLOCK_INIT {0}
8030 #define RTL_CONDITION_VARIABLE_INIT {0}
8031 
8032 #define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
8033 
8034     typedef VOID (NTAPI *PAPCFUNC) (ULONG_PTR Parameter);
8035     typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER) (struct _EXCEPTION_POINTERS *ExceptionInfo);
8036 
8037     typedef enum _HEAP_INFORMATION_CLASS {
8038       HeapCompatibilityInformation,
8039       HeapEnableTerminationOnCorruption
8040     } HEAP_INFORMATION_CLASS;
8041 
8042     typedef VOID (NTAPI *WORKERCALLBACKFUNC) (PVOID);
8043     typedef VOID (NTAPI *APC_CALLBACK_FUNCTION) (DWORD, PVOID, PVOID);
8044     typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN);
8045     typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
8046     typedef VOID (NTAPI *PFLS_CALLBACK_FUNCTION) (PVOID lpFlsData);
8047     typedef BOOLEAN (NTAPI *PSECURE_MEMORY_CACHE_CALLBACK) (PVOID Addr, SIZE_T Range);
8048 
8049 #define WT_EXECUTEDEFAULT 0x00000000
8050 #define WT_EXECUTEINIOTHREAD 0x00000001
8051 #define WT_EXECUTEINUITHREAD 0x00000002
8052 #define WT_EXECUTEINWAITTHREAD 0x00000004
8053 #define WT_EXECUTEONLYONCE 0x00000008
8054 #define WT_EXECUTEINTIMERTHREAD 0x00000020
8055 #define WT_EXECUTELONGFUNCTION 0x00000010
8056 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
8057 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
8058 #define WT_TRANSFER_IMPERSONATION 0x00000100
8059 
8060 #define WT_SET_MAX_THREADPOOL_THREADS(Flags, Limit) ((Flags) |= (Limit) << 16)
8061 
8062 #define WT_EXECUTEDELETEWAIT 0x00000008
8063 #define WT_EXECUTEINLONGTHREAD 0x00000010
8064 
8065     typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
8066       ActivationContextBasicInformation = 1,
8067       ActivationContextDetailedInformation = 2,
8068       AssemblyDetailedInformationInActivationContext = 3,
8069       FileInformationInAssemblyOfAssemblyInActivationContext = 4,
8070       RunlevelInformationInActivationContext = 5,
8071       CompatibilityInformationInActivationContext = 6,
8072       ActivationContextManifestResourceName = 7,
8073       MaxActivationContextInfoClass,
8074       AssemblyDetailedInformationInActivationContxt = 3,
8075       FileInformationInAssemblyOfAssemblyInActivationContxt = 4
8076     } ACTIVATION_CONTEXT_INFO_CLASS;
8077 
8078     typedef enum {
8079       ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,
8080       ACTCTX_RUN_LEVEL_AS_INVOKER,
8081       ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,
8082       ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,
8083       ACTCTX_RUN_LEVEL_NUMBERS
8084     } ACTCTX_REQUESTED_RUN_LEVEL;
8085 
8086     typedef enum {
8087       ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
8088       ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS,
8089       ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
8090     } ACTCTX_COMPATIBILITY_ELEMENT_TYPE;
8091 
8092     typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
8093       DWORD ulAssemblyIndex;
8094       DWORD ulFileIndexInAssembly;
8095     } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
8096 
8097     typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
8098       DWORD ulFlags;
8099       DWORD ulFilenameLength;
8100       DWORD ulPathLength;
8101       PCWSTR lpFileName;
8102       PCWSTR lpFilePath;
8103     } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
8104 
8105     typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
8106       DWORD ulFlags;
8107       DWORD ulEncodedAssemblyIdentityLength;
8108       DWORD ulManifestPathType;
8109       DWORD ulManifestPathLength;
8110       LARGE_INTEGER liManifestLastWriteTime;
8111       DWORD ulPolicyPathType;
8112       DWORD ulPolicyPathLength;
8113       LARGE_INTEGER liPolicyLastWriteTime;
8114       DWORD ulMetadataSatelliteRosterIndex;
8115       DWORD ulManifestVersionMajor;
8116       DWORD ulManifestVersionMinor;
8117       DWORD ulPolicyVersionMajor;
8118       DWORD ulPolicyVersionMinor;
8119       DWORD ulAssemblyDirectoryNameLength;
8120       PCWSTR lpAssemblyEncodedAssemblyIdentity;
8121       PCWSTR lpAssemblyManifestPath;
8122       PCWSTR lpAssemblyPolicyPath;
8123       PCWSTR lpAssemblyDirectoryName;
8124       DWORD ulFileCount;
8125     } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
8126 
8127     typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
8128       DWORD ulFlags;
8129       ACTCTX_REQUESTED_RUN_LEVEL RunLevel;
8130       DWORD UiAccess;
8131     } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION,*PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
8132 
8133     typedef struct _COMPATIBILITY_CONTEXT_ELEMENT {
8134       GUID Id;
8135       ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type;
8136     } COMPATIBILITY_CONTEXT_ELEMENT,*PCOMPATIBILITY_CONTEXT_ELEMENT;
8137 
8138 /*Vista: {e2011457-1546-43c5-a5fe-008deee3d3f0}*/
8139 /*Seven: {35138b9a-5d96-4fbd-8e2d-a2440225f93a}*/
8140     typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {
8141       DWORD ElementCount;
8142       COMPATIBILITY_CONTEXT_ELEMENT Elements[];
8143     } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION,*PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
8144 
8145 #define MAX_SUPPORTED_OS_NUM (4)
8146 
8147     typedef struct _SUPPORTED_OS_INFO {
8148       WORD OsCount;
8149       WORD MitigationExist;
8150       WORD OsList[MAX_SUPPORTED_OS_NUM];
8151     } SUPPORTED_OS_INFO,*PSUPPORTED_OS_INFO;
8152 
8153     typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
8154       DWORD dwFlags;
8155       DWORD ulFormatVersion;
8156       DWORD ulAssemblyCount;
8157       DWORD ulRootManifestPathType;
8158       DWORD ulRootManifestPathChars;
8159       DWORD ulRootConfigurationPathType;
8160       DWORD ulRootConfigurationPathChars;
8161       DWORD ulAppDirPathType;
8162       DWORD ulAppDirPathChars;
8163       PCWSTR lpRootManifestPath;
8164       PCWSTR lpRootConfigurationPath;
8165       PCWSTR lpAppDirPath;
8166     } ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
8167 
8168     typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
8169     typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
8170     typedef const struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
8171     typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION *PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
8172     typedef const struct _COMPATIBILITY_CONTEXT_ELEMENT *PCCOMPATIBILITY_CONTEXT_ELEMENT;
8173     typedef const struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION *PCACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
8174     typedef const struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
8175 
8176 #define ACTIVATIONCONTEXTINFOCLASS ACTIVATION_CONTEXT_INFO_CLASS
8177 
8178 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE (1)
8179 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE (2)
8180 #define ACTIVATION_CONTEXT_PATH_TYPE_URL (3)
8181 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF (4)
8182 
8183 #define _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION _ASSEMBLY_FILE_DETAILED_INFORMATION
8184 #define ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION ASSEMBLY_FILE_DETAILED_INFORMATION
8185 #define PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PASSEMBLY_FILE_DETAILED_INFORMATION
8186 #define PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PCASSEMBLY_FILE_DETAILED_INFORMATION
8187 #define INVALID_OS_COUNT (0xffff)
8188 
8189 #define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x1
8190 
8191     typedef VOID (NTAPI *RTL_VERIFIER_DLL_LOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
8192     typedef VOID (NTAPI *RTL_VERIFIER_DLL_UNLOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
8193     typedef VOID (NTAPI *RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK)(PVOID AllocationBase,SIZE_T AllocationSize);
8194 
8195     typedef struct _RTL_VERIFIER_THUNK_DESCRIPTOR {
8196       PCHAR ThunkName;
8197       PVOID ThunkOldAddress;
8198       PVOID ThunkNewAddress;
8199     } RTL_VERIFIER_THUNK_DESCRIPTOR,*PRTL_VERIFIER_THUNK_DESCRIPTOR;
8200 
8201     typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR {
8202       PWCHAR DllName;
8203       DWORD DllFlags;
8204       PVOID DllAddress;
8205       PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks;
8206     } RTL_VERIFIER_DLL_DESCRIPTOR,*PRTL_VERIFIER_DLL_DESCRIPTOR;
8207 
8208     typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR {
8209       DWORD Length;
8210       PRTL_VERIFIER_DLL_DESCRIPTOR ProviderDlls;
8211       RTL_VERIFIER_DLL_LOAD_CALLBACK ProviderDllLoadCallback;
8212       RTL_VERIFIER_DLL_UNLOAD_CALLBACK ProviderDllUnloadCallback;
8213       PWSTR VerifierImage;
8214       DWORD VerifierFlags;
8215       DWORD VerifierDebug;
8216       PVOID RtlpGetStackTraceAddress;
8217       PVOID RtlpDebugPageHeapCreate;
8218       PVOID RtlpDebugPageHeapDestroy;
8219       RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderNtdllHeapFreeCallback;
8220     } RTL_VERIFIER_PROVIDER_DESCRIPTOR,*PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
8221 
8222 #define RTL_VRF_FLG_FULL_PAGE_HEAP 0x00000001
8223 #define RTL_VRF_FLG_RESERVED_DONOTUSE 0x00000002
8224 #define RTL_VRF_FLG_HANDLE_CHECKS 0x00000004
8225 #define RTL_VRF_FLG_STACK_CHECKS 0x00000008
8226 #define RTL_VRF_FLG_APPCOMPAT_CHECKS 0x00000010
8227 #define RTL_VRF_FLG_TLS_CHECKS 0x00000020
8228 #define RTL_VRF_FLG_DIRTY_STACKS 0x00000040
8229 #define RTL_VRF_FLG_RPC_CHECKS 0x00000080
8230 #define RTL_VRF_FLG_COM_CHECKS 0x00000100
8231 #define RTL_VRF_FLG_DANGEROUS_APIS 0x00000200
8232 #define RTL_VRF_FLG_RACE_CHECKS 0x00000400
8233 #define RTL_VRF_FLG_DEADLOCK_CHECKS 0x00000800
8234 #define RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS 0x00001000
8235 #define RTL_VRF_FLG_VIRTUAL_MEM_CHECKS 0x00002000
8236 #define RTL_VRF_FLG_ENABLE_LOGGING 0x00004000
8237 #define RTL_VRF_FLG_FAST_FILL_HEAP 0x00008000
8238 #define RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING 0x00010000
8239 #define RTL_VRF_FLG_ENABLED_SYSTEM_WIDE 0x00020000
8240 #define RTL_VRF_FLG_MISCELLANEOUS_CHECKS 0x00020000
8241 #define RTL_VRF_FLG_LOCK_CHECKS 0x00040000
8242 
8243 #define APPLICATION_VERIFIER_INTERNAL_ERROR 0x80000000
8244 #define APPLICATION_VERIFIER_INTERNAL_WARNING 0x40000000
8245 #define APPLICATION_VERIFIER_NO_BREAK 0x20000000
8246 #define APPLICATION_VERIFIER_CONTINUABLE_BREAK 0x10000000
8247 
8248 #define APPLICATION_VERIFIER_UNKNOWN_ERROR 0x0001
8249 #define APPLICATION_VERIFIER_ACCESS_VIOLATION 0x0002
8250 #define APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS 0x0003
8251 #define APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST 0x0004
8252 #define APPLICATION_VERIFIER_BAD_HEAP_HANDLE 0x0005
8253 #define APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE 0x0006
8254 #define APPLICATION_VERIFIER_DOUBLE_FREE 0x0007
8255 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK 0x0008
8256 #define APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP 0x0009
8257 #define APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION 0x000A
8258 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER 0x000B
8259 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING 0x000C
8260 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_HEADER 0x000D
8261 #define APPLICATION_VERIFIER_CORRUPTED_FREED_HEAP_BLOCK 0x000E
8262 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_SUFFIX 0x000F
8263 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_START_STAMP 0x0010
8264 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_END_STAMP 0x0011
8265 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_PREFIX 0x0012
8266 #define APPLICATION_VERIFIER_FIRST_CHANCE_ACCESS_VIOLATION 0x0013
8267 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_LIST 0x0014
8268 
8269 #define APPLICATION_VERIFIER_TERMINATE_THREAD_CALL 0x0100
8270 #define APPLICATION_VERIFIER_STACK_OVERFLOW 0x0101
8271 #define APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL 0x0102
8272 
8273 #define APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK 0x0200
8274 #define APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL 0x0201
8275 #define APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP 0x0202
8276 #define APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE 0x0203
8277 #define APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY 0x0204
8278 #define APPLICATION_VERIFIER_LOCK_CORRUPTED 0x0205
8279 #define APPLICATION_VERIFIER_LOCK_INVALID_OWNER 0x0206
8280 #define APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT 0x0207
8281 #define APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT 0x0208
8282 #define APPLICATION_VERIFIER_LOCK_OVER_RELEASED 0x0209
8283 #define APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED 0x0210
8284 #define APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED 0x0211
8285 #define APPLICATION_VERIFIER_LOCK_IN_FREED_VMEM 0x0212
8286 #define APPLICATION_VERIFIER_LOCK_IN_UNMAPPED_MEM 0x0213
8287 #define APPLICATION_VERIFIER_THREAD_NOT_LOCK_OWNER 0x0214
8288 
8289 #define APPLICATION_VERIFIER_INVALID_HANDLE 0x0300
8290 #define APPLICATION_VERIFIER_INVALID_TLS_VALUE 0x0301
8291 #define APPLICATION_VERIFIER_INCORRECT_WAIT_CALL 0x0302
8292 #define APPLICATION_VERIFIER_NULL_HANDLE 0x0303
8293 #define APPLICATION_VERIFIER_WAIT_IN_DLLMAIN 0x0304
8294 
8295 #define APPLICATION_VERIFIER_COM_ERROR 0x0400
8296 #define APPLICATION_VERIFIER_COM_API_IN_DLLMAIN 0x0401
8297 #define APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION 0x0402
8298 #define APPLICATION_VERIFIER_COM_UNBALANCED_COINIT 0x0403
8299 #define APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT 0x0404
8300 #define APPLICATION_VERIFIER_COM_UNBALANCED_SWC 0x0405
8301 #define APPLICATION_VERIFIER_COM_NULL_DACL 0x0406
8302 #define APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION 0x0407
8303 #define APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER 0x0408
8304 #define APPLICATION_VERIFIER_COM_SMUGGLED_PROXY 0x0409
8305 #define APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL 0x040A
8306 #define APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL 0x040B
8307 #define APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY 0x040C
8308 #define APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL 0x040D
8309 #define APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY 0x040E
8310 #define APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL 0x040F
8311 #define APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL 0x0410
8312 
8313 #define APPLICATION_VERIFIER_RPC_ERROR 0x0500
8314 
8315 #define APPLICATION_VERIFIER_INVALID_FREEMEM 0x0600
8316 #define APPLICATION_VERIFIER_INVALID_ALLOCMEM 0x0601
8317 #define APPLICATION_VERIFIER_INVALID_MAPVIEW 0x0602
8318 #define APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS 0x0603
8319 #define APPLICATION_VERIFIER_PROBE_FREE_MEM 0x0604
8320 #define APPLICATION_VERIFIER_PROBE_GUARD_PAGE 0x0605
8321 #define APPLICATION_VERIFIER_PROBE_NULL 0x0606
8322 #define APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE 0x0607
8323 #define APPLICATION_VERIFIER_SIZE_HEAP_UNEXPECTED_EXCEPTION 0x0618
8324 
8325 #define VERIFIER_STOP(Code,Msg,P1,S1,P2,S2,P3,S3,P4,S4) { RtlApplicationVerifierStop ((Code),(Msg),(ULONG_PTR)(P1),(S1),(ULONG_PTR)(P2),(S2),(ULONG_PTR)(P3),(S3),(ULONG_PTR)(P4),(S4)); }
8326 
8327     VOID NTAPI RtlApplicationVerifierStop(ULONG_PTR Code,PSTR Message,ULONG_PTR Param1,PSTR Description1,ULONG_PTR Param2,PSTR Description2,ULONG_PTR Param3,PSTR Description3,ULONG_PTR Param4,PSTR Description4);
8328     NTSYSAPI DWORD NTAPI RtlSetHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength);
8329     NTSYSAPI DWORD NTAPI RtlQueryHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength,PSIZE_T ReturnLength);
8330     DWORD NTAPI RtlMultipleAllocateHeap(PVOID HeapHandle,DWORD Flags,SIZE_T Size,DWORD Count,PVOID *Array);
8331     DWORD NTAPI RtlMultipleFreeHeap(PVOID HeapHandle,DWORD Flags,DWORD Count,PVOID *Array);
8332 
8333     typedef struct _HARDWARE_COUNTER_DATA {
8334       HARDWARE_COUNTER_TYPE Type;
8335       DWORD Reserved;
8336       DWORD64 Value;
8337     } HARDWARE_COUNTER_DATA,*PHARDWARE_COUNTER_DATA;
8338 
8339     typedef struct _PERFORMANCE_DATA {
8340       WORD Size;
8341       BYTE Version;
8342       BYTE HwCountersCount;
8343       DWORD ContextSwitchCount;
8344       DWORD64 WaitReasonBitMap;
8345       DWORD64 CycleTime;
8346       DWORD RetryCount;
8347       DWORD Reserved;
8348       HARDWARE_COUNTER_DATA HwCounters[MAX_HW_COUNTERS];
8349     } PERFORMANCE_DATA,*PPERFORMANCE_DATA;
8350 
8351 #define PERFORMANCE_DATA_VERSION 1
8352 
8353 #define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x00000001
8354 #define READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS 0x00000002
8355 
8356 #define DLL_PROCESS_ATTACH 1
8357 #define DLL_THREAD_ATTACH 2
8358 #define DLL_THREAD_DETACH 3
8359 #define DLL_PROCESS_DETACH 0
8360 #define DLL_PROCESS_VERIFIER 4
8361 
8362 #define EVENTLOG_SEQUENTIAL_READ 0x0001
8363 #define EVENTLOG_SEEK_READ 0x0002
8364 #define EVENTLOG_FORWARDS_READ 0x0004
8365 #define EVENTLOG_BACKWARDS_READ 0x0008
8366 
8367 #define EVENTLOG_SUCCESS 0x0000
8368 #define EVENTLOG_ERROR_TYPE 0x0001
8369 #define EVENTLOG_WARNING_TYPE 0x0002
8370 #define EVENTLOG_INFORMATION_TYPE 0x0004
8371 #define EVENTLOG_AUDIT_SUCCESS 0x0008
8372 #define EVENTLOG_AUDIT_FAILURE 0x0010
8373 
8374 #define EVENTLOG_START_PAIRED_EVENT 0x0001
8375 #define EVENTLOG_END_PAIRED_EVENT 0x0002
8376 #define EVENTLOG_END_ALL_PAIRED_EVENTS 0x0004
8377 #define EVENTLOG_PAIRED_EVENT_ACTIVE 0x0008
8378 #define EVENTLOG_PAIRED_EVENT_INACTIVE 0x0010
8379 
8380     typedef struct _EVENTLOGRECORD {
8381       DWORD Length;
8382       DWORD Reserved;
8383       DWORD RecordNumber;
8384       DWORD TimeGenerated;
8385       DWORD TimeWritten;
8386       DWORD EventID;
8387       WORD EventType;
8388       WORD NumStrings;
8389       WORD EventCategory;
8390       WORD ReservedFlags;
8391       DWORD ClosingRecordNumber;
8392       DWORD StringOffset;
8393       DWORD UserSidLength;
8394       DWORD UserSidOffset;
8395       DWORD DataLength;
8396       DWORD DataOffset;
8397     } EVENTLOGRECORD,*PEVENTLOGRECORD;
8398 
8399 #define MAXLOGICALLOGNAMESIZE 256
8400 
8401     typedef struct _EVENTSFORLOGFILE {
8402       DWORD ulSize;
8403       WCHAR szLogicalLogFile[MAXLOGICALLOGNAMESIZE];
8404       DWORD ulNumRecords;
8405       EVENTLOGRECORD pEventLogRecords[];
8406     } EVENTSFORLOGFILE,*PEVENTSFORLOGFILE;
8407 
8408     typedef struct _PACKEDEVENTINFO {
8409       DWORD ulSize;
8410       DWORD ulNumEventsForLogFile;
8411       DWORD ulOffsets[];
8412     } PACKEDEVENTINFO,*PPACKEDEVENTINFO;
8413 
8414 #define KEY_QUERY_VALUE (0x0001)
8415 #define KEY_SET_VALUE (0x0002)
8416 #define KEY_CREATE_SUB_KEY (0x0004)
8417 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
8418 #define KEY_NOTIFY (0x0010)
8419 #define KEY_CREATE_LINK (0x0020)
8420 #define KEY_WOW64_64KEY (0x0100)
8421 #define KEY_WOW64_32KEY (0x0200)
8422 #define KEY_WOW64_RES (0x0300)
8423 
8424 #define KEY_READ ((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE))
8425 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE))
8426 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
8427 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & (~SYNCHRONIZE))
8428 #define REG_OPTION_RESERVED (__MSABI_LONG(0x00000000))
8429 
8430 #define REG_OPTION_NON_VOLATILE (__MSABI_LONG(0x00000000))
8431 #define REG_OPTION_VOLATILE (__MSABI_LONG(0x00000001))
8432 #define REG_OPTION_CREATE_LINK (__MSABI_LONG(0x00000002))
8433 #define REG_OPTION_BACKUP_RESTORE (__MSABI_LONG(0x00000004))
8434 #define REG_OPTION_OPEN_LINK (__MSABI_LONG(0x00000008))
8435 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE | REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK)
8436 
8437 #define REG_CREATED_NEW_KEY (__MSABI_LONG(0x00000001))
8438 #define REG_OPENED_EXISTING_KEY (__MSABI_LONG(0x00000002))
8439 
8440 #define REG_STANDARD_FORMAT 1
8441 #define REG_LATEST_FORMAT 2
8442 #define REG_NO_COMPRESSION 4
8443 
8444 #define REG_WHOLE_HIVE_VOLATILE (__MSABI_LONG(0x00000001))
8445 #define REG_REFRESH_HIVE (__MSABI_LONG(0x00000002))
8446 #define REG_NO_LAZY_FLUSH (__MSABI_LONG(0x00000004))
8447 #define REG_FORCE_RESTORE (__MSABI_LONG(0x00000008))
8448 #define REG_APP_HIVE (__MSABI_LONG(0x00000010))
8449 #define REG_PROCESS_PRIVATE (__MSABI_LONG(0x00000020))
8450 #define REG_START_JOURNAL (__MSABI_LONG(0x00000040))
8451 #define REG_HIVE_EXACT_FILE_GROWTH (__MSABI_LONG(0x00000080))
8452 #define REG_HIVE_NO_RM (__MSABI_LONG(0x00000100))
8453 #define REG_HIVE_SINGLE_LOG (__MSABI_LONG(0x00000200))
8454 #define REG_BOOT_HIVE (__MSABI_LONG(0x00000400))
8455 
8456 #define REG_FORCE_UNLOAD 1
8457 
8458 #define REG_NOTIFY_CHANGE_NAME (__MSABI_LONG(0x00000001))
8459 #define REG_NOTIFY_CHANGE_ATTRIBUTES (__MSABI_LONG(0x00000002))
8460 #define REG_NOTIFY_CHANGE_LAST_SET (__MSABI_LONG(0x00000004))
8461 #define REG_NOTIFY_CHANGE_SECURITY (__MSABI_LONG(0x00000008))
8462 #define REG_NOTIFY_THREAD_AGNOSTIC (__MSABI_LONG(0x10000000))
8463 
8464 #define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY | REG_NOTIFY_THREAD_AGNOSTIC)
8465 
8466 #define REG_NONE (0)
8467 #define REG_SZ (1)
8468 #define REG_EXPAND_SZ (2)
8469 #define REG_BINARY (3)
8470 #define REG_DWORD (4)
8471 #define REG_DWORD_LITTLE_ENDIAN (4)
8472 #define REG_DWORD_BIG_ENDIAN (5)
8473 #define REG_LINK (6)
8474 #define REG_MULTI_SZ (7)
8475 #define REG_RESOURCE_LIST (8)
8476 #define REG_FULL_RESOURCE_DESCRIPTOR (9)
8477 #define REG_RESOURCE_REQUIREMENTS_LIST (10)
8478 #define REG_QWORD (11)
8479 #define REG_QWORD_LITTLE_ENDIAN (11)
8480 
8481 #define SERVICE_KERNEL_DRIVER 0x00000001
8482 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
8483 #define SERVICE_ADAPTER 0x00000004
8484 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
8485 
8486 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER)
8487 
8488 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
8489 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
8490 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
8491 
8492 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
8493 
8494 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
8495 
8496 #define SERVICE_BOOT_START 0x00000000
8497 #define SERVICE_SYSTEM_START 0x00000001
8498 #define SERVICE_AUTO_START 0x00000002
8499 #define SERVICE_DEMAND_START 0x00000003
8500 #define SERVICE_DISABLED 0x00000004
8501 
8502 #define SERVICE_ERROR_IGNORE 0x00000000
8503 #define SERVICE_ERROR_NORMAL 0x00000001
8504 #define SERVICE_ERROR_SEVERE 0x00000002
8505 #define SERVICE_ERROR_CRITICAL 0x00000003
8506 
8507     typedef enum _CM_SERVICE_NODE_TYPE {
8508       DriverType = SERVICE_KERNEL_DRIVER,FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
8509       Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,AdapterType = SERVICE_ADAPTER,RecognizerType = SERVICE_RECOGNIZER_DRIVER
8510     } SERVICE_NODE_TYPE;
8511 
8512     typedef enum _CM_SERVICE_LOAD_TYPE {
8513       BootLoad = SERVICE_BOOT_START,SystemLoad = SERVICE_SYSTEM_START,AutoLoad = SERVICE_AUTO_START,DemandLoad = SERVICE_DEMAND_START,
8514       DisableLoad = SERVICE_DISABLED
8515     } SERVICE_LOAD_TYPE;
8516 
8517     typedef enum _CM_ERROR_CONTROL_TYPE {
8518       IgnoreError = SERVICE_ERROR_IGNORE,NormalError = SERVICE_ERROR_NORMAL,SevereError = SERVICE_ERROR_SEVERE,CriticalError = SERVICE_ERROR_CRITICAL
8519     } SERVICE_ERROR_TYPE;
8520 
8521 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
8522 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
8523 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
8524 #define CM_SERVICE_SD_DISK_BOOT_LOAD 0x00000008
8525 #define CM_SERVICE_USB3_DISK_BOOT_LOAD 0x00000010
8526 #define CM_SERVICE_MEASURED_BOOT_LOAD 0x00000020
8527 #define CM_SERVICE_VERIFIER_BOOT_LOAD 0x00000040
8528 #define CM_SERVICE_WINPE_BOOT_LOAD 0x00000080
8529 
8530 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | CM_SERVICE_USB_DISK_BOOT_LOAD | CM_SERVICE_SD_DISK_BOOT_LOAD | CM_SERVICE_USB3_DISK_BOOT_LOAD | CM_SERVICE_MEASURED_BOOT_LOAD | CM_SERVICE_VERIFIER_BOOT_LOAD | CM_SERVICE_WINPE_BOOT_LOAD)
8531 
8532 #ifndef _NTDDTAPE_WINNT_
8533 #define _NTDDTAPE_WINNT_
8534 
8535 #define TAPE_ERASE_SHORT __MSABI_LONG(0)
8536 #define TAPE_ERASE_LONG __MSABI_LONG(1)
8537 
8538     typedef struct _TAPE_ERASE {
8539       DWORD Type;
8540       BOOLEAN Immediate;
8541     } TAPE_ERASE,*PTAPE_ERASE;
8542 
8543 #define TAPE_LOAD __MSABI_LONG(0)
8544 #define TAPE_UNLOAD __MSABI_LONG(1)
8545 #define TAPE_TENSION __MSABI_LONG(2)
8546 #define TAPE_LOCK __MSABI_LONG(3)
8547 #define TAPE_UNLOCK __MSABI_LONG(4)
8548 #define TAPE_FORMAT __MSABI_LONG(5)
8549 
8550     typedef struct _TAPE_PREPARE {
8551       DWORD Operation;
8552       BOOLEAN Immediate;
8553     } TAPE_PREPARE,*PTAPE_PREPARE;
8554 
8555 #define TAPE_SETMARKS __MSABI_LONG(0)
8556 #define TAPE_FILEMARKS __MSABI_LONG(1)
8557 #define TAPE_SHORT_FILEMARKS __MSABI_LONG(2)
8558 #define TAPE_LONG_FILEMARKS __MSABI_LONG(3)
8559 
8560     typedef struct _TAPE_WRITE_MARKS {
8561       DWORD Type;
8562       DWORD Count;
8563       BOOLEAN Immediate;
8564     } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
8565 
8566 #define TAPE_ABSOLUTE_POSITION __MSABI_LONG(0)
8567 #define TAPE_LOGICAL_POSITION __MSABI_LONG(1)
8568 #define TAPE_PSEUDO_LOGICAL_POSITION __MSABI_LONG(2)
8569 
8570     typedef struct _TAPE_GET_POSITION {
8571       DWORD Type;
8572       DWORD Partition;
8573       LARGE_INTEGER Offset;
8574     } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
8575 
8576 #define TAPE_REWIND __MSABI_LONG(0)
8577 #define TAPE_ABSOLUTE_BLOCK __MSABI_LONG(1)
8578 #define TAPE_LOGICAL_BLOCK __MSABI_LONG(2)
8579 #define TAPE_PSEUDO_LOGICAL_BLOCK __MSABI_LONG(3)
8580 #define TAPE_SPACE_END_OF_DATA __MSABI_LONG(4)
8581 #define TAPE_SPACE_RELATIVE_BLOCKS __MSABI_LONG(5)
8582 #define TAPE_SPACE_FILEMARKS __MSABI_LONG(6)
8583 #define TAPE_SPACE_SEQUENTIAL_FMKS __MSABI_LONG(7)
8584 #define TAPE_SPACE_SETMARKS __MSABI_LONG(8)
8585 #define TAPE_SPACE_SEQUENTIAL_SMKS __MSABI_LONG(9)
8586 
8587     typedef struct _TAPE_SET_POSITION {
8588       DWORD Method;
8589       DWORD Partition;
8590       LARGE_INTEGER Offset;
8591       BOOLEAN Immediate;
8592     } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
8593 
8594 #define TAPE_DRIVE_FIXED 0x00000001
8595 #define TAPE_DRIVE_SELECT 0x00000002
8596 #define TAPE_DRIVE_INITIATOR 0x00000004
8597 
8598 #define TAPE_DRIVE_ERASE_SHORT 0x00000010
8599 #define TAPE_DRIVE_ERASE_LONG 0x00000020
8600 #define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040
8601 #define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080
8602 #define TAPE_DRIVE_TAPE_CAPACITY 0x00000100
8603 #define TAPE_DRIVE_TAPE_REMAINING 0x00000200
8604 #define TAPE_DRIVE_FIXED_BLOCK 0x00000400
8605 #define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800
8606 #define TAPE_DRIVE_WRITE_PROTECT 0x00001000
8607 #define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000
8608 #define TAPE_DRIVE_ECC 0x00010000
8609 #define TAPE_DRIVE_COMPRESSION 0x00020000
8610 #define TAPE_DRIVE_PADDING 0x00040000
8611 #define TAPE_DRIVE_REPORT_SMKS 0x00080000
8612 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000
8613 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000
8614 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000
8615 #define TAPE_DRIVE_EJECT_MEDIA 0x01000000
8616 #define TAPE_DRIVE_CLEAN_REQUESTS 0x02000000
8617 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x04000000
8618 
8619 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
8620 
8621 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
8622 #define TAPE_DRIVE_TENSION 0x80000002
8623 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
8624 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
8625 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
8626 
8627 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
8628 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
8629 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
8630 
8631 #define TAPE_DRIVE_SET_ECC 0x80000100
8632 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
8633 #define TAPE_DRIVE_SET_PADDING 0x80000400
8634 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
8635 
8636 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
8637 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
8638 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
8639 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
8640 
8641 #define TAPE_DRIVE_END_OF_DATA 0x80010000
8642 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
8643 #define TAPE_DRIVE_FILEMARKS 0x80040000
8644 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
8645 
8646 #define TAPE_DRIVE_SETMARKS 0x80100000
8647 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
8648 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
8649 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
8650 
8651 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
8652 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
8653 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
8654 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
8655 
8656 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
8657 #define TAPE_DRIVE_FORMAT 0xA0000000
8658 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
8659 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
8660 
8661     typedef struct _TAPE_GET_DRIVE_PARAMETERS {
8662       BOOLEAN ECC;
8663       BOOLEAN Compression;
8664       BOOLEAN DataPadding;
8665       BOOLEAN ReportSetmarks;
8666       DWORD DefaultBlockSize;
8667       DWORD MaximumBlockSize;
8668       DWORD MinimumBlockSize;
8669       DWORD MaximumPartitionCount;
8670       DWORD FeaturesLow;
8671       DWORD FeaturesHigh;
8672       DWORD EOTWarningZoneSize;
8673     } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
8674 
8675     typedef struct _TAPE_SET_DRIVE_PARAMETERS {
8676       BOOLEAN ECC;
8677       BOOLEAN Compression;
8678       BOOLEAN DataPadding;
8679       BOOLEAN ReportSetmarks;
8680       DWORD EOTWarningZoneSize;
8681     } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
8682 
8683     typedef struct _TAPE_GET_MEDIA_PARAMETERS {
8684       LARGE_INTEGER Capacity;
8685       LARGE_INTEGER Remaining;
8686       DWORD BlockSize;
8687       DWORD PartitionCount;
8688       BOOLEAN WriteProtected;
8689     } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
8690 
8691     typedef struct _TAPE_SET_MEDIA_PARAMETERS {
8692       DWORD BlockSize;
8693     } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
8694 
8695 #define TAPE_FIXED_PARTITIONS __MSABI_LONG(0)
8696 #define TAPE_SELECT_PARTITIONS __MSABI_LONG(1)
8697 #define TAPE_INITIATOR_PARTITIONS __MSABI_LONG(2)
8698 
8699     typedef struct _TAPE_CREATE_PARTITION {
8700       DWORD Method;
8701       DWORD Count;
8702       DWORD Size;
8703     } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
8704 
8705 #define TAPE_QUERY_DRIVE_PARAMETERS __MSABI_LONG(0)
8706 #define TAPE_QUERY_MEDIA_CAPACITY __MSABI_LONG(1)
8707 #define TAPE_CHECK_FOR_DRIVE_PROBLEM __MSABI_LONG(2)
8708 #define TAPE_QUERY_IO_ERROR_DATA __MSABI_LONG(3)
8709 #define TAPE_QUERY_DEVICE_ERROR_DATA __MSABI_LONG(4)
8710 
8711     typedef struct _TAPE_WMI_OPERATIONS {
8712       DWORD Method;
8713       DWORD DataBufferSize;
8714       PVOID DataBuffer;
8715     } TAPE_WMI_OPERATIONS,*PTAPE_WMI_OPERATIONS;
8716 
8717     typedef enum _TAPE_DRIVE_PROBLEM_TYPE {
8718       TapeDriveProblemNone,TapeDriveReadWriteWarning,TapeDriveReadWriteError,TapeDriveReadWarning,TapeDriveWriteWarning,TapeDriveReadError,TapeDriveWriteError,TapeDriveHardwareError,TapeDriveUnsupportedMedia,TapeDriveScsiConnectionError,TapeDriveTimetoClean,TapeDriveCleanDriveNow,TapeDriveMediaLifeExpired,TapeDriveSnappedTape
8719     } TAPE_DRIVE_PROBLEM_TYPE;
8720 #endif
8721 
8722   typedef DWORD TP_VERSION,*PTP_VERSION;
8723   typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE,*PTP_CALLBACK_INSTANCE;
8724   typedef VOID (NTAPI *PTP_SIMPLE_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context);
8725   typedef struct _TP_POOL TP_POOL,*PTP_POOL;
8726 
8727   typedef enum _TP_CALLBACK_PRIORITY {
8728     TP_CALLBACK_PRIORITY_HIGH,
8729     TP_CALLBACK_PRIORITY_NORMAL,
8730     TP_CALLBACK_PRIORITY_LOW,
8731     TP_CALLBACK_PRIORITY_INVALID,
8732     TP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID
8733   } TP_CALLBACK_PRIORITY;
8734 
8735   typedef struct _TP_POOL_STACK_INFORMATION {
8736     SIZE_T StackReserve;
8737     SIZE_T StackCommit;
8738   } TP_POOL_STACK_INFORMATION, *PTP_POOL_STACK_INFORMATION;
8739 
8740   typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP,*PTP_CLEANUP_GROUP;
8741   typedef VOID (NTAPI *PTP_CLEANUP_GROUP_CANCEL_CALLBACK) (PVOID ObjectContext, PVOID CleanupContext);
8742 
8743 #if _WIN32_WINNT >= 0x0601
8744   typedef struct _TP_CALLBACK_ENVIRON_V3 {
8745     TP_VERSION Version;
8746     PTP_POOL Pool;
8747     PTP_CLEANUP_GROUP CleanupGroup;
8748     PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;
8749     PVOID RaceDll;
8750     struct _ACTIVATION_CONTEXT *ActivationContext;
8751     PTP_SIMPLE_CALLBACK FinalizationCallback;
8752     union {
8753       DWORD Flags;
8754       struct {
8755         DWORD LongFunction : 1;
8756         DWORD Persistent : 1;
8757         DWORD Private : 30;
8758       } s;
8759     } u;
8760     TP_CALLBACK_PRIORITY CallbackPriority;
8761     DWORD Size;
8762   } TP_CALLBACK_ENVIRON_V3;
8763   typedef TP_CALLBACK_ENVIRON_V3 TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON;
8764 #else
8765   typedef struct _TP_CALLBACK_ENVIRON_V1 {
8766     TP_VERSION Version;
8767     PTP_POOL Pool;
8768     PTP_CLEANUP_GROUP CleanupGroup;
8769     PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;
8770     PVOID RaceDll;
8771     struct _ACTIVATION_CONTEXT *ActivationContext;
8772     PTP_SIMPLE_CALLBACK FinalizationCallback;
8773     union {
8774       DWORD Flags;
8775       struct {
8776 	DWORD LongFunction : 1;
8777 	DWORD Persistent : 1;
8778 	DWORD Private : 30;
8779       } s;
8780     } u;
8781   } TP_CALLBACK_ENVIRON_V1;
8782   typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON,*PTP_CALLBACK_ENVIRON;
8783 #endif
8784 
8785   typedef struct _TP_WORK TP_WORK,*PTP_WORK;
8786   typedef VOID (NTAPI *PTP_WORK_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_WORK Work);
8787   typedef struct _TP_TIMER TP_TIMER,*PTP_TIMER;
8788   typedef VOID (NTAPI *PTP_TIMER_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_TIMER Timer);
8789   typedef DWORD TP_WAIT_RESULT;
8790   typedef struct _TP_WAIT TP_WAIT,*PTP_WAIT;
8791   typedef VOID (NTAPI *PTP_WAIT_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_WAIT Wait, TP_WAIT_RESULT WaitResult);
8792   typedef struct _TP_IO TP_IO,*PTP_IO;
8793 
8794 #if !defined (__WIDL__)
TpInitializeCallbackEnviron(PTP_CALLBACK_ENVIRON cbe)8795     FORCEINLINE VOID TpInitializeCallbackEnviron (PTP_CALLBACK_ENVIRON cbe) {
8796       cbe->Pool = NULL;
8797       cbe->CleanupGroup = NULL;
8798       cbe->CleanupGroupCancelCallback = NULL;
8799       cbe->RaceDll = NULL;
8800       cbe->ActivationContext = NULL;
8801       cbe->FinalizationCallback = NULL;
8802       cbe->u.Flags = 0;
8803 #if _WIN32_WINNT < 0x0601
8804       cbe->Version = 1;
8805 #else
8806       cbe->Version = 3;
8807       cbe->CallbackPriority = TP_CALLBACK_PRIORITY_NORMAL;
8808       cbe->Size = sizeof (TP_CALLBACK_ENVIRON);
8809 #endif
8810     }
TpSetCallbackThreadpool(PTP_CALLBACK_ENVIRON cbe,PTP_POOL pool)8811     FORCEINLINE VOID TpSetCallbackThreadpool (PTP_CALLBACK_ENVIRON cbe, PTP_POOL pool) { cbe->Pool = pool; }
TpSetCallbackCleanupGroup(PTP_CALLBACK_ENVIRON cbe,PTP_CLEANUP_GROUP cleanup_group,PTP_CLEANUP_GROUP_CANCEL_CALLBACK cleanup_group_cb)8812     FORCEINLINE VOID TpSetCallbackCleanupGroup (PTP_CALLBACK_ENVIRON cbe, PTP_CLEANUP_GROUP cleanup_group, PTP_CLEANUP_GROUP_CANCEL_CALLBACK cleanup_group_cb) {
8813       cbe->CleanupGroup = cleanup_group;
8814       cbe->CleanupGroupCancelCallback = cleanup_group_cb;
8815     }
TpSetCallbackActivationContext(PTP_CALLBACK_ENVIRON cbe,struct _ACTIVATION_CONTEXT * actx)8816     FORCEINLINE VOID TpSetCallbackActivationContext (PTP_CALLBACK_ENVIRON cbe, struct _ACTIVATION_CONTEXT *actx) { cbe->ActivationContext = actx; }
TpSetCallbackNoActivationContext(PTP_CALLBACK_ENVIRON cbe)8817     FORCEINLINE VOID TpSetCallbackNoActivationContext (PTP_CALLBACK_ENVIRON cbe) { cbe->ActivationContext = (struct _ACTIVATION_CONTEXT *) (LONG_PTR) -1; }
TpSetCallbackLongFunction(PTP_CALLBACK_ENVIRON cbe)8818     FORCEINLINE VOID TpSetCallbackLongFunction (PTP_CALLBACK_ENVIRON cbe) { cbe->u.s.LongFunction = 1; }
TpSetCallbackRaceWithDll(PTP_CALLBACK_ENVIRON cbe,PVOID h)8819     FORCEINLINE VOID TpSetCallbackRaceWithDll (PTP_CALLBACK_ENVIRON cbe, PVOID h) { cbe->RaceDll = h; }
TpSetCallbackFinalizationCallback(PTP_CALLBACK_ENVIRON cbe,PTP_SIMPLE_CALLBACK fini_cb)8820     FORCEINLINE VOID TpSetCallbackFinalizationCallback (PTP_CALLBACK_ENVIRON cbe, PTP_SIMPLE_CALLBACK fini_cb) { cbe->FinalizationCallback = fini_cb; }
8821 #if _WIN32_WINNT >= 0x0601
TpSetCallbackPriority(PTP_CALLBACK_ENVIRON cbe,TP_CALLBACK_PRIORITY prio)8822     FORCEINLINE VOID TpSetCallbackPriority (PTP_CALLBACK_ENVIRON cbe, TP_CALLBACK_PRIORITY prio) { cbe->CallbackPriority = prio; }
8823 #endif
TpSetCallbackPersistent(PTP_CALLBACK_ENVIRON cbe)8824     FORCEINLINE VOID TpSetCallbackPersistent (PTP_CALLBACK_ENVIRON cbe) { cbe->u.s.Persistent = 1; }
TpDestroyCallbackEnviron(PTP_CALLBACK_ENVIRON cbe)8825     FORCEINLINE VOID TpDestroyCallbackEnviron (PTP_CALLBACK_ENVIRON cbe) { UNREFERENCED_PARAMETER (cbe); }
8826 #endif
8827 
8828 #if defined(__x86_64) && !defined (__WIDL__)
8829     struct _TEB *NtCurrentTeb(VOID);
8830     PVOID GetCurrentFiber(VOID);
8831     PVOID GetFiberData(VOID);
NtCurrentTeb(VOID)8832     FORCEINLINE struct _TEB *NtCurrentTeb(VOID) { return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB,Self)); }
GetCurrentFiber(VOID)8833     FORCEINLINE PVOID GetCurrentFiber(VOID) { return(PVOID)__readgsqword(FIELD_OFFSET(NT_TIB,FiberData)); }
GetFiberData(VOID)8834     FORCEINLINE PVOID GetFiberData(VOID) {
8835       return *(PVOID *)GetCurrentFiber();
8836     }
8837 #endif /* __x86_64 */
8838 
8839 #if defined (__arm__) && !defined (__WIDL__)
8840     struct _TEB *NtCurrentTeb (VOID);
8841     PVOID GetCurrentFiber (VOID);
8842     PVOID GetFiberData (VOID);
NtCurrentTeb(VOID)8843     FORCEINLINE struct _TEB *NtCurrentTeb(VOID) { struct _TEB *teb;
8844     __asm ("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb));
8845     return teb; }
GetCurrentFiber(VOID)8846     FORCEINLINE PVOID GetCurrentFiber(VOID) { return (PVOID)(((PNT_TIB)NtCurrentTeb())->FiberData); }
GetFiberData(VOID)8847     FORCEINLINE PVOID GetFiberData (VOID) { return *(PVOID *)GetCurrentFiber (); }
8848 #endif /* arm */
8849 
8850 #if defined (__aarch64__) && !defined (__WIDL__)
8851     struct _TEB *NtCurrentTeb (VOID);
8852     PVOID GetCurrentFiber (VOID);
8853     PVOID GetFiberData (VOID);
NtCurrentTeb(VOID)8854     FORCEINLINE struct _TEB *NtCurrentTeb(VOID) { struct _TEB *teb;
8855     __asm ("mov %0, x18" : "=r" (teb));
8856     return teb; }
GetCurrentFiber(VOID)8857     FORCEINLINE PVOID GetCurrentFiber(VOID) { return (PVOID)(((PNT_TIB)NtCurrentTeb())->FiberData); }
GetFiberData(VOID)8858     FORCEINLINE PVOID GetFiberData (VOID) { return *(PVOID *)GetCurrentFiber (); }
8859 #endif /* aarch64 */
8860 
8861 #ifndef _NTTMAPI_
8862 #define _NTTMAPI_
8863 
8864 #ifdef __cplusplus
8865     extern "C" {
8866 #endif
8867 
8868 #include <ktmtypes.h>
8869 
8870 #define TRANSACTIONMANAGER_QUERY_INFORMATION 0x00001
8871 #define TRANSACTIONMANAGER_SET_INFORMATION 0x00002
8872 #define TRANSACTIONMANAGER_RECOVER 0x00004
8873 #define TRANSACTIONMANAGER_RENAME 0x00008
8874 #define TRANSACTIONMANAGER_CREATE_RM 0x00010
8875 #define TRANSACTIONMANAGER_BIND_TRANSACTION 0x00020
8876 
8877 #define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ | TRANSACTIONMANAGER_QUERY_INFORMATION)
8878 #define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | TRANSACTIONMANAGER_SET_INFORMATION | TRANSACTIONMANAGER_RECOVER | TRANSACTIONMANAGER_RENAME | TRANSACTIONMANAGER_CREATE_RM)
8879 #define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
8880 #define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | TRANSACTIONMANAGER_GENERIC_READ | TRANSACTIONMANAGER_GENERIC_WRITE | TRANSACTIONMANAGER_GENERIC_EXECUTE | TRANSACTIONMANAGER_BIND_TRANSACTION)
8881 
8882 #define TRANSACTION_QUERY_INFORMATION (0x0001)
8883 #define TRANSACTION_SET_INFORMATION (0x0002)
8884 #define TRANSACTION_ENLIST (0x0004)
8885 #define TRANSACTION_COMMIT (0x0008)
8886 #define TRANSACTION_ROLLBACK (0x0010)
8887 #define TRANSACTION_PROPAGATE (0x0020)
8888 #define TRANSACTION_RIGHT_RESERVED1 (0x0040)
8889 
8890 #define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ | TRANSACTION_QUERY_INFORMATION | SYNCHRONIZE)
8891 #define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_COMMIT | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
8892 #define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | TRANSACTION_COMMIT | TRANSACTION_ROLLBACK | SYNCHRONIZE)
8893 #define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | TRANSACTION_GENERIC_READ | TRANSACTION_GENERIC_WRITE | TRANSACTION_GENERIC_EXECUTE)
8894 #define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ | STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
8895 
8896 #define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
8897 #define RESOURCEMANAGER_SET_INFORMATION (0x0002)
8898 #define RESOURCEMANAGER_RECOVER (0x0004)
8899 #define RESOURCEMANAGER_ENLIST (0x0008)
8900 #define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
8901 #define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
8902 #define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
8903 
8904 #define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ | RESOURCEMANAGER_QUERY_INFORMATION | SYNCHRONIZE)
8905 #define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | RESOURCEMANAGER_SET_INFORMATION | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_REGISTER_PROTOCOL | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE)
8906 #define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE)
8907 #define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | RESOURCEMANAGER_GENERIC_READ | RESOURCEMANAGER_GENERIC_WRITE | RESOURCEMANAGER_GENERIC_EXECUTE)
8908 
8909 #define ENLISTMENT_QUERY_INFORMATION 1
8910 #define ENLISTMENT_SET_INFORMATION 2
8911 #define ENLISTMENT_RECOVER 4
8912 #define ENLISTMENT_SUBORDINATE_RIGHTS 8
8913 #define ENLISTMENT_SUPERIOR_RIGHTS 0x10
8914 
8915 #define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ | ENLISTMENT_QUERY_INFORMATION)
8916 #define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | ENLISTMENT_SET_INFORMATION | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS)
8917 #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS)
8918 #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | ENLISTMENT_GENERIC_READ | ENLISTMENT_GENERIC_WRITE | ENLISTMENT_GENERIC_EXECUTE)
8919 
8920       typedef enum _TRANSACTION_OUTCOME {
8921 	TransactionOutcomeUndetermined = 1,
8922 	TransactionOutcomeCommitted,
8923 	TransactionOutcomeAborted,
8924       } TRANSACTION_OUTCOME;
8925 
8926       typedef enum _TRANSACTION_STATE {
8927 	TransactionStateNormal = 1,
8928 	TransactionStateIndoubt,
8929 	TransactionStateCommittedNotify,
8930       } TRANSACTION_STATE;
8931 
8932       typedef struct _TRANSACTION_BASIC_INFORMATION {
8933 	GUID TransactionId;
8934 	DWORD State;
8935 	DWORD Outcome;
8936       } TRANSACTION_BASIC_INFORMATION,*PTRANSACTION_BASIC_INFORMATION;
8937 
8938       typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
8939 	GUID TmIdentity;
8940 	LARGE_INTEGER VirtualClock;
8941       } TRANSACTIONMANAGER_BASIC_INFORMATION,*PTRANSACTIONMANAGER_BASIC_INFORMATION;
8942 
8943       typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
8944 	GUID LogIdentity;
8945       } TRANSACTIONMANAGER_LOG_INFORMATION,*PTRANSACTIONMANAGER_LOG_INFORMATION;
8946 
8947       typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
8948 	DWORD LogPathLength;
8949 	WCHAR LogPath[1];
8950       } TRANSACTIONMANAGER_LOGPATH_INFORMATION,*PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
8951 
8952       typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
8953 	ULONGLONG LastRecoveredLsn;
8954       } TRANSACTIONMANAGER_RECOVERY_INFORMATION,*PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
8955 
8956       typedef struct _TRANSACTIONMANAGER_OLDEST_INFORMATION {
8957 	GUID OldestTransactionGuid;
8958       } TRANSACTIONMANAGER_OLDEST_INFORMATION,*PTRANSACTIONMANAGER_OLDEST_INFORMATION;
8959 
8960       typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
8961 	DWORD IsolationLevel;
8962 	DWORD IsolationFlags;
8963 	LARGE_INTEGER Timeout;
8964 	DWORD Outcome;
8965 	DWORD DescriptionLength;
8966 	WCHAR Description[1];
8967       } TRANSACTION_PROPERTIES_INFORMATION,*PTRANSACTION_PROPERTIES_INFORMATION;
8968 
8969       typedef struct _TRANSACTION_BIND_INFORMATION {
8970 	HANDLE TmHandle;
8971       } TRANSACTION_BIND_INFORMATION,*PTRANSACTION_BIND_INFORMATION;
8972 
8973       typedef struct _TRANSACTION_ENLISTMENT_PAIR {
8974 	GUID EnlistmentId;
8975 	GUID ResourceManagerId;
8976       } TRANSACTION_ENLISTMENT_PAIR,*PTRANSACTION_ENLISTMENT_PAIR;
8977 
8978       typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
8979 	DWORD NumberOfEnlistments;
8980 	TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
8981       } TRANSACTION_ENLISTMENTS_INFORMATION,*PTRANSACTION_ENLISTMENTS_INFORMATION;
8982 
8983       typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
8984 	TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
8985       } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION,*PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
8986 
8987       typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
8988 	GUID ResourceManagerId;
8989 	DWORD DescriptionLength;
8990 	WCHAR Description[1];
8991       } RESOURCEMANAGER_BASIC_INFORMATION,*PRESOURCEMANAGER_BASIC_INFORMATION;
8992 
8993       typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
8994 	HANDLE IoCompletionPortHandle;
8995 	ULONG_PTR CompletionKey;
8996       } RESOURCEMANAGER_COMPLETION_INFORMATION,*PRESOURCEMANAGER_COMPLETION_INFORMATION;
8997 
8998       typedef enum _TRANSACTION_INFORMATION_CLASS {
8999 	TransactionBasicInformation,
9000 	TransactionPropertiesInformation,
9001 	TransactionEnlistmentInformation,
9002 	TransactionSuperiorEnlistmentInformation,
9003 	TransactionBindInformation,
9004 	TransactionDTCPrivateInformation
9005       } TRANSACTION_INFORMATION_CLASS;
9006 
9007       typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
9008 	TransactionManagerBasicInformation,
9009 	TransactionManagerLogInformation,
9010 	TransactionManagerLogPathInformation,
9011 	TransactionManagerOnlineProbeInformation = 3,
9012 	TransactionManagerRecoveryInformation = 4,
9013 	TransactionManagerOldestTransactionInformation = 5
9014       } TRANSACTIONMANAGER_INFORMATION_CLASS;
9015 
9016       typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
9017 	ResourceManagerBasicInformation,
9018 	ResourceManagerCompletionInformation
9019       } RESOURCEMANAGER_INFORMATION_CLASS;
9020 
9021       typedef struct _ENLISTMENT_BASIC_INFORMATION {
9022 	GUID EnlistmentId;
9023 	GUID TransactionId;
9024 	GUID ResourceManagerId;
9025       } ENLISTMENT_BASIC_INFORMATION,*PENLISTMENT_BASIC_INFORMATION;
9026 
9027       typedef struct _ENLISTMENT_CRM_INFORMATION {
9028 	GUID CrmTransactionManagerId;
9029 	GUID CrmResourceManagerId;
9030 	GUID CrmEnlistmentId;
9031       } ENLISTMENT_CRM_INFORMATION,*PENLISTMENT_CRM_INFORMATION;
9032 
9033       typedef enum _ENLISTMENT_INFORMATION_CLASS {
9034 	EnlistmentBasicInformation,
9035 	EnlistmentRecoveryInformation,
9036 	EnlistmentCrmInformation
9037       } ENLISTMENT_INFORMATION_CLASS;
9038 
9039       typedef struct _TRANSACTION_LIST_ENTRY {
9040 	/*UOW*/ GUID UOW;
9041       } TRANSACTION_LIST_ENTRY,*PTRANSACTION_LIST_ENTRY;
9042 
9043       typedef struct _TRANSACTION_LIST_INFORMATION {
9044 	DWORD NumberOfTransactions;
9045 	TRANSACTION_LIST_ENTRY TransactionInformation[1];
9046       } TRANSACTION_LIST_INFORMATION,*PTRANSACTION_LIST_INFORMATION;
9047 
9048       typedef enum _KTMOBJECT_TYPE {
9049 	KTMOBJECT_TRANSACTION,
9050 	KTMOBJECT_TRANSACTION_MANAGER,
9051 	KTMOBJECT_RESOURCE_MANAGER,
9052 	KTMOBJECT_ENLISTMENT,
9053 	KTMOBJECT_INVALID
9054       } KTMOBJECT_TYPE,*PKTMOBJECT_TYPE;
9055 
9056       typedef struct _KTMOBJECT_CURSOR {
9057 	GUID LastQuery;
9058 	DWORD ObjectIdCount;
9059 	GUID ObjectIds[1];
9060       } KTMOBJECT_CURSOR,*PKTMOBJECT_CURSOR;
9061 
9062 #ifdef __cplusplus
9063     }
9064 #endif
9065 
9066 #endif
9067 
9068 /* Field Names From (See _fields_ section)
9069  * FIXME: Verify these against documentation
9070  * -- These documentation describes Win32 Constants and Structures in Python --
9071  * Constants - http://packages.python.org/winappdbg/winappdbg.win32.context_i386-pysrc.html
9072  * WOW64_FLOATING_SAVE_AREA - http://packages.python.org/winappdbg/winappdbg.win32.context_amd64.WOW64_FLOATING_SAVE_AREA-class.html
9073  * WOW64_CONTEXT - http://packages.python.org/winappdbg/winappdbg.win32.context_amd64.WOW64_CONTEXT-class.html
9074  */
9075 
9076 #define WOW64_CONTEXT_i386 0x00010000
9077 #define WOW64_CONTEXT_i486 0x00010000
9078 #define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
9079 #define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
9080 #define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
9081 #define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
9082 #define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
9083 #define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
9084 #define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
9085 #define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
9086 
9087 #define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
9088 
9089 #define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
9090 #define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
9091 #define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
9092 #define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
9093 
9094 #define WOW64_SIZE_OF_80387_REGISTERS 80
9095 #define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
9096 
9097 typedef struct _WOW64_FLOATING_SAVE_AREA {
9098   DWORD   ControlWord;
9099   DWORD   StatusWord;
9100   DWORD   TagWord;
9101   DWORD   ErrorOffset;
9102   DWORD   ErrorSelector;
9103   DWORD   DataOffset;
9104   DWORD   DataSelector;
9105   BYTE    RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];
9106   DWORD   Cr0NpxState;
9107 } WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;
9108 
9109 #include "pshpack4.h"
9110 typedef struct _WOW64_CONTEXT {
9111   DWORD ContextFlags;
9112   DWORD Dr0;
9113   DWORD Dr1;
9114   DWORD Dr2;
9115   DWORD Dr3;
9116   DWORD Dr6;
9117   DWORD Dr7;
9118   WOW64_FLOATING_SAVE_AREA FloatSave;
9119   DWORD SegGs;
9120   DWORD SegFs;
9121   DWORD SegEs;
9122   DWORD SegDs;
9123   DWORD Edi;
9124   DWORD Esi;
9125   DWORD Ebx;
9126   DWORD Edx;
9127   DWORD Ecx;
9128   DWORD Eax;
9129   DWORD Ebp;
9130   DWORD Eip;
9131   DWORD SegCs;
9132   DWORD EFlags;
9133   DWORD Esp;
9134   DWORD SegSs;
9135   BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];
9136 } WOW64_CONTEXT, *PWOW64_CONTEXT;
9137 #include "poppack.h"
9138 
9139 typedef struct _WOW64_LDT_ENTRY {
9140   WORD  LimitLow;
9141   WORD  BaseLow;
9142   __C89_NAMELESS union {
9143     struct {
9144       BYTE BaseMid;
9145       BYTE Flags1;
9146       BYTE Flags2;
9147       BYTE BaseHi;
9148     } Bytes;
9149     struct {
9150       DWORD BaseMid  :8;
9151       DWORD Type  :5;
9152       DWORD Dpl  :2;
9153       DWORD Pres  :1;
9154       DWORD LimitHi  :4;
9155       DWORD Sys  :1;
9156       DWORD Reserved_0  :1;
9157       DWORD Default_Big  :1;
9158       DWORD Granularity  :1;
9159       DWORD BaseHi  :8;
9160     } Bits;
9161   } HighWord;
9162 } WOW64_LDT_ENTRY, *PWOW64_LDT_ENTRY;
9163 
9164     typedef struct _WOW64_DESCRIPTOR_TABLE_ENTRY {
9165       DWORD Selector;
9166       WOW64_LDT_ENTRY Descriptor;
9167     } WOW64_DESCRIPTOR_TABLE_ENTRY,*PWOW64_DESCRIPTOR_TABLE_ENTRY;
9168 
9169 #if (_WIN32_WINNT >= 0x0601)
9170 
9171 #ifndef ___PROCESSOR_NUMBER_DEFINED
9172 #define ___PROCESSOR_NUMBER_DEFINED
9173 typedef struct _PROCESSOR_NUMBER {
9174   WORD Group;
9175   BYTE Number;
9176   BYTE Reserved;
9177 } PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
9178 
9179 #define ALL_PROCESSOR_GROUPS 0xffff
9180 #endif /* !___PROCESSOR_NUMBER_DEFINED */
9181 
9182 #endif /*(_WIN32_WINNT >= 0x0601)*/
9183 
9184 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION (1)
9185 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION (2)
9186 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION (3)
9187 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION (4)
9188 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION (5)
9189 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION (6)
9190 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION (7)
9191 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE (8)
9192 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES (9)
9193 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS (10)
9194 #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO (11)
9195 
9196 #ifdef __cplusplus
9197 }
9198 #endif
9199 
9200 #endif /* _WINNT_ */
9201 
9202