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