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