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_