Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the mingw-w64 runtime package.
      4  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
      5  */
      6 #ifndef _WINNT_
      7 #define _WINNT_
      8 
      9 #include <_mingw_unicode.h>
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15 #include <_mingw.h>
     16 #include <ctype.h>
     17 #include <excpt.h>
     18 #define ANYSIZE_ARRAY 1
     19 
     20 #include <specstrings.h>
     21 
     22 #if defined(__x86_64) && \
     23   !(defined(_X86_) || defined(__i386__) || defined(_IA64_))
     24 #if !defined(_AMD64_)
     25 #define _AMD64_
     26 #endif
     27 #endif /* _AMD64_ */
     28 
     29 #if defined(__ia64__) && \
     30   !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_))
     31 #if !defined(_IA64_)
     32 #define _IA64_
     33 #endif
     34 #endif /* _IA64_ */
     35 
     36 #include <sdkddkver.h>
     37 
     38 #define RESTRICTED_POINTER
     39 
     40 #undef  UNALIGNED	/* avoid redefinition warnings vs _mingw.h */
     41 #undef  UNALIGNED64
     42 #if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64)
     43 #define ALIGNMENT_MACHINE
     44 #define UNALIGNED __unaligned
     45 #if defined(_WIN64)
     46 #define UNALIGNED64 __unaligned
     47 #else
     48 #define UNALIGNED64
     49 #endif
     50 #else
     51 #undef ALIGNMENT_MACHINE
     52 #define UNALIGNED
     53 #define UNALIGNED64
     54 #endif
     55 
     56 #ifdef _WIN64
     57 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
     58 #define MEMORY_ALLOCATION_ALIGNMENT 16
     59 #else
     60 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
     61 #define MEMORY_ALLOCATION_ALIGNMENT 8
     62 #endif
     63 
     64 #ifdef __cplusplus
     65 #define TYPE_ALIGNMENT(t) __alignof__ (t)
     66 #else
     67 #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
     68 #endif
     69 
     70 #ifdef _WIN64
     71 #ifdef _AMD64_
     72 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
     73 #elif defined(_IA64_)
     74 #define PROBE_ALIGNMENT(_s) (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
     75 #else
     76 #error No Target Architecture
     77 #endif
     78 #define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
     79 #else
     80 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
     81 #endif
     82 
     83 #if defined(_MSC_VER)
     84 # define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
     85 #else
     86 # define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
     87 #endif
     88 
     89 #include <basetsd.h>
     90 
     91 #ifndef DECLSPEC_IMPORT
     92 #if defined(_X86_) || defined(__ia64__) || defined(__x86_64)
     93 #define DECLSPEC_IMPORT __declspec(dllimport)
     94 #else
     95 #define DECLSPEC_IMPORT
     96 #endif
     97 #endif
     98 
     99 #ifndef DECLSPEC_NORETURN
    100 #define DECLSPEC_NORETURN __declspec(noreturn)
    101 #endif
    102 
    103 #ifndef DECLSPEC_ALIGN
    104 #if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
    105 #define DECLSPEC_ALIGN(x) __declspec(align(x))
    106 #elif defined(__GNUC__)
    107 #define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x)))
    108 #else
    109 #define DECLSPEC_ALIGN(x)
    110 #endif
    111 #endif /* DECLSPEC_ALIGN */
    112 
    113 #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
    114 #if defined(_AMD64_) || defined(_X86_)
    115 #define SYSTEM_CACHE_ALIGNMENT_SIZE 64
    116 #else
    117 #define SYSTEM_CACHE_ALIGNMENT_SIZE 128
    118 #endif
    119 #endif
    120 
    121 #ifndef DECLSPEC_CACHEALIGN
    122 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
    123 #endif
    124 
    125 #ifndef DECLSPEC_UUID
    126 #define DECLSPEC_UUID(x)
    127 #endif
    128 
    129 #ifndef DECLSPEC_NOVTABLE
    130 #define DECLSPEC_NOVTABLE
    131 #endif
    132 
    133 #ifndef DECLSPEC_SELECTANY
    134 #define DECLSPEC_SELECTANY __declspec(selectany)
    135 #endif
    136 
    137 #ifndef NOP_FUNCTION
    138 #if (_MSC_VER >= 1210)
    139 #define NOP_FUNCTION __noop
    140 #else
    141 #define NOP_FUNCTION (void)0
    142 #endif
    143 #endif
    144 
    145 #ifndef DECLSPEC_NOINLINE
    146 #if (_MSC_VER >= 1300)
    147 #define DECLSPEC_NOINLINE  __declspec(noinline)
    148 #elif defined(__GNUC__)
    149 #define DECLSPEC_NOINLINE __attribute__((noinline))
    150 #else
    151 #define DECLSPEC_NOINLINE
    152 #endif
    153 #endif /* DECLSPEC_NOINLINE */
    154 
    155 #ifndef FORCEINLINE
    156 #if !defined(_MSC_VER) || (_MSC_VER >=1200)
    157 #define FORCEINLINE __forceinline
    158 #else
    159 #define FORCEINLINE __inline
    160 #endif
    161 #endif /* FORCEINLINE */
    162 
    163 #ifndef DECLSPEC_DEPRECATED
    164 #define DECLSPEC_DEPRECATED __declspec(deprecated)
    165 #define DEPRECATE_SUPPORTED
    166 #endif
    167 
    168 #define DECLSPEC_DEPRECATED_DDK
    169 #define PRAGMA_DEPRECATED_DDK 0
    170 
    171   typedef void *PVOID;
    172   typedef void *PVOID64;
    173 
    174 #if defined(_M_IX86)
    175 #define FASTCALL __fastcall
    176 #else
    177 #define FASTCALL
    178 #endif
    179 #define NTAPI __stdcall
    180 #if !defined(_NTSYSTEM_)
    181 #define NTSYSAPI DECLSPEC_IMPORT
    182 #define NTSYSCALLAPI DECLSPEC_IMPORT
    183 #else
    184 #define NTSYSAPI
    185 #define NTSYSCALLAPI
    186 #endif
    187 
    188 #ifndef VOID
    189 #define VOID void
    190   typedef char CHAR;
    191   typedef short SHORT;
    192   typedef __LONG32 LONG;
    193 #endif
    194 #ifndef __WCHAR_DEFINED
    195 #define __WCHAR_DEFINED
    196   typedef wchar_t WCHAR;
    197 #endif
    198   typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
    199   typedef CONST WCHAR *LPCWCH,*PCWCH;
    200   typedef WCHAR *NWPSTR,*LPWSTR,*PWSTR;
    201   typedef PWSTR *PZPWSTR;
    202   typedef CONST PWSTR *PCZPWSTR;
    203   typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
    204   typedef CONST WCHAR *LPCWSTR,*PCWSTR;
    205   typedef PCWSTR *PZPCWSTR;
    206   typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
    207   typedef CHAR *PCHAR,*LPCH,*PCH;
    208   typedef CONST CHAR *LPCCH,*PCCH;
    209   typedef CHAR *NPSTR,*LPSTR,*PSTR;
    210   typedef PSTR *PZPSTR;
    211   typedef CONST PSTR *PCZPSTR;
    212   typedef CONST CHAR *LPCSTR,*PCSTR;
    213   typedef PCSTR *PZPCSTR;
    214 
    215 #if defined(UNICODE)
    216 #ifndef _TCHAR_DEFINED
    217 #define _TCHAR_DEFINED
    218   typedef WCHAR TCHAR, *PTCHAR;
    219   typedef WCHAR TBYTE, *PTBYTE;
    220 #endif
    221 
    222   typedef LPWSTR LPTCH,PTCH;
    223   typedef LPWSTR PTSTR,LPTSTR;
    224   typedef LPCWSTR PCTSTR,LPCTSTR;
    225   typedef LPUWSTR PUTSTR,LPUTSTR;
    226   typedef LPCUWSTR PCUTSTR,LPCUTSTR;
    227   typedef LPWSTR LP;
    228 #define __TEXT(quote) L##quote
    229 #else
    230 #ifndef _TCHAR_DEFINED
    231 #define _TCHAR_DEFINED
    232   typedef char TCHAR, *PTCHAR;
    233   typedef unsigned char TBYTE, *PTBYTE;
    234 #endif
    235 
    236   typedef LPSTR LPTCH,PTCH;
    237   typedef LPSTR PTSTR,LPTSTR,PUTSTR,LPUTSTR;
    238   typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
    239 #define __TEXT(quote) quote
    240 #endif
    241 
    242 #define TEXT(quote) __TEXT(quote)
    243 
    244   typedef SHORT *PSHORT;
    245   typedef LONG *PLONG;
    246 
    247   typedef void *HANDLE;
    248 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
    249   typedef HANDLE *PHANDLE;
    250 
    251   typedef BYTE FCHAR;
    252   typedef WORD FSHORT;
    253   typedef DWORD FLONG;
    254 
    255 #ifndef _HRESULT_DEFINED
    256 #define _HRESULT_DEFINED
    257   typedef LONG HRESULT;
    258 #endif
    259 
    260 #ifdef __cplusplus
    261 #define EXTERN_C extern "C"
    262 #else
    263 #define EXTERN_C extern
    264 #endif
    265 
    266 #define STDMETHODCALLTYPE WINAPI
    267 #define STDMETHODVCALLTYPE __cdecl
    268 #define STDAPICALLTYPE WINAPI
    269 #define STDAPIVCALLTYPE __cdecl
    270 #define STDAPI EXTERN_C HRESULT WINAPI
    271 #define STDAPI_(type) EXTERN_C type WINAPI
    272 #define STDMETHODIMP HRESULT WINAPI
    273 #define STDMETHODIMP_(type) type WINAPI
    274 #define IFACEMETHODIMP STDMETHODIMP
    275 #define IFACEMETHODIMP_(type) STDMETHODIMP_(type)
    276 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
    277 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
    278 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
    279 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
    280 #define IFACEMETHODIMPV STDMETHODIMPV
    281 #define IFACEMETHODIMPV_(type) STDMETHODIMPV_(type)
    282 
    283   typedef char CCHAR;
    284 #ifndef _LCID_DEFINED
    285 #define _LCID_DEFINED
    286 typedef DWORD LCID;
    287 #endif
    288   typedef PDWORD PLCID;
    289 #ifndef _LANGID_DEFINED
    290 #define _LANGID_DEFINED
    291   typedef WORD LANGID;
    292 #endif
    293 #define APPLICATION_ERROR_MASK 0x20000000
    294 #define ERROR_SEVERITY_SUCCESS 0x00000000
    295 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
    296 #define ERROR_SEVERITY_WARNING 0x80000000
    297 #define ERROR_SEVERITY_ERROR 0xC0000000
    298 
    299 #ifdef __ia64__
    300   __declspec(align(16))
    301 #endif
    302     typedef struct _FLOAT128 {
    303       __MINGW_EXTENSION __int64 LowPart;
    304       __MINGW_EXTENSION __int64 HighPart;
    305   } FLOAT128;
    306 
    307   typedef FLOAT128 *PFLOAT128;
    308 
    309 #define _ULONGLONG_
    310   __MINGW_EXTENSION typedef __int64 LONGLONG;
    311   __MINGW_EXTENSION typedef unsigned __int64 ULONGLONG;
    312 
    313 #define MAXLONGLONG (0x7fffffffffffffff)
    314 
    315   typedef LONGLONG *PLONGLONG;
    316   typedef ULONGLONG *PULONGLONG;
    317 
    318   typedef LONGLONG USN;
    319 
    320 #ifndef _LARGE_INTEGER_DEFINED
    321 #define _LARGE_INTEGER_DEFINED
    322 
    323   typedef union _LARGE_INTEGER {
    324     __C89_NAMELESS struct {
    325       DWORD LowPart;
    326       LONG HighPart;
    327     } DUMMYSTRUCTNAME;
    328     struct {
    329       DWORD LowPart;
    330       LONG HighPart;
    331     } u;
    332     LONGLONG QuadPart;
    333   } LARGE_INTEGER;
    334 
    335   typedef LARGE_INTEGER *PLARGE_INTEGER;
    336 
    337   typedef union _ULARGE_INTEGER {
    338     __C89_NAMELESS struct {
    339       DWORD LowPart;
    340       DWORD HighPart;
    341     } DUMMYSTRUCTNAME;
    342     struct {
    343       DWORD LowPart;
    344       DWORD HighPart;
    345     } u;
    346     ULONGLONG QuadPart;
    347   } ULARGE_INTEGER;
    348 
    349   typedef ULARGE_INTEGER *PULARGE_INTEGER;
    350 
    351   typedef struct _LUID {
    352     DWORD LowPart;
    353     LONG HighPart;
    354   } LUID,*PLUID;
    355 
    356 #endif /* _LARGE_INTEGER_DEFINED */
    357 
    358 #define _DWORDLONG_
    359   typedef ULONGLONG DWORDLONG;
    360   typedef DWORDLONG *PDWORDLONG;
    361 
    362 #ifdef RC_INVOKED
    363 #define Int32x32To64(a,b) ((LONGLONG)((LONG)(a)) *(LONGLONG)((LONG)(b)))
    364 #define UInt32x32To64(a,b) ((ULONGLONG)((DWORD)(a)) *(ULONGLONG)((DWORD)(b)))
    365 #define Int64ShrlMod32(a,b) ((ULONGLONG)(a) >> (b))
    366 #elif (defined(_X86_) && !defined(__x86_64))
    367 #define Int32x32To64(a,b) (LONGLONG)((LONGLONG)(LONG)(a) *(LONG)(b))
    368 #define UInt32x32To64(a,b) (ULONGLONG)((ULONGLONG)(DWORD)(a) *(DWORD)(b))
    369 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
    370 #elif defined(__ia64__) || defined(__x86_64)
    371 #define Int32x32To64(a,b) ((LONGLONG)((LONG)(a)) *(LONGLONG)((LONG)(b)))
    372 #define UInt32x32To64(a,b) ((ULONGLONG)((DWORD)(a)) *(ULONGLONG)((DWORD)(b)))
    373 #define Int64ShrlMod32(a,b) ((ULONGLONG)(a) >> (b))
    374 #else
    375 #error Must define a target architecture.
    376 #endif
    377 
    378 #define Int64ShraMod32(a,b) ((LONGLONG)(a) >> (b))
    379 #define Int64ShllMod32(a,b) ((ULONGLONG)(a) << (b))
    380 
    381 #ifdef __cplusplus
    382   extern "C" {
    383 #endif
    384 
    385 #ifdef __x86_64
    386 
    387 #define RotateLeft8 _rotl8
    388 #define RotateLeft16 _rotl16
    389 #define RotateRight8 _rotr8
    390 #define RotateRight16 _rotr16
    391 
    392     unsigned char __cdecl _rotl8(unsigned char Value,unsigned char Shift);
    393     unsigned short __cdecl _rotl16(unsigned short Value,unsigned char Shift);
    394     unsigned char __cdecl _rotr8(unsigned char Value,unsigned char Shift);
    395     unsigned short __cdecl _rotr16(unsigned short Value,unsigned char Shift);
    396 #endif /* __x86_64 */
    397 
    398 #define RotateLeft32 _rotl
    399 #define RotateLeft64 _rotl64
    400 #define RotateRight32 _rotr
    401 #define RotateRight64 _rotr64
    402 
    403 #pragma push_macro ("_rotl")
    404 #pragma push_macro ("_rotr")
    405 #undef _rotl
    406 #undef _rotr
    407     unsigned int __cdecl _rotl(unsigned int Value,int Shift);
    408     unsigned int __cdecl _rotr(unsigned int Value,int Shift);
    409 #pragma pop_macro ("_rotr")
    410 #pragma pop_macro ("_rotl")
    411 #pragma push_macro ("_rotr64")
    412 #pragma push_macro ("_rotl64")
    413 #undef _rotl64
    414 #undef _rotr64
    415     __MINGW_EXTENSION unsigned __int64 __cdecl _rotl64(unsigned __int64 Value,int Shift);
    416     __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 Value,int Shift);
    417 #pragma pop_macro ("_rotl64")
    418 #pragma pop_macro ("_rotr64")
    419 
    420 #ifdef __cplusplus
    421   }
    422 #endif
    423 
    424 #define ANSI_NULL ((CHAR)0)
    425 #define UNICODE_NULL ((WCHAR)0)
    426 #define UNICODE_STRING_MAX_BYTES ((WORD) 65534)
    427 #define UNICODE_STRING_MAX_CHARS (32767)
    428 
    429 #ifndef _BOOLEAN_
    430 #define _BOOLEAN_
    431   typedef BYTE BOOLEAN;
    432 #endif
    433   typedef BOOLEAN *PBOOLEAN;
    434 
    435 #ifndef _LIST_ENTRY_DEFINED
    436 #define _LIST_ENTRY_DEFINED
    437 
    438   typedef struct _LIST_ENTRY {
    439     struct _LIST_ENTRY *Flink;
    440     struct _LIST_ENTRY *Blink;
    441   } LIST_ENTRY,*PLIST_ENTRY,*RESTRICTED_POINTER PRLIST_ENTRY;
    442 
    443   typedef struct _SINGLE_LIST_ENTRY {
    444     struct _SINGLE_LIST_ENTRY *Next;
    445   } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
    446 
    447   typedef struct LIST_ENTRY32 {
    448     DWORD Flink;
    449     DWORD Blink;
    450   } LIST_ENTRY32;
    451   typedef LIST_ENTRY32 *PLIST_ENTRY32;
    452 
    453   typedef struct LIST_ENTRY64 {
    454     ULONGLONG Flink;
    455     ULONGLONG Blink;
    456   } LIST_ENTRY64;
    457   typedef LIST_ENTRY64 *PLIST_ENTRY64;
    458 
    459 #endif /* _LIST_ENTRY_DEFINED */
    460 
    461 #include <guiddef.h>
    462 
    463 #ifndef __OBJECTID_DEFINED
    464 #define __OBJECTID_DEFINED
    465   typedef struct _OBJECTID {
    466     GUID Lineage;
    467     DWORD Uniquifier;
    468   } OBJECTID;
    469 #endif
    470 
    471 #define MINCHAR 0x80
    472 #define MAXCHAR 0x7f
    473 #define MINSHORT 0x8000
    474 #define MAXSHORT 0x7fff
    475 #define MINLONG 0x80000000
    476 #define MAXLONG 0x7fffffff
    477 #define MAXBYTE 0xff
    478 #define MAXWORD 0xffff
    479 #define MAXDWORD 0xffffffff
    480 
    481 #define FIELD_OFFSET(type,field) ((LONG)(LONG_PTR)&(((type *)0)->field))
    482 #define RTL_FIELD_SIZE(type,field) (sizeof(((type *)0)->field))
    483 #define RTL_SIZEOF_THROUGH_FIELD(type,field) (FIELD_OFFSET(type,field) + RTL_FIELD_SIZE(type,field))
    484 #define RTL_CONTAINS_FIELD(Struct,Size,Field) ((((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)))
    485 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
    486 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
    487 
    488 #ifdef ENABLE_RTL_NUMBER_OF_V2
    489 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
    490 #else
    491 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
    492 #endif
    493 
    494 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
    495 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
    496 
    497 #define RTL_FIELD_TYPE(type,field) (((type*)0)->field)
    498 #define RTL_NUMBER_OF_FIELD(type,field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type,field)))
    499 #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)))
    500 
    501 #ifdef __cplusplus
    502 #define RTL_CONST_CAST(type) const_cast<type>
    503 #else
    504 #define RTL_CONST_CAST(type) (type)
    505 #endif
    506 
    507 #ifdef __cplusplus
    508 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
    509 extern "C++" { \
    510 inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) | ((int)b)); } \
    511 inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) |= ((int)b)); } \
    512 inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) & ((int)b)); } \
    513 inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) &= ((int)b)); } \
    514 inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((int)a)); } \
    515 inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) ^ ((int)b)); } \
    516 inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((int &)a) ^= ((int)b)); } \
    517 }
    518 #else
    519 #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
    520 #endif
    521 
    522 #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) *8)
    523 #define RTL_BITS_OF_FIELD(type,field) (RTL_BITS_OF(RTL_FIELD_TYPE(type,field)))
    524 #define CONTAINING_RECORD(address,type,field) ((type *)((PCHAR)(address) - (ULONG_PTR)(&((type *)0)->field)))
    525 
    526 #define VER_WORKSTATION_NT                  0x40000000
    527 #define VER_SERVER_NT                       0x80000000
    528 #define VER_SUITE_SMALLBUSINESS             0x00000001
    529 #define VER_SUITE_ENTERPRISE                0x00000002
    530 #define VER_SUITE_BACKOFFICE                0x00000004
    531 #define VER_SUITE_COMMUNICATIONS            0x00000008
    532 #define VER_SUITE_TERMINAL                  0x00000010
    533 #define VER_SUITE_SMALLBUSINESS_RESTRICTED  0x00000020
    534 #define VER_SUITE_EMBEDDEDNT                0x00000040
    535 #define VER_SUITE_DATACENTER                0x00000080
    536 #define VER_SUITE_SINGLEUSERTS              0x00000100
    537 #define VER_SUITE_PERSONAL                  0x00000200
    538 #define VER_SUITE_BLADE                     0x00000400
    539 #define VER_SUITE_EMBEDDED_RESTRICTED       0x00000800
    540 #define VER_SUITE_SECURITY_APPLIANCE        0x00001000
    541 #define VER_SUITE_STORAGE_SERVER            0x00002000
    542 #define VER_SUITE_COMPUTE_SERVER            0x00004000
    543 #define VER_SUITE_WH_SERVER                 0x00008000
    544 
    545 #define PRODUCT_UNDEFINED                         0x0
    546 
    547 #define PRODUCT_ULTIMATE                          0x1
    548 #define PRODUCT_HOME_BASIC                        0x2
    549 #define PRODUCT_HOME_PREMIUM                      0x3
    550 #define PRODUCT_ENTERPRISE                        0x4
    551 #define PRODUCT_HOME_BASIC_N                      0x5
    552 #define PRODUCT_BUSINESS                          0x6
    553 #define PRODUCT_STANDARD_SERVER                   0x7
    554 #define PRODUCT_DATACENTER_SERVER                 0x8
    555 #define PRODUCT_SMALLBUSINESS_SERVER              0x9
    556 #define PRODUCT_ENTERPRISE_SERVER                 0xa
    557 #define PRODUCT_STARTER                           0xb
    558 #define PRODUCT_DATACENTER_SERVER_CORE            0xc
    559 #define PRODUCT_STANDARD_SERVER_CORE              0xd
    560 #define PRODUCT_ENTERPRISE_SERVER_CORE            0xe
    561 #define PRODUCT_ENTERPRISE_SERVER_IA64            0xf
    562 #define PRODUCT_BUSINESS_N                        0x10
    563 #define PRODUCT_WEB_SERVER                        0x11
    564 #define PRODUCT_CLUSTER_SERVER                    0x12
    565 #define PRODUCT_HOME_SERVER                       0x13
    566 #define PRODUCT_STORAGE_EXPRESS_SERVER            0x14
    567 #define PRODUCT_STORAGE_STANDARD_SERVER           0x15
    568 #define PRODUCT_STORAGE_WORKGROUP_SERVER          0x16
    569 #define PRODUCT_STORAGE_ENTERPRISE_SERVER         0x17
    570 #define PRODUCT_SERVER_FOR_SMALLBUSINESS          0x18
    571 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM      0x19
    572 #define PRODUCT_HOME_PREMIUM_N                    0x1a
    573 #define PRODUCT_ENTERPRISE_N                      0x1b
    574 #define PRODUCT_ULTIMATE_N                        0x1c
    575 #define PRODUCT_WEB_SERVER_CORE                   0x1d
    576 #define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT  0x1e
    577 #define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY    0x1f
    578 #define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING   0x20
    579 #define PRODUCT_SERVER_FOUNDATION                 0x21
    580 #define PRODUCT_HOME_PREMIUM_SERVER               0x22
    581 #define PRODUCT_SERVER_FOR_SMALLBUSINESS_V        0x23
    582 #define PRODUCT_STANDARD_SERVER_V                 0x24
    583 #define PRODUCT_DATACENTER_SERVER_V               0x25
    584 #define PRODUCT_ENTERPRISE_SERVER_V               0x26
    585 #define PRODUCT_DATACENTER_SERVER_CORE_V          0x27
    586 #define PRODUCT_STANDARD_SERVER_CORE_V            0x28
    587 #define PRODUCT_ENTERPRISE_SERVER_CORE_V          0x29
    588 #define PRODUCT_HYPERV                            0x2a
    589 #define PRODUCT_STORAGE_EXPRESS_SERVER_CORE       0x2b
    590 #define PRODUCT_STORAGE_STANDARD_SERVER_CORE      0x2c
    591 #define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE     0x2d
    592 #define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE    0x2e
    593 #define PRODUCT_STARTER_N                         0x2f
    594 #define PRODUCT_PROFESSIONAL                      0x30
    595 #define PRODUCT_PROFESSIONAL_N                    0x31
    596 #define PRODUCT_SB_SOLUTION_SERVER                0x32
    597 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS           0x33
    598 #define PRODUCT_STANDARD_SERVER_SOLUTIONS         0x34
    599 #define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE    0x35
    600 #define PRODUCT_SB_SOLUTION_SERVER_EM             0x36
    601 #define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM        0x37
    602 #define PRODUCT_SOLUTION_EMBEDDEDSERVER           0x38
    603 #define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE      0x39
    604 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT     0x3B
    605 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL     0x3C
    606 #define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC  0x3D
    607 #define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC  0x3E
    608 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x3f
    609 #define PRODUCT_CLUSTER_SERVER_V                  0x40
    610 #define PRODUCT_EMBEDDED                          0x41
    611 #define PRODUCT_STARTER_E                         0x42
    612 #define PRODUCT_HOME_BASIC_E                      0x43
    613 #define PRODUCT_HOME_PREMIUM_E                    0x44
    614 #define PRODUCT_PROFESSIONAL_E                    0x45
    615 #define PRODUCT_ENTERPRISE_E                      0x46
    616 #define PRODUCT_ULTIMATE_E                        0x47
    617 #define PRODUCT_ENTERPRISE_EVALUATION             0x48
    618 #define PRODUCT_MULTIPOINT_STANDARD_SERVER        0x4C
    619 #define PRODUCT_MULTIPOINT_PREMIUM_SERVER         0x4D
    620 #define PRODUCT_STANDARD_EVALUATION_SERVER        0x4F
    621 #define PRODUCT_DATACENTER_EVALUATION_SERVER      0x50
    622 #define PRODUCT_ENTERPRISE_N_EVALUATION           0x54
    623 #define PRODUCT_EMBEDDED_AUTOMOTIVE               0x55
    624 #define PRODUCT_EMBEDDED_INDUSTRY_A               0x56
    625 #define PRODUCT_THINPC                            0x57
    626 #define PRODUCT_EMBEDDED_A                        0x58
    627 #define PRODUCT_EMBEDDED_INDUSTRY                 0x59
    628 #define PRODUCT_EMBEDDED_E                        0x5A
    629 #define PRODUCT_EMBEDDED_INDUSTRY_E               0x5B
    630 #define PRODUCT_EMBEDDED_INDUSTRY_A_E             0x5C
    631 #define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x5F
    632 #define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x60
    633 #define PRODUCT_CORE_ARM                          0x61
    634 #define PRODUCT_CORE_N                            0x62
    635 #define PRODUCT_CORE_COUNTRYSPECIFIC              0x63
    636 #define PRODUCT_CORE_SINGLELANGUAGE               0x64
    637 #define PRODUCT_CORE                              0x65
    638 #define PRODUCT_PROFESSIONAL_WMC                  0x67
    639 #define PRODUCT_MOBILE_CORE                       0x68
    640 
    641 #define PRODUCT_UNLICENSED                        0xabcdabcd
    642 
    643 #define LANG_NEUTRAL                              0x00
    644 #define LANG_INVARIANT                            0x7f
    645 
    646 #define LANG_AFRIKAANS                            0x36
    647 #define LANG_ALBANIAN                             0x1c
    648 #define LANG_ALSATIAN                             0x84
    649 #define LANG_AMHARIC                              0x5e
    650 #define LANG_ARABIC                               0x01
    651 #define LANG_ARMENIAN                             0x2b
    652 #define LANG_ASSAMESE                             0x4d
    653 #define LANG_AZERI                                0x2c
    654 #define LANG_AZERBAIJANI			  0x2c
    655 #define LANG_BANGLA				  0x45
    656 #define LANG_BASHKIR                              0x6d
    657 #define LANG_BASQUE                               0x2d
    658 #define LANG_BELARUSIAN                           0x23
    659 #define LANG_BENGALI                              0x45
    660 #define LANG_BRETON                               0x7e
    661 #define LANG_BOSNIAN                              0x1a
    662 #define LANG_BOSNIAN_NEUTRAL                    0x781a
    663 #define LANG_BULGARIAN                            0x02
    664 #define LANG_CATALAN                              0x03
    665 #define LANG_CENTRAL_KURDISH			  0x92
    666 #define LANG_CHEROKEE				  0x5c
    667 #define LANG_CHINESE                              0x04
    668 #define LANG_CHINESE_SIMPLIFIED                   0x04
    669 #define LANG_CHINESE_TRADITIONAL                0x7c04
    670 #define LANG_CORSICAN                             0x83
    671 #define LANG_CROATIAN                             0x1a
    672 #define LANG_CZECH                                0x05
    673 #define LANG_DANISH                               0x06
    674 #define LANG_DARI                                 0x8c
    675 #define LANG_DIVEHI                               0x65
    676 #define LANG_DUTCH                                0x13
    677 #define LANG_ENGLISH                              0x09
    678 #define LANG_ESTONIAN                             0x25
    679 #define LANG_FAEROESE                             0x38
    680 #define LANG_FARSI                                0x29
    681 #define LANG_FILIPINO                             0x64
    682 #define LANG_FINNISH                              0x0b
    683 #define LANG_FRENCH                               0x0c
    684 #define LANG_FRISIAN                              0x62
    685 #define LANG_FULAH				  0x67
    686 #define LANG_GALICIAN                             0x56
    687 #define LANG_GEORGIAN                             0x37
    688 #define LANG_GERMAN                               0x07
    689 #define LANG_GREEK                                0x08
    690 #define LANG_GREENLANDIC                          0x6f
    691 #define LANG_GUJARATI                             0x47
    692 #define LANG_HAUSA                                0x68
    693 #define LANG_HEBREW                               0x0d
    694 #define LANG_HINDI                                0x39
    695 #define LANG_HUNGARIAN                            0x0e
    696 #define LANG_ICELANDIC                            0x0f
    697 #define LANG_IGBO                                 0x70
    698 #define LANG_INDONESIAN                           0x21
    699 #define LANG_INUKTITUT                            0x5d
    700 #define LANG_IRISH                                0x3c
    701 #define LANG_ITALIAN                              0x10
    702 #define LANG_JAPANESE                             0x11
    703 #define LANG_KANNADA                              0x4b
    704 #define LANG_KASHMIRI                             0x60
    705 #define LANG_KAZAK                                0x3f
    706 #define LANG_KHMER                                0x53
    707 #define LANG_KICHE                                0x86
    708 #define LANG_KINYARWANDA                          0x87
    709 #define LANG_KONKANI                              0x57
    710 #define LANG_KOREAN                               0x12
    711 #define LANG_KYRGYZ                               0x40
    712 #define LANG_LAO                                  0x54
    713 #define LANG_LATVIAN                              0x26
    714 #define LANG_LITHUANIAN                           0x27
    715 #define LANG_LOWER_SORBIAN                        0x2e
    716 #define LANG_LUXEMBOURGISH                        0x6e
    717 #define LANG_MACEDONIAN                           0x2f
    718 #define LANG_MALAY                                0x3e
    719 #define LANG_MALAYALAM                            0x4c
    720 #define LANG_MALTESE                              0x3a
    721 #define LANG_MANIPURI                             0x58
    722 #define LANG_MAORI                                0x81
    723 #define LANG_MAPUDUNGUN                           0x7a
    724 #define LANG_MARATHI                              0x4e
    725 #define LANG_MOHAWK                               0x7c
    726 #define LANG_MONGOLIAN                            0x50
    727 #define LANG_NEPALI                               0x61
    728 #define LANG_NORWEGIAN                            0x14
    729 #define LANG_OCCITAN                              0x82
    730 #define LANG_ODIA				  0x48
    731 #define LANG_ORIYA                                0x48
    732 #define LANG_PASHTO                               0x63
    733 #define LANG_PERSIAN                              0x29
    734 #define LANG_POLISH                               0x15
    735 #define LANG_PORTUGUESE                           0x16
    736 #define LANG_PULAR				  0x67
    737 #define LANG_PUNJABI                              0x46
    738 #define LANG_QUECHUA                              0x6b
    739 #define LANG_ROMANIAN                             0x18
    740 #define LANG_ROMANSH                              0x17
    741 #define LANG_RUSSIAN                              0x19
    742 #define LANG_SAKHA				  0x85
    743 #define LANG_SAMI                                 0x3b
    744 #define LANG_SANSKRIT                             0x4f
    745 #define LANG_SCOTTISH_GAELIC			  0x91
    746 #define LANG_SERBIAN                              0x1a
    747 #define LANG_SERBIAN_NEUTRAL                    0x7c1a
    748 #define LANG_SINDHI                               0x59
    749 #define LANG_SINHALESE                            0x5b
    750 #define LANG_SLOVAK                               0x1b
    751 #define LANG_SLOVENIAN                            0x24
    752 #define LANG_SOTHO                                0x6c
    753 #define LANG_SPANISH                              0x0a
    754 #define LANG_SWAHILI                              0x41
    755 #define LANG_SWEDISH                              0x1d
    756 #define LANG_SYRIAC                               0x5a
    757 #define LANG_TAJIK                                0x28
    758 #define LANG_TAMAZIGHT                            0x5f
    759 #define LANG_TAMIL                                0x49
    760 #define LANG_TATAR                                0x44
    761 #define LANG_TELUGU                               0x4a
    762 #define LANG_THAI                                 0x1e
    763 #define LANG_TIBETAN                              0x51
    764 #define LANG_TIGRIGNA                             0x73
    765 #define LANG_TIGRINYA				  0x73
    766 #define LANG_TSWANA                               0x32
    767 #define LANG_TURKISH                              0x1f
    768 #define LANG_TURKMEN                              0x42
    769 #define LANG_UIGHUR                               0x80
    770 #define LANG_UKRAINIAN                            0x22
    771 #define LANG_UPPER_SORBIAN                        0x2e
    772 #define LANG_URDU                                 0x20
    773 #define LANG_UZBEK                                0x43
    774 #define LANG_VALENCIAN				  0x03
    775 #define LANG_VIETNAMESE                           0x2a
    776 #define LANG_WELSH                                0x52
    777 #define LANG_WOLOF                                0x88
    778 #define LANG_XHOSA                                0x34
    779 #define LANG_YAKUT                                0x85
    780 #define LANG_YI                                   0x78
    781 #define LANG_YORUBA                               0x6a
    782 #define LANG_ZULU                                 0x35
    783 
    784 #define SUBLANG_NEUTRAL                           0x00
    785 #define SUBLANG_DEFAULT                           0x01
    786 #define SUBLANG_SYS_DEFAULT                       0x02
    787 #define SUBLANG_CUSTOM_DEFAULT                    0x03
    788 #define SUBLANG_CUSTOM_UNSPECIFIED                0x04
    789 #define SUBLANG_UI_CUSTOM_DEFAULT                 0x05
    790 
    791 #define SUBLANG_AFRIKAANS_SOUTH_AFRICA            0x01
    792 #define SUBLANG_ALBANIAN_ALBANIA                  0x01
    793 #define SUBLANG_ALSATIAN_FRANCE                   0x01
    794 #define SUBLANG_AMHARIC_ETHIOPIA                  0x01
    795 #define SUBLANG_ARABIC_SAUDI_ARABIA               0x01
    796 #define SUBLANG_ARABIC_IRAQ                       0x02
    797 #define SUBLANG_ARABIC_EGYPT                      0x03
    798 #define SUBLANG_ARABIC_LIBYA                      0x04
    799 #define SUBLANG_ARABIC_ALGERIA                    0x05
    800 #define SUBLANG_ARABIC_MOROCCO                    0x06
    801 #define SUBLANG_ARABIC_TUNISIA                    0x07
    802 #define SUBLANG_ARABIC_OMAN                       0x08
    803 #define SUBLANG_ARABIC_YEMEN                      0x09
    804 #define SUBLANG_ARABIC_SYRIA                      0x0a
    805 #define SUBLANG_ARABIC_JORDAN                     0x0b
    806 #define SUBLANG_ARABIC_LEBANON                    0x0c
    807 #define SUBLANG_ARABIC_KUWAIT                     0x0d
    808 #define SUBLANG_ARABIC_UAE                        0x0e
    809 #define SUBLANG_ARABIC_BAHRAIN                    0x0f
    810 #define SUBLANG_ARABIC_QATAR                      0x10
    811 #define SUBLANG_ARMENIAN_ARMENIA                  0x01
    812 #define SUBLANG_ASSAMESE_INDIA                    0x01
    813 #define SUBLANG_AZERI_LATIN                       0x01
    814 #define SUBLANG_AZERI_CYRILLIC                    0x02
    815 #define SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN      0x01
    816 #define SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC   0x02
    817 #define SUBLANG_BANGLA_INDIA                      0x01
    818 #define SUBLANG_BANGLA_BANGLADESH                 0x02
    819 #define SUBLANG_BASHKIR_RUSSIA                    0x01
    820 #define SUBLANG_BASQUE_BASQUE                     0x01
    821 #define SUBLANG_BELARUSIAN_BELARUS                0x01
    822 #define SUBLANG_BENGALI_INDIA                     0x01
    823 #define SUBLANG_BENGALI_BANGLADESH                0x02
    824 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN  0x05
    825 #define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
    826 #define SUBLANG_BRETON_FRANCE                     0x01
    827 #define SUBLANG_BULGARIAN_BULGARIA                0x01
    828 #define SUBLANG_CATALAN_CATALAN                   0x01
    829 #define SUBLANG_CENTRAL_KURDISH_IRAQ              0x01
    830 #define SUBLANG_CHEROKEE_CHEROKEE                 0x01
    831 #define SUBLANG_CHINESE_TRADITIONAL               0x01
    832 #define SUBLANG_CHINESE_SIMPLIFIED                0x02
    833 #define SUBLANG_CHINESE_HONGKONG                  0x03
    834 #define SUBLANG_CHINESE_SINGAPORE                 0x04
    835 #define SUBLANG_CHINESE_MACAU                     0x05
    836 #define SUBLANG_CORSICAN_FRANCE                   0x01
    837 #define SUBLANG_CZECH_CZECH_REPUBLIC              0x01
    838 #define SUBLANG_CROATIAN_CROATIA                  0x01
    839 #define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
    840 #define SUBLANG_DANISH_DENMARK                    0x01
    841 #define SUBLANG_DARI_AFGHANISTAN                  0x01
    842 #define SUBLANG_DIVEHI_MALDIVES                   0x01
    843 #define SUBLANG_DUTCH                             0x01
    844 #define SUBLANG_DUTCH_BELGIAN                     0x02
    845 #define SUBLANG_ENGLISH_US                        0x01
    846 #define SUBLANG_ENGLISH_UK                        0x02
    847 #define SUBLANG_ENGLISH_AUS                       0x03
    848 #define SUBLANG_ENGLISH_CAN                       0x04
    849 #define SUBLANG_ENGLISH_NZ                        0x05
    850 #if (WINVER >= 0x0600)
    851 #define SUBLANG_ENGLISH_IRELAND                   0x06
    852 #endif /* WINVER >= 0x0600 */
    853 #define SUBLANG_ENGLISH_EIRE                      0x06
    854 #define SUBLANG_ENGLISH_SOUTH_AFRICA              0x07
    855 #define SUBLANG_ENGLISH_JAMAICA                   0x08
    856 #define SUBLANG_ENGLISH_CARIBBEAN                 0x09
    857 #define SUBLANG_ENGLISH_BELIZE                    0x0a
    858 #define SUBLANG_ENGLISH_TRINIDAD                  0x0b
    859 #define SUBLANG_ENGLISH_ZIMBABWE                  0x0c
    860 #define SUBLANG_ENGLISH_PHILIPPINES               0x0d
    861 #define SUBLANG_ENGLISH_INDIA                     0x10
    862 #define SUBLANG_ENGLISH_MALAYSIA                  0x11
    863 #define SUBLANG_ENGLISH_SINGAPORE                 0x12
    864 #define SUBLANG_ESTONIAN_ESTONIA                  0x01
    865 #define SUBLANG_FAEROESE_FAROE_ISLANDS            0x01
    866 #define SUBLANG_FILIPINO_PHILIPPINES              0x01
    867 #define SUBLANG_FINNISH_FINLAND                   0x01
    868 #define SUBLANG_FRENCH                            0x01
    869 #define SUBLANG_FRENCH_BELGIAN                    0x02
    870 #define SUBLANG_FRENCH_CANADIAN                   0x03
    871 #define SUBLANG_FRENCH_SWISS                      0x04
    872 #define SUBLANG_FRENCH_LUXEMBOURG                 0x05
    873 #define SUBLANG_FRENCH_MONACO                     0x06
    874 #define SUBLANG_FRISIAN_NETHERLANDS               0x01
    875 #define SUBLANG_FULAH_SENEGAL                     0x02
    876 #define SUBLANG_GALICIAN_GALICIAN                 0x01
    877 #define SUBLANG_GEORGIAN_GEORGIA                  0x01
    878 #define SUBLANG_GERMAN                            0x01
    879 #define SUBLANG_GERMAN_SWISS                      0x02
    880 #define SUBLANG_GERMAN_AUSTRIAN                   0x03
    881 #define SUBLANG_GERMAN_LUXEMBOURG                 0x04
    882 #define SUBLANG_GERMAN_LIECHTENSTEIN              0x05
    883 #define SUBLANG_GREEK_GREECE                      0x01
    884 #define SUBLANG_GREENLANDIC_GREENLAND             0x01
    885 #define SUBLANG_GUJARATI_INDIA                    0x01
    886 #define SUBLANG_HAUSA_NIGERIA_LATIN               0x01
    887 #define SUBLANG_HAUSA_NIGERIA    SUBLANG_HAUSA_NIGERIA_LATIN	/* SUBLANG_HAUSA_NIGERIA_LATIN is what MS defines */
    888 #define SUBLANG_HAWAIIAN_US                       0x01
    889 #define SUBLANG_HEBREW_ISRAEL                     0x01
    890 #define SUBLANG_HINDI_INDIA                       0x01
    891 #define SUBLANG_HUNGARIAN_HUNGARY                 0x01
    892 #define SUBLANG_ICELANDIC_ICELAND                 0x01
    893 #define SUBLANG_IGBO_NIGERIA                      0x01
    894 #define SUBLANG_INDONESIAN_INDONESIA              0x01
    895 #define SUBLANG_INUKTITUT_CANADA                  0x01
    896 #define SUBLANG_INUKTITUT_CANADA_LATIN            0x02
    897 #define SUBLANG_IRISH_IRELAND                     0x02
    898 #define SUBLANG_ITALIAN                           0x01
    899 #define SUBLANG_ITALIAN_SWISS                     0x02
    900 #define SUBLANG_JAPANESE_JAPAN                    0x01
    901 #define SUBLANG_KANNADA_INDIA                     0x01
    902 #define SUBLANG_KASHMIRI_INDIA                    0x02
    903 #define SUBLANG_KASHMIRI_SASIA                    0x02
    904 #define SUBLANG_KAZAK_KAZAKHSTAN                  0x01
    905 #define SUBLANG_KHMER_CAMBODIA                    0x01
    906 #define SUBLANG_KICHE_GUATEMALA                   0x01
    907 #define SUBLANG_KINYARWANDA_RWANDA                0x01
    908 #define SUBLANG_KONKANI_INDIA                     0x01
    909 #define SUBLANG_KOREAN                            0x01
    910 #define SUBLANG_KYRGYZ_KYRGYZSTAN                 0x01
    911 #define SUBLANG_LAO_LAO                           0x01
    912 #define SUBLANG_LAO_LAO_PDR            SUBLANG_LAO_LAO		/* SUBLANG_LAO_LAO is what MS defines */
    913 #define SUBLANG_LATVIAN_LATVIA                    0x01
    914 #if (WINVER >= 0x0600)
    915 #define SUBLANG_LITHUANIAN_LITHUANIA              0x01
    916 #endif /* WINVER >= 0x0600 */
    917 #define SUBLANG_LITHUANIAN                        0x01
    918 #define SUBLANG_LOWER_SORBIAN_GERMANY             0x02
    919 #define SUBLANG_LUXEMBOURGISH_LUXEMBOURG          0x01
    920 #define SUBLANG_MACEDONIAN_MACEDONIA              0x01
    921 #define SUBLANG_MALAY_MALAYSIA                    0x01
    922 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM           0x02
    923 #define SUBLANG_MALAYALAM_INDIA                   0x01
    924 #define SUBLANG_MALTESE_MALTA                     0x01
    925 #define SUBLANG_MAORI_NEW_ZEALAND                 0x01
    926 #define SUBLANG_MAPUDUNGUN_CHILE                  0x01
    927 #define SUBLANG_MARATHI_INDIA                     0x01
    928 #define SUBLANG_MOHAWK_MOHAWK                     0x01
    929 #define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA       0x01
    930 #define SUBLANG_MONGOLIAN_PRC                     0x02
    931 #define SUBLANG_NEPALI_NEPAL                      0x01
    932 #define SUBLANG_NEPALI_INDIA                      0x02
    933 #define SUBLANG_NORWEGIAN_BOKMAL                  0x01
    934 #define SUBLANG_NORWEGIAN_NYNORSK                 0x02
    935 #define SUBLANG_OCCITAN_FRANCE                    0x01
    936 #define SUBLANG_ORIYA_INDIA                       0x01
    937 #define SUBLANG_PASHTO_AFGHANISTAN                0x01
    938 #define SUBLANG_PERSIAN_IRAN                      0x01
    939 #define SUBLANG_POLISH_POLAND                     0x01
    940 #define SUBLANG_PORTUGUESE_BRAZILIAN              0x01
    941 #if (WINVER >= 0x0600)
    942 #define SUBLANG_PORTUGUESE_PORTUGAL               0x02
    943 #endif /* WINVER >= 0x0600 */
    944 #define SUBLANG_PORTUGUESE                        0x02
    945 #define SUBLANG_PULAR_SENEGAL                     0x02
    946 #define SUBLANG_PUNJABI_INDIA                     0x01
    947 #define SUBLANG_PUNJABI_PAKISTAN                  0x02
    948 #define SUBLANG_QUECHUA_BOLIVIA                   0x01
    949 #define SUBLANG_QUECHUA_ECUADOR                   0x02
    950 #define SUBLANG_QUECHUA_PERU                      0x03
    951 #define SUBLANG_ROMANIAN_ROMANIA                  0x01
    952 /* ??? #define SUBLANG_ROMANIAN_MOLDOVA                  0x01 ??? */
    953 #define SUBLANG_ROMANSH_SWITZERLAND               0x01
    954 #define SUBLANG_RUSSIAN_RUSSIA                    0x01
    955 #define SUBLANG_SAKHA_RUSSIA                      0x01
    956 #define SUBLANG_SAMI_NORTHERN_NORWAY              0x01
    957 #define SUBLANG_SAMI_NORTHERN_SWEDEN              0x02
    958 #define SUBLANG_SAMI_NORTHERN_FINLAND             0x03
    959 #define SUBLANG_SAMI_LULE_NORWAY                  0x04
    960 #define SUBLANG_SAMI_LULE_SWEDEN                  0x05
    961 #define SUBLANG_SAMI_SOUTHERN_NORWAY              0x06
    962 #define SUBLANG_SAMI_SOUTHERN_SWEDEN              0x07
    963 #define SUBLANG_SAMI_SKOLT_FINLAND                0x08
    964 #define SUBLANG_SAMI_INARI_FINLAND                0x09
    965 #define SUBLANG_SANSKRIT_INDIA                    0x01
    966 #define SUBLANG_SCOTTISH_GAELIC                    0x01
    967 #define SUBLANG_SERBIAN_LATIN                     0x02
    968 #define SUBLANG_SERBIAN_CYRILLIC                  0x03
    969 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN  0x06
    970 #define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
    971 #define SUBLANG_SERBIAN_MONTENEGRO_LATIN          0x0b
    972 #define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC       0x0c
    973 #define SUBLANG_SERBIAN_SERBIA_LATIN              0x09
    974 #define SUBLANG_SERBIAN_SERBIA_CYRILLIC           0x0a
    975 #define SUBLANG_SINDHI_INDIA                      0x01
    976 #define SUBLANG_SINDHI_AFGHANISTAN                0x02
    977 #define SUBLANG_SINDHI_PAKISTAN                   0x02
    978 #define SUBLANG_SINHALESE_SRI_LANKA               0x01
    979 #define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA       0x01
    980 #define SUBLANG_SLOVAK_SLOVAKIA                   0x01
    981 #define SUBLANG_SLOVENIAN_SLOVENIA                0x01
    982 #define SUBLANG_SPANISH                           0x01
    983 #define SUBLANG_SPANISH_MEXICAN                   0x02
    984 #define SUBLANG_SPANISH_MODERN                    0x03
    985 #define SUBLANG_SPANISH_GUATEMALA                 0x04
    986 #define SUBLANG_SPANISH_COSTA_RICA                0x05
    987 #define SUBLANG_SPANISH_PANAMA                    0x06
    988 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC        0x07
    989 #define SUBLANG_SPANISH_VENEZUELA                 0x08
    990 #define SUBLANG_SPANISH_COLOMBIA                  0x09
    991 #define SUBLANG_SPANISH_PERU                      0x0a
    992 #define SUBLANG_SPANISH_ARGENTINA                 0x0b
    993 #define SUBLANG_SPANISH_ECUADOR                   0x0c
    994 #define SUBLANG_SPANISH_CHILE                     0x0d
    995 #define SUBLANG_SPANISH_URUGUAY                   0x0e
    996 #define SUBLANG_SPANISH_PARAGUAY                  0x0f
    997 #define SUBLANG_SPANISH_BOLIVIA                   0x10
    998 #define SUBLANG_SPANISH_EL_SALVADOR               0x11
    999 #define SUBLANG_SPANISH_HONDURAS                  0x12
   1000 #define SUBLANG_SPANISH_NICARAGUA                 0x13
   1001 #define SUBLANG_SPANISH_PUERTO_RICO               0x14
   1002 #define SUBLANG_SPANISH_US                        0x15
   1003 #define SUBLANG_SWAHILI_KENYA                     0x01
   1004 #if (WINVER >= 0x0600)
   1005 #define SUBLANG_SWEDISH_SWEDEN                    0x01
   1006 #endif /* WINVER >= 0x0600 */
   1007 #define SUBLANG_SWEDISH                           0x01
   1008 #define SUBLANG_SWEDISH_FINLAND                   0x02
   1009 #define SUBLANG_SYRIAC                            0x01
   1010 #define SUBLANG_SYRIAC_SYRIA            SUBLANG_SYRIAC		/* SUBLANG_SYRIAC_SYRIA is what MSDN mentions */
   1011 #define SUBLANG_TAJIK_TAJIKISTAN                  0x01
   1012 #define SUBLANG_TAMAZIGHT_ALGERIA_LATIN           0x02
   1013 #define SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH        0x04
   1014 #define SUBLANG_TAMIL_INDIA                       0x01
   1015 #define SUBLANG_TAMIL_SRI_LANKA                   0x02
   1016 #define SUBLANG_TATAR_RUSSIA                      0x01
   1017 #define SUBLANG_TELUGU_INDIA                      0x01
   1018 #define SUBLANG_THAI_THAILAND                     0x01
   1019 #define SUBLANG_TIBETAN_PRC                       0x01
   1020 #define SUBLANG_TIBETAN_BHUTAN                    0x02
   1021 #define SUBLANG_TIGRIGNA_ERITREA                  0x02
   1022 #define SUBLANG_TIGRINYA_ERITREA                  0x02
   1023 #define SUBLANG_TIGRINYA_ETHIOPIA                 0x01
   1024 #define SUBLANG_TSWANA_BOTSWANA                   0x02
   1025 #define SUBLANG_TSWANA_SOUTH_AFRICA               0x01
   1026 #define SUBLANG_TURKISH_TURKEY                    0x01
   1027 #define SUBLANG_TURKMEN_TURKMENISTAN              0x01
   1028 #define SUBLANG_UIGHUR_PRC                        0x01
   1029 #define SUBLANG_UKRAINIAN_UKRAINE                 0x01
   1030 #define SUBLANG_UPPER_SORBIAN_GERMANY             0x01
   1031 #define SUBLANG_URDU_PAKISTAN                     0x01
   1032 #define SUBLANG_URDU_INDIA                        0x02
   1033 #define SUBLANG_UZBEK_LATIN                       0x01
   1034 #define SUBLANG_UZBEK_CYRILLIC                    0x02
   1035 #define SUBLANG_VALENCIAN_VALENCIA                0x02
   1036 #define SUBLANG_VIETNAMESE_VIETNAM                0x01
   1037 #define SUBLANG_WELSH_UNITED_KINGDOM              0x01
   1038 #define SUBLANG_WOLOF_SENEGAL                     0x01
   1039 #define SUBLANG_YORUBA_NIGERIA                    0x01
   1040 #define SUBLANG_XHOSA_SOUTH_AFRICA                0x01
   1041 #define SUBLANG_YAKUT_RUSSIA                      0x01
   1042 #define SUBLANG_YI_PRC                            0x01
   1043 #define SUBLANG_ZULU_SOUTH_AFRICA                 0x01
   1044 
   1045 #define SORT_DEFAULT                              0x0
   1046 #define SORT_INVARIANT_MATH                       0x1
   1047 
   1048 #define SORT_JAPANESE_XJIS                        0x0
   1049 #define SORT_JAPANESE_UNICODE                     0x1
   1050 #define SORT_JAPANESE_RADICALSTROKE               0x4
   1051 
   1052 #define SORT_CHINESE_BIG5                         0x0
   1053 #define SORT_CHINESE_PRCP                         0x0
   1054 #define SORT_CHINESE_UNICODE                      0x1
   1055 #define SORT_CHINESE_PRC                          0x2
   1056 #define SORT_CHINESE_BOPOMOFO                     0x3
   1057 #define SORT_CHINESE_RADICALSTROKE		  0x4
   1058 
   1059 #define SORT_KOREAN_KSC                           0x0
   1060 #define SORT_KOREAN_UNICODE                       0x1
   1061 
   1062 #define SORT_GERMAN_PHONE_BOOK                    0x1
   1063 
   1064 #define SORT_HUNGARIAN_DEFAULT                    0x0
   1065 #define SORT_HUNGARIAN_TECHNICAL                  0x1
   1066 
   1067 #define SORT_GEORGIAN_TRADITIONAL                 0x0
   1068 #define SORT_GEORGIAN_MODERN                      0x1
   1069 
   1070 #define MAKELANGID(p,s) ((((WORD)(s)) << 10) | (WORD)(p))
   1071 #define PRIMARYLANGID(lgid) ((WORD)(lgid) & 0x3ff)
   1072 #define SUBLANGID(lgid) ((WORD)(lgid) >> 10)
   1073 
   1074 #define NLS_VALID_LOCALE_MASK 0x000fffff
   1075 
   1076 #define MAKELCID(lgid,srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))
   1077 #define MAKESORTLCID(lgid,srtid,ver) ((DWORD)((MAKELCID(lgid,srtid)) | (((DWORD)((WORD)(ver))) << 20)))
   1078 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
   1079 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0xf))
   1080 #define SORTVERSIONFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 20) & 0xf))
   1081 
   1082 #define LOCALE_NAME_MAX_LENGTH 85
   1083 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT))
   1084 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT))
   1085 
   1086 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT,SORT_DEFAULT))
   1087 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT,SORT_DEFAULT))
   1088 
   1089 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
   1090 
   1091 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
   1092 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
   1093 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
   1094 
   1095 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
   1096 
   1097 #define UNREFERENCED_PARAMETER(P) {(P) = (P);}
   1098 #define UNREFERENCED_LOCAL_VARIABLE(V) {(V) = (V);}
   1099 #define DBG_UNREFERENCED_PARAMETER(P) (P)
   1100 #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
   1101 
   1102 #define DEFAULT_UNREACHABLE
   1103 
   1104 #ifndef WIN32_NO_STATUS
   1105 #define STATUS_WAIT_0 ((DWORD)0x00000000)
   1106 #define STATUS_ABANDONED_WAIT_0 ((DWORD)0x00000080)
   1107 #define STATUS_USER_APC ((DWORD)0x000000C0)
   1108 #define STATUS_TIMEOUT ((DWORD)0x00000102)
   1109 #define STATUS_PENDING ((DWORD)0x00000103)
   1110 #define DBG_EXCEPTION_HANDLED ((DWORD)0x00010001)
   1111 #define DBG_CONTINUE ((DWORD)0x00010002)
   1112 #define STATUS_SEGMENT_NOTIFICATION ((DWORD)0x40000005)
   1113 #define DBG_TERMINATE_THREAD ((DWORD)0x40010003)
   1114 #define DBG_TERMINATE_PROCESS ((DWORD)0x40010004)
   1115 #define DBG_CONTROL_C ((DWORD)0x40010005)
   1116 #define DBG_PRINTEXCEPTION_C ((DWORD)0x40010006)
   1117 #define DBG_RIPEXCEPTION ((DWORD)0x40010007)
   1118 #define DBG_CONTROL_BREAK ((DWORD)0x40010008)
   1119 #define DBG_COMMAND_EXCEPTION ((DWORD)0x40010009)
   1120 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001)
   1121 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002)
   1122 #define STATUS_BREAKPOINT ((DWORD)0x80000003)
   1123 #define STATUS_SINGLE_STEP ((DWORD)0x80000004)
   1124 #define STATUS_LONGJUMP ((DWORD)0x80000026)
   1125 #define STATUS_UNWIND_CONSOLIDATE ((DWORD)0x80000029)
   1126 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD)0x80010001)
   1127 #define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005)
   1128 #define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006)
   1129 #define STATUS_INVALID_HANDLE ((DWORD)0xC0000008)
   1130 #define STATUS_INVALID_PARAMETER ((DWORD)0xC000000D)
   1131 #define STATUS_NO_MEMORY ((DWORD)0xC0000017)
   1132 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001D)
   1133 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025)
   1134 #define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026)
   1135 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008C)
   1136 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008D)
   1137 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008E)
   1138 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008F)
   1139 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090)
   1140 #define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091)
   1141 #define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092)
   1142 #define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093)
   1143 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094)
   1144 #define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095)
   1145 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096)
   1146 #define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FD)
   1147 #define STATUS_DLL_NOT_FOUND ((DWORD)0xC0000135)
   1148 #define STATUS_ORDINAL_NOT_FOUND ((DWORD)0xC0000138)
   1149 #define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD)0xC0000139)
   1150 #define STATUS_CONTROL_C_EXIT ((DWORD)0xC000013A)
   1151 #define STATUS_DLL_INIT_FAILED ((DWORD)0xC0000142)
   1152 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD)0xC00002B4)
   1153 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD)0xC00002B5)
   1154 #define STATUS_REG_NAT_CONSUMPTION ((DWORD)0xC00002C9)
   1155 #define STATUS_STACK_BUFFER_OVERRUN ((DWORD)0xC0000409)
   1156 #define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD)0xC0000417)
   1157 #define STATUS_ASSERTION_FAILURE ((DWORD)0xC0000420)
   1158 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD)0xC015000F)
   1159 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD)0xC0150010)
   1160 #endif
   1161 
   1162 #define MAXIMUM_WAIT_OBJECTS 64
   1163 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
   1164 
   1165   typedef ULONG_PTR KSPIN_LOCK;
   1166   typedef KSPIN_LOCK *PKSPIN_LOCK;
   1167 
   1168 #ifdef _AMD64_
   1169 
   1170 #if defined(__x86_64) && !defined(RC_INVOKED)
   1171 
   1172 #ifdef __cplusplus
   1173   extern "C" {
   1174 #endif
   1175 
   1176 #define BitTest _bittest
   1177 #define BitTestAndComplement _bittestandcomplement
   1178 #define BitTestAndSet _bittestandset
   1179 #define BitTestAndReset _bittestandreset
   1180 #define InterlockedBitTestAndSet _interlockedbittestandset
   1181 #define InterlockedBitTestAndReset _interlockedbittestandreset
   1182 #define BitTest64 _bittest64
   1183 #define BitTestAndComplement64 _bittestandcomplement64
   1184 #define BitTestAndSet64 _bittestandset64
   1185 #define BitTestAndReset64 _bittestandreset64
   1186 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
   1187 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
   1188 
   1189     BOOLEAN _bittest(LONG const *Base,LONG Offset);
   1190     BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset);
   1191 
   1192 #ifndef __CRT__NO_INLINE
   1193     __CRT_INLINE BOOLEAN _bittest(LONG const *Base,LONG Offset) {
   1194       int old = 0;
   1195       __asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0 "
   1196 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1197 	:"Ir" (Offset) : "memory");
   1198       return (BOOLEAN) (old!=0);
   1199     }
   1200     __CRT_INLINE BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset) {
   1201       int old = 0;
   1202       __asm__ __volatile__("btcl %2,%1\n\tsbbl %0,%0 "
   1203 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1204 	:"Ir" (Offset) : "memory");
   1205       return (BOOLEAN) (old!=0);
   1206     }
   1207 #endif /* __CRT__NO_INLINE */
   1208 
   1209     BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit);
   1210     BOOLEAN _bittestandset(LONG *Base,LONG Offset);
   1211     BOOLEAN _bittestandreset(LONG *Base,LONG Offset);
   1212     BOOLEAN _interlockedbittestandset(LONG *Base,LONG Offset);
   1213     BOOLEAN _interlockedbittestandreset(LONG *Base,LONG Offset);
   1214     BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset);
   1215     BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset);
   1216     BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset);
   1217     BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset);
   1218     BOOLEAN _interlockedbittestandset64(LONG64 *Base,LONG64 Offset);
   1219     BOOLEAN _interlockedbittestandreset64(LONG64 *Base,LONG64 Offset);
   1220 #ifndef __CRT__NO_INLINE
   1221     __CRT_INLINE BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit) {
   1222       int old = 0;
   1223       __asm__ __volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
   1224 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1225 	:"Ir" (Bit) : "memory");
   1226       return (BOOLEAN) (old!=0);
   1227     }
   1228     __CRT_INLINE BOOLEAN _bittestandset(LONG *Base,LONG Offset) {
   1229       int old = 0;
   1230       __asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0 "
   1231 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1232 	:"Ir" (Offset) : "memory");
   1233       return (BOOLEAN) (old!=0);
   1234     }
   1235     __CRT_INLINE BOOLEAN _bittestandreset(LONG *Base,LONG Offset) {
   1236       int old = 0;
   1237       __asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0 "
   1238 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1239 	:"Ir" (Offset) : "memory");
   1240       return (BOOLEAN) (old!=0);
   1241     }
   1242     __CRT_INLINE BOOLEAN _interlockedbittestandset(LONG *Base,LONG Offset) {
   1243       int old = 0;
   1244       __asm__ __volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
   1245 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1246 	:"Ir" (Offset) : "memory");
   1247       return (BOOLEAN) (old!=0);
   1248     }
   1249     __CRT_INLINE BOOLEAN _interlockedbittestandreset(LONG *Base,LONG Offset) {
   1250       int old = 0;
   1251       __asm__ __volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
   1252 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1253 	:"Ir" (Offset) : "memory");
   1254       return (BOOLEAN) (old!=0);
   1255     }
   1256     __CRT_INLINE BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset) {
   1257       int old = 0;
   1258       __asm__ __volatile__("btq %2,%1\n\tsbbl %0,%0 "
   1259 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1260 	:"Ir" (Offset) : "memory");
   1261       return (BOOLEAN) (old!=0);
   1262     }
   1263     __CRT_INLINE BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset) {
   1264       int old = 0;
   1265       __asm__ __volatile__("btcq %2,%1\n\tsbbl %0,%0 "
   1266 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1267 	:"Ir" (Offset) : "memory");
   1268       return (BOOLEAN) (old!=0);
   1269     }
   1270     __CRT_INLINE BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset) {
   1271       int old = 0;
   1272       __asm__ __volatile__("btsq %2,%1\n\tsbbl %0,%0 "
   1273 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1274 	:"Ir" (Offset) : "memory");
   1275       return (BOOLEAN) (old!=0);
   1276     }
   1277     __CRT_INLINE BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset) {
   1278       int old = 0;
   1279       __asm__ __volatile__("btrq %2,%1\n\tsbbl %0,%0 "
   1280 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1281 	:"Ir" (Offset) : "memory");
   1282       return (BOOLEAN) (old!=0);
   1283     }
   1284     __CRT_INLINE BOOLEAN _interlockedbittestandset64(LONG64 *Base,LONG64 Offset) {
   1285       int old = 0;
   1286       __asm__ __volatile__("lock ; btsq %2,%1\n\tsbbl %0,%0 "
   1287 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1288 	:"Ir" (Offset) : "memory");
   1289       return (BOOLEAN) (old!=0);
   1290     }
   1291     __CRT_INLINE BOOLEAN _interlockedbittestandreset64(LONG64 *Base,LONG64 Offset) {
   1292       int old = 0;
   1293       __asm__ __volatile__("lock ; btrq %2,%1\n\tsbbl %0,%0 "
   1294 	:"=r" (old),"=m" ((*(volatile LONG64 *) Base))
   1295 	:"Ir" (Offset) : "memory");
   1296       return (BOOLEAN) (old!=0);
   1297     }
   1298 #endif /* !__CRT__NO_INLINE */
   1299 
   1300 #define BitScanForward _BitScanForward
   1301 #define BitScanReverse _BitScanReverse
   1302 #define BitScanForward64 _BitScanForward64
   1303 #define BitScanReverse64 _BitScanReverse64
   1304 
   1305     BOOLEAN _BitScanForward(DWORD *Index,DWORD Mask);
   1306     BOOLEAN _BitScanReverse(DWORD *Index,DWORD Mask);
   1307     BOOLEAN _BitScanForward64(DWORD *Index,DWORD64 Mask);
   1308     BOOLEAN _BitScanReverse64(DWORD *Index,DWORD64 Mask);
   1309 
   1310 #ifndef __CRT__NO_INLINE
   1311     __CRT_INLINE BOOLEAN _BitScanForward(DWORD *Index,DWORD Mask) {
   1312       DWORD n;
   1313       __asm__ __volatile__("bsfl %0,%1" : "+r" (Mask),"=rm" (n) : : "memory");
   1314       *Index = n;
   1315       return Mask!=0;
   1316     }
   1317     __CRT_INLINE BOOLEAN _BitScanReverse(DWORD *Index,DWORD Mask) {
   1318      DWORD n;
   1319       __asm__ __volatile__("bsrl %0,%1" : "+r" (Mask),"=rm" (n) : : "memory");
   1320       *Index = n;
   1321       return Mask!=0;
   1322     }
   1323     __CRT_INLINE BOOLEAN _BitScanForward64(DWORD *Index,DWORD64 Mask) {
   1324       DWORD64 n;
   1325       __asm__ __volatile__("bsfq %0,%1" : "+r" (Mask),"=rm" (n) : : "memory");
   1326       *Index = (DWORD) n;
   1327       return Mask!=0;
   1328     }
   1329     __CRT_INLINE BOOLEAN _BitScanReverse64(DWORD *Index,DWORD64 Mask) {
   1330       DWORD64 n;
   1331       __asm__ __volatile__("bsrq %0,%1" : "+r" (Mask),"=rm" (n) : : "memory");
   1332       *Index = (DWORD) n;
   1333       return Mask!=0;
   1334     }
   1335 #endif /* !__CRT__NO_INLINE */
   1336 
   1337 #define InterlockedIncrement16 _InterlockedIncrement16
   1338 #define InterlockedDecrement16 _InterlockedDecrement16
   1339 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
   1340 
   1341 #define InterlockedAnd _InterlockedAnd
   1342 #define InterlockedOr _InterlockedOr
   1343 #define InterlockedXor _InterlockedXor
   1344 #define InterlockedIncrement _InterlockedIncrement
   1345 #define InterlockedIncrementAcquire InterlockedIncrement
   1346 #define InterlockedIncrementRelease InterlockedIncrement
   1347 #define InterlockedDecrement _InterlockedDecrement
   1348 #define InterlockedDecrementAcquire InterlockedDecrement
   1349 #define InterlockedDecrementRelease InterlockedDecrement
   1350 #define InterlockedAdd _InterlockedAdd
   1351 #define InterlockedExchange _InterlockedExchange
   1352 #define InterlockedExchangeAdd _InterlockedExchangeAdd
   1353 #define InterlockedCompareExchange _InterlockedCompareExchange
   1354 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
   1355 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
   1356 
   1357 #define InterlockedAnd64 _InterlockedAnd64
   1358 #define InterlockedAndAffinity InterlockedAnd64
   1359 #define InterlockedOr64 _InterlockedOr64
   1360 #define InterlockedOrAffinity InterlockedOr64
   1361 #define InterlockedXor64 _InterlockedXor64
   1362 #define InterlockedIncrement64 _InterlockedIncrement64
   1363 #define InterlockedDecrement64 _InterlockedDecrement64
   1364 #define InterlockedAdd64 _InterlockedAdd64
   1365 #define InterlockedExchange64 _InterlockedExchange64
   1366 #define InterlockedExchangeAcquire64 InterlockedExchange64
   1367 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
   1368 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
   1369 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
   1370 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
   1371 
   1372 #define InterlockedExchangePointer _InterlockedExchangePointer
   1373 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
   1374 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
   1375 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
   1376 
   1377 #define InterlockedExchangeAddSizeT(a,b) InterlockedExchangeAdd64((LONG64 *)a,b)
   1378 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
   1379 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
   1380 
   1381     SHORT InterlockedIncrement16(SHORT volatile *Addend);
   1382     SHORT InterlockedDecrement16(SHORT volatile *Addend);
   1383     SHORT InterlockedCompareExchange16(SHORT volatile *Destination,SHORT ExChange,SHORT Comperand);
   1384     LONG InterlockedAnd(LONG volatile *Destination,LONG Value);
   1385     LONG InterlockedOr(LONG volatile *Destination,LONG Value);
   1386     LONG InterlockedXor(LONG volatile *Destination,LONG Value);
   1387     LONG InterlockedIncrement(LONG volatile *Addend);
   1388     LONG InterlockedDecrement(LONG volatile *Addend);
   1389     LONG InterlockedExchange(LONG volatile *Target,LONG Value);
   1390     LONG64 InterlockedAnd64(LONG64 volatile *Destination,LONG64 Value);
   1391     LONG64 InterlockedOr64(LONG64 volatile *Destination,LONG64 Value);
   1392     LONG64 InterlockedXor64(LONG64 volatile *Destination,LONG64 Value);
   1393 
   1394 #ifndef __CRT__NO_INLINE
   1395     __CRT_INLINE SHORT InterlockedIncrement16(SHORT volatile *Addend) {
   1396       SHORT ret = 1;
   1397       __asm__ __volatile__("lock\n\t"
   1398 		   "xaddw %0,%1"
   1399 		   : "+r" (ret), "+m" (*Addend)
   1400 		   : : "memory");
   1401       return ret + 1;
   1402     }
   1403     __CRT_INLINE SHORT InterlockedDecrement16(SHORT volatile *Addend) {
   1404       SHORT ret = -1;
   1405       __asm__ __volatile__("lock\n\t"
   1406 		   "xaddw %0,%1"
   1407 		   : "+r" (ret), "+m" (*Addend)
   1408 		   : : "memory");
   1409       return ret - 1;
   1410     }
   1411     __CRT_INLINE SHORT InterlockedCompareExchange16(SHORT volatile *Destination,SHORT ExChange,SHORT Comperand) {
   1412       SHORT prev;
   1413       __asm__ __volatile__("lock ; cmpxchgw %w1,%2"
   1414 	:"=a"(prev)
   1415 	:"q"(ExChange), "m"(*Destination), "0"(Comperand)
   1416 	: "memory");
   1417       return prev;
   1418     }
   1419     __CRT_INLINE LONG InterlockedAnd(LONG volatile *Destination,LONG Value) {
   1420       __asm__ __volatile__("lock ; andl %0,%1"
   1421 	: :"r"(Value),"m"(*Destination)
   1422 	: "memory");
   1423       return *Destination;
   1424     }
   1425     __CRT_INLINE LONG InterlockedOr(LONG volatile *Destination,LONG Value) {
   1426       __asm__ __volatile__("lock ; orl %0,%1"
   1427 	: : "r"(Value),"m"(*Destination) : "memory");
   1428       return *Destination;
   1429     }
   1430     __CRT_INLINE LONG InterlockedXor(LONG volatile *Destination,LONG Value) {
   1431       __asm__ __volatile__("lock ; xorl %0,%1"
   1432 	: : "r"(Value),"m"(*Destination) : "memory");
   1433       return *Destination;
   1434     }
   1435     __CRT_INLINE LONG64 InterlockedAnd64(LONG64 volatile *Destination,LONG64 Value) {
   1436       __asm__ __volatile__("lock ; andq %0,%1"
   1437 	: : "r"(Value),"m"(*Destination) : "memory");
   1438       return *Destination;
   1439     }
   1440     __CRT_INLINE LONG64 InterlockedOr64(LONG64 volatile *Destination,LONG64 Value) {
   1441       __asm__ __volatile__("lock ; orq %0,%1"
   1442 	: : "r"(Value),"m"(*Destination) : "memory");
   1443       return *Destination;
   1444     }
   1445     __CRT_INLINE LONG64 InterlockedXor64(LONG64 volatile *Destination,LONG64 Value) {
   1446       __asm__ __volatile__("lock ; xorq %0,%1"
   1447 	: : "r"(Value),"m"(*Destination) : "memory");
   1448       return *Destination;
   1449     }
   1450 #endif /* !__CRT__NO_INLINE */
   1451 
   1452     LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value);
   1453     LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand);
   1454     LONG InterlockedAdd(LONG volatile *Addend,LONG Value);
   1455     LONG64 InterlockedIncrement64(LONG64 volatile *Addend);
   1456     LONG64 InterlockedDecrement64(LONG64 volatile *Addend);
   1457     LONG64 InterlockedExchange64(LONG64 volatile *Target,LONG64 Value);
   1458 
   1459 #ifndef __CRT__NO_INLINE
   1460     __CRT_INLINE LONG InterlockedAdd(LONG volatile *Addend,LONG Value) { return InterlockedExchangeAdd(Addend,Value) + Value; }
   1461     __CRT_INLINE LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand) {
   1462       LONG prev;
   1463       __asm__ __volatile__("lock ; cmpxchgl %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
   1464       return prev;
   1465     }
   1466     __CRT_INLINE LONG64 InterlockedIncrement64(LONG64 volatile *Addend) {
   1467       LONG64 ret = 1LL;
   1468       __asm__ __volatile__ ("lock\n\t"
   1469 	       "xaddq %0,%1"
   1470 	       : "+r" (ret), "+m" (*Addend)
   1471 	       : : "memory");
   1472       return ret + 1LL;
   1473     }
   1474     __CRT_INLINE LONG64 InterlockedDecrement64(LONG64 volatile *Addend) {
   1475       LONG64 ret = -1LL;
   1476       __asm__ __volatile__ ("lock\n\t"
   1477 	       "xaddq %0,%1"
   1478 	       : "+r" (ret), "+m" (*Addend)
   1479 	       : : "memory");
   1480       return ret - 1LL;
   1481     }
   1482     __CRT_INLINE LONG64 InterlockedExchange64(LONG64 volatile *Target,LONG64 Value) {
   1483       __asm__ __volatile("lock ; xchgq %0,%1"
   1484 	: "=r"(Value)
   1485 	: "m"(*Target),"0"(Value)
   1486 	: "memory");
   1487       return Value;
   1488     }
   1489 #endif /* !__CRT__NO_INLINE */
   1490 
   1491     LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value);
   1492     LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value);
   1493     LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand);
   1494     PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand);
   1495     PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value);
   1496 
   1497 #ifndef __CRT__NO_INLINE
   1498     __CRT_INLINE LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value) { return InterlockedExchangeAdd64(Addend,Value) + Value; }
   1499     __CRT_INLINE LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand) {
   1500       LONG64 prev;
   1501       __asm__ __volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
   1502       return prev;
   1503     }
   1504     __CRT_INLINE PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand) {
   1505       PVOID prev;
   1506       __asm__ __volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
   1507       return prev;
   1508     }
   1509     __CRT_INLINE PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value) {
   1510       __asm__ __volatile("lock ; xchgq %0,%1"
   1511 	: "=r"(Value)
   1512 	: "m"(*Target),"0"(Value)
   1513 	: "memory");
   1514       return Value;
   1515     }
   1516 #endif /* !__CRT__NO_INLINE */
   1517 
   1518 #define CacheLineFlush(Address) _mm_clflush(Address)
   1519 
   1520     VOID _ReadWriteBarrier(VOID);
   1521 
   1522 /* Don't include intrin.h on Cygwin.  It pulls in unneeded stuff. */
   1523 #ifdef __CYGWIN__
   1524 # if defined(__cplusplus)
   1525 extern "C" {
   1526 # endif
   1527 # include <x86intrin.h>
   1528 # if defined(__cplusplus)
   1529 }
   1530 # endif
   1531 #else /* !__CYGWIN__ */
   1532 # include <intrin.h>
   1533 #endif /* __CYGWIN__ */
   1534 
   1535 #define FastFence __faststorefence
   1536 #define LoadFence _mm_lfence
   1537 #define MemoryFence _mm_mfence
   1538 #define StoreFence _mm_sfence
   1539 
   1540 #ifdef __MINGW_INTRIN_INLINE
   1541     __MINGW_INTRIN_INLINE void __faststorefence(void) {
   1542       __asm__ __volatile__ ("" ::: "memory");
   1543     }
   1544 #endif
   1545 
   1546 #define YieldProcessor _mm_pause
   1547 #define MemoryBarrier __faststorefence
   1548 #define PreFetchCacheLine(l,a) _mm_prefetch((CHAR CONST *) a,l)
   1549 #define PrefetchForWrite(p) _m_prefetchw(p)
   1550 #define ReadForWriteAccess(p) (_m_prefetchw(p),*(p))
   1551 
   1552 #define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
   1553 #define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
   1554 #define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
   1555 #define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
   1556 
   1557 #define ReadMxCsr _mm_getcsr
   1558 #define WriteMxCsr _mm_setcsr
   1559 
   1560     VOID __int2c(VOID);
   1561 
   1562 #define DbgRaiseAssertionFailure() __int2c()
   1563 #define GetCallersEflags() __getcallerseflags()
   1564 
   1565     unsigned __int32 __getcallerseflags(VOID);
   1566 
   1567 #define GetSegmentLimit __segmentlimit
   1568 
   1569     DWORD __segmentlimit(DWORD Selector);
   1570 
   1571 #define ReadTimeStampCounter() __rdtsc()
   1572 
   1573     VOID __movsb(PBYTE Destination,BYTE const *Source,SIZE_T Count);
   1574     VOID __movsw(PWORD Destination,WORD const *Source,SIZE_T Count);
   1575     VOID __movsd(PDWORD Destination,DWORD const *Source,SIZE_T Count);
   1576     VOID __movsq(PDWORD64 Destination,DWORD64 const *Source,SIZE_T Count);
   1577     VOID __stosb(PBYTE Destination,BYTE Value,SIZE_T Count);
   1578     VOID __stosw(PWORD Destination,WORD Value,SIZE_T Count);
   1579     VOID __stosd(PDWORD Destination,DWORD Value,SIZE_T Count);
   1580     VOID __stosq(PDWORD64 Destination,DWORD64 Value,SIZE_T Count);
   1581 
   1582 #ifndef __CRT__NO_INLINE
   1583     __CRT_INLINE VOID __stosb(PBYTE Dest,BYTE Data,SIZE_T Count)
   1584     {
   1585       __asm__ __volatile__
   1586       (
   1587         "rep; stosb" :
   1588         [Dest] "=D" (Dest), [Count] "=c" (Count) :
   1589         "[Dest]" (Dest), "a" (Data), "[Count]" (Count)
   1590       );
   1591     }
   1592     __CRT_INLINE VOID __stosw(PWORD Dest,WORD Data,SIZE_T Count)
   1593     {
   1594       __asm__ __volatile__
   1595       (
   1596         "rep; stosw" :
   1597         [Dest] "=D" (Dest), [Count] "=c" (Count) :
   1598         "[Dest]" (Dest), "a" (Data), "[Count]" (Count)
   1599       );
   1600     }
   1601     __CRT_INLINE VOID __stosd(PDWORD Dest,DWORD Data,SIZE_T Count)
   1602     {
   1603       __asm__ __volatile__
   1604       (
   1605         "rep; stosl" :
   1606         [Dest] "=D" (Dest), [Count] "=c" (Count) :
   1607         "[Dest]" (Dest), "a" (Data), "[Count]" (Count)
   1608       );
   1609     }
   1610     __CRT_INLINE VOID __stosq(PDWORD64 Dest,DWORD64 Data,SIZE_T Count)
   1611     {
   1612       __asm__ __volatile__
   1613       (
   1614         "rep; stosq" :
   1615         [Dest] "=D" (Dest), [Count] "=c" (Count) :
   1616         "[Dest]" (Dest), "a" (Data), "[Count]" (Count)
   1617       );
   1618     }
   1619 #endif /* __CRT__NO_INLINE */
   1620 
   1621 #define MultiplyHigh __mulh
   1622 #define UnsignedMultiplyHigh __umulh
   1623 
   1624     LONGLONG MultiplyHigh(LONGLONG Multiplier,LONGLONG Multiplicand);
   1625     ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
   1626 
   1627 #define ShiftLeft128 __shiftleft128
   1628 #define ShiftRight128 __shiftright128
   1629 
   1630     DWORD64 ShiftLeft128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
   1631     DWORD64 ShiftRight128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
   1632 
   1633 #define Multiply128 _mul128
   1634 
   1635     LONG64 Multiply128(LONG64 Multiplier,LONG64 Multiplicand,LONG64 *HighProduct);
   1636 
   1637 #define UnsignedMultiply128 _umul128
   1638 
   1639     DWORD64 UnsignedMultiply128(DWORD64 Multiplier,DWORD64 Multiplicand,DWORD64 *HighProduct);
   1640 
   1641     LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift);
   1642     DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift);
   1643 
   1644 #ifndef __CRT__NO_INLINE
   1645     __CRT_INLINE LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift) {
   1646       LONG64 extractedProduct;
   1647       LONG64 highProduct;
   1648       LONG64 lowProduct;
   1649       lowProduct = Multiply128(Multiplier,Multiplicand,&highProduct);
   1650       extractedProduct = (LONG64)ShiftRight128((LONG64)lowProduct,(LONG64)highProduct,Shift);
   1651       return extractedProduct;
   1652     }
   1653 
   1654     __CRT_INLINE DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift) {
   1655       DWORD64 extractedProduct;
   1656       DWORD64 highProduct;
   1657       DWORD64 lowProduct;
   1658       lowProduct = UnsignedMultiply128(Multiplier,Multiplicand,&highProduct);
   1659       extractedProduct = ShiftRight128(lowProduct,highProduct,Shift);
   1660       return extractedProduct;
   1661     }
   1662 #endif
   1663 
   1664     __CRT_INLINE BYTE __readgsbyte(DWORD Offset) {
   1665       BYTE ret;
   1666       __asm__ volatile ("movb	%%gs:%1,%0"
   1667 	: "=r" (ret) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1668       return ret;
   1669     }
   1670     __CRT_INLINE WORD __readgsword(DWORD Offset) {
   1671       WORD ret;
   1672       __asm__ volatile ("movw	%%gs:%1,%0"
   1673 	: "=r" (ret) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1674       return ret;
   1675     }
   1676     __CRT_INLINE DWORD __readgsdword(DWORD Offset) {
   1677       DWORD ret;
   1678       __asm__ volatile ("movl	%%gs:%1,%0"
   1679 	: "=r" (ret) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1680       return ret;
   1681     }
   1682     __CRT_INLINE DWORD64 __readgsqword(DWORD Offset) {
   1683       void *ret;
   1684       __asm__ volatile ("movq	%%gs:%1,%0"
   1685 	: "=r" (ret) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1686       return (DWORD64) ret;
   1687     }
   1688     __CRT_INLINE VOID __writegsbyte(DWORD Offset,BYTE Data) {
   1689       __asm__ volatile ("movb	%0,%%gs:%1"
   1690 	: "=r" (Data) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1691     }
   1692     __CRT_INLINE VOID __writegsword(DWORD Offset,WORD Data) {
   1693       __asm__ volatile ("movw	%0,%%gs:%1"
   1694 	: "=r" (Data) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1695     }
   1696     __CRT_INLINE VOID __writegsdword(DWORD Offset,DWORD Data) {
   1697       __asm__ volatile ("movl	%0,%%gs:%1"
   1698 	: "=r" (Data) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1699     }
   1700     __CRT_INLINE VOID __writegsqword(DWORD Offset,DWORD64 Data) {
   1701       __asm__ volatile ("movq	%0,%%gs:%1"
   1702 	: "=r" (Data) ,"=m" ((*(volatile __LONG32 *) (DWORD64) Offset)));
   1703     }
   1704 
   1705 #ifdef __cplusplus
   1706   }
   1707 #endif
   1708 #endif /* defined(__x86_64) && !defined(RC_INVOKED) */
   1709 
   1710 #define EXCEPTION_READ_FAULT 0
   1711 #define EXCEPTION_WRITE_FAULT 1
   1712 #define EXCEPTION_EXECUTE_FAULT 8
   1713 
   1714 #if !defined(RC_INVOKED)
   1715 
   1716 #define CONTEXT_AMD64 0x100000
   1717 
   1718 #define CONTEXT_CONTROL (CONTEXT_AMD64 | __MSABI_LONG(0x1))
   1719 #define CONTEXT_INTEGER (CONTEXT_AMD64 | __MSABI_LONG(0x2))
   1720 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | __MSABI_LONG(0x4))
   1721 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | __MSABI_LONG(0x8))
   1722 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | __MSABI_LONG(0x10))
   1723 
   1724 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
   1725 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
   1726 
   1727 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
   1728 #define CONTEXT_SERVICE_ACTIVE 0x10000000
   1729 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
   1730 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
   1731 #endif /* !defined(RC_INVOKED) */
   1732 
   1733 #define INITIAL_MXCSR 0x1f80
   1734 #define INITIAL_FPCSR 0x027f
   1735 
   1736   typedef struct DECLSPEC_ALIGN(16) _M128A {
   1737     ULONGLONG Low;
   1738     LONGLONG High;
   1739   } M128A,*PM128A;
   1740 
   1741   typedef struct _XMM_SAVE_AREA32 {
   1742     WORD ControlWord;
   1743     WORD StatusWord;
   1744     BYTE TagWord;
   1745     BYTE Reserved1;
   1746     WORD ErrorOpcode;
   1747     DWORD ErrorOffset;
   1748     WORD ErrorSelector;
   1749     WORD Reserved2;
   1750     DWORD DataOffset;
   1751     WORD DataSelector;
   1752     WORD Reserved3;
   1753     DWORD MxCsr;
   1754     DWORD MxCsr_Mask;
   1755     M128A FloatRegisters[8];
   1756     M128A XmmRegisters[16];
   1757     BYTE Reserved4[96];
   1758   } XMM_SAVE_AREA32,*PXMM_SAVE_AREA32;
   1759 
   1760 #define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
   1761 
   1762   typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
   1763     DWORD64 P1Home;
   1764     DWORD64 P2Home;
   1765     DWORD64 P3Home;
   1766     DWORD64 P4Home;
   1767     DWORD64 P5Home;
   1768     DWORD64 P6Home;
   1769     DWORD ContextFlags;
   1770     DWORD MxCsr;
   1771     WORD SegCs;
   1772     WORD SegDs;
   1773     WORD SegEs;
   1774     WORD SegFs;
   1775     WORD SegGs;
   1776     WORD SegSs;
   1777     DWORD EFlags;
   1778     DWORD64 Dr0;
   1779     DWORD64 Dr1;
   1780     DWORD64 Dr2;
   1781     DWORD64 Dr3;
   1782     DWORD64 Dr6;
   1783     DWORD64 Dr7;
   1784     DWORD64 Rax;
   1785     DWORD64 Rcx;
   1786     DWORD64 Rdx;
   1787     DWORD64 Rbx;
   1788     DWORD64 Rsp;
   1789     DWORD64 Rbp;
   1790     DWORD64 Rsi;
   1791     DWORD64 Rdi;
   1792     DWORD64 R8;
   1793     DWORD64 R9;
   1794     DWORD64 R10;
   1795     DWORD64 R11;
   1796     DWORD64 R12;
   1797     DWORD64 R13;
   1798     DWORD64 R14;
   1799     DWORD64 R15;
   1800     DWORD64 Rip;
   1801     __C89_NAMELESS union {
   1802       XMM_SAVE_AREA32 FltSave;
   1803       XMM_SAVE_AREA32 FloatSave;
   1804       __C89_NAMELESS struct {
   1805 	M128A Header[2];
   1806 	M128A Legacy[8];
   1807 	M128A Xmm0;
   1808 	M128A Xmm1;
   1809 	M128A Xmm2;
   1810 	M128A Xmm3;
   1811 	M128A Xmm4;
   1812 	M128A Xmm5;
   1813 	M128A Xmm6;
   1814 	M128A Xmm7;
   1815 	M128A Xmm8;
   1816 	M128A Xmm9;
   1817 	M128A Xmm10;
   1818 	M128A Xmm11;
   1819 	M128A Xmm12;
   1820 	M128A Xmm13;
   1821 	M128A Xmm14;
   1822 	M128A Xmm15;
   1823       };
   1824     };
   1825     M128A VectorRegister[26];
   1826     DWORD64 VectorControl;
   1827     DWORD64 DebugControl;
   1828     DWORD64 LastBranchToRip;
   1829     DWORD64 LastBranchFromRip;
   1830     DWORD64 LastExceptionToRip;
   1831     DWORD64 LastExceptionFromRip;
   1832   } CONTEXT,*PCONTEXT;
   1833 
   1834 #define RUNTIME_FUNCTION_INDIRECT 0x1
   1835 
   1836   typedef struct _RUNTIME_FUNCTION {
   1837     DWORD BeginAddress;
   1838     DWORD EndAddress;
   1839     DWORD UnwindData;
   1840   } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
   1841 
   1842   typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
   1843   typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
   1844 
   1845 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
   1846 
   1847   NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord,struct _EXCEPTION_RECORD *ExceptionRecord);
   1848   NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable,DWORD EntryCount,DWORD64 BaseAddress);
   1849   NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback(DWORD64 TableIdentifier,DWORD64 BaseAddress,DWORD Length,PGET_RUNTIME_FUNCTION_CALLBACK Callback,PVOID Context,PCWSTR OutOfProcessCallbackDll);
   1850   NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable);
   1851 
   1852 #endif /* end of _AMD64_ */
   1853 
   1854 
   1855 #ifdef _X86_
   1856 
   1857 #if defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED)
   1858 #ifdef __cplusplus
   1859   extern "C" {
   1860 #endif
   1861 
   1862 #define BitTest _bittest
   1863 #define BitTestAndComplement _bittestandcomplement
   1864 #define BitTestAndSet _bittestandset
   1865 #define BitTestAndReset _bittestandreset
   1866 #define InterlockedBitTestAndSet _interlockedbittestandset
   1867 #define InterlockedBitTestAndReset _interlockedbittestandreset
   1868 
   1869 #define BitScanForward _BitScanForward
   1870 #define BitScanReverse _BitScanReverse
   1871 
   1872 #define InterlockedIncrement16 _InterlockedIncrement16
   1873 #define InterlockedDecrement16 _InterlockedDecrement16
   1874 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
   1875 
   1876 #define InterlockedIncrementAcquire InterlockedIncrement
   1877 #define InterlockedIncrementRelease InterlockedIncrement
   1878 
   1879     BOOLEAN InterlockedBitTestAndSet(LONG *Base,LONG Bit);
   1880     BOOLEAN InterlockedBitTestAndReset(LONG *Base,LONG Bit);
   1881 #ifndef __CRT__NO_INLINE
   1882     __CRT_INLINE BOOLEAN InterlockedBitTestAndSet(LONG *Base,LONG Bit) {
   1883       int old = 0;
   1884       __asm__ __volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
   1885 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1886 	:"Ir" (Bit) : "memory");
   1887       return (BOOLEAN) (old!=0);
   1888     }
   1889 
   1890     __CRT_INLINE BOOLEAN InterlockedBitTestAndReset(LONG *Base,LONG Bit) {
   1891       int old = 0;
   1892       __asm__ __volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
   1893 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1894 	:"Ir" (Bit) : "memory");
   1895       return (BOOLEAN) (old!=0);
   1896     }
   1897 #endif /* __CRT__NO_INLINE */
   1898 
   1899     BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit);
   1900 #ifndef __CRT__NO_INLINE
   1901     __CRT_INLINE BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit) {
   1902       int old = 0;
   1903       __asm__ __volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
   1904 	:"=r" (old),"=m" ((*(volatile __LONG32 *) Base))
   1905 	:"Ir" (Bit));
   1906       return (BOOLEAN) (old!=0);
   1907     }
   1908 #endif /* !__CRT__NO_INLINE */
   1909 
   1910 #ifdef _PREFIX_
   1911     BYTE __readfsbyte(DWORD Offset);
   1912     WORD __readfsword(DWORD Offset);
   1913     DWORD __readfsdword(DWORD Offset);
   1914     VOID __writefsbyte(DWORD Offset,BYTE Data);
   1915     VOID __writefsword(DWORD Offset,WORD Data);
   1916     VOID __writefsdword(DWORD Offset,DWORD Data);
   1917 #endif
   1918 
   1919 #ifdef __cplusplus
   1920   }
   1921 #endif
   1922 #endif /* defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED) */
   1923 
   1924 #if defined(__i386__) && !defined(__x86_64)
   1925 
   1926 #define YieldProcessor() __asm__ __volatile__("rep; nop");
   1927 
   1928 #define PreFetchCacheLine(l,a)
   1929 #define ReadForWriteAccess(p) (*(p))
   1930 
   1931 #define PF_TEMPORAL_LEVEL_1
   1932 #define PF_NON_TEMPORAL_LEVEL_ALL
   1933 
   1934 #define PcTeb 0x18
   1935   struct _TEB *NtCurrentTeb(void);
   1936   PVOID GetCurrentFiber(void);
   1937   PVOID GetFiberData(void);
   1938   VOID MemoryBarrier(VOID);
   1939 
   1940 #ifdef __CRT__NO_INLINE
   1941 # define DbgRaiseAssertionFailure() __asm__ __volatile__("int $0x2c");
   1942 #else
   1943   VOID DbgRaiseAssertionFailure(void);
   1944   __CRT_INLINE VOID DbgRaiseAssertionFailure(void) {
   1945     __asm__ __volatile__("int $0x2c");
   1946   }
   1947 #endif
   1948 
   1949   __CRT_INLINE VOID MemoryBarrier(VOID)
   1950   {
   1951     LONG Barrier = 0;
   1952     __asm__ __volatile__("xchgl %%eax,%0 "
   1953       :"=r" (Barrier));
   1954   }
   1955 
   1956   __CRT_INLINE struct _TEB *NtCurrentTeb(void)
   1957   {
   1958     struct _TEB *ret;
   1959     __asm__ volatile ("movl	%%fs:0x18,%0"
   1960 	: "=r" (ret));
   1961     return ret;
   1962   }
   1963   __CRT_INLINE PVOID GetCurrentFiber(void)
   1964   {
   1965     void *ret;
   1966     __asm__ volatile ("movl	%%fs:0x10,%0"
   1967 	: "=r" (ret));
   1968     return ret;
   1969   }
   1970   __CRT_INLINE PVOID GetFiberData(void)
   1971   {
   1972     void *ret;
   1973     __asm__ volatile ("movl	%%fs:0x10,%0\n"
   1974 	"movl	(%0),%0"
   1975 	: "=r" (ret));
   1976     return ret;
   1977   }
   1978 #endif /* defined(__i386__) && !defined(__x86_64) */
   1979 
   1980 #define EXCEPTION_READ_FAULT 0
   1981 #define EXCEPTION_WRITE_FAULT 1
   1982 #define EXCEPTION_EXECUTE_FAULT 8
   1983 
   1984 #define SIZE_OF_80387_REGISTERS 80
   1985 
   1986 #if !defined(RC_INVOKED)
   1987 
   1988 #define CONTEXT_i386 0x00010000
   1989 #define CONTEXT_i486 0x00010000
   1990 
   1991 #define CONTEXT_CONTROL (CONTEXT_i386 | __MSABI_LONG(0x00000001))
   1992 #define CONTEXT_INTEGER (CONTEXT_i386 | __MSABI_LONG(0x00000002))
   1993 #define CONTEXT_SEGMENTS (CONTEXT_i386 | __MSABI_LONG(0x00000004))
   1994 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | __MSABI_LONG(0x00000008))
   1995 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000010))
   1996 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000020))
   1997 
   1998 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
   1999 
   2000 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
   2001 #endif /* !defined(RC_INVOKED) */
   2002 
   2003 #define MAXIMUM_SUPPORTED_EXTENSION 512
   2004 
   2005     typedef struct _FLOATING_SAVE_AREA {
   2006       DWORD ControlWord;
   2007       DWORD StatusWord;
   2008       DWORD TagWord;
   2009       DWORD ErrorOffset;
   2010       DWORD ErrorSelector;
   2011       DWORD DataOffset;
   2012       DWORD DataSelector;
   2013       BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
   2014       DWORD Cr0NpxState;
   2015     } FLOATING_SAVE_AREA;
   2016 
   2017     typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
   2018 
   2019     typedef struct _CONTEXT {
   2020       DWORD ContextFlags;
   2021       DWORD Dr0;
   2022       DWORD Dr1;
   2023       DWORD Dr2;
   2024       DWORD Dr3;
   2025       DWORD Dr6;
   2026       DWORD Dr7;
   2027       FLOATING_SAVE_AREA FloatSave;
   2028       DWORD SegGs;
   2029       DWORD SegFs;
   2030       DWORD SegEs;
   2031       DWORD SegDs;
   2032 
   2033       DWORD Edi;
   2034       DWORD Esi;
   2035       DWORD Ebx;
   2036       DWORD Edx;
   2037       DWORD Ecx;
   2038       DWORD Eax;
   2039       DWORD Ebp;
   2040       DWORD Eip;
   2041       DWORD SegCs;
   2042       DWORD EFlags;
   2043       DWORD Esp;
   2044       DWORD SegSs;
   2045       BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
   2046     } CONTEXT;
   2047 
   2048     typedef CONTEXT *PCONTEXT;
   2049 
   2050 #endif /* end of _X86_ */
   2051 
   2052   LONG WINAPI InterlockedIncrement(LONG volatile *);
   2053   LONG WINAPI InterlockedDecrement(LONG volatile *);
   2054   LONG WINAPI InterlockedExchange(LONG volatile *, LONG);
   2055 
   2056 #if defined(__MINGW_INTRIN_INLINE) && (defined(__i386__) || defined(__x86_64))
   2057   __MINGW_INTRIN_INLINE LONG WINAPI InterlockedIncrement(LONG volatile *Addend) {
   2058     LONG ret = 1;
   2059     __asm__ __volatile__ ("lock\n\t"
   2060         "xaddl %0,%1"
   2061 	: "+r" (ret), "+m" (*Addend)
   2062 	: : "memory");
   2063     return ret + 1;
   2064   }
   2065   __MINGW_INTRIN_INLINE LONG WINAPI InterlockedDecrement(LONG volatile *Addend) {
   2066     LONG ret = -1;
   2067     __asm__ __volatile__ ("lock\n\t"
   2068         "xaddl %0,%1"
   2069         : "+r" (ret), "+m" (*Addend)
   2070         : : "memory");
   2071     return ret - 1;
   2072   }
   2073   __MINGW_INTRIN_INLINE LONG WINAPI InterlockedExchange(LONG volatile *Target,LONG Value) {
   2074     __asm__ __volatile__ ("lock ; xchgl %0,%1"
   2075         : "=r"(Value)
   2076         : "m"(*Target),"0"(Value)
   2077         : "memory");
   2078     return Value;
   2079   }
   2080 #endif
   2081 
   2082 #ifndef _LDT_ENTRY_DEFINED
   2083 #define _LDT_ENTRY_DEFINED
   2084 
   2085     typedef struct _LDT_ENTRY {
   2086       WORD LimitLow;
   2087       WORD BaseLow;
   2088       union {
   2089 	struct {
   2090 	  BYTE BaseMid;
   2091 	  BYTE Flags1;
   2092 	  BYTE Flags2;
   2093 	  BYTE BaseHi;
   2094 	} Bytes;
   2095 	struct {
   2096 	  DWORD BaseMid : 8;
   2097 	  DWORD Type : 5;
   2098 	  DWORD Dpl : 2;
   2099 	  DWORD Pres : 1;
   2100 	  DWORD LimitHi : 4;
   2101 	  DWORD Sys : 1;
   2102 	  DWORD Reserved_0 : 1;
   2103 	  DWORD Default_Big : 1;
   2104 	  DWORD Granularity : 1;
   2105 	  DWORD BaseHi : 8;
   2106 	} Bits;
   2107       } HighWord;
   2108     } LDT_ENTRY,*PLDT_ENTRY;
   2109 #endif /* _LDT_ENTRY_DEFINED */
   2110 
   2111 #if defined(__ia64__) && !defined(RC_INVOKED)
   2112 
   2113 #ifdef __cplusplus
   2114     extern "C" {
   2115 #endif
   2116 
   2117       BOOLEAN BitScanForward64(DWORD *Index,DWORD64 Mask);
   2118       BOOLEAN BitScanReverse64(DWORD *Index,DWORD64 Mask);
   2119 
   2120 #ifdef __cplusplus
   2121     }
   2122 #endif
   2123 #endif /* defined(__ia64__) && !defined(RC_INVOKED) */
   2124 
   2125 #if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
   2126 
   2127     void *_cdecl _rdteb(void);
   2128 #ifdef __ia64__
   2129 
   2130 #define NtCurrentTeb() ((struct _TEB *)_rdteb())
   2131 #define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
   2132 #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
   2133 
   2134 #ifdef __cplusplus
   2135     extern "C" {
   2136 #endif
   2137 
   2138       void __break(int);
   2139       void __yield(void);
   2140       void __mf(void);
   2141       void __lfetch(int Level,VOID CONST *Address);
   2142       void __lfetchfault(int Level,VOID CONST *Address);
   2143       void __lfetch_excl(int Level,VOID CONST *Address);
   2144       void __lfetchfault_excl(int Level,VOID CONST *Address);
   2145 
   2146 #define MD_LFHINT_NONE 0x00
   2147 #define MD_LFHINT_NT1 0x01
   2148 #define MD_LFHINT_NT2 0x02
   2149 #define MD_LFHINT_NTA 0x03
   2150 
   2151 #ifdef __cplusplus
   2152     }
   2153 #endif
   2154 
   2155 #define YieldProcessor __yield
   2156 #define MemoryBarrier __mf
   2157 #define PreFetchCacheLine __lfetch
   2158 #define ReadForWriteAccess(p) (*(p))
   2159 #define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
   2160 
   2161 #define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
   2162 #define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
   2163 
   2164 #define UnsignedMultiplyHigh __UMULH
   2165 
   2166     ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
   2167 #else  /* __ia64__ */
   2168     struct _TEB *NtCurrentTeb(void);
   2169 #endif /* __ia64__ */
   2170 #endif /* !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_) */
   2171 
   2172 #ifdef _IA64_
   2173 
   2174 #define EXCEPTION_READ_FAULT 0
   2175 #define EXCEPTION_WRITE_FAULT 1
   2176 #define EXCEPTION_EXECUTE_FAULT 2
   2177 
   2178 #if !defined(RC_INVOKED)
   2179 
   2180 #define CONTEXT_IA64 0x00080000
   2181 
   2182 #define CONTEXT_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000001))
   2183 #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000002))
   2184 #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000004))
   2185 #define CONTEXT_INTEGER (CONTEXT_IA64 | __MSABI_LONG(0x00000008))
   2186 #define CONTEXT_DEBUG (CONTEXT_IA64 | __MSABI_LONG(0x00000010))
   2187 #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000020))
   2188 
   2189 #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
   2190 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
   2191 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
   2192 
   2193 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
   2194 #define CONTEXT_SERVICE_ACTIVE 0x10000000
   2195 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
   2196 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
   2197 #endif /* !defined(RC_INVOKED) */
   2198 
   2199     typedef struct _CONTEXT {
   2200       DWORD ContextFlags;
   2201       DWORD Fill1[3];
   2202       ULONGLONG DbI0;
   2203       ULONGLONG DbI1;
   2204       ULONGLONG DbI2;
   2205       ULONGLONG DbI3;
   2206       ULONGLONG DbI4;
   2207       ULONGLONG DbI5;
   2208       ULONGLONG DbI6;
   2209       ULONGLONG DbI7;
   2210       ULONGLONG DbD0;
   2211       ULONGLONG DbD1;
   2212       ULONGLONG DbD2;
   2213       ULONGLONG DbD3;
   2214       ULONGLONG DbD4;
   2215       ULONGLONG DbD5;
   2216       ULONGLONG DbD6;
   2217       ULONGLONG DbD7;
   2218       FLOAT128 FltS0;
   2219       FLOAT128 FltS1;
   2220       FLOAT128 FltS2;
   2221       FLOAT128 FltS3;
   2222       FLOAT128 FltT0;
   2223       FLOAT128 FltT1;
   2224       FLOAT128 FltT2;
   2225       FLOAT128 FltT3;
   2226       FLOAT128 FltT4;
   2227       FLOAT128 FltT5;
   2228       FLOAT128 FltT6;
   2229       FLOAT128 FltT7;
   2230       FLOAT128 FltT8;
   2231       FLOAT128 FltT9;
   2232       FLOAT128 FltS4;
   2233       FLOAT128 FltS5;
   2234       FLOAT128 FltS6;
   2235       FLOAT128 FltS7;
   2236       FLOAT128 FltS8;
   2237       FLOAT128 FltS9;
   2238       FLOAT128 FltS10;
   2239       FLOAT128 FltS11;
   2240       FLOAT128 FltS12;
   2241       FLOAT128 FltS13;
   2242       FLOAT128 FltS14;
   2243       FLOAT128 FltS15;
   2244       FLOAT128 FltS16;
   2245       FLOAT128 FltS17;
   2246       FLOAT128 FltS18;
   2247       FLOAT128 FltS19;
   2248       FLOAT128 FltF32;
   2249       FLOAT128 FltF33;
   2250       FLOAT128 FltF34;
   2251       FLOAT128 FltF35;
   2252       FLOAT128 FltF36;
   2253       FLOAT128 FltF37;
   2254       FLOAT128 FltF38;
   2255       FLOAT128 FltF39;
   2256       FLOAT128 FltF40;
   2257       FLOAT128 FltF41;
   2258       FLOAT128 FltF42;
   2259       FLOAT128 FltF43;
   2260       FLOAT128 FltF44;
   2261       FLOAT128 FltF45;
   2262       FLOAT128 FltF46;
   2263       FLOAT128 FltF47;
   2264       FLOAT128 FltF48;
   2265       FLOAT128 FltF49;
   2266       FLOAT128 FltF50;
   2267       FLOAT128 FltF51;
   2268       FLOAT128 FltF52;
   2269       FLOAT128 FltF53;
   2270       FLOAT128 FltF54;
   2271       FLOAT128 FltF55;
   2272       FLOAT128 FltF56;
   2273       FLOAT128 FltF57;
   2274       FLOAT128 FltF58;
   2275       FLOAT128 FltF59;
   2276       FLOAT128 FltF60;
   2277       FLOAT128 FltF61;
   2278       FLOAT128 FltF62;
   2279       FLOAT128 FltF63;
   2280       FLOAT128 FltF64;
   2281       FLOAT128 FltF65;
   2282       FLOAT128 FltF66;
   2283       FLOAT128 FltF67;
   2284       FLOAT128 FltF68;
   2285       FLOAT128 FltF69;
   2286       FLOAT128 FltF70;
   2287       FLOAT128 FltF71;
   2288       FLOAT128 FltF72;
   2289       FLOAT128 FltF73;
   2290       FLOAT128 FltF74;
   2291       FLOAT128 FltF75;
   2292       FLOAT128 FltF76;
   2293       FLOAT128 FltF77;
   2294       FLOAT128 FltF78;
   2295       FLOAT128 FltF79;
   2296       FLOAT128 FltF80;
   2297       FLOAT128 FltF81;
   2298       FLOAT128 FltF82;
   2299       FLOAT128 FltF83;
   2300       FLOAT128 FltF84;
   2301       FLOAT128 FltF85;
   2302       FLOAT128 FltF86;
   2303       FLOAT128 FltF87;
   2304       FLOAT128 FltF88;
   2305       FLOAT128 FltF89;
   2306       FLOAT128 FltF90;
   2307       FLOAT128 FltF91;
   2308       FLOAT128 FltF92;
   2309       FLOAT128 FltF93;
   2310       FLOAT128 FltF94;
   2311       FLOAT128 FltF95;
   2312       FLOAT128 FltF96;
   2313       FLOAT128 FltF97;
   2314       FLOAT128 FltF98;
   2315       FLOAT128 FltF99;
   2316       FLOAT128 FltF100;
   2317       FLOAT128 FltF101;
   2318       FLOAT128 FltF102;
   2319       FLOAT128 FltF103;
   2320       FLOAT128 FltF104;
   2321       FLOAT128 FltF105;
   2322       FLOAT128 FltF106;
   2323       FLOAT128 FltF107;
   2324       FLOAT128 FltF108;
   2325       FLOAT128 FltF109;
   2326       FLOAT128 FltF110;
   2327       FLOAT128 FltF111;
   2328       FLOAT128 FltF112;
   2329       FLOAT128 FltF113;
   2330       FLOAT128 FltF114;
   2331       FLOAT128 FltF115;
   2332       FLOAT128 FltF116;
   2333       FLOAT128 FltF117;
   2334       FLOAT128 FltF118;
   2335       FLOAT128 FltF119;
   2336       FLOAT128 FltF120;
   2337       FLOAT128 FltF121;
   2338       FLOAT128 FltF122;
   2339       FLOAT128 FltF123;
   2340       FLOAT128 FltF124;
   2341       FLOAT128 FltF125;
   2342       FLOAT128 FltF126;
   2343       FLOAT128 FltF127;
   2344       ULONGLONG StFPSR;
   2345       ULONGLONG IntGp;
   2346       ULONGLONG IntT0;
   2347       ULONGLONG IntT1;
   2348       ULONGLONG IntS0;
   2349       ULONGLONG IntS1;
   2350       ULONGLONG IntS2;
   2351       ULONGLONG IntS3;
   2352       ULONGLONG IntV0;
   2353       ULONGLONG IntT2;
   2354       ULONGLONG IntT3;
   2355       ULONGLONG IntT4;
   2356       ULONGLONG IntSp;
   2357       ULONGLONG IntTeb;
   2358       ULONGLONG IntT5;
   2359       ULONGLONG IntT6;
   2360       ULONGLONG IntT7;
   2361       ULONGLONG IntT8;
   2362       ULONGLONG IntT9;
   2363       ULONGLONG IntT10;
   2364       ULONGLONG IntT11;
   2365       ULONGLONG IntT12;
   2366       ULONGLONG IntT13;
   2367       ULONGLONG IntT14;
   2368       ULONGLONG IntT15;
   2369       ULONGLONG IntT16;
   2370       ULONGLONG IntT17;
   2371       ULONGLONG IntT18;
   2372       ULONGLONG IntT19;
   2373       ULONGLONG IntT20;
   2374       ULONGLONG IntT21;
   2375       ULONGLONG IntT22;
   2376       ULONGLONG IntNats;
   2377       ULONGLONG Preds;
   2378       ULONGLONG BrRp;
   2379       ULONGLONG BrS0;
   2380       ULONGLONG BrS1;
   2381       ULONGLONG BrS2;
   2382       ULONGLONG BrS3;
   2383       ULONGLONG BrS4;
   2384       ULONGLONG BrT0;
   2385       ULONGLONG BrT1;
   2386       ULONGLONG ApUNAT;
   2387       ULONGLONG ApLC;
   2388       ULONGLONG ApEC;
   2389       ULONGLONG ApCCV;
   2390       ULONGLONG ApDCR;
   2391       ULONGLONG RsPFS;
   2392       ULONGLONG RsBSP;
   2393       ULONGLONG RsBSPSTORE;
   2394       ULONGLONG RsRSC;
   2395       ULONGLONG RsRNAT;
   2396       ULONGLONG StIPSR;
   2397       ULONGLONG StIIP;
   2398       ULONGLONG StIFS;
   2399       ULONGLONG StFCR;
   2400       ULONGLONG Eflag;
   2401       ULONGLONG SegCSD;
   2402       ULONGLONG SegSSD;
   2403       ULONGLONG Cflag;
   2404       ULONGLONG StFSR;
   2405       ULONGLONG StFIR;
   2406       ULONGLONG StFDR;
   2407       ULONGLONG UNUSEDPACK;
   2408     } CONTEXT,*PCONTEXT;
   2409 
   2410     typedef struct _PLABEL_DESCRIPTOR {
   2411       ULONGLONG EntryPoint;
   2412       ULONGLONG GlobalPointer;
   2413     } PLABEL_DESCRIPTOR,*PPLABEL_DESCRIPTOR;
   2414 
   2415     typedef struct _RUNTIME_FUNCTION {
   2416       DWORD BeginAddress;
   2417       DWORD EndAddress;
   2418       DWORD UnwindInfoAddress;
   2419     } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
   2420 
   2421     typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
   2422     typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
   2423 
   2424 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
   2425 
   2426     BOOLEAN RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable,DWORD EntryCount,ULONGLONG BaseAddress,ULONGLONG TargetGp);
   2427     BOOLEAN RtlInstallFunctionTableCallback(DWORD64 TableIdentifier,DWORD64 BaseAddress,DWORD Length,DWORD64 TargetGp,PGET_RUNTIME_FUNCTION_CALLBACK Callback,PVOID Context,PCWSTR OutOfProcessCallbackDll);
   2428     BOOLEAN RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable);
   2429     VOID RtlRestoreContext (PCONTEXT ContextRecord,struct _EXCEPTION_RECORD *ExceptionRecord);
   2430     VOID __jump_unwind(ULONGLONG TargetMsFrame,ULONGLONG TargetBsFrame,ULONGLONG TargetPc);
   2431 #endif /* end of _IA64_ */
   2432 
   2433 /* http://www.nynaeve.net/?p=99 */
   2434 
   2435 #define EXCEPTION_NONCONTINUABLE 0x1
   2436 #define EXCEPTION_UNWINDING	   0x2
   2437 #define EXCEPTION_EXIT_UNWIND      0x4
   2438 #define EXCEPTION_STACK_INVALID    0x8
   2439 #define EXCEPTION_NESTED_CALL      0x10
   2440 #define EXCEPTION_TARGET_UNWIND    0x20
   2441 #define EXCEPTION_COLLIDED_UNWIND  0x40
   2442 #define EXCEPTION_UNWIND           0x66
   2443 
   2444 #define EXCEPTION_MAXIMUM_PARAMETERS 15
   2445 
   2446     typedef struct _EXCEPTION_RECORD {
   2447       DWORD ExceptionCode;
   2448       DWORD ExceptionFlags;
   2449       struct _EXCEPTION_RECORD *ExceptionRecord;
   2450       PVOID ExceptionAddress;
   2451       DWORD NumberParameters;
   2452       ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
   2453     } EXCEPTION_RECORD;
   2454 
   2455     typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
   2456 
   2457     typedef struct _EXCEPTION_RECORD32 {
   2458       DWORD ExceptionCode;
   2459       DWORD ExceptionFlags;
   2460       DWORD ExceptionRecord;
   2461       DWORD ExceptionAddress;
   2462       DWORD NumberParameters;
   2463       DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
   2464     } EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
   2465 
   2466     typedef struct _EXCEPTION_RECORD64 {
   2467       DWORD ExceptionCode;
   2468       DWORD ExceptionFlags;
   2469       DWORD64 ExceptionRecord;
   2470       DWORD64 ExceptionAddress;
   2471       DWORD NumberParameters;
   2472       DWORD __unusedAlignment;
   2473       DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
   2474     } EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
   2475 
   2476     typedef struct _EXCEPTION_POINTERS {
   2477       PEXCEPTION_RECORD ExceptionRecord;
   2478       PCONTEXT ContextRecord;
   2479     } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS;
   2480 
   2481 #ifdef __x86_64__
   2482 /* http://msdn.microsoft.com/en-us/library/ms680597(VS.85).aspx */
   2483 
   2484 #define UNWIND_HISTORY_TABLE_SIZE 12
   2485 
   2486   typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
   2487     ULONG64 ImageBase;
   2488     PRUNTIME_FUNCTION FunctionEntry;
   2489   } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
   2490 
   2491 #define UNWIND_HISTORY_TABLE_NONE    0
   2492 #define UNWIND_HISTORY_TABLE_GLOBAL  1
   2493 #define UNWIND_HISTORY_TABLE_LOCAL   2
   2494 
   2495   typedef struct _UNWIND_HISTORY_TABLE {
   2496     ULONG Count;
   2497     UCHAR Search;
   2498     ULONG64 LowAddress;
   2499     ULONG64 HighAddress;
   2500     UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
   2501   } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
   2502 
   2503   NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry(ULONG64 ControlPc, PULONG64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
   2504 
   2505   /* http://msdn.microsoft.com/en-us/library/b6sf5kbd(VS.80).aspx */
   2506 
   2507   struct _DISPATCHER_CONTEXT;
   2508   typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
   2509   typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
   2510 
   2511 #ifndef __PEXCEPTION_ROUTINE_DEFINED
   2512 #define __PEXCEPTION_ROUTINE_DEFINED
   2513 
   2514   typedef EXCEPTION_DISPOSITION (NTAPI *PEXCEPTION_ROUTINE)
   2515     (PEXCEPTION_RECORD ExceptionRecord,
   2516      ULONG64 EstablisherFrame,
   2517      PCONTEXT ContextRecord,
   2518      PDISPATCHER_CONTEXT DispatcherContext);
   2519 #endif /* __PEXCEPTION_ROUTINE_DEFINED */
   2520 
   2521   struct _DISPATCHER_CONTEXT {
   2522     ULONG64 ControlPc;
   2523     ULONG64 ImageBase;
   2524     PRUNTIME_FUNCTION FunctionEntry;
   2525     ULONG64 EstablisherFrame;
   2526     ULONG64 TargetIp;
   2527     PCONTEXT ContextRecord;
   2528     PEXCEPTION_ROUTINE LanguageHandler;
   2529     PVOID HandlerData;
   2530     /* http://www.nynaeve.net/?p=99 */
   2531     PUNWIND_HISTORY_TABLE HistoryTable;
   2532     ULONG ScopeIndex;
   2533     ULONG Fill0;
   2534   };
   2535 
   2536   /* http://msdn.microsoft.com/en-us/library/ms680617(VS.85).aspx */
   2537 
   2538   typedef struct _KNONVOLATILE_CONTEXT_POINTERS
   2539   {
   2540     PM128A FloatingContext[16];
   2541     PULONG64 IntegerContext[16];
   2542   } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
   2543 
   2544   NTSYSAPI VOID NTAPI RtlUnwindEx(PVOID TargetFrame, ULONG64 TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT OriginalContext, PUNWIND_HISTORY_TABLE HistoryTable);
   2545   NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind(ULONG HandlerType, ULONG64 ImageBase, ULONG64 ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord,PVOID *HandlerData, PULONG64 EstablisherFrame,PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
   2546 #endif /* defined(__x86_64__) */
   2547 
   2548     typedef PVOID PACCESS_TOKEN;
   2549     typedef PVOID PSECURITY_DESCRIPTOR;
   2550     typedef PVOID PSID;
   2551 
   2552     typedef DWORD ACCESS_MASK;
   2553     typedef ACCESS_MASK *PACCESS_MASK;
   2554 
   2555 #define DELETE (__MSABI_LONG(0x00010000))
   2556 #define READ_CONTROL (__MSABI_LONG(0x00020000))
   2557 #define WRITE_DAC (__MSABI_LONG(0x00040000))
   2558 #define WRITE_OWNER (__MSABI_LONG(0x00080000))
   2559 #define SYNCHRONIZE (__MSABI_LONG(0x00100000))
   2560 
   2561 #define STANDARD_RIGHTS_REQUIRED (__MSABI_LONG(0x000F0000))
   2562 #define STANDARD_RIGHTS_READ (READ_CONTROL)
   2563 #define STANDARD_RIGHTS_WRITE (READ_CONTROL)
   2564 #define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
   2565 #define STANDARD_RIGHTS_ALL (__MSABI_LONG(0x001F0000))
   2566 
   2567 #define SPECIFIC_RIGHTS_ALL (__MSABI_LONG(0x0000FFFF))
   2568 
   2569 #define ACCESS_SYSTEM_SECURITY (__MSABI_LONG(0x01000000))
   2570 
   2571 #define MAXIMUM_ALLOWED (__MSABI_LONG(0x02000000))
   2572 
   2573 #define GENERIC_READ (__MSABI_LONG(0x80000000))
   2574 #define GENERIC_WRITE (__MSABI_LONG(0x40000000))
   2575 #define GENERIC_EXECUTE (__MSABI_LONG(0x20000000))
   2576 #define GENERIC_ALL (__MSABI_LONG(0x10000000))
   2577 
   2578     typedef struct _GENERIC_MAPPING {
   2579       ACCESS_MASK GenericRead;
   2580       ACCESS_MASK GenericWrite;
   2581       ACCESS_MASK GenericExecute;
   2582       ACCESS_MASK GenericAll;
   2583     } GENERIC_MAPPING;
   2584     typedef GENERIC_MAPPING *PGENERIC_MAPPING;
   2585 
   2586 #include <pshpack4.h>
   2587 
   2588     typedef struct _LUID_AND_ATTRIBUTES {
   2589       LUID Luid;
   2590       DWORD Attributes;
   2591     } LUID_AND_ATTRIBUTES,*PLUID_AND_ATTRIBUTES;
   2592     typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
   2593     typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
   2594 
   2595 #include <poppack.h>
   2596 
   2597 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
   2598 #define SID_IDENTIFIER_AUTHORITY_DEFINED
   2599     typedef struct _SID_IDENTIFIER_AUTHORITY {
   2600       BYTE Value[6];
   2601     } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
   2602 #endif /* SID_IDENTIFIER_AUTHORITY_DEFINED */
   2603 
   2604 #ifndef SID_DEFINED
   2605 #define SID_DEFINED
   2606     typedef struct _SID {
   2607       BYTE Revision;
   2608       BYTE SubAuthorityCount;
   2609       SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
   2610       DWORD SubAuthority[ANYSIZE_ARRAY];
   2611     } SID,*PISID;
   2612 #endif /* SID_DEFINED */
   2613 
   2614 #define SID_REVISION (1)
   2615 #define SID_MAX_SUB_AUTHORITIES (15)
   2616 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)
   2617 #if (_WIN32_WINNT >= 0x0600)
   2618 #define SID_HASH_SIZE 32
   2619 #endif
   2620 
   2621 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES *sizeof(DWORD)))
   2622 
   2623     typedef enum _SID_NAME_USE {
   2624       SidTypeUser = 1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown,SidTypeComputer
   2625     } SID_NAME_USE,*PSID_NAME_USE;
   2626 
   2627     typedef struct _SID_AND_ATTRIBUTES {
   2628       PSID Sid;
   2629       DWORD Attributes;
   2630     } SID_AND_ATTRIBUTES,*PSID_AND_ATTRIBUTES;
   2631 
   2632     typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
   2633     typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
   2634 
   2635 #if (_WIN32_WINNT >= 0x0600)
   2636     typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
   2637     typedef struct _SID_AND_ATTRIBUTES_HASH {
   2638       DWORD SidCount;
   2639       PSID_AND_ATTRIBUTES SidAttr;
   2640       SID_HASH_ENTRY Hash[SID_HASH_SIZE];
   2641     } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
   2642 #endif
   2643 
   2644 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
   2645 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
   2646 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
   2647 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
   2648 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
   2649 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
   2650 
   2651 #define SECURITY_NULL_RID (__MSABI_LONG(0x00000000))
   2652 #define SECURITY_WORLD_RID (__MSABI_LONG(0x00000000))
   2653 #define SECURITY_LOCAL_RID (__MSABI_LONG(0x00000000))
   2654 
   2655 #define SECURITY_CREATOR_OWNER_RID (__MSABI_LONG(0x00000000))
   2656 #define SECURITY_CREATOR_GROUP_RID (__MSABI_LONG(0x00000001))
   2657 
   2658 #define SECURITY_CREATOR_OWNER_SERVER_RID (__MSABI_LONG(0x00000002))
   2659 #define SECURITY_CREATOR_GROUP_SERVER_RID (__MSABI_LONG(0x00000003))
   2660 
   2661 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
   2662 
   2663 #define SECURITY_DIALUP_RID (__MSABI_LONG(0x00000001))
   2664 #define SECURITY_NETWORK_RID (__MSABI_LONG(0x00000002))
   2665 #define SECURITY_BATCH_RID (__MSABI_LONG(0x00000003))
   2666 #define SECURITY_INTERACTIVE_RID (__MSABI_LONG(0x00000004))
   2667 #define SECURITY_LOGON_IDS_RID (__MSABI_LONG(0x00000005))
   2668 #define SECURITY_LOGON_IDS_RID_COUNT (__MSABI_LONG(3))
   2669 #define SECURITY_SERVICE_RID (__MSABI_LONG(0x00000006))
   2670 #define SECURITY_ANONYMOUS_LOGON_RID (__MSABI_LONG(0x00000007))
   2671 #define SECURITY_PROXY_RID (__MSABI_LONG(0x00000008))
   2672 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (__MSABI_LONG(0x00000009))
   2673 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
   2674 #define SECURITY_PRINCIPAL_SELF_RID (__MSABI_LONG(0x0000000A))
   2675 #define SECURITY_AUTHENTICATED_USER_RID (__MSABI_LONG(0x0000000B))
   2676 #define SECURITY_RESTRICTED_CODE_RID (__MSABI_LONG(0x0000000C))
   2677 #define SECURITY_TERMINAL_SERVER_RID (__MSABI_LONG(0x0000000D))
   2678 #define SECURITY_REMOTE_LOGON_RID (__MSABI_LONG(0x0000000E))
   2679 #define SECURITY_THIS_ORGANIZATION_RID (__MSABI_LONG(0x0000000F))
   2680 #define SECURITY_IUSER_RID (__MSABI_LONG(0x00000011))
   2681 
   2682 #define SECURITY_LOCAL_SYSTEM_RID (__MSABI_LONG(0x00000012))
   2683 #define SECURITY_LOCAL_SERVICE_RID (__MSABI_LONG(0x00000013))
   2684 #define SECURITY_NETWORK_SERVICE_RID (__MSABI_LONG(0x00000014))
   2685 
   2686 #define SECURITY_NT_NON_UNIQUE (__MSABI_LONG(0x00000015))
   2687 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (__MSABI_LONG(3))
   2688 
   2689 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (__MSABI_LONG(0x00000016))
   2690 
   2691 #define SECURITY_BUILTIN_DOMAIN_RID (__MSABI_LONG(0x00000020))
   2692 #define SECURITY_WRITE_RESTRICTED_CODE_RID (__MSABI_LONG(0x00000021))
   2693 
   2694 #define SECURITY_PACKAGE_BASE_RID (__MSABI_LONG(0x00000040))
   2695 #define SECURITY_PACKAGE_RID_COUNT (__MSABI_LONG(2))
   2696 #define SECURITY_PACKAGE_NTLM_RID (__MSABI_LONG(0x0000000A))
   2697 #define SECURITY_PACKAGE_SCHANNEL_RID (__MSABI_LONG(0x0000000E))
   2698 #define SECURITY_PACKAGE_DIGEST_RID (__MSABI_LONG(0x00000015))
   2699 
   2700 #define SECURITY_SERVICE_ID_BASE_RID (__MSABI_LONG(0x00000050))
   2701 #define SECURITY_SERVICE_ID_RID_COUNT (__MSABI_LONG(6))
   2702 
   2703 #define SECURITY_RESERVED_ID_BASE_RID (__MSABI_LONG(0x00000051))
   2704 
   2705 #define SECURITY_MAX_ALWAYS_FILTERED (__MSABI_LONG(0x000003E7))
   2706 #define SECURITY_MIN_NEVER_FILTERED (__MSABI_LONG(0x000003E8))
   2707 
   2708 #define SECURITY_OTHER_ORGANIZATION_RID (__MSABI_LONG(0x000003E8))
   2709 
   2710 #define FOREST_USER_RID_MAX (__MSABI_LONG(0x000001F3))
   2711 
   2712 #define DOMAIN_USER_RID_ADMIN (__MSABI_LONG(0x000001F4))
   2713 #define DOMAIN_USER_RID_GUEST (__MSABI_LONG(0x000001F5))
   2714 #define DOMAIN_USER_RID_KRBTGT (__MSABI_LONG(0x000001F6))
   2715 
   2716 #define DOMAIN_USER_RID_MAX (__MSABI_LONG(0x000003E7))
   2717 
   2718 #define DOMAIN_GROUP_RID_ADMINS (__MSABI_LONG(0x00000200))
   2719 #define DOMAIN_GROUP_RID_USERS (__MSABI_LONG(0x00000201))
   2720 #define DOMAIN_GROUP_RID_GUESTS (__MSABI_LONG(0x00000202))
   2721 #define DOMAIN_GROUP_RID_COMPUTERS (__MSABI_LONG(0x00000203))
   2722 #define DOMAIN_GROUP_RID_CONTROLLERS (__MSABI_LONG(0x00000204))
   2723 #define DOMAIN_GROUP_RID_CERT_ADMINS (__MSABI_LONG(0x00000205))
   2724 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (__MSABI_LONG(0x00000206))
   2725 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (__MSABI_LONG(0x00000207))
   2726 #define DOMAIN_GROUP_RID_POLICY_ADMINS (__MSABI_LONG(0x00000208))
   2727 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (__MSABI_LONG(0x00000209))
   2728 
   2729 #define DOMAIN_ALIAS_RID_ADMINS (__MSABI_LONG(0x00000220))
   2730 #define DOMAIN_ALIAS_RID_USERS (__MSABI_LONG(0x00000221))
   2731 #define DOMAIN_ALIAS_RID_GUESTS (__MSABI_LONG(0x00000222))
   2732 #define DOMAIN_ALIAS_RID_POWER_USERS (__MSABI_LONG(0x00000223))
   2733 
   2734 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (__MSABI_LONG(0x00000224))
   2735 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (__MSABI_LONG(0x00000225))
   2736 #define DOMAIN_ALIAS_RID_PRINT_OPS (__MSABI_LONG(0x00000226))
   2737 #define DOMAIN_ALIAS_RID_BACKUP_OPS (__MSABI_LONG(0x00000227))
   2738 
   2739 #define DOMAIN_ALIAS_RID_REPLICATOR (__MSABI_LONG(0x00000228))
   2740 #define DOMAIN_ALIAS_RID_RAS_SERVERS (__MSABI_LONG(0x00000229))
   2741 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (__MSABI_LONG(0x0000022A))
   2742 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (__MSABI_LONG(0x0000022B))
   2743 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (__MSABI_LONG(0x0000022C))
   2744 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (__MSABI_LONG(0x0000022D))
   2745 
   2746 #define DOMAIN_ALIAS_RID_MONITORING_USERS (__MSABI_LONG(0x0000022E))
   2747 #define DOMAIN_ALIAS_RID_LOGGING_USERS (__MSABI_LONG(0x0000022F))
   2748 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (__MSABI_LONG(0x00000230))
   2749 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (__MSABI_LONG(0x00000231))
   2750 #define DOMAIN_ALIAS_RID_DCOM_USERS (__MSABI_LONG(0x00000232))
   2751 
   2752 #define DOMAIN_ALIAS_RID_IUSERS (__MSABI_LONG(0x00000238))
   2753 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (__MSABI_LONG(0x00000239))
   2754 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023B))
   2755 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023C))
   2756 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (__MSABI_LONG(0x0000023D))
   2757 
   2758 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
   2759 #define SECURITY_MANDATORY_UNTRUSTED_RID (__MSABI_LONG(0x00000000))
   2760 #define SECURITY_MANDATORY_LOW_RID (__MSABI_LONG(0x00001000))
   2761 #define SECURITY_MANDATORY_MEDIUM_RID (__MSABI_LONG(0x00002000))
   2762 #define SECURITY_MANDATORY_HIGH_RID (__MSABI_LONG(0x00003000))
   2763 #define SECURITY_MANDATORY_SYSTEM_RID (__MSABI_LONG(0x00004000))
   2764 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (__MSABI_LONG(0x00005000))
   2765 
   2766 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
   2767 
   2768 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
   2769 
   2770     typedef enum {
   2771       WinNullSid = 0,WinWorldSid = 1,WinLocalSid = 2,WinCreatorOwnerSid = 3,
   2772       WinCreatorGroupSid = 4,WinCreatorOwnerServerSid = 5,
   2773       WinCreatorGroupServerSid = 6,WinNtAuthoritySid = 7,WinDialupSid = 8,
   2774       WinNetworkSid = 9,WinBatchSid = 10,WinInteractiveSid = 11,
   2775       WinServiceSid = 12,WinAnonymousSid = 13,WinProxySid = 14,
   2776       WinEnterpriseControllersSid = 15,WinSelfSid = 16,
   2777       WinAuthenticatedUserSid = 17,WinRestrictedCodeSid = 18,
   2778       WinTerminalServerSid = 19,WinRemoteLogonIdSid = 20,WinLogonIdsSid = 21,
   2779       WinLocalSystemSid = 22,WinLocalServiceSid = 23,WinNetworkServiceSid = 24,
   2780       WinBuiltinDomainSid = 25,WinBuiltinAdministratorsSid = 26,
   2781       WinBuiltinUsersSid = 27,WinBuiltinGuestsSid = 28,
   2782       WinBuiltinPowerUsersSid = 29,WinBuiltinAccountOperatorsSid = 30,
   2783       WinBuiltinSystemOperatorsSid = 31,WinBuiltinPrintOperatorsSid = 32,
   2784       WinBuiltinBackupOperatorsSid = 33,WinBuiltinReplicatorSid = 34,
   2785       WinBuiltinPreWindows2000CompatibleAccessSid = 35,
   2786       WinBuiltinRemoteDesktopUsersSid = 36,
   2787       WinBuiltinNetworkConfigurationOperatorsSid = 37,
   2788       WinAccountAdministratorSid = 38,WinAccountGuestSid = 39,
   2789       WinAccountKrbtgtSid = 40,WinAccountDomainAdminsSid = 41,
   2790       WinAccountDomainUsersSid = 42,WinAccountDomainGuestsSid = 43,
   2791       WinAccountComputersSid = 44,WinAccountControllersSid = 45,
   2792       WinAccountCertAdminsSid = 46,WinAccountSchemaAdminsSid = 47,
   2793       WinAccountEnterpriseAdminsSid = 48,WinAccountPolicyAdminsSid = 49,
   2794       WinAccountRasAndIasServersSid = 50,WinNTLMAuthenticationSid = 51,
   2795       WinDigestAuthenticationSid = 52,WinSChannelAuthenticationSid = 53,
   2796       WinThisOrganizationSid = 54,WinOtherOrganizationSid = 55,
   2797       WinBuiltinIncomingForestTrustBuildersSid = 56,
   2798       WinBuiltinPerfMonitoringUsersSid = 57,WinBuiltinPerfLoggingUsersSid = 58,
   2799       WinBuiltinAuthorizationAccessSid = 59,
   2800       WinBuiltinTerminalServerLicenseServersSid = 60,
   2801       WinBuiltinDCOMUsersSid = 61,WinBuiltinIUsersSid = 62,
   2802       WinIUserSid = 63, WinBuiltinCryptoOperatorsSid = 64,
   2803       WinUntrustedLabelSid = 65, WinLowLabelSid = 66, WinMediumLabelSid = 67,
   2804       WinHighLabelSid = 68, WinSystemLabelSid = 69, WinWriteRestrictedCodeSid = 70,
   2805       WinCreatorOwnerRightsSid = 71, WinCacheablePrincipalsGroupSid = 72,
   2806       WinNonCacheablePrincipalsGroupSid = 73, WinEnterpriseReadonlyControllersSid = 74,
   2807       WinAccountReadonlyControllersSid = 75, WinBuiltinEventLogReadersGroup = 76,
   2808       WinNewEnterpriseReadonlyControllersSid = 77, WinBuiltinCertSvcDComAccessGroup = 78,
   2809       WinMediumPlusLabelSid = 79, WinLocalLogonSid = 80, WinConsoleLogonSid = 81,
   2810       WinThisOrganizationCertificateSid = 82, WinApplicationPackageAuthoritySid = 83,
   2811       WinBuiltinAnyPackageSid = 84, WinCapabilityInternetClientSid = 85,
   2812       WinCapabilityInternetClientServerSid = 86,
   2813       WinCapabilityPrivateNetworkClientServerSid = 87,
   2814       WinCapabilityPicturesLibrarySid = 88, WinCapabilityVideosLibrarySid = 89,
   2815       WinCapabilityMusicLibrarySid = 90, WinCapabilityDocumentsLibrarySid = 91,
   2816       WinCapabilitySharedUserCertificatesSid = 92, WinCapabilityEnterpriseAuthenticationSid = 93,
   2817       WinCapabilityRemovableStorageSid = 94, WinBuiltinRDSRemoteAccessServersSid = 95,
   2818       WinBuiltinRDSEndpointServersSid = 96, WinBuiltinRDSManagementServersSid = 97,
   2819       WinUserModeDriversSid = 98, WinBuiltinHyperVAdminsSid = 99,
   2820       WinAccountCloneableControllersSid = 100,
   2821       WinBuiltinAccessControlAssistanceOperatorsSid = 101,
   2822       WinBuiltinRemoteManagementUsersSid = 102, WinAuthenticationAuthorityAssertedSid = 103,
   2823       WinAuthenticationServiceAssertedSid = 104
   2824 } WELL_KNOWN_SID_TYPE;
   2825 
   2826 #define SECURITY_SCOPED_POLICY_ID_AUTHORITY { 0, 0, 0, 0, 0, 17 }
   2827 #define SECURITY_AUTHENTICATION_AUTHORITY   { 0, 0, 0, 0, 0, 18 }
   2828 
   2829 #define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT    (__MSABI_LONG(1))
   2830 #define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (__MSABI_LONG(0x1))
   2831 #define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID   (__MSABI_LONG(0x2))
   2832 
   2833 #define SECURITY_TRUSTED_INSTALLER_RID1 956008885
   2834 #define SECURITY_TRUSTED_INSTALLER_RID2 3418522649
   2835 #define SECURITY_TRUSTED_INSTALLER_RID3 1831038044
   2836 #define SECURITY_TRUSTED_INSTALLER_RID4 1853292631
   2837 #define SECURITY_TRUSTED_INSTALLER_RID5 2271478464
   2838 
   2839 #define SYSTEM_LUID { 0x3E7,0x0 }
   2840 #define ANONYMOUS_LOGON_LUID { 0x3e6,0x0 }
   2841 #define LOCALSERVICE_LUID { 0x3e5,0x0 }
   2842 #define NETWORKSERVICE_LUID { 0x3e4,0x0 }
   2843 #define IUSER_LUID { 0x3e3, 0x0 }
   2844 
   2845 #define SE_GROUP_MANDATORY (__MSABI_LONG(0x00000001))
   2846 #define SE_GROUP_ENABLED_BY_DEFAULT (__MSABI_LONG(0x00000002))
   2847 #define SE_GROUP_ENABLED (__MSABI_LONG(0x00000004))
   2848 #define SE_GROUP_OWNER (__MSABI_LONG(0x00000008))
   2849 #define SE_GROUP_USE_FOR_DENY_ONLY (__MSABI_LONG(0x00000010))
   2850 #define SE_GROUP_INTEGRITY (__MSABI_LONG(0x00000020))
   2851 #define SE_GROUP_INTEGRITY_ENABLED (__MSABI_LONG(0x00000040))
   2852 #define SE_GROUP_LOGON_ID (__MSABI_LONG(0xC0000000))
   2853 #define SE_GROUP_RESOURCE (__MSABI_LONG(0x20000000))
   2854 
   2855 #define ACL_REVISION (2)
   2856 #define ACL_REVISION_DS (4)
   2857 
   2858 #define ACL_REVISION1 (1)
   2859 #define MIN_ACL_REVISION ACL_REVISION2
   2860 #define ACL_REVISION2 (2)
   2861 #define ACL_REVISION3 (3)
   2862 #define ACL_REVISION4 (4)
   2863 #define MAX_ACL_REVISION ACL_REVISION4
   2864 
   2865     typedef struct _ACL {
   2866       BYTE AclRevision;
   2867       BYTE Sbz1;
   2868       WORD AclSize;
   2869       WORD AceCount;
   2870       WORD Sbz2;
   2871     } ACL;
   2872     typedef ACL *PACL;
   2873 
   2874     typedef struct _ACE_HEADER {
   2875       BYTE AceType;
   2876       BYTE AceFlags;
   2877       WORD AceSize;
   2878     } ACE_HEADER;
   2879     typedef ACE_HEADER *PACE_HEADER;
   2880 
   2881 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
   2882 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
   2883 #define ACCESS_DENIED_ACE_TYPE (0x1)
   2884 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
   2885 #define SYSTEM_ALARM_ACE_TYPE (0x3)
   2886 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
   2887 
   2888 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
   2889 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
   2890 
   2891 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
   2892 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
   2893 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
   2894 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
   2895 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
   2896 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
   2897 
   2898 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
   2899 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
   2900 
   2901 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
   2902 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
   2903 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
   2904 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
   2905 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
   2906 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
   2907 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
   2908 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
   2909 
   2910 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
   2911 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
   2912 
   2913 #define OBJECT_INHERIT_ACE (0x1)
   2914 #define CONTAINER_INHERIT_ACE (0x2)
   2915 #define NO_PROPAGATE_INHERIT_ACE (0x4)
   2916 #define INHERIT_ONLY_ACE (0x8)
   2917 #define INHERITED_ACE (0x10)
   2918 #define VALID_INHERIT_FLAGS (0x1F)
   2919 
   2920 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
   2921 #define FAILED_ACCESS_ACE_FLAG (0x80)
   2922 
   2923     typedef struct _ACCESS_ALLOWED_ACE {
   2924       ACE_HEADER Header;
   2925       ACCESS_MASK Mask;
   2926       DWORD SidStart;
   2927     } ACCESS_ALLOWED_ACE;
   2928 
   2929     typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
   2930 
   2931     typedef struct _ACCESS_DENIED_ACE {
   2932       ACE_HEADER Header;
   2933       ACCESS_MASK Mask;
   2934       DWORD SidStart;
   2935     } ACCESS_DENIED_ACE;
   2936     typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
   2937 
   2938     typedef struct _SYSTEM_AUDIT_ACE {
   2939       ACE_HEADER Header;
   2940       ACCESS_MASK Mask;
   2941       DWORD SidStart;
   2942     } SYSTEM_AUDIT_ACE;
   2943     typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
   2944 
   2945     typedef struct _SYSTEM_ALARM_ACE {
   2946       ACE_HEADER Header;
   2947       ACCESS_MASK Mask;
   2948       DWORD SidStart;
   2949     } SYSTEM_ALARM_ACE;
   2950     typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
   2951 
   2952     typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
   2953       ACE_HEADER Header;
   2954       ACCESS_MASK Mask;
   2955       DWORD SidStart;
   2956     } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
   2957 
   2958 #define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
   2959 #define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
   2960 #define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
   2961 
   2962 #define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
   2963 
   2964     typedef struct _ACCESS_