zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

winnt.h (403819B) - Raw


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