master
    1/**
    2 * This file is part of the mingw-w64 runtime package.
    3 * No warranty is given; refer to the file DISCLAIMER within this package.
    4 */
    5
    6#ifndef _WINNT_
    7#define _WINNT_
    8
    9#include <_mingw_unicode.h>
   10
   11#ifdef __cplusplus
   12extern "C" {
   13#endif
   14
   15#include <_mingw.h>
   16#include <ctype.h>
   17#include <excpt.h>
   18#include <winapifamily.h>
   19#include <apiset.h>
   20
   21#define ANYSIZE_ARRAY 1
   22
   23#include <specstrings.h>
   24
   25#ifndef __WIDL__
   26#define __INTRINSIC_GROUP_WINNT /* only define the intrinsics in this file */
   27#include <psdk_inc/intrin-impl.h>
   28#endif
   29
   30#if defined(__x86_64) && \
   31  !(defined(_X86_) || defined(__i386__) || defined(_IA64_) || defined (__arm__) || 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
  414typedef struct _GROUP_AFFINITY {
  415  KAFFINITY Mask;
  416  WORD      Group;
  417  WORD      Reserved[3];
  418} GROUP_AFFINITY, *PGROUP_AFFINITY;
  419#endif /* !___GROUP_AFFINITY_DEFINED */
  420
  421typedef struct _GROUP_AFFINITY32 {
  422  DWORD Mask;
  423  WORD Group;
  424  WORD Reserved[3];
  425} GROUP_AFFINITY32, *PGROUP_AFFINITY32;
  426
  427typedef 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
  437typedef 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
  485typedef 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
  496typedef 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__)
  532typedef 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
  567typedef LONG_PTR RTL_REFERENCE_COUNT, *PRTL_REFERENCE_COUNT;
  568typedef 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) \
  715extern "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)
 1693extern "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
 2598VOID MemoryBarrier(VOID);
 2599FORCEINLINE 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
 4468typedef 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)
 5175DEFINE_ENUM_FLAG_OPERATORS(JOB_OBJECT_NET_RATE_CONTROL_FLAGS)
 5176C_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)
 5196DEFINE_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
 9228typedef struct _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
 9229typedef 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
10649typedef 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"
10662typedef 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
10691typedef 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
10725typedef 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