2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the w64 mingw-runtime package.
4 * No warranty is given; refer to the file DISCLAIMER within this package.
14 #define ANYSIZE_ARRAY 1
16 #include <specstrings.h>
18 #define RESTRICTED_POINTER
20 #ifndef __CRT_UNALIGNED
21 #define __CRT_UNALIGNED
24 #if defined(__ia64__) || defined(__x86_64)
25 #define UNALIGNED __CRT_UNALIGNED
27 #define UNALIGNED64 __CRT_UNALIGNED
36 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && (defined(_X86_) && !defined(__x86_64))
40 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(__x86_64)
44 #if !defined(I_X86_) && !(defined(_X86_) && !defined(__x86_64)) && !defined(_AMD64_) && defined(__ia64__)
52 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
53 #define MEMORY_ALLOCATION_ALIGNMENT 16
55 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
56 #define MEMORY_ALLOCATION_ALIGNMENT 8
60 #define TYPE_ALIGNMENT(t) __alignof__ (t)
62 #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; },test)
67 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
69 #define PROBE_ALIGNMENT(_s) (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
71 #error No Target Architecture
73 #define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
75 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
78 #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
82 #if defined(_X86_) || defined(__ia64__) || defined(__x86_64)
83 #define DECLSPEC_IMPORT __declspec(dllimport)
85 #define DECLSPEC_IMPORT
88 #ifndef DECLSPEC_NORETURN
89 #define DECLSPEC_NORETURN __declspec(noreturn)
92 #ifndef DECLSPEC_ALIGN
93 #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x)))
96 #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
97 #if defined(_AMD64_) || defined(I_X86_)
98 #define SYSTEM_CACHE_ALIGNMENT_SIZE 64
100 #define SYSTEM_CACHE_ALIGNMENT_SIZE 128
104 #ifndef DECLSPEC_CACHEALIGN
105 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
108 #ifndef DECLSPEC_UUID
109 #define DECLSPEC_UUID(x)
112 #ifndef DECLSPEC_NOVTABLE
113 #define DECLSPEC_NOVTABLE
116 #ifndef DECLSPEC_SELECTANY
117 #define DECLSPEC_SELECTANY __declspec(selectany)
121 #define NOP_FUNCTION (void)0
124 #ifndef DECLSPEC_NOINLINE
125 #define DECLSPEC_NOINLINE
129 #define FORCEINLINE static __inline__
132 #ifndef DECLSPEC_DEPRECATED
133 #define DECLSPEC_DEPRECATED __declspec(deprecated)
134 #define DEPRECATE_SUPPORTED
137 #define DECLSPEC_DEPRECATED_DDK
138 #define PRAGMA_DEPRECATED_DDK 0
141 typedef void *PVOID64
;
143 #define NTAPI __stdcall
144 #define NTSYSAPI DECLSPEC_IMPORT
145 #define NTSYSCALLAPI DECLSPEC_IMPORT
154 typedef wchar_t WCHAR
;
155 typedef WCHAR
*PWCHAR
,*LPWCH
,*PWCH
;
156 typedef CONST WCHAR
*LPCWCH
,*PCWCH
;
157 typedef WCHAR
*NWPSTR
,*LPWSTR
,*PWSTR
;
158 typedef PWSTR
*PZPWSTR
;
159 typedef CONST PWSTR
*PCZPWSTR
;
160 typedef WCHAR UNALIGNED
*LPUWSTR
,*PUWSTR
;
161 typedef CONST WCHAR
*LPCWSTR
,*PCWSTR
;
162 typedef PCWSTR
*PZPCWSTR
;
163 typedef CONST WCHAR UNALIGNED
*LPCUWSTR
,*PCUWSTR
;
164 typedef CHAR
*PCHAR
,*LPCH
,*PCH
;
165 typedef CONST CHAR
*LPCCH
,*PCCH
;
166 typedef CHAR
*NPSTR
,*LPSTR
,*PSTR
;
167 typedef PSTR
*PZPSTR
;
168 typedef CONST PSTR
*PCZPSTR
;
169 typedef CONST CHAR
*LPCSTR
,*PCSTR
;
170 typedef PCSTR
*PZPCSTR
;
173 #ifndef _TCHAR_DEFINED
174 #define _TCHAR_DEFINED
175 typedef WCHAR TCHAR
,*PTCHAR
;
176 typedef WCHAR TBYTE
,*PTBYTE
;
179 typedef LPWSTR LPTCH
,PTCH
;
180 typedef LPWSTR PTSTR
,LPTSTR
;
181 typedef LPCWSTR PCTSTR
,LPCTSTR
;
182 typedef LPUWSTR PUTSTR
,LPUTSTR
;
183 typedef LPCUWSTR PCUTSTR
,LPCUTSTR
;
185 #define __TEXT(quote) L##quote
187 #ifndef _TCHAR_DEFINED
188 #define _TCHAR_DEFINED
189 typedef char TCHAR
,*PTCHAR
;
190 typedef unsigned char TBYTE
,*PTBYTE
;
193 typedef LPSTR LPTCH
,PTCH
;
194 typedef LPSTR PTSTR
,LPTSTR
,PUTSTR
,LPUTSTR
;
195 typedef LPCSTR PCTSTR
,LPCTSTR
,PCUTSTR
,LPCUTSTR
;
196 #define __TEXT(quote) quote
199 #define TEXT(quote) __TEXT(quote)
201 typedef SHORT
*PSHORT
;
204 typedef void *HANDLE
;
205 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
206 typedef HANDLE
*PHANDLE
;
212 #ifndef _HRESULT_DEFINED
213 #define _HRESULT_DEFINED
214 typedef LONG HRESULT
;
218 #define EXTERN_C extern "C"
220 #define EXTERN_C extern
223 #define STDMETHODCALLTYPE WINAPI
224 #define STDMETHODVCALLTYPE __cdecl
225 #define STDAPICALLTYPE WINAPI
226 #define STDAPIVCALLTYPE __cdecl
227 #define STDAPI EXTERN_C HRESULT WINAPI
228 #define STDAPI_(type) EXTERN_C type WINAPI
229 #define STDMETHODIMP HRESULT WINAPI
230 #define STDMETHODIMP_(type) type WINAPI
231 #define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
232 #define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
233 #define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
234 #define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
237 #ifndef _LCID_DEFINED
238 #define _LCID_DEFINED
241 typedef PDWORD PLCID
;
242 #ifndef _LANGID_DEFINED
243 #define _LANGID_DEFINED
246 #define APPLICATION_ERROR_MASK 0x20000000
247 #define ERROR_SEVERITY_SUCCESS 0x00000000
248 #define ERROR_SEVERITY_INFORMATIONAL 0x40000000
249 #define ERROR_SEVERITY_WARNING 0x80000000
250 #define ERROR_SEVERITY_ERROR 0xC0000000
253 __declspec(align(16))
255 typedef struct _FLOAT128
{
260 typedef FLOAT128
*PFLOAT128
;
263 #if((!(defined(_X86_) && !defined(__x86_64)) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)))
264 typedef __int64 LONGLONG
;
265 typedef unsigned __int64 ULONGLONG
;
267 #define MAXLONGLONG (0x7fffffffffffffff)
270 typedef double LONGLONG
;
271 typedef double ULONGLONG
;
274 typedef LONGLONG
*PLONGLONG
;
275 typedef ULONGLONG
*PULONGLONG
;
277 typedef LONGLONG USN
;
279 typedef union _LARGE_INTEGER
{
291 typedef LARGE_INTEGER
*PLARGE_INTEGER
;
293 typedef union _ULARGE_INTEGER
{
305 typedef ULARGE_INTEGER
*PULARGE_INTEGER
;
307 typedef struct _LUID
{
313 typedef ULONGLONG DWORDLONG
;
314 typedef DWORDLONG
*PDWORDLONG
;
317 #define Int32x32To64(a,b) ((LONGLONG)((LONG)(a)) *(LONGLONG)((LONG)(b)))
318 #define UInt32x32To64(a,b) ((ULONGLONG)((DWORD)(a)) *(ULONGLONG)((DWORD)(b)))
319 #define Int64ShrlMod32(a,b) ((ULONGLONG)(a) >> (b))
320 #elif (defined(_X86_) && !defined(__x86_64))
321 #define Int32x32To64(a,b) (LONGLONG)((LONGLONG)(LONG)(a) *(LONG)(b))
322 #define UInt32x32To64(a,b) (ULONGLONG)((ULONGLONG)(DWORD)(a) *(DWORD)(b))
323 #define Int64ShrlMod32(a,b) ((DWORDLONG)(a)>>(b))
324 #elif defined(__ia64__) || defined(__x86_64)
325 #define Int32x32To64(a,b) ((LONGLONG)((LONG)(a)) *(LONGLONG)((LONG)(b)))
326 #define UInt32x32To64(a,b) ((ULONGLONG)((DWORD)(a)) *(ULONGLONG)((DWORD)(b)))
327 #define Int64ShrlMod32(a,b) ((ULONGLONG)(a) >> (b))
329 #error Must define a target architecture.
332 #define Int64ShraMod32(a,b) ((LONGLONG)(a) >> (b))
333 #define Int64ShllMod32(a,b) ((ULONGLONG)(a) << (b))
341 #define RotateLeft8 _rotl8
342 #define RotateLeft16 _rotl16
343 #define RotateRight8 _rotr8
344 #define RotateRight16 _rotr16
346 unsigned char __cdecl
_rotl8(unsigned char Value
,unsigned char Shift
);
347 unsigned short __cdecl
_rotl16(unsigned short Value
,unsigned char Shift
);
348 unsigned char __cdecl
_rotr8(unsigned char Value
,unsigned char Shift
);
349 unsigned short __cdecl
_rotr16(unsigned short Value
,unsigned char Shift
);
352 #define RotateLeft32 _rotl
353 #define RotateLeft64 _rotl64
354 #define RotateRight32 _rotr
355 #define RotateRight64 _rotr64
357 unsigned int __cdecl
_rotl(unsigned int Value
,int Shift
);
358 unsigned __int64 __cdecl
_rotl64(unsigned __int64 Value
,int Shift
);
359 unsigned int __cdecl
_rotr(unsigned int Value
,int Shift
);
360 unsigned __int64 __cdecl
_rotr64(unsigned __int64 Value
,int Shift
);
365 #define ANSI_NULL ((CHAR)0)
366 #define UNICODE_NULL ((WCHAR)0)
367 #define UNICODE_STRING_MAX_BYTES ((WORD) 65534)
368 #define UNICODE_STRING_MAX_CHARS (32767)
372 typedef BYTE BOOLEAN
;
374 typedef BOOLEAN
*PBOOLEAN
;
376 typedef struct _LIST_ENTRY
{
377 struct _LIST_ENTRY
*Flink
;
378 struct _LIST_ENTRY
*Blink
;
379 } LIST_ENTRY
,*PLIST_ENTRY
,*RESTRICTED_POINTER PRLIST_ENTRY
;
381 typedef struct _SINGLE_LIST_ENTRY
{
382 struct _SINGLE_LIST_ENTRY
*Next
;
383 } SINGLE_LIST_ENTRY
,*PSINGLE_LIST_ENTRY
;
385 typedef struct LIST_ENTRY32
{
389 typedef LIST_ENTRY32
*PLIST_ENTRY32
;
391 typedef struct LIST_ENTRY64
{
395 typedef LIST_ENTRY64
*PLIST_ENTRY64
;
399 #ifndef __OBJECTID_DEFINED
400 #define __OBJECTID_DEFINED
401 typedef struct _OBJECTID
{
409 #define MINSHORT 0x8000
410 #define MAXSHORT 0x7fff
411 #define MINLONG 0x80000000
412 #define MAXLONG 0x7fffffff
414 #define MAXWORD 0xffff
415 #define MAXDWORD 0xffffffff
417 #define FIELD_OFFSET(type,field) ((LONG)(LONG_PTR)&(((type *)0)->field))
418 #define RTL_FIELD_SIZE(type,field) (sizeof(((type *)0)->field))
419 #define RTL_SIZEOF_THROUGH_FIELD(type,field) (FIELD_OFFSET(type,field) + RTL_FIELD_SIZE(type,field))
420 #define RTL_CONTAINS_FIELD(Struct,Size,Field) ((((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)))
421 #define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
422 #define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
424 #ifdef ENABLE_RTL_NUMBER_OF_V2
425 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
427 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
430 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
431 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
433 #define RTL_FIELD_TYPE(type,field) (((type*)0)->field)
434 #define RTL_NUMBER_OF_FIELD(type,field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type,field)))
435 #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)))
438 #define RTL_CONST_CAST(type) const_cast<type>
440 #define RTL_CONST_CAST(type) (type)
443 #define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) *8)
444 #define RTL_BITS_OF_FIELD(type,field) (RTL_BITS_OF(RTL_FIELD_TYPE(type,field)))
445 #define CONTAINING_RECORD(address,type,field) ((type *)((PCHAR)(address) - (ULONG_PTR)(&((type *)0)->field)))
447 #define VER_SERVER_NT 0x80000000
448 #define VER_WORKSTATION_NT 0x40000000
449 #define VER_SUITE_SMALLBUSINESS 0x00000001
450 #define VER_SUITE_ENTERPRISE 0x00000002
451 #define VER_SUITE_BACKOFFICE 0x00000004
452 #define VER_SUITE_COMMUNICATIONS 0x00000008
453 #define VER_SUITE_TERMINAL 0x00000010
454 #define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
455 #define VER_SUITE_EMBEDDEDNT 0x00000040
456 #define VER_SUITE_DATACENTER 0x00000080
457 #define VER_SUITE_SINGLEUSERTS 0x00000100
458 #define VER_SUITE_PERSONAL 0x00000200
459 #define VER_SUITE_BLADE 0x00000400
460 #define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
461 #define VER_SUITE_SECURITY_APPLIANCE 0x00001000
462 #define VER_SUITE_STORAGE_SERVER 0x00002000
463 #define VER_SUITE_COMPUTE_SERVER 0x00004000
465 #define PRODUCT_UNDEFINED 0x0
467 #define PRODUCT_ULTIMATE 0x1
468 #define PRODUCT_HOME_BASIC 0x2
469 #define PRODUCT_HOME_PREMIUM 0x3
470 #define PRODUCT_ENTERPRISE 0x4
471 #define PRODUCT_HOME_BASIC_N 0x5
472 #define PRODUCT_BUSINESS 0x6
473 #define PRODUCT_STANDARD_SERVER 0x7
474 #define PRODUCT_DATACENTER_SERVER 0x8
475 #define PRODUCT_SMALLBUSINESS_SERVER 0x9
476 #define PRODUCT_ENTERPRISE_SERVER 0xa
477 #define PRODUCT_STARTER 0xb
478 #define PRODUCT_DATACENTER_SERVER_CORE 0xc
479 #define PRODUCT_STANDARD_SERVER_CORE 0xd
480 #define PRODUCT_ENTERPRISE_SERVER_CORE 0xe
481 #define PRODUCT_ENTERPRISE_SERVER_IA64 0xf
482 #define PRODUCT_BUSINESS_N 0x10
483 #define PRODUCT_WEB_SERVER 0x11
484 #define PRODUCT_CLUSTER_SERVER 0x12
485 #define PRODUCT_HOME_SERVER 0x13
486 #define PRODUCT_STORAGE_EXPRESS_SERVER 0x14
487 #define PRODUCT_STORAGE_STANDARD_SERVER 0x15
488 #define PRODUCT_STORAGE_WORKGROUP_SERVER 0x16
489 #define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x17
490 #define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x18
491 #define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x19
493 #define PRODUCT_UNLICENSED 0xabcdabcd
495 #define LANG_NEUTRAL 0x00
496 #define LANG_INVARIANT 0x7f
498 #define LANG_AFRIKAANS 0x36
499 #define LANG_ALBANIAN 0x1c
500 #define LANG_ALSATIAN 0x84
501 #define LANG_AMHARIC 0x5e
502 #define LANG_ARABIC 0x01
503 #define LANG_ARMENIAN 0x2b
504 #define LANG_ASSAMESE 0x4d
505 #define LANG_AZERI 0x2c
506 #define LANG_BASHKIR 0x6d
507 #define LANG_BASQUE 0x2d
508 #define LANG_BELARUSIAN 0x23
509 #define LANG_BENGALI 0x45
510 #define LANG_BRETON 0x7e
511 #define LANG_BOSNIAN 0x1a
512 #define LANG_BOSNIAN_NEUTRAL 0x781a
513 #define LANG_BULGARIAN 0x02
514 #define LANG_CATALAN 0x03
515 #define LANG_CHINESE 0x04
516 #define LANG_CHINESE_SIMPLIFIED 0x04
517 #define LANG_CHINESE_TRADITIONAL 0x7c04
518 #define LANG_CORSICAN 0x83
519 #define LANG_CROATIAN 0x1a
520 #define LANG_CZECH 0x05
521 #define LANG_DANISH 0x06
522 #define LANG_DARI 0x8c
523 #define LANG_DIVEHI 0x65
524 #define LANG_DUTCH 0x13
525 #define LANG_ENGLISH 0x09
526 #define LANG_ESTONIAN 0x25
527 #define LANG_FAEROESE 0x38
528 #define LANG_FARSI 0x29
529 #define LANG_FILIPINO 0x64
530 #define LANG_FINNISH 0x0b
531 #define LANG_FRENCH 0x0c
532 #define LANG_FRISIAN 0x62
533 #define LANG_GALICIAN 0x56
534 #define LANG_GEORGIAN 0x37
535 #define LANG_GERMAN 0x07
536 #define LANG_GREEK 0x08
537 #define LANG_GREENLANDIC 0x6f
538 #define LANG_GUJARATI 0x47
539 #define LANG_HAUSA 0x68
540 #define LANG_HEBREW 0x0d
541 #define LANG_HINDI 0x39
542 #define LANG_HUNGARIAN 0x0e
543 #define LANG_ICELANDIC 0x0f
544 #define LANG_IGBO 0x70
545 #define LANG_INDONESIAN 0x21
546 #define LANG_INUKTITUT 0x5d
547 #define LANG_IRISH 0x3c
548 #define LANG_ITALIAN 0x10
549 #define LANG_JAPANESE 0x11
550 #define LANG_KANNADA 0x4b
551 #define LANG_KASHMIRI 0x60
552 #define LANG_KAZAK 0x3f
553 #define LANG_KHMER 0x53
554 #define LANG_KICHE 0x86
555 #define LANG_KINYARWANDA 0x87
556 #define LANG_KONKANI 0x57
557 #define LANG_KOREAN 0x12
558 #define LANG_KYRGYZ 0x40
559 #define LANG_LAO 0x54
560 #define LANG_LATVIAN 0x26
561 #define LANG_LITHUANIAN 0x27
562 #define LANG_LOWER_SORBIAN 0x2e
563 #define LANG_LUXEMBOURGISH 0x6e
564 #define LANG_MACEDONIAN 0x2f
565 #define LANG_MALAY 0x3e
566 #define LANG_MALAYALAM 0x4c
567 #define LANG_MALTESE 0x3a
568 #define LANG_MANIPURI 0x58
569 #define LANG_MAORI 0x81
570 #define LANG_MAPUDUNGUN 0x7a
571 #define LANG_MARATHI 0x4e
572 #define LANG_MOHAWK 0x7c
573 #define LANG_MONGOLIAN 0x50
574 #define LANG_NEPALI 0x61
575 #define LANG_NORWEGIAN 0x14
576 #define LANG_OCCITAN 0x82
577 #define LANG_ORIYA 0x48
578 #define LANG_PASHTO 0x63
579 #define LANG_PERSIAN 0x29
580 #define LANG_POLISH 0x15
581 #define LANG_PORTUGUESE 0x16
582 #define LANG_PUNJABI 0x46
583 #define LANG_QUECHUA 0x6b
584 #define LANG_ROMANIAN 0x18
585 #define LANG_RUSSIAN 0x19
586 #define LANG_SAMI 0x3b
587 #define LANG_ROMANSH 0x17
588 #define LANG_SANSKRIT 0x4f
589 #define LANG_SERBIAN 0x1a
590 #define LANG_SERBIAN_NEUTRAL 0x7c1a
591 #define LANG_SINDHI 0x59
592 #define LANG_SINHALESE 0x5b
593 #define LANG_SLOVAK 0x1b
594 #define LANG_SLOVENIAN 0x24
595 #define LANG_SOTHO 0x6c
596 #define LANG_SPANISH 0x0a
597 #define LANG_SWAHILI 0x41
598 #define LANG_SWEDISH 0x1d
599 #define LANG_SYRIAC 0x5a
600 #define LANG_TAJIK 0x28
601 #define LANG_TAMAZIGHT 0x5f
602 #define LANG_TAMIL 0x49
603 #define LANG_TATAR 0x44
604 #define LANG_TELUGU 0x4a
605 #define LANG_THAI 0x1e
606 #define LANG_TIBETAN 0x51
607 #define LANG_TIGRIGNA 0x73
608 #define LANG_TSWANA 0x32
609 #define LANG_TURKISH 0x1f
610 #define LANG_TURKMEN 0x42
611 #define LANG_UIGHUR 0x80
612 #define LANG_UKRAINIAN 0x22
613 #define LANG_UPPER_SORBIAN 0x2e
614 #define LANG_URDU 0x20
615 #define LANG_UZBEK 0x43
616 #define LANG_VIETNAMESE 0x2a
617 #define LANG_WELSH 0x52
618 #define LANG_WOLOF 0x88
619 #define LANG_XHOSA 0x34
620 #define LANG_YAKUT 0x85
622 #define LANG_YORUBA 0x6a
623 #define LANG_ZULU 0x35
625 #define SUBLANG_NEUTRAL 0x0
626 #define SUBLANG_DEFAULT 0x1
627 #define SUBLANG_SYS_DEFAULT 0x2
628 #define SUBLANG_CUSTOM_DEFAULT 0x3
629 #define SUBLANG_CUSTOM_UNSPECIFIED 0x4
630 #define SUBLANG_UI_CUSTOM_DEFAULT 0x5
632 #define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
633 #define SUBLANG_ARABIC_IRAQ 0x02
634 #define SUBLANG_ARABIC_EGYPT 0x03
635 #define SUBLANG_ARABIC_LIBYA 0x04
636 #define SUBLANG_ARABIC_ALGERIA 0x05
637 #define SUBLANG_ARABIC_MOROCCO 0x06
638 #define SUBLANG_ARABIC_TUNISIA 0x07
639 #define SUBLANG_ARABIC_OMAN 0x08
640 #define SUBLANG_ARABIC_YEMEN 0x09
641 #define SUBLANG_ARABIC_SYRIA 0x0a
642 #define SUBLANG_ARABIC_JORDAN 0x0b
643 #define SUBLANG_ARABIC_LEBANON 0x0c
644 #define SUBLANG_ARABIC_KUWAIT 0x0d
645 #define SUBLANG_ARABIC_UAE 0x0e
646 #define SUBLANG_ARABIC_BAHRAIN 0x0f
647 #define SUBLANG_ARABIC_QATAR 0x10
648 #define SUBLANG_AZERI_LATIN 0x01
649 #define SUBLANG_AZERI_CYRILLIC 0x02
650 #define SUBLANG_CHINESE_TRADITIONAL 0x01
651 #define SUBLANG_CHINESE_SIMPLIFIED 0x02
652 #define SUBLANG_CHINESE_HONGKONG 0x03
653 #define SUBLANG_CHINESE_SINGAPORE 0x04
654 #define SUBLANG_CHINESE_MACAU 0x05
655 #define SUBLANG_DUTCH 0x01
656 #define SUBLANG_DUTCH_BELGIAN 0x02
657 #define SUBLANG_ENGLISH_US 0x01
658 #define SUBLANG_ENGLISH_UK 0x02
659 #define SUBLANG_ENGLISH_AUS 0x03
660 #define SUBLANG_ENGLISH_CAN 0x04
661 #define SUBLANG_ENGLISH_NZ 0x05
662 #define SUBLANG_ENGLISH_EIRE 0x06
663 #define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
664 #define SUBLANG_ENGLISH_JAMAICA 0x08
665 #define SUBLANG_ENGLISH_CARIBBEAN 0x09
666 #define SUBLANG_ENGLISH_BELIZE 0x0a
667 #define SUBLANG_ENGLISH_TRINIDAD 0x0b
668 #define SUBLANG_ENGLISH_ZIMBABWE 0x0c
669 #define SUBLANG_ENGLISH_PHILIPPINES 0x0d
670 #define SUBLANG_FRENCH 0x01
671 #define SUBLANG_FRENCH_BELGIAN 0x02
672 #define SUBLANG_FRENCH_CANADIAN 0x03
673 #define SUBLANG_FRENCH_SWISS 0x04
674 #define SUBLANG_FRENCH_LUXEMBOURG 0x05
675 #define SUBLANG_FRENCH_MONACO 0x06
676 #define SUBLANG_GERMAN 0x01
677 #define SUBLANG_GERMAN_SWISS 0x02
678 #define SUBLANG_GERMAN_AUSTRIAN 0x03
679 #define SUBLANG_GERMAN_LUXEMBOURG 0x04
680 #define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
681 #define SUBLANG_ITALIAN 0x01
682 #define SUBLANG_ITALIAN_SWISS 0x02
683 #define SUBLANG_KASHMIRI_SASIA 0x02
684 #define SUBLANG_KASHMIRI_INDIA 0x02
685 #define SUBLANG_KOREAN 0x01
686 #define SUBLANG_LITHUANIAN 0x01
687 #define SUBLANG_MALAY_MALAYSIA 0x01
688 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
689 #define SUBLANG_NEPALI_INDIA 0x02
690 #define SUBLANG_NORWEGIAN_BOKMAL 0x01
691 #define SUBLANG_NORWEGIAN_NYNORSK 0x02
692 #define SUBLANG_PORTUGUESE 0x02
693 #define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
694 #define SUBLANG_SERBIAN_LATIN 0x02
695 #define SUBLANG_SERBIAN_CYRILLIC 0x03
696 #define SUBLANG_SPANISH 0x01
697 #define SUBLANG_SPANISH_MEXICAN 0x02
698 #define SUBLANG_SPANISH_MODERN 0x03
699 #define SUBLANG_SPANISH_GUATEMALA 0x04
700 #define SUBLANG_SPANISH_COSTA_RICA 0x05
701 #define SUBLANG_SPANISH_PANAMA 0x06
702 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
703 #define SUBLANG_SPANISH_VENEZUELA 0x08
704 #define SUBLANG_SPANISH_COLOMBIA 0x09
705 #define SUBLANG_SPANISH_PERU 0x0a
706 #define SUBLANG_SPANISH_ARGENTINA 0x0b
707 #define SUBLANG_SPANISH_ECUADOR 0x0c
708 #define SUBLANG_SPANISH_CHILE 0x0d
709 #define SUBLANG_SPANISH_URUGUAY 0x0e
710 #define SUBLANG_SPANISH_PARAGUAY 0x0f
711 #define SUBLANG_SPANISH_BOLIVIA 0x10
712 #define SUBLANG_SPANISH_EL_SALVADOR 0x11
713 #define SUBLANG_SPANISH_HONDURAS 0x12
714 #define SUBLANG_SPANISH_NICARAGUA 0x13
715 #define SUBLANG_SPANISH_PUERTO_RICO 0x14
716 #define SUBLANG_SWEDISH 0x01
717 #define SUBLANG_SWEDISH_FINLAND 0x02
718 #define SUBLANG_URDU_PAKISTAN 0x01
719 #define SUBLANG_URDU_INDIA 0x02
720 #define SUBLANG_UZBEK_LATIN 0x01
721 #define SUBLANG_UZBEK_CYRILLIC 0x02
723 #define SORT_DEFAULT 0x0
724 #define SORT_INVARIANT_MATH 0x1
726 #define SORT_JAPANESE_XJIS 0x0
727 #define SORT_JAPANESE_UNICODE 0x1
728 #define SORT_JAPANESE_RADICALSTROKE 0x4
730 #define SORT_CHINESE_BIG5 0x0
731 #define SORT_CHINESE_PRCP 0x0
732 #define SORT_CHINESE_UNICODE 0x1
733 #define SORT_CHINESE_PRC 0x2
734 #define SORT_CHINESE_BOPOMOFO 0x3
736 #define SORT_KOREAN_KSC 0x0
737 #define SORT_KOREAN_UNICODE 0x1
739 #define SORT_GERMAN_PHONE_BOOK 0x1
741 #define SORT_HUNGARIAN_DEFAULT 0x0
742 #define SORT_HUNGARIAN_TECHNICAL 0x1
744 #define SORT_GEORGIAN_TRADITIONAL 0x0
745 #define SORT_GEORGIAN_MODERN 0x1
747 #define MAKELANGID(p,s) ((((WORD)(s)) << 10) | (WORD)(p))
748 #define PRIMARYLANGID(lgid) ((WORD)(lgid) & 0x3ff)
749 #define SUBLANGID(lgid) ((WORD)(lgid) >> 10)
751 #define NLS_VALID_LOCALE_MASK 0x000fffff
753 #define MAKELCID(lgid,srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))
754 #define MAKESORTLCID(lgid,srtid,ver) ((DWORD)((MAKELCID(lgid,srtid)) | (((DWORD)((WORD)(ver))) << 20)))
755 #define LANGIDFROMLCID(lcid) ((WORD)(lcid))
756 #define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0xf))
757 #define SORTVERSIONFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 20) & 0xf))
759 #define LOCALE_NAME_MAX_LENGTH 85
760 #define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT))
761 #define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT))
763 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT,SORT_DEFAULT))
764 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT,SORT_DEFAULT))
766 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
768 #define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
769 #define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
770 #define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
772 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
774 #define UNREFERENCED_PARAMETER(P) (P)
775 #define DBG_UNREFERENCED_PARAMETER(P) (P)
776 #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
778 #define DEFAULT_UNREACHABLE
780 #ifndef WIN32_NO_STATUS
781 #define STATUS_WAIT_0 ((DWORD)0x00000000L)
782 #define STATUS_ABANDONED_WAIT_0 ((DWORD)0x00000080L)
783 #define STATUS_USER_APC ((DWORD)0x000000C0L)
784 #define STATUS_TIMEOUT ((DWORD)0x00000102L)
785 #define STATUS_PENDING ((DWORD)0x00000103L)
786 #define DBG_EXCEPTION_HANDLED ((DWORD)0x00010001L)
787 #define DBG_CONTINUE ((DWORD)0x00010002L)
788 #define STATUS_SEGMENT_NOTIFICATION ((DWORD)0x40000005L)
789 #define DBG_TERMINATE_THREAD ((DWORD)0x40010003L)
790 #define DBG_TERMINATE_PROCESS ((DWORD)0x40010004L)
791 #define DBG_CONTROL_C ((DWORD)0x40010005L)
792 #define DBG_CONTROL_BREAK ((DWORD)0x40010008L)
793 #define DBG_COMMAND_EXCEPTION ((DWORD)0x40010009L)
794 #define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001L)
795 #define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002L)
796 #define STATUS_BREAKPOINT ((DWORD)0x80000003L)
797 #define STATUS_SINGLE_STEP ((DWORD)0x80000004L)
798 #define DBG_EXCEPTION_NOT_HANDLED ((DWORD)0x80010001L)
799 #define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L)
800 #define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006L)
801 #define STATUS_INVALID_HANDLE ((DWORD)0xC0000008L)
802 #define STATUS_NO_MEMORY ((DWORD)0xC0000017L)
803 #define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001DL)
804 #define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025L)
805 #define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026L)
806 #define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008CL)
807 #define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008DL)
808 #define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008EL)
809 #define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008FL)
810 #define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090L)
811 #define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091L)
812 #define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092L)
813 #define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093L)
814 #define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094L)
815 #define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095L)
816 #define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096L)
817 #define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FDL)
818 #define STATUS_CONTROL_C_EXIT ((DWORD)0xC000013AL)
819 #define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD)0xC00002B4L)
820 #define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD)0xC00002B5L)
821 #define STATUS_REG_NAT_CONSUMPTION ((DWORD)0xC00002C9L)
822 #define STATUS_SXS_EARLY_DEACTIVATION ((DWORD)0xC015000FL)
823 #define STATUS_SXS_INVALID_DEACTIVATION ((DWORD)0xC0150010L)
826 #define MAXIMUM_WAIT_OBJECTS 64
827 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
829 typedef ULONG_PTR KSPIN_LOCK
;
830 typedef KSPIN_LOCK
*PKSPIN_LOCK
;
834 #if defined(__x86_64) && !defined(RC_INVOKED)
840 #define BitTest _bittest
841 #define BitTestAndComplement _bittestandcomplement
842 #define BitTestAndSet _bittestandset
843 #define BitTestAndReset _bittestandreset
844 #define InterlockedBitTestAndSet _interlockedbittestandset
845 #define InterlockedBitTestAndReset _interlockedbittestandreset
846 #define BitTest64 _bittest64
847 #define BitTestAndComplement64 _bittestandcomplement64
848 #define BitTestAndSet64 _bittestandset64
849 #define BitTestAndReset64 _bittestandreset64
850 #define InterlockedBitTestAndSet64 _interlockedbittestandset64
851 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
853 __CRT_INLINE BOOLEAN
_bittest(LONG
const *Base
,LONG Offset
) {
855 __asm__
__volatile__("btl %2,%1\n\tsbbl %0,%0 "
856 :"=r" (old
),"=m" ((*(volatile long *) Base
))
858 return (BOOLEAN
) (old
!=0);
860 __CRT_INLINE BOOLEAN
_bittestandcomplement(LONG
*Base
,LONG Offset
) {
862 __asm__
__volatile__("btcl %2,%1\n\tsbbl %0,%0 "
863 :"=r" (old
),"=m" ((*(volatile long *) Base
))
865 return (BOOLEAN
) (old
!=0);
867 __CRT_INLINE BOOLEAN
InterlockedBitTestAndComplement(LONG
*Base
,LONG Bit
) {
869 __asm__
__volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
870 :"=r" (old
),"=m" ((*(volatile long *) Base
))
872 return (BOOLEAN
) (old
!=0);
874 __CRT_INLINE BOOLEAN
_bittestandset(LONG
*Base
,LONG Offset
) {
876 __asm__
__volatile__("btsl %2,%1\n\tsbbl %0,%0 "
877 :"=r" (old
),"=m" ((*(volatile long *) Base
))
879 return (BOOLEAN
) (old
!=0);
881 __CRT_INLINE BOOLEAN
_bittestandreset(LONG
*Base
,LONG Offset
) {
883 __asm__
__volatile__("btrl %2,%1\n\tsbbl %0,%0 "
884 :"=r" (old
),"=m" ((*(volatile long *) Base
))
886 return (BOOLEAN
) (old
!=0);
888 __CRT_INLINE BOOLEAN
_interlockedbittestandset(LONG
*Base
,LONG Offset
) {
890 __asm__
__volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
891 :"=r" (old
),"=m" ((*(volatile long *) Base
))
893 return (BOOLEAN
) (old
!=0);
895 __CRT_INLINE BOOLEAN
_interlockedbittestandreset(LONG
*Base
,LONG Offset
) {
897 __asm__
__volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
898 :"=r" (old
),"=m" ((*(volatile long *) Base
))
900 return (BOOLEAN
) (old
!=0);
902 __CRT_INLINE BOOLEAN
_bittest64(LONG64
const *Base
,LONG64 Offset
) {
904 __asm__
__volatile__("btq %2,%1\n\tsbbl %0,%0 "
905 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
907 return (BOOLEAN
) (old
!=0);
909 __CRT_INLINE BOOLEAN
_bittestandcomplement64(LONG64
*Base
,LONG64 Offset
) {
911 __asm__
__volatile__("btcq %2,%1\n\tsbbl %0,%0 "
912 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
914 return (BOOLEAN
) (old
!=0);
916 __CRT_INLINE BOOLEAN
_bittestandset64(LONG64
*Base
,LONG64 Offset
) {
918 __asm__
__volatile__("btsq %2,%1\n\tsbbl %0,%0 "
919 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
921 return (BOOLEAN
) (old
!=0);
923 __CRT_INLINE BOOLEAN
_bittestandreset64(LONG64
*Base
,LONG64 Offset
) {
925 __asm__
__volatile__("btrq %2,%1\n\tsbbl %0,%0 "
926 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
928 return (BOOLEAN
) (old
!=0);
930 __CRT_INLINE BOOLEAN
_interlockedbittestandset64(LONG64
*Base
,LONG64 Offset
) {
932 __asm__
__volatile__("lock ; btsq %2,%1\n\tsbbl %0,%0 "
933 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
935 return (BOOLEAN
) (old
!=0);
937 __CRT_INLINE BOOLEAN
_interlockedbittestandreset64(LONG64
*Base
,LONG64 Offset
) {
939 __asm__
__volatile__("lock ; btrq %2,%1\n\tsbbl %0,%0 "
940 :"=r" (old
),"=m" ((*(volatile long long *) Base
))
942 return (BOOLEAN
) (old
!=0);
944 #define BitScanForward _BitScanForward
945 #define BitScanReverse _BitScanReverse
946 #define BitScanForward64 _BitScanForward64
947 #define BitScanReverse64 _BitScanReverse64
949 __CRT_INLINE BOOLEAN
_BitScanForward(DWORD
*Index
,DWORD Mask
) {
950 __asm__
__volatile__("bsfl %1,%0" : "=r" (Mask
),"=m" ((*(volatile long *)Index
)));
953 __CRT_INLINE BOOLEAN
_BitScanReverse(DWORD
*Index
,DWORD Mask
) {
954 __asm__
__volatile__("bsrl %1,%0" : "=r" (Mask
),"=m" ((*(volatile long *)Index
)));
957 __CRT_INLINE BOOLEAN
_BitScanForward64(DWORD
*Index
,DWORD64 Mask
) {
958 __asm__
__volatile__("bsfq %1,%0" : "=r" (Mask
),"=m" ((*(volatile long long *)Index
)));
961 __CRT_INLINE BOOLEAN
_BitScanReverse64(DWORD
*Index
,DWORD64 Mask
) {
962 __asm__
__volatile__("bsrq %1,%0" : "=r" (Mask
),"=m" ((*(volatile long long *)Index
)));
966 #define InterlockedIncrement16 _InterlockedIncrement16
967 #define InterlockedDecrement16 _InterlockedDecrement16
968 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
970 #define InterlockedAnd _InterlockedAnd
971 #define InterlockedOr _InterlockedOr
972 #define InterlockedXor _InterlockedXor
973 #define InterlockedIncrement _InterlockedIncrement
974 #define InterlockedIncrementAcquire InterlockedIncrement
975 #define InterlockedIncrementRelease InterlockedIncrement
976 #define InterlockedDecrement _InterlockedDecrement
977 #define InterlockedDecrementAcquire InterlockedDecrement
978 #define InterlockedDecrementRelease InterlockedDecrement
979 #define InterlockedAdd _InterlockedAdd
980 #define InterlockedExchange _InterlockedExchange
981 #define InterlockedExchangeAdd _InterlockedExchangeAdd
982 #define InterlockedCompareExchange _InterlockedCompareExchange
983 #define InterlockedCompareExchangeAcquire InterlockedCompareExchange
984 #define InterlockedCompareExchangeRelease InterlockedCompareExchange
986 #define InterlockedAnd64 _InterlockedAnd64
987 #define InterlockedAndAffinity InterlockedAnd64
988 #define InterlockedOr64 _InterlockedOr64
989 #define InterlockedOrAffinity InterlockedOr64
990 #define InterlockedXor64 _InterlockedXor64
991 #define InterlockedIncrement64 _InterlockedIncrement64
992 #define InterlockedDecrement64 _InterlockedDecrement64
993 #define InterlockedAdd64 _InterlockedAdd64
994 #define InterlockedExchange64 _InterlockedExchange64
995 #define InterlockedExchangeAcquire64 InterlockedExchange64
996 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
997 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
998 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
999 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
1001 #define InterlockedExchangePointer _InterlockedExchangePointer
1002 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1003 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1004 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1006 #define InterlockedExchangeAddSizeT(a,b) InterlockedExchangeAdd64((LONG64 *)a,b)
1007 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
1008 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
1010 __CRT_INLINE SHORT
InterlockedIncrement16(SHORT
volatile *Addend
) {
1013 __asm__
__volatile__(
1014 "lock ; addw $1,%0; sete %1 ; sets %2"
1015 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1016 :"m" (*Addend
) : "memory");
1017 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1019 __CRT_INLINE SHORT
InterlockedDecrement16(SHORT
volatile *Addend
) {
1022 __asm__
__volatile__(
1023 "lock ; subw $1,%0; sete %1 ; sets %2"
1024 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1025 :"m" (*Addend
) : "memory");
1026 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1028 __CRT_INLINE SHORT
InterlockedCompareExchange16(SHORT
volatile *Destination
,SHORT ExChange
,SHORT Comperand
) {
1030 __asm__
__volatile__("lock ; cmpxchgw %w1,%2"
1032 :"q"(ExChange
), "m"(*Destination
), "0"(Comperand
)
1036 __CRT_INLINE LONG
InterlockedAnd(LONG
volatile *Destination
,LONG Value
) {
1037 __asm__
__volatile__("lock ; andl %0,%1"
1038 : :"r"(Value
),"m"(*Destination
)
1040 return *Destination
;
1042 __CRT_INLINE LONG
InterlockedOr(LONG
volatile *Destination
,LONG Value
) {
1043 __asm__
__volatile__("lock ; orl %0,%1"
1044 : : "r"(Value
),"m"(*Destination
) : "memory");
1045 return *Destination
;
1047 __CRT_INLINE LONG
InterlockedXor(LONG
volatile *Destination
,LONG Value
) {
1048 __asm__
__volatile__("lock ; xorl %0,%1"
1049 : : "r"(Value
),"m"(*Destination
) : "memory");
1050 return *Destination
;
1053 __CRT_INLINE LONG64
InterlockedAnd64(LONG64
volatile *Destination
,LONG64 Value
) {
1054 __asm__
__volatile__("lock ; andq %0,%1"
1055 : : "r"(Value
),"m"(*Destination
) : "memory");
1056 return *Destination
;
1058 __CRT_INLINE LONG64
InterlockedOr64(LONG64
volatile *Destination
,LONG64 Value
) {
1059 __asm__
__volatile__("lock ; orq %0,%1"
1060 : : "r"(Value
),"m"(*Destination
) : "memory");
1061 return *Destination
;
1063 __CRT_INLINE LONG64
InterlockedXor64(LONG64
volatile *Destination
,LONG64 Value
) {
1064 __asm__
__volatile__("lock ; xorq %0,%1"
1065 : : "r"(Value
),"m"(*Destination
) : "memory");
1066 return *Destination
;
1068 __CRT_INLINE LONG
InterlockedIncrement(LONG
volatile *Addend
) {
1071 __asm__
__volatile__(
1072 "lock ; addl $1,%0; sete %1 ; sets %2"
1073 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1074 :"m" (*Addend
) : "memory");
1075 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1077 __CRT_INLINE LONG
InterlockedDecrement(LONG
volatile *Addend
) {
1080 __asm__
__volatile__(
1081 "lock ; subl $1,%0; sete %1 ; sets %2"
1082 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1083 :"m" (*Addend
) : "memory");
1084 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1086 __CRT_INLINE LONG
InterlockedExchange(LONG
volatile *Target
,LONG Value
) {
1087 __asm__
__volatile("lock ; xchgl %0,%1"
1089 : "m"(*Target
),"0"(Value
)
1093 LONG
InterlockedExchangeAdd(LONG
volatile *Addend
,LONG Value
);
1096 __CRT_INLINE LONG
InterlockedAdd(LONG
volatile *Addend
,LONG Value
) { return InterlockedExchangeAdd(Addend
,Value
) + Value
; }
1098 __CRT_INLINE LONG
InterlockedCompareExchange(LONG
volatile *Destination
,LONG ExChange
,LONG Comperand
) {
1100 __asm__
__volatile__("lock ; cmpxchgl %1,%2" : "=a" (prev
) : "q" (ExChange
),"m" (*Destination
), "0" (Comperand
) : "memory");
1103 __CRT_INLINE LONG64
InterlockedIncrement64(LONG64
volatile *Addend
) {
1106 __asm__
__volatile__(
1107 "lock ; addq $1,%0; sete %1 ; sets %2"
1108 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1109 :"m" (*Addend
) : "memory");
1110 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1112 __CRT_INLINE LONG64
InterlockedDecrement64(LONG64
volatile *Addend
) {
1115 __asm__
__volatile__(
1116 "lock ; subq $1,%0; sete %1 ; sets %2"
1117 :"=m" (*Addend
), "=qm" (c
), "=qm" (s
)
1118 :"m" (*Addend
) : "memory");
1119 return (c
!= 0 ? 0 : (s
!= 0 ? -1 : 1));
1121 __CRT_INLINE LONG64
InterlockedExchange64(LONG64
volatile *Target
,LONG64 Value
) {
1122 __asm__
__volatile("lock ; xchgq %0,%1"
1124 : "m"(*Target
),"0"(Value
)
1128 LONG64
InterlockedExchangeAdd64(LONG64
volatile *Addend
,LONG64 Value
);
1131 __CRT_INLINE LONG64
InterlockedAdd64(LONG64
volatile *Addend
,LONG64 Value
) { return InterlockedExchangeAdd64(Addend
,Value
) + Value
; }
1134 __CRT_INLINE LONG64
InterlockedCompareExchange64(LONG64
volatile *Destination
,LONG64 ExChange
,LONG64 Comperand
) {
1136 __asm__
__volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev
) : "q" (ExChange
),"m" (*Destination
), "0" (Comperand
) : "memory");
1139 __CRT_INLINE PVOID
InterlockedCompareExchangePointer(PVOID
volatile *Destination
,PVOID ExChange
,PVOID Comperand
) {
1141 __asm__
__volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev
) : "q" (ExChange
),"m" (*Destination
), "0" (Comperand
) : "memory");
1144 __CRT_INLINE PVOID
InterlockedExchangePointer(PVOID
volatile *Target
,PVOID Value
) {
1145 __asm__
__volatile("lock ; xchgq %0,%1"
1147 : "m"(*Target
),"0"(Value
)
1152 #define CacheLineFlush(Address) _mm_clflush(Address)
1154 VOID
_ReadWriteBarrier(VOID
);
1156 #define FastFence __faststorefence
1157 #define LoadFence _mm_lfence
1158 #define MemoryFence _mm_mfence
1159 #define StoreFence _mm_sfence
1161 VOID
__faststorefence(VOID
);
1162 VOID
_m_prefetchw(volatile CONST VOID
*Source
);
1164 //!__TINYC__: #include <intrin.h>
1166 #define YieldProcessor _mm_pause
1167 #define MemoryBarrier __faststorefence
1168 #define PreFetchCacheLine(l,a) _mm_prefetch((CHAR CONST *) a,l)
1169 #define PrefetchForWrite(p) _m_prefetchw(p)
1170 #define ReadForWriteAccess(p) (_m_prefetchw(p),*(p))
1172 #define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
1173 #define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
1174 #define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
1175 #define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
1177 #define ReadMxCsr _mm_getcsr
1178 #define WriteMxCsr _mm_setcsr
1182 #define DbgRaiseAssertionFailure() __int2c()
1183 #define GetCallersEflags() __getcallerseflags()
1185 unsigned __int32
__getcallerseflags(VOID
);
1187 #define GetSegmentLimit __segmentlimit
1189 DWORD
__segmentlimit(DWORD Selector
);
1191 #define ReadTimeStampCounter() __rdtsc()
1193 DWORD64
__rdtsc(VOID
);
1194 VOID
__movsb(PBYTE Destination
,BYTE
const *Source
,SIZE_T Count
);
1195 VOID
__movsw(PWORD Destination
,WORD
const *Source
,SIZE_T Count
);
1196 VOID
__movsd(PDWORD Destination
,DWORD
const *Source
,SIZE_T Count
);
1197 VOID
__movsq(PDWORD64 Destination
,DWORD64
const *Source
,SIZE_T Count
);
1198 VOID
__stosb(PBYTE Destination
,BYTE Value
,SIZE_T Count
);
1199 VOID
__stosw(PWORD Destination
,WORD Value
,SIZE_T Count
);
1200 VOID
__stosd(PDWORD Destination
,DWORD Value
,SIZE_T Count
);
1201 VOID
__stosq(PDWORD64 Destination
,DWORD64 Value
,SIZE_T Count
);
1203 #define MultiplyHigh __mulh
1204 #define UnsignedMultiplyHigh __umulh
1206 LONGLONG
MultiplyHigh(LONGLONG Multiplier
,LONGLONG Multiplicand
);
1207 ULONGLONG
UnsignedMultiplyHigh(ULONGLONG Multiplier
,ULONGLONG Multiplicand
);
1209 #define ShiftLeft128 __shiftleft128
1210 #define ShiftRight128 __shiftright128
1212 DWORD64
ShiftLeft128(DWORD64 LowPart
,DWORD64 HighPart
,BYTE Shift
);
1213 DWORD64
ShiftRight128(DWORD64 LowPart
,DWORD64 HighPart
,BYTE Shift
);
1215 #define Multiply128 _mul128
1217 LONG64
Multiply128(LONG64 Multiplier
,LONG64 Multiplicand
,LONG64
*HighProduct
);
1219 #define UnsignedMultiply128 _umul128
1221 DWORD64
UnsignedMultiply128(DWORD64 Multiplier
,DWORD64 Multiplicand
,DWORD64
*HighProduct
);
1223 __CRT_INLINE LONG64
MultiplyExtract128(LONG64 Multiplier
,LONG64 Multiplicand
,BYTE Shift
) {
1224 LONG64 extractedProduct
;
1227 lowProduct
= Multiply128(Multiplier
,Multiplicand
,&highProduct
);
1228 extractedProduct
= (LONG64
)ShiftRight128((LONG64
)lowProduct
,(LONG64
)highProduct
,Shift
);
1229 return extractedProduct
;
1232 __CRT_INLINE DWORD64
UnsignedMultiplyExtract128(DWORD64 Multiplier
,DWORD64 Multiplicand
,BYTE Shift
) {
1233 DWORD64 extractedProduct
;
1234 DWORD64 highProduct
;
1236 lowProduct
= UnsignedMultiply128(Multiplier
,Multiplicand
,&highProduct
);
1237 extractedProduct
= ShiftRight128(lowProduct
,highProduct
,Shift
);
1238 return extractedProduct
;
1241 __CRT_INLINE BYTE
__readgsbyte(DWORD Offset
) {
1243 __asm__
volatile ("movb %%gs:%1,%0"
1244 : "=r" (ret
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1247 __CRT_INLINE WORD
__readgsword(DWORD Offset
) {
1249 __asm__
volatile ("movw %%gs:%1,%0"
1250 : "=r" (ret
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1253 __CRT_INLINE DWORD
__readgsdword(DWORD Offset
) {
1255 __asm__
volatile ("movl %%gs:%1,%0"
1256 : "=r" (ret
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1259 __CRT_INLINE DWORD64
__readgsqword(DWORD Offset
) {
1261 __asm__
volatile ("movq %%gs:%1,%0"
1262 : "=r" (ret
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1263 return (DWORD64
) ret
;
1265 __CRT_INLINE VOID
__writegsbyte(DWORD Offset
,BYTE Data
) {
1266 __asm__
volatile ("movb %0,%%gs:%1"
1267 : "=r" (Data
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1269 __CRT_INLINE VOID
__writegsword(DWORD Offset
,WORD Data
) {
1270 __asm__
volatile ("movw %0,%%gs:%1"
1271 : "=r" (Data
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1273 __CRT_INLINE VOID
__writegsdword(DWORD Offset
,DWORD Data
) {
1274 __asm__
volatile ("movl %0,%%gs:%1"
1275 : "=r" (Data
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1277 __CRT_INLINE VOID
__writegsqword(DWORD Offset
,DWORD64 Data
) {
1278 __asm__
volatile ("movq %0,%%gs:%1"
1279 : "=r" (Data
) ,"=m" ((*(volatile long *) (DWORD64
) Offset
)));
1287 #define EXCEPTION_READ_FAULT 0
1288 #define EXCEPTION_WRITE_FAULT 1
1289 #define EXCEPTION_EXECUTE_FAULT 8
1291 #if !defined(RC_INVOKED)
1293 #define CONTEXT_AMD64 0x100000
1295 #define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x1L)
1296 #define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x2L)
1297 #define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x4L)
1298 #define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x8L)
1299 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x10L)
1301 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1302 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1304 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1305 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1306 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1307 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1310 #define INITIAL_MXCSR 0x1f80
1311 #define INITIAL_FPCSR 0x027f
1313 typedef DECLSPEC_ALIGN(16) struct _M128A
{
1318 typedef struct _XMM_SAVE_AREA32
{
1332 M128A FloatRegisters
[8];
1333 M128A XmmRegisters
[16];
1335 } XMM_SAVE_AREA32
,*PXMM_SAVE_AREA32
;
1337 #define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
1339 typedef DECLSPEC_ALIGN(16) struct _CONTEXT
{
1379 XMM_SAVE_AREA32 FltSave
;
1380 XMM_SAVE_AREA32 FloatSave
;
1402 M128A VectorRegister
[26];
1403 DWORD64 VectorControl
;
1404 DWORD64 DebugControl
;
1405 DWORD64 LastBranchToRip
;
1406 DWORD64 LastBranchFromRip
;
1407 DWORD64 LastExceptionToRip
;
1408 DWORD64 LastExceptionFromRip
;
1409 } CONTEXT
,*PCONTEXT
;
1411 #define RUNTIME_FUNCTION_INDIRECT 0x1
1413 typedef struct _RUNTIME_FUNCTION
{
1417 } RUNTIME_FUNCTION
,*PRUNTIME_FUNCTION
;
1419 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK
)(DWORD64 ControlPc
,PVOID Context
);
1420 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK
)(HANDLE Process
,PVOID TableAddress
,PDWORD Entries
,PRUNTIME_FUNCTION
*Functions
);
1422 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1424 NTSYSAPI VOID __cdecl
RtlRestoreContext (PCONTEXT ContextRecord
,struct _EXCEPTION_RECORD
*ExceptionRecord
);
1425 NTSYSAPI BOOLEAN __cdecl
RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable
,DWORD EntryCount
,DWORD64 BaseAddress
);
1426 NTSYSAPI BOOLEAN __cdecl
RtlInstallFunctionTableCallback(DWORD64 TableIdentifier
,DWORD64 BaseAddress
,DWORD Length
,PGET_RUNTIME_FUNCTION_CALLBACK Callback
,PVOID Context
,PCWSTR OutOfProcessCallbackDll
);
1427 NTSYSAPI BOOLEAN __cdecl
RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable
);
1431 #if(defined(_X86_) && !defined(__x86_64)) && !defined(RC_INVOKED)
1436 __CRT_INLINE BOOLEAN
InterlockedBitTestAndSet(LONG
*Base
,LONG Bit
) {
1438 __asm__
__volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
1439 :"=r" (old
),"=m" ((*(volatile long *) Base
))
1441 return (BOOLEAN
) (old
!=0);
1444 __CRT_INLINE BOOLEAN
InterlockedBitTestAndReset(LONG
*Base
,LONG Bit
) {
1446 __asm__
__volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
1447 :"=r" (old
),"=m" ((*(volatile long *) Base
))
1449 return (BOOLEAN
) (old
!=0);
1452 __CRT_INLINE BOOLEAN
InterlockedBitTestAndComplement(LONG
*Base
,LONG Bit
) {
1454 __asm__
__volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
1455 :"=r" (old
),"=m" ((*(volatile long *) Base
))
1457 return (BOOLEAN
) (old
!=0);
1461 BYTE
__readfsbyte(DWORD Offset
);
1462 WORD
__readfsword(DWORD Offset
);
1463 DWORD
__readfsdword(DWORD Offset
);
1464 VOID
__writefsbyte(DWORD Offset
,BYTE Data
);
1465 VOID
__writefsword(DWORD Offset
,WORD Data
);
1466 VOID
__writefsdword(DWORD Offset
,DWORD Data
);
1474 #if(defined(_X86_) && !defined(__x86_64))
1475 __CRT_INLINE VOID
MemoryBarrier(VOID
) {
1477 __asm__
__volatile__("xchgl %eax,%0 "
1480 #define YieldProcessor() __asm__ __volatile__("rep nop ");
1482 #define PreFetchCacheLine(l,a)
1483 #define ReadForWriteAccess(p) (*(p))
1485 #define PF_TEMPORAL_LEVEL_1
1486 #define PF_NON_TEMPORAL_LEVEL_ALL
1488 __CRT_INLINE VOID
DbgRaiseAssertionFailure(void) {
1489 __asm__
__volatile__("int 0x2c ");
1491 PVOID
GetCurrentFiber(void);
1492 __CRT_INLINE PVOID
GetCurrentFiber(void)
1495 __asm__
volatile ("movl %%fs:0x10,%0"
1499 PVOID
GetFiberData(void);
1500 __CRT_INLINE PVOID
GetFiberData(void)
1503 __asm__
volatile ("movl %%fs:0x10,%0\n"
1510 #define EXCEPTION_READ_FAULT 0
1511 #define EXCEPTION_WRITE_FAULT 1
1512 #define EXCEPTION_EXECUTE_FAULT 8
1514 #define SIZE_OF_80387_REGISTERS 80
1516 #if !defined(RC_INVOKED)
1518 #define CONTEXT_i386 0x00010000
1519 #define CONTEXT_i486 0x00010000
1521 #define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L)
1522 #define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L)
1523 #define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L)
1524 #define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L)
1525 #define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L)
1526 #define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x00000020L)
1528 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
1530 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
1533 #define MAXIMUM_SUPPORTED_EXTENSION 512
1535 typedef struct _FLOATING_SAVE_AREA
{
1540 DWORD ErrorSelector
;
1543 BYTE RegisterArea
[SIZE_OF_80387_REGISTERS
];
1545 } FLOATING_SAVE_AREA
;
1547 typedef FLOATING_SAVE_AREA
*PFLOATING_SAVE_AREA
;
1549 typedef struct _CONTEXT
{
1557 FLOATING_SAVE_AREA FloatSave
;
1575 BYTE ExtendedRegisters
[MAXIMUM_SUPPORTED_EXTENSION
];
1578 typedef CONTEXT
*PCONTEXT
;
1581 #ifndef _LDT_ENTRY_DEFINED
1582 #define _LDT_ENTRY_DEFINED
1584 typedef struct _LDT_ENTRY
{
1601 DWORD Reserved_0
: 1;
1602 DWORD Default_Big
: 1;
1603 DWORD Granularity
: 1;
1607 } LDT_ENTRY
,*PLDT_ENTRY
;
1610 #if defined(__ia64__) && !defined(RC_INVOKED)
1616 BOOLEAN
BitScanForward64(DWORD
*Index
,DWORD64 Mask
);
1617 BOOLEAN
BitScanReverse64(DWORD
*Index
,DWORD64 Mask
);
1624 #if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
1626 void *_cdecl
_rdteb(void);
1629 #define NtCurrentTeb() ((struct _TEB *)_rdteb())
1630 #define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
1631 #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
1640 void __lfetch(int Level
,VOID CONST
*Address
);
1641 void __lfetchfault(int Level
,VOID CONST
*Address
);
1642 void __lfetch_excl(int Level
,VOID CONST
*Address
);
1643 void __lfetchfault_excl(int Level
,VOID CONST
*Address
);
1645 #define MD_LFHINT_NONE 0x00
1646 #define MD_LFHINT_NT1 0x01
1647 #define MD_LFHINT_NT2 0x02
1648 #define MD_LFHINT_NTA 0x03
1654 #define YieldProcessor __yield
1655 #define MemoryBarrier __mf
1656 #define PreFetchCacheLine __lfetch
1657 #define ReadForWriteAccess(p) (*(p))
1658 #define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
1660 #define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
1661 #define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
1663 #define UnsignedMultiplyHigh __UMULH
1665 ULONGLONG
UnsignedMultiplyHigh(ULONGLONG Multiplier
,ULONGLONG Multiplicand
);
1667 struct _TEB
*NtCurrentTeb(void);
1673 #define EXCEPTION_READ_FAULT 0
1674 #define EXCEPTION_WRITE_FAULT 1
1675 #define EXCEPTION_EXECUTE_FAULT 2
1677 #if !defined(RC_INVOKED)
1679 #define CONTEXT_IA64 0x00080000
1681 #define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001L)
1682 #define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002L)
1683 #define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004L)
1684 #define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008L)
1685 #define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010L)
1686 #define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020L)
1688 #define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
1689 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
1690 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
1692 #define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1693 #define CONTEXT_SERVICE_ACTIVE 0x10000000
1694 #define CONTEXT_EXCEPTION_REQUEST 0x40000000
1695 #define CONTEXT_EXCEPTION_REPORTING 0x80000000
1698 typedef struct _CONTEXT
{
1892 ULONGLONG RsBSPSTORE
;
1906 ULONGLONG UNUSEDPACK
;
1907 } CONTEXT
,*PCONTEXT
;
1909 typedef struct _PLABEL_DESCRIPTOR
{
1910 ULONGLONG EntryPoint
;
1911 ULONGLONG GlobalPointer
;
1912 } PLABEL_DESCRIPTOR
,*PPLABEL_DESCRIPTOR
;
1914 typedef struct _RUNTIME_FUNCTION
{
1917 DWORD UnwindInfoAddress
;
1918 } RUNTIME_FUNCTION
,*PRUNTIME_FUNCTION
;
1920 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK
)(DWORD64 ControlPc
,PVOID Context
);
1921 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK
)(HANDLE Process
,PVOID TableAddress
,PDWORD Entries
,PRUNTIME_FUNCTION
*Functions
);
1923 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1925 BOOLEAN
RtlAddFunctionTable(PRUNTIME_FUNCTION FunctionTable
,DWORD EntryCount
,ULONGLONG BaseAddress
,ULONGLONG TargetGp
);
1926 BOOLEAN
RtlInstallFunctionTableCallback(DWORD64 TableIdentifier
,DWORD64 BaseAddress
,DWORD Length
,DWORD64 TargetGp
,PGET_RUNTIME_FUNCTION_CALLBACK Callback
,PVOID Context
,PCWSTR OutOfProcessCallbackDll
);
1927 BOOLEAN
RtlDeleteFunctionTable(PRUNTIME_FUNCTION FunctionTable
);
1928 VOID
RtlRestoreContext (PCONTEXT ContextRecord
,struct _EXCEPTION_RECORD
*ExceptionRecord
);
1929 VOID
__jump_unwind(ULONGLONG TargetMsFrame
,ULONGLONG TargetBsFrame
,ULONGLONG TargetPc
);
1932 #define EXCEPTION_NONCONTINUABLE 0x1
1933 #define EXCEPTION_MAXIMUM_PARAMETERS 15
1935 typedef struct _EXCEPTION_RECORD
{
1936 DWORD ExceptionCode
;
1937 DWORD ExceptionFlags
;
1938 struct _EXCEPTION_RECORD
*ExceptionRecord
;
1939 PVOID ExceptionAddress
;
1940 DWORD NumberParameters
;
1941 ULONG_PTR ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
1944 typedef EXCEPTION_RECORD
*PEXCEPTION_RECORD
;
1946 typedef struct _EXCEPTION_RECORD32
{
1947 DWORD ExceptionCode
;
1948 DWORD ExceptionFlags
;
1949 DWORD ExceptionRecord
;
1950 DWORD ExceptionAddress
;
1951 DWORD NumberParameters
;
1952 DWORD ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
1953 } EXCEPTION_RECORD32
,*PEXCEPTION_RECORD32
;
1955 typedef struct _EXCEPTION_RECORD64
{
1956 DWORD ExceptionCode
;
1957 DWORD ExceptionFlags
;
1958 DWORD64 ExceptionRecord
;
1959 DWORD64 ExceptionAddress
;
1960 DWORD NumberParameters
;
1961 DWORD __unusedAlignment
;
1962 DWORD64 ExceptionInformation
[EXCEPTION_MAXIMUM_PARAMETERS
];
1963 } EXCEPTION_RECORD64
,*PEXCEPTION_RECORD64
;
1965 typedef struct _EXCEPTION_POINTERS
{
1966 PEXCEPTION_RECORD ExceptionRecord
;
1967 PCONTEXT ContextRecord
;
1968 } EXCEPTION_POINTERS
,*PEXCEPTION_POINTERS
;
1969 typedef PVOID PACCESS_TOKEN
;
1970 typedef PVOID PSECURITY_DESCRIPTOR
;
1973 typedef DWORD ACCESS_MASK
;
1974 typedef ACCESS_MASK
*PACCESS_MASK
;
1976 #define DELETE (0x00010000L)
1977 #define READ_CONTROL (0x00020000L)
1978 #define WRITE_DAC (0x00040000L)
1979 #define WRITE_OWNER (0x00080000L)
1980 #define SYNCHRONIZE (0x00100000L)
1982 #define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
1983 #define STANDARD_RIGHTS_READ (READ_CONTROL)
1984 #define STANDARD_RIGHTS_WRITE (READ_CONTROL)
1985 #define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
1986 #define STANDARD_RIGHTS_ALL (0x001F0000L)
1988 #define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
1990 #define ACCESS_SYSTEM_SECURITY (0x01000000L)
1992 #define MAXIMUM_ALLOWED (0x02000000L)
1994 #define GENERIC_READ (0x80000000L)
1995 #define GENERIC_WRITE (0x40000000L)
1996 #define GENERIC_EXECUTE (0x20000000L)
1997 #define GENERIC_ALL (0x10000000L)
1999 typedef struct _GENERIC_MAPPING
{
2000 ACCESS_MASK GenericRead
;
2001 ACCESS_MASK GenericWrite
;
2002 ACCESS_MASK GenericExecute
;
2003 ACCESS_MASK GenericAll
;
2005 typedef GENERIC_MAPPING
*PGENERIC_MAPPING
;
2007 #include <pshpack4.h>
2009 typedef struct _LUID_AND_ATTRIBUTES
{
2012 } LUID_AND_ATTRIBUTES
,*PLUID_AND_ATTRIBUTES
;
2013 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2014 typedef LUID_AND_ATTRIBUTES_ARRAY
*PLUID_AND_ATTRIBUTES_ARRAY
;
2016 #include <poppack.h>
2018 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
2019 #define SID_IDENTIFIER_AUTHORITY_DEFINED
2020 typedef struct _SID_IDENTIFIER_AUTHORITY
{
2022 } SID_IDENTIFIER_AUTHORITY
,*PSID_IDENTIFIER_AUTHORITY
;
2027 typedef struct _SID
{
2029 BYTE SubAuthorityCount
;
2030 SID_IDENTIFIER_AUTHORITY IdentifierAuthority
;
2031 DWORD SubAuthority
[ANYSIZE_ARRAY
];
2035 #define SID_REVISION (1)
2036 #define SID_MAX_SUB_AUTHORITIES (15)
2037 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)
2039 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES *sizeof(DWORD)))
2041 typedef enum _SID_NAME_USE
{
2042 SidTypeUser
= 1,SidTypeGroup
,SidTypeDomain
,SidTypeAlias
,SidTypeWellKnownGroup
,SidTypeDeletedAccount
,SidTypeInvalid
,SidTypeUnknown
,SidTypeComputer
2043 } SID_NAME_USE
,*PSID_NAME_USE
;
2045 typedef struct _SID_AND_ATTRIBUTES
{
2048 } SID_AND_ATTRIBUTES
,*PSID_AND_ATTRIBUTES
;
2050 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY
[ANYSIZE_ARRAY
];
2051 typedef SID_AND_ATTRIBUTES_ARRAY
*PSID_AND_ATTRIBUTES_ARRAY
;
2053 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
2054 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
2055 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
2056 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
2057 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
2058 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
2060 #define SECURITY_NULL_RID (0x00000000L)
2061 #define SECURITY_WORLD_RID (0x00000000L)
2062 #define SECURITY_LOCAL_RID (0x00000000L)
2064 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
2065 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
2067 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
2068 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
2070 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
2072 #define SECURITY_DIALUP_RID (0x00000001L)
2073 #define SECURITY_NETWORK_RID (0x00000002L)
2074 #define SECURITY_BATCH_RID (0x00000003L)
2075 #define SECURITY_INTERACTIVE_RID (0x00000004L)
2076 #define SECURITY_LOGON_IDS_RID (0x00000005L)
2077 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
2078 #define SECURITY_SERVICE_RID (0x00000006L)
2079 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
2080 #define SECURITY_PROXY_RID (0x00000008L)
2081 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
2082 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
2083 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
2084 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
2085 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
2086 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
2087 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
2088 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
2089 #define SECURITY_IUSER_RID (0x00000011L)
2091 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
2092 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
2093 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
2095 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
2096 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
2098 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
2100 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
2101 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
2103 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
2104 #define SECURITY_PACKAGE_RID_COUNT (2L)
2105 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
2106 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
2107 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
2109 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
2110 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
2112 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
2114 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
2115 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
2117 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
2119 #define FOREST_USER_RID_MAX (0x000001F3L)
2121 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
2122 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
2123 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
2125 #define DOMAIN_USER_RID_MAX (0x000003E7L)
2127 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
2128 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
2129 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
2130 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
2131 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
2132 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
2133 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
2134 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
2135 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
2136 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
2138 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
2139 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
2140 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
2141 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
2143 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
2144 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
2145 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
2146 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
2148 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
2149 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
2150 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
2151 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
2152 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
2153 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
2155 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
2156 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
2157 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
2158 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
2159 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
2161 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
2162 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
2163 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
2164 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
2165 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
2167 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
2168 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
2169 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
2170 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
2171 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
2172 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
2173 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
2175 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
2177 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
2180 WinNullSid
= 0,WinWorldSid
= 1,WinLocalSid
= 2,WinCreatorOwnerSid
= 3,WinCreatorGroupSid
= 4,WinCreatorOwnerServerSid
= 5,WinCreatorGroupServerSid
= 6,WinNtAuthoritySid
= 7,WinDialupSid
= 8,WinNetworkSid
= 9,WinBatchSid
= 10,WinInteractiveSid
= 11,WinServiceSid
= 12,WinAnonymousSid
= 13,WinProxySid
= 14,WinEnterpriseControllersSid
= 15,WinSelfSid
= 16,WinAuthenticatedUserSid
= 17,WinRestrictedCodeSid
= 18,WinTerminalServerSid
= 19,WinRemoteLogonIdSid
= 20,WinLogonIdsSid
= 21,WinLocalSystemSid
= 22,WinLocalServiceSid
= 23,WinNetworkServiceSid
= 24,WinBuiltinDomainSid
= 25,WinBuiltinAdministratorsSid
= 26,WinBuiltinUsersSid
= 27,WinBuiltinGuestsSid
= 28,WinBuiltinPowerUsersSid
= 29,WinBuiltinAccountOperatorsSid
= 30,WinBuiltinSystemOperatorsSid
= 31,WinBuiltinPrintOperatorsSid
= 32,WinBuiltinBackupOperatorsSid
= 33,WinBuiltinReplicatorSid
= 34,WinBuiltinPreWindows2000CompatibleAccessSid
= 35,WinBuiltinRemoteDesktopUsersSid
= 36,WinBuiltinNetworkConfigurationOperatorsSid
= 37,WinAccountAdministratorSid
= 38,WinAccountGuestSid
= 39,WinAccountKrbtgtSid
= 40,WinAccountDomainAdminsSid
= 41,WinAccountDomainUsersSid
= 42,WinAccountDomainGuestsSid
= 43,WinAccountComputersSid
= 44,WinAccountControllersSid
= 45,WinAccountCertAdminsSid
= 46,WinAccountSchemaAdminsSid
= 47,WinAccountEnterpriseAdminsSid
= 48,WinAccountPolicyAdminsSid
= 49,WinAccountRasAndIasServersSid
= 50,WinNTLMAuthenticationSid
= 51,WinDigestAuthenticationSid
= 52,WinSChannelAuthenticationSid
= 53,WinThisOrganizationSid
= 54,WinOtherOrganizationSid
= 55,WinBuiltinIncomingForestTrustBuildersSid
= 56,WinBuiltinPerfMonitoringUsersSid
= 57,WinBuiltinPerfLoggingUsersSid
= 58,WinBuiltinAuthorizationAccessSid
= 59,WinBuiltinTerminalServerLicenseServersSid
= 60,WinBuiltinDCOMUsersSid
= 61
2181 } WELL_KNOWN_SID_TYPE
;
2183 #define SYSTEM_LUID { 0x3E7,0x0 }
2184 #define ANONYMOUS_LOGON_LUID { 0x3e6,0x0 }
2185 #define LOCALSERVICE_LUID { 0x3e5,0x0 }
2186 #define NETWORKSERVICE_LUID { 0x3e4,0x0 }
2187 #define IUSER_LUID { 0x3e3, 0x0 }
2189 #define SE_GROUP_MANDATORY (0x00000001L)
2190 #define SE_GROUP_ENABLED_BY_DEFAULT (0x00000002L)
2191 #define SE_GROUP_ENABLED (0x00000004L)
2192 #define SE_GROUP_OWNER (0x00000008L)
2193 #define SE_GROUP_USE_FOR_DENY_ONLY (0x00000010L)
2194 #define SE_GROUP_INTEGRITY (0x00000020L)
2195 #define SE_GROUP_INTEGRITY_ENABLED (0x00000040L)
2196 #define SE_GROUP_LOGON_ID (0xC0000000L)
2197 #define SE_GROUP_RESOURCE (0x20000000L)
2199 #define ACL_REVISION (2)
2200 #define ACL_REVISION_DS (4)
2202 #define ACL_REVISION1 (1)
2203 #define MIN_ACL_REVISION ACL_REVISION2
2204 #define ACL_REVISION2 (2)
2205 #define ACL_REVISION3 (3)
2206 #define ACL_REVISION4 (4)
2207 #define MAX_ACL_REVISION ACL_REVISION4
2209 typedef struct _ACL
{
2218 typedef struct _ACE_HEADER
{
2223 typedef ACE_HEADER
*PACE_HEADER
;
2225 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
2226 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
2227 #define ACCESS_DENIED_ACE_TYPE (0x1)
2228 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
2229 #define SYSTEM_ALARM_ACE_TYPE (0x3)
2230 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
2232 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
2233 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
2235 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
2236 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
2237 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
2238 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
2239 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
2240 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
2242 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
2243 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
2245 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
2246 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
2247 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
2248 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
2249 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
2250 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
2251 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
2252 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
2254 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
2255 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
2257 #define OBJECT_INHERIT_ACE (0x1)
2258 #define CONTAINER_INHERIT_ACE (0x2)
2259 #define NO_PROPAGATE_INHERIT_ACE (0x4)
2260 #define INHERIT_ONLY_ACE (0x8)
2261 #define INHERITED_ACE (0x10)
2262 #define VALID_INHERIT_FLAGS (0x1F)
2264 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
2265 #define FAILED_ACCESS_ACE_FLAG (0x80)
2267 typedef struct _ACCESS_ALLOWED_ACE
{
2271 } ACCESS_ALLOWED_ACE
;
2273 typedef ACCESS_ALLOWED_ACE
*PACCESS_ALLOWED_ACE
;
2275 typedef struct _ACCESS_DENIED_ACE
{
2279 } ACCESS_DENIED_ACE
;
2280 typedef ACCESS_DENIED_ACE
*PACCESS_DENIED_ACE
;
2282 typedef struct _SYSTEM_AUDIT_ACE
{
2287 typedef SYSTEM_AUDIT_ACE
*PSYSTEM_AUDIT_ACE
;
2289 typedef struct _SYSTEM_ALARM_ACE
{
2294 typedef SYSTEM_ALARM_ACE
*PSYSTEM_ALARM_ACE
;
2296 typedef struct _ACCESS_ALLOWED_OBJECT_ACE
{
2301 GUID InheritedObjectType
;
2303 } ACCESS_ALLOWED_OBJECT_ACE
,*PACCESS_ALLOWED_OBJECT_ACE
;
2305 typedef struct _ACCESS_DENIED_OBJECT_ACE
{
2310 GUID InheritedObjectType
;
2312 } ACCESS_DENIED_OBJECT_ACE
,*PACCESS_DENIED_OBJECT_ACE
;
2314 typedef struct _SYSTEM_AUDIT_OBJECT_ACE
{
2319 GUID InheritedObjectType
;
2321 } SYSTEM_AUDIT_OBJECT_ACE
,*PSYSTEM_AUDIT_OBJECT_ACE
;
2323 typedef struct _SYSTEM_ALARM_OBJECT_ACE
{
2328 GUID InheritedObjectType
;
2330 } SYSTEM_ALARM_OBJECT_ACE
,*PSYSTEM_ALARM_OBJECT_ACE
;
2332 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE
{
2337 } ACCESS_ALLOWED_CALLBACK_ACE
,*PACCESS_ALLOWED_CALLBACK_ACE
;
2339 typedef struct _ACCESS_DENIED_CALLBACK_ACE
{
2344 } ACCESS_DENIED_CALLBACK_ACE
,*PACCESS_DENIED_CALLBACK_ACE
;
2346 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE
{
2351 } SYSTEM_AUDIT_CALLBACK_ACE
,*PSYSTEM_AUDIT_CALLBACK_ACE
;
2353 typedef struct _SYSTEM_ALARM_CALLBACK_ACE
{
2358 } SYSTEM_ALARM_CALLBACK_ACE
,*PSYSTEM_ALARM_CALLBACK_ACE
;
2360 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
{
2365 GUID InheritedObjectType
;
2368 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
,*PACCESS_ALLOWED_CALLBACK_OBJECT_ACE
;
2370 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE
{
2375 GUID InheritedObjectType
;
2378 } ACCESS_DENIED_CALLBACK_OBJECT_ACE
,*PACCESS_DENIED_CALLBACK_OBJECT_ACE
;
2380 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
{
2385 GUID InheritedObjectType
;
2388 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
,*PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE
;
2390 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
2395 GUID InheritedObjectType
;
2398 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE
,*PSYSTEM_ALARM_CALLBACK_OBJECT_ACE
;
2400 #define ACE_OBJECT_TYPE_PRESENT 0x1
2401 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
2403 typedef enum _ACL_INFORMATION_CLASS
{
2404 AclRevisionInformation
= 1,AclSizeInformation
2405 } ACL_INFORMATION_CLASS
;
2407 typedef struct _ACL_REVISION_INFORMATION
{
2409 } ACL_REVISION_INFORMATION
;
2410 typedef ACL_REVISION_INFORMATION
*PACL_REVISION_INFORMATION
;
2412 typedef struct _ACL_SIZE_INFORMATION
{
2414 DWORD AclBytesInUse
;
2416 } ACL_SIZE_INFORMATION
;
2417 typedef ACL_SIZE_INFORMATION
*PACL_SIZE_INFORMATION
;
2419 #define SECURITY_DESCRIPTOR_REVISION (1)
2420 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2422 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
2424 typedef WORD SECURITY_DESCRIPTOR_CONTROL
,*PSECURITY_DESCRIPTOR_CONTROL
;
2426 #define SE_OWNER_DEFAULTED (0x0001)
2427 #define SE_GROUP_DEFAULTED (0x0002)
2428 #define SE_DACL_PRESENT (0x0004)
2429 #define SE_DACL_DEFAULTED (0x0008)
2430 #define SE_SACL_PRESENT (0x0010)
2431 #define SE_SACL_DEFAULTED (0x0020)
2432 #define SE_DACL_AUTO_INHERIT_REQ (0x0100)
2433 #define SE_SACL_AUTO_INHERIT_REQ (0x0200)
2434 #define SE_DACL_AUTO_INHERITED (0x0400)
2435 #define SE_SACL_AUTO_INHERITED (0x0800)
2436 #define SE_DACL_PROTECTED (0x1000)
2437 #define SE_SACL_PROTECTED (0x2000)
2438 #define SE_RM_CONTROL_VALID (0x4000)
2439 #define SE_SELF_RELATIVE (0x8000)
2441 typedef struct _SECURITY_DESCRIPTOR_RELATIVE
{
2444 SECURITY_DESCRIPTOR_CONTROL Control
;
2449 } SECURITY_DESCRIPTOR_RELATIVE
,*PISECURITY_DESCRIPTOR_RELATIVE
;
2451 typedef struct _SECURITY_DESCRIPTOR
{
2454 SECURITY_DESCRIPTOR_CONTROL Control
;
2460 } SECURITY_DESCRIPTOR
,*PISECURITY_DESCRIPTOR
;
2462 typedef struct _OBJECT_TYPE_LIST
{
2466 } OBJECT_TYPE_LIST
,*POBJECT_TYPE_LIST
;
2468 #define ACCESS_OBJECT_GUID 0
2469 #define ACCESS_PROPERTY_SET_GUID 1
2470 #define ACCESS_PROPERTY_GUID 2
2472 #define ACCESS_MAX_LEVEL 4
2474 typedef enum _AUDIT_EVENT_TYPE
{
2475 AuditEventObjectAccess
,AuditEventDirectoryServiceAccess
2476 } AUDIT_EVENT_TYPE
,*PAUDIT_EVENT_TYPE
;
2478 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
2480 #define ACCESS_DS_SOURCE_A "DS"
2481 #define ACCESS_DS_SOURCE_W L"DS"
2482 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
2483 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
2485 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2486 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2487 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2488 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2490 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2492 typedef struct _PRIVILEGE_SET
{
2493 DWORD PrivilegeCount
;
2495 LUID_AND_ATTRIBUTES Privilege
[ANYSIZE_ARRAY
];
2496 } PRIVILEGE_SET
,*PPRIVILEGE_SET
;
2498 #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
2499 #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
2500 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
2501 #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
2502 #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
2503 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
2504 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
2505 #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
2506 #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
2507 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
2508 #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
2509 #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
2510 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
2511 #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
2512 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
2513 #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
2514 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
2515 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
2516 #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
2517 #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
2518 #define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
2519 #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
2520 #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
2521 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
2522 #define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
2523 #define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
2524 #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
2525 #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
2526 #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
2527 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
2529 typedef enum _SECURITY_IMPERSONATION_LEVEL
{
2530 SecurityAnonymous
,SecurityIdentification
,SecurityImpersonation
,SecurityDelegation
2531 } SECURITY_IMPERSONATION_LEVEL
,*PSECURITY_IMPERSONATION_LEVEL
;
2533 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2534 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2535 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2536 #define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2538 #define TOKEN_ASSIGN_PRIMARY (0x0001)
2539 #define TOKEN_DUPLICATE (0x0002)
2540 #define TOKEN_IMPERSONATE (0x0004)
2541 #define TOKEN_QUERY (0x0008)
2542 #define TOKEN_QUERY_SOURCE (0x0010)
2543 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
2544 #define TOKEN_ADJUST_GROUPS (0x0040)
2545 #define TOKEN_ADJUST_DEFAULT (0x0080)
2546 #define TOKEN_ADJUST_SESSIONID (0x0100)
2548 #define TOKEN_ALL_ACCESS_P (STANDARD_RIGHTS_REQUIRED | TOKEN_ASSIGN_PRIMARY | TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY | TOKEN_QUERY_SOURCE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
2549 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID)
2550 #define TOKEN_READ (STANDARD_RIGHTS_READ | TOKEN_QUERY)
2552 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
2554 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2556 typedef enum _TOKEN_TYPE
{
2557 TokenPrimary
= 1,TokenImpersonation
2559 typedef TOKEN_TYPE
*PTOKEN_TYPE
;
2561 typedef enum _TOKEN_INFORMATION_CLASS
{
2562 TokenUser
= 1,TokenGroups
,TokenPrivileges
,TokenOwner
,TokenPrimaryGroup
,TokenDefaultDacl
,TokenSource
,TokenType
,TokenImpersonationLevel
,
2563 TokenStatistics
,TokenRestrictedSids
,TokenSessionId
,TokenGroupsAndPrivileges
,TokenSessionReference
,TokenSandBoxInert
,TokenAuditPolicy
,
2564 TokenOrigin
,MaxTokenInfoClass
2565 } TOKEN_INFORMATION_CLASS
,*PTOKEN_INFORMATION_CLASS
;
2567 typedef struct _TOKEN_USER
{
2568 SID_AND_ATTRIBUTES User
;
2569 } TOKEN_USER
,*PTOKEN_USER
;
2571 typedef struct _TOKEN_GROUPS
{
2573 SID_AND_ATTRIBUTES Groups
[ANYSIZE_ARRAY
];
2574 } TOKEN_GROUPS
,*PTOKEN_GROUPS
;
2576 typedef struct _TOKEN_PRIVILEGES
{
2577 DWORD PrivilegeCount
;
2578 LUID_AND_ATTRIBUTES Privileges
[ANYSIZE_ARRAY
];
2579 } TOKEN_PRIVILEGES
,*PTOKEN_PRIVILEGES
;
2581 typedef struct _TOKEN_OWNER
{
2583 } TOKEN_OWNER
,*PTOKEN_OWNER
;
2585 typedef struct _TOKEN_PRIMARY_GROUP
{
2587 } TOKEN_PRIMARY_GROUP
,*PTOKEN_PRIMARY_GROUP
;
2589 typedef struct _TOKEN_DEFAULT_DACL
{
2591 } TOKEN_DEFAULT_DACL
,*PTOKEN_DEFAULT_DACL
;
2593 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES
{
2596 PSID_AND_ATTRIBUTES Sids
;
2597 DWORD RestrictedSidCount
;
2598 DWORD RestrictedSidLength
;
2599 PSID_AND_ATTRIBUTES RestrictedSids
;
2600 DWORD PrivilegeCount
;
2601 DWORD PrivilegeLength
;
2602 PLUID_AND_ATTRIBUTES Privileges
;
2603 LUID AuthenticationId
;
2604 } TOKEN_GROUPS_AND_PRIVILEGES
,*PTOKEN_GROUPS_AND_PRIVILEGES
;
2606 #define TOKEN_AUDIT_SUCCESS_INCLUDE 0x1
2607 #define TOKEN_AUDIT_SUCCESS_EXCLUDE 0x2
2608 #define TOKEN_AUDIT_FAILURE_INCLUDE 0x4
2609 #define TOKEN_AUDIT_FAILURE_EXCLUDE 0x8
2611 #define VALID_AUDIT_POLICY_BITS (TOKEN_AUDIT_SUCCESS_INCLUDE | TOKEN_AUDIT_SUCCESS_EXCLUDE | TOKEN_AUDIT_FAILURE_INCLUDE | TOKEN_AUDIT_FAILURE_EXCLUDE)
2612 #define VALID_TOKEN_AUDIT_POLICY_ELEMENT(P) ((((P).PolicyMask & ~VALID_AUDIT_POLICY_BITS)==0) && ((P).Category <= AuditEventMaxType))
2614 typedef struct _TOKEN_AUDIT_POLICY_ELEMENT
{
2617 } TOKEN_AUDIT_POLICY_ELEMENT
,*PTOKEN_AUDIT_POLICY_ELEMENT
;
2619 typedef struct _TOKEN_AUDIT_POLICY
{
2621 TOKEN_AUDIT_POLICY_ELEMENT Policy
[ANYSIZE_ARRAY
];
2622 } TOKEN_AUDIT_POLICY
,*PTOKEN_AUDIT_POLICY
;
2624 #define PER_USER_AUDITING_POLICY_SIZE(p) (sizeof(TOKEN_AUDIT_POLICY) + (((p)->PolicyCount > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) *((p)->PolicyCount - ANYSIZE_ARRAY)) : 0))
2625 #define PER_USER_AUDITING_POLICY_SIZE_BY_COUNT(C) (sizeof(TOKEN_AUDIT_POLICY) + (((C) > ANYSIZE_ARRAY) ? (sizeof(TOKEN_AUDIT_POLICY_ELEMENT) *((C) - ANYSIZE_ARRAY)) : 0))
2627 #define TOKEN_SOURCE_LENGTH 8
2629 typedef struct _TOKEN_SOURCE
{
2630 CHAR SourceName
[TOKEN_SOURCE_LENGTH
];
2631 LUID SourceIdentifier
;
2632 } TOKEN_SOURCE
,*PTOKEN_SOURCE
;
2634 typedef struct _TOKEN_STATISTICS
{
2636 LUID AuthenticationId
;
2637 LARGE_INTEGER ExpirationTime
;
2638 TOKEN_TYPE TokenType
;
2639 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2640 DWORD DynamicCharged
;
2641 DWORD DynamicAvailable
;
2643 DWORD PrivilegeCount
;
2645 } TOKEN_STATISTICS
,*PTOKEN_STATISTICS
;
2647 typedef struct _TOKEN_CONTROL
{
2649 LUID AuthenticationId
;
2651 TOKEN_SOURCE TokenSource
;
2652 } TOKEN_CONTROL
,*PTOKEN_CONTROL
;
2654 typedef struct _TOKEN_ORIGIN
{
2655 LUID OriginatingLogonSession
;
2656 } TOKEN_ORIGIN
,*PTOKEN_ORIGIN
;
2658 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2659 #define SECURITY_STATIC_TRACKING (FALSE)
2661 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE
,*PSECURITY_CONTEXT_TRACKING_MODE
;
2663 typedef struct _SECURITY_QUALITY_OF_SERVICE
{
2665 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel
;
2666 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode
;
2667 BOOLEAN EffectiveOnly
;
2668 } SECURITY_QUALITY_OF_SERVICE
,*PSECURITY_QUALITY_OF_SERVICE
;
2670 typedef struct _SE_IMPERSONATION_STATE
{
2671 PACCESS_TOKEN Token
;
2673 BOOLEAN EffectiveOnly
;
2674 SECURITY_IMPERSONATION_LEVEL Level
;
2675 } SE_IMPERSONATION_STATE
,*PSE_IMPERSONATION_STATE
;
2677 #define DISABLE_MAX_PRIVILEGE 0x1
2678 #define SANDBOX_INERT 0x2
2680 typedef DWORD SECURITY_INFORMATION
,*PSECURITY_INFORMATION
;
2682 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2683 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2684 #define DACL_SECURITY_INFORMATION (0x00000004L)
2685 #define SACL_SECURITY_INFORMATION (0x00000008L)
2687 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2688 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2689 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2690 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2692 #define PROCESS_TERMINATE (0x0001)
2693 #define PROCESS_CREATE_THREAD (0x0002)
2694 #define PROCESS_SET_SESSIONID (0x0004)
2695 #define PROCESS_VM_OPERATION (0x0008)
2696 #define PROCESS_VM_READ (0x0010)
2697 #define PROCESS_VM_WRITE (0x0020)
2698 #define PROCESS_DUP_HANDLE (0x0040)
2699 #define PROCESS_CREATE_PROCESS (0x0080)
2700 #define PROCESS_SET_QUOTA (0x0100)
2701 #define PROCESS_SET_INFORMATION (0x0200)
2702 #define PROCESS_QUERY_INFORMATION (0x0400)
2703 #define PROCESS_SUSPEND_RESUME (0x0800)
2704 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
2707 #define MAXIMUM_PROCESSORS 64
2709 #define MAXIMUM_PROCESSORS 32
2712 #define THREAD_TERMINATE (0x0001)
2713 #define THREAD_SUSPEND_RESUME (0x0002)
2714 #define THREAD_GET_CONTEXT (0x0008)
2715 #define THREAD_SET_CONTEXT (0x0010)
2716 #define THREAD_SET_INFORMATION (0x0020)
2717 #define THREAD_QUERY_INFORMATION (0x0040)
2718 #define THREAD_SET_THREAD_TOKEN (0x0080)
2719 #define THREAD_IMPERSONATE (0x0100)
2720 #define THREAD_DIRECT_IMPERSONATION (0x0200)
2722 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
2724 #define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
2725 #define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
2726 #define JOB_OBJECT_QUERY (0x0004)
2727 #define JOB_OBJECT_TERMINATE (0x0008)
2728 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
2729 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F)
2731 typedef struct _JOB_SET_ARRAY
{
2735 } JOB_SET_ARRAY
,*PJOB_SET_ARRAY
;
2737 #define FLS_MAXIMUM_AVAILABLE 128
2738 #define TLS_MINIMUM_AVAILABLE 64
2740 #ifndef _NT_TIB_DEFINED
2741 #define _NT_TIB_DEFINED
2742 typedef struct _NT_TIB
{
2743 struct _EXCEPTION_REGISTRATION_RECORD
*ExceptionList
;
2751 PVOID ArbitraryUserPointer
;
2752 struct _NT_TIB
*Self
;
2754 typedef NT_TIB
*PNT_TIB
;
2757 typedef struct _NT_TIB32
{
2758 DWORD ExceptionList
;
2766 DWORD ArbitraryUserPointer
;
2768 } NT_TIB32
,*PNT_TIB32
;
2770 typedef struct _NT_TIB64
{
2771 DWORD64 ExceptionList
;
2774 DWORD64 SubSystemTib
;
2779 DWORD64 ArbitraryUserPointer
;
2781 } NT_TIB64
,*PNT_TIB64
;
2783 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_)
2787 #define THREAD_BASE_PRIORITY_LOWRT 15
2788 #define THREAD_BASE_PRIORITY_MAX 2
2789 #define THREAD_BASE_PRIORITY_MIN (-2)
2790 #define THREAD_BASE_PRIORITY_IDLE (-15)
2792 typedef struct _QUOTA_LIMITS
{
2793 SIZE_T PagedPoolLimit
;
2794 SIZE_T NonPagedPoolLimit
;
2795 SIZE_T MinimumWorkingSetSize
;
2796 SIZE_T MaximumWorkingSetSize
;
2797 SIZE_T PagefileLimit
;
2798 LARGE_INTEGER TimeLimit
;
2799 } QUOTA_LIMITS
,*PQUOTA_LIMITS
;
2801 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2802 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2803 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2804 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2806 typedef struct _QUOTA_LIMITS_EX
{
2807 SIZE_T PagedPoolLimit
;
2808 SIZE_T NonPagedPoolLimit
;
2809 SIZE_T MinimumWorkingSetSize
;
2810 SIZE_T MaximumWorkingSetSize
;
2811 SIZE_T PagefileLimit
;
2812 LARGE_INTEGER TimeLimit
;
2819 } QUOTA_LIMITS_EX
,*PQUOTA_LIMITS_EX
;
2821 typedef struct _IO_COUNTERS
{
2822 ULONGLONG ReadOperationCount
;
2823 ULONGLONG WriteOperationCount
;
2824 ULONGLONG OtherOperationCount
;
2825 ULONGLONG ReadTransferCount
;
2826 ULONGLONG WriteTransferCount
;
2827 ULONGLONG OtherTransferCount
;
2829 typedef IO_COUNTERS
*PIO_COUNTERS
;
2831 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
{
2832 LARGE_INTEGER TotalUserTime
;
2833 LARGE_INTEGER TotalKernelTime
;
2834 LARGE_INTEGER ThisPeriodTotalUserTime
;
2835 LARGE_INTEGER ThisPeriodTotalKernelTime
;
2836 DWORD TotalPageFaultCount
;
2837 DWORD TotalProcesses
;
2838 DWORD ActiveProcesses
;
2839 DWORD TotalTerminatedProcesses
;
2840 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
2842 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION
{
2843 LARGE_INTEGER PerProcessUserTimeLimit
;
2844 LARGE_INTEGER PerJobUserTimeLimit
;
2846 SIZE_T MinimumWorkingSetSize
;
2847 SIZE_T MaximumWorkingSetSize
;
2848 DWORD ActiveProcessLimit
;
2850 DWORD PriorityClass
;
2851 DWORD SchedulingClass
;
2852 } JOBOBJECT_BASIC_LIMIT_INFORMATION
,*PJOBOBJECT_BASIC_LIMIT_INFORMATION
;
2854 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION
{
2855 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation
;
2857 SIZE_T ProcessMemoryLimit
;
2858 SIZE_T JobMemoryLimit
;
2859 SIZE_T PeakProcessMemoryUsed
;
2860 SIZE_T PeakJobMemoryUsed
;
2861 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION
,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION
;
2863 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST
{
2864 DWORD NumberOfAssignedProcesses
;
2865 DWORD NumberOfProcessIdsInList
;
2866 ULONG_PTR ProcessIdList
[1];
2867 } JOBOBJECT_BASIC_PROCESS_ID_LIST
,*PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
2869 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS
{
2870 DWORD UIRestrictionsClass
;
2871 } JOBOBJECT_BASIC_UI_RESTRICTIONS
,*PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
2873 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION
{
2874 DWORD SecurityLimitFlags
;
2876 PTOKEN_GROUPS SidsToDisable
;
2877 PTOKEN_PRIVILEGES PrivilegesToDelete
;
2878 PTOKEN_GROUPS RestrictedSids
;
2879 } JOBOBJECT_SECURITY_LIMIT_INFORMATION
,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION
;
2881 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION
{
2882 DWORD EndOfJobTimeAction
;
2883 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION
,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION
;
2885 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
2886 PVOID CompletionKey
;
2887 HANDLE CompletionPort
;
2888 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT
,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
2890 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
{
2891 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo
;
2893 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION
;
2895 typedef struct _JOBOBJECT_JOBSET_INFORMATION
{
2897 } JOBOBJECT_JOBSET_INFORMATION
,*PJOBOBJECT_JOBSET_INFORMATION
;
2899 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
2900 #define JOB_OBJECT_POST_AT_END_OF_JOB 1
2902 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
2903 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
2904 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
2905 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
2906 #define JOB_OBJECT_MSG_NEW_PROCESS 6
2907 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
2908 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
2909 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
2910 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
2912 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
2913 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
2914 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
2915 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
2916 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
2917 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
2918 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
2919 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
2921 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
2922 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
2923 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
2924 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
2925 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
2926 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
2928 #define JOB_OBJECT_LIMIT_RESERVED2 0x00004000
2929 #define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
2930 #define JOB_OBJECT_LIMIT_RESERVED4 0x00010000
2931 #define JOB_OBJECT_LIMIT_RESERVED5 0x00020000
2932 #define JOB_OBJECT_LIMIT_RESERVED6 0x00040000
2934 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
2936 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
2937 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00003fff
2938 #define JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS 0x0007ffff
2940 #define JOB_OBJECT_UILIMIT_NONE 0x00000000
2942 #define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
2943 #define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
2944 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
2945 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
2946 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
2947 #define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
2948 #define JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
2949 #define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
2951 #define JOB_OBJECT_UILIMIT_ALL 0x000000FF
2953 #define JOB_OBJECT_UI_VALID_FLAGS 0x000000FF
2955 #define JOB_OBJECT_SECURITY_NO_ADMIN 0x00000001
2956 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x00000002
2957 #define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x00000004
2958 #define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x00000008
2960 #define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
2962 typedef enum _JOBOBJECTINFOCLASS
{
2963 JobObjectBasicAccountingInformation
= 1,JobObjectBasicLimitInformation
,JobObjectBasicProcessIdList
,JobObjectBasicUIRestrictions
,
2964 JobObjectSecurityLimitInformation
,JobObjectEndOfJobTimeInformation
,JobObjectAssociateCompletionPortInformation
,
2965 JobObjectBasicAndIoAccountingInformation
,JobObjectExtendedLimitInformation
,JobObjectJobSetInformation
,MaxJobObjectInfoClass
2966 } JOBOBJECTINFOCLASS
;
2968 #define EVENT_MODIFY_STATE 0x0002
2969 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
2971 #define MUTANT_QUERY_STATE 0x0001
2973 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| MUTANT_QUERY_STATE)
2974 #define SEMAPHORE_MODIFY_STATE 0x0002
2975 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
2977 #define TIMER_QUERY_STATE 0x0001
2978 #define TIMER_MODIFY_STATE 0x0002
2980 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
2982 #define TIME_ZONE_ID_UNKNOWN 0
2983 #define TIME_ZONE_ID_STANDARD 1
2984 #define TIME_ZONE_ID_DAYLIGHT 2
2986 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP
{
2987 RelationProcessorCore
,RelationNumaNode
,RelationCache
2988 } LOGICAL_PROCESSOR_RELATIONSHIP
;
2990 #define LTP_PC_SMT 0x1
2992 typedef enum _PROCESSOR_CACHE_TYPE
{
2993 CacheUnified
,CacheInstruction
,CacheData
,CacheTrace
2994 } PROCESSOR_CACHE_TYPE
;
2996 #define CACHE_FULLY_ASSOCIATIVE 0xFF
2998 typedef struct _CACHE_DESCRIPTOR
{
3003 PROCESSOR_CACHE_TYPE Type
;
3004 } CACHE_DESCRIPTOR
,*PCACHE_DESCRIPTOR
;
3006 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION
{
3007 ULONG_PTR ProcessorMask
;
3008 LOGICAL_PROCESSOR_RELATIONSHIP Relationship
;
3016 CACHE_DESCRIPTOR Cache
;
3017 ULONGLONG Reserved
[2];
3019 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION
,*PSYSTEM_LOGICAL_PROCESSOR_INFORMATION
;
3021 #define PROCESSOR_INTEL_386 386
3022 #define PROCESSOR_INTEL_486 486
3023 #define PROCESSOR_INTEL_PENTIUM 586
3024 #define PROCESSOR_INTEL_IA64 2200
3025 #define PROCESSOR_AMD_X8664 8664
3026 #define PROCESSOR_MIPS_R4000 4000
3027 #define PROCESSOR_ALPHA_21064 21064
3028 #define PROCESSOR_PPC_601 601
3029 #define PROCESSOR_PPC_603 603
3030 #define PROCESSOR_PPC_604 604
3031 #define PROCESSOR_PPC_620 620
3032 #define PROCESSOR_HITACHI_SH3 10003
3033 #define PROCESSOR_HITACHI_SH3E 10004
3034 #define PROCESSOR_HITACHI_SH4 10005
3035 #define PROCESSOR_MOTOROLA_821 821
3036 #define PROCESSOR_SHx_SH3 103
3037 #define PROCESSOR_SHx_SH4 104
3038 #define PROCESSOR_STRONGARM 2577
3039 #define PROCESSOR_ARM720 1824
3040 #define PROCESSOR_ARM820 2080
3041 #define PROCESSOR_ARM920 2336
3042 #define PROCESSOR_ARM_7TDMI 70001
3043 #define PROCESSOR_OPTIL 0x494f
3045 #define PROCESSOR_ARCHITECTURE_INTEL 0
3046 #define PROCESSOR_ARCHITECTURE_MIPS 1
3047 #define PROCESSOR_ARCHITECTURE_ALPHA 2
3048 #define PROCESSOR_ARCHITECTURE_PPC 3
3049 #define PROCESSOR_ARCHITECTURE_SHX 4
3050 #define PROCESSOR_ARCHITECTURE_ARM 5
3051 #define PROCESSOR_ARCHITECTURE_IA64 6
3052 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
3053 #define PROCESSOR_ARCHITECTURE_MSIL 8
3054 #define PROCESSOR_ARCHITECTURE_AMD64 9
3055 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
3057 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
3059 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
3060 #define PF_FLOATING_POINT_EMULATED 1
3061 #define PF_COMPARE_EXCHANGE_DOUBLE 2
3062 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
3063 #define PF_PPC_MOVEMEM_64BIT_OK 4
3064 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
3065 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
3066 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
3067 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
3068 #define PF_PAE_ENABLED 9
3069 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
3070 #define PF_SSE_DAZ_MODE_AVAILABLE 11
3071 #define PF_NX_ENABLED 12
3073 typedef struct _MEMORY_BASIC_INFORMATION
{
3075 PVOID AllocationBase
;
3076 DWORD AllocationProtect
;
3081 } MEMORY_BASIC_INFORMATION
,*PMEMORY_BASIC_INFORMATION
;
3083 typedef struct _MEMORY_BASIC_INFORMATION32
{
3085 DWORD AllocationBase
;
3086 DWORD AllocationProtect
;
3091 } MEMORY_BASIC_INFORMATION32
,*PMEMORY_BASIC_INFORMATION32
;
3093 typedef DECLSPEC_ALIGN(16) struct _MEMORY_BASIC_INFORMATION64
{
3094 ULONGLONG BaseAddress
;
3095 ULONGLONG AllocationBase
;
3096 DWORD AllocationProtect
;
3098 ULONGLONG RegionSize
;
3103 } MEMORY_BASIC_INFORMATION64
,*PMEMORY_BASIC_INFORMATION64
;
3105 #define SECTION_QUERY 0x0001
3106 #define SECTION_MAP_WRITE 0x0002
3107 #define SECTION_MAP_READ 0x0004
3108 #define SECTION_MAP_EXECUTE 0x0008
3109 #define SECTION_EXTEND_SIZE 0x0010
3110 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
3112 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE)
3113 #define PAGE_NOACCESS 0x01
3114 #define PAGE_READONLY 0x02
3115 #define PAGE_READWRITE 0x04
3116 #define PAGE_WRITECOPY 0x08
3117 #define PAGE_EXECUTE 0x10
3118 #define PAGE_EXECUTE_READ 0x20
3119 #define PAGE_EXECUTE_READWRITE 0x40
3120 #define PAGE_EXECUTE_WRITECOPY 0x80
3121 #define PAGE_GUARD 0x100
3122 #define PAGE_NOCACHE 0x200
3123 #define PAGE_WRITECOMBINE 0x400
3124 #define MEM_COMMIT 0x1000
3125 #define MEM_RESERVE 0x2000
3126 #define MEM_DECOMMIT 0x4000
3127 #define MEM_RELEASE 0x8000
3128 #define MEM_FREE 0x10000
3129 #define MEM_PRIVATE 0x20000
3130 #define MEM_MAPPED 0x40000
3131 #define MEM_RESET 0x80000
3132 #define MEM_TOP_DOWN 0x100000
3133 #define MEM_WRITE_WATCH 0x200000
3134 #define MEM_PHYSICAL 0x400000
3135 #define MEM_LARGE_PAGES 0x20000000
3136 #define MEM_4MB_PAGES 0x80000000
3137 #define SEC_FILE 0x800000
3138 #define SEC_IMAGE 0x1000000
3139 #define SEC_RESERVE 0x4000000
3140 #define SEC_COMMIT 0x8000000
3141 #define SEC_NOCACHE 0x10000000
3142 #define SEC_LARGE_PAGES 0x80000000
3143 #define MEM_IMAGE SEC_IMAGE
3144 #define WRITE_WATCH_FLAG_RESET 0x01
3146 #define FILE_READ_DATA (0x0001)
3147 #define FILE_LIST_DIRECTORY (0x0001)
3149 #define FILE_WRITE_DATA (0x0002)
3150 #define FILE_ADD_FILE (0x0002)
3152 #define FILE_APPEND_DATA (0x0004)
3153 #define FILE_ADD_SUBDIRECTORY (0x0004)
3154 #define FILE_CREATE_PIPE_INSTANCE (0x0004)
3156 #define FILE_READ_EA (0x0008)
3158 #define FILE_WRITE_EA (0x0010)
3160 #define FILE_EXECUTE (0x0020)
3161 #define FILE_TRAVERSE (0x0020)
3163 #define FILE_DELETE_CHILD (0x0040)
3165 #define FILE_READ_ATTRIBUTES (0x0080)
3167 #define FILE_WRITE_ATTRIBUTES (0x0100)
3169 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
3170 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)
3171 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
3172 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
3174 #define FILE_SHARE_READ 0x00000001
3175 #define FILE_SHARE_WRITE 0x00000002
3176 #define FILE_SHARE_DELETE 0x00000004
3177 #define FILE_ATTRIBUTE_READONLY 0x00000001
3178 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
3179 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
3180 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
3181 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
3182 #define FILE_ATTRIBUTE_DEVICE 0x00000040
3183 #define FILE_ATTRIBUTE_NORMAL 0x00000080
3184 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
3185 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
3186 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
3187 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
3188 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
3189 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
3190 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
3191 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
3192 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
3193 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
3194 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
3195 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
3196 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
3197 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
3198 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
3199 #define FILE_ACTION_ADDED 0x00000001
3200 #define FILE_ACTION_REMOVED 0x00000002
3201 #define FILE_ACTION_MODIFIED 0x00000003
3202 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
3203 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
3204 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
3205 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
3206 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
3207 #define FILE_CASE_PRESERVED_NAMES 0x00000002
3208 #define FILE_UNICODE_ON_DISK 0x00000004
3209 #define FILE_PERSISTENT_ACLS 0x00000008
3210 #define FILE_FILE_COMPRESSION 0x00000010
3211 #define FILE_VOLUME_QUOTAS 0x00000020
3212 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
3213 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
3214 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
3215 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
3216 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
3217 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
3218 #define FILE_NAMED_STREAMS 0x00040000
3219 #define FILE_READ_ONLY_VOLUME 0x00080000
3221 typedef struct _FILE_NOTIFY_INFORMATION
{
3222 DWORD NextEntryOffset
;
3224 DWORD FileNameLength
;
3226 } FILE_NOTIFY_INFORMATION
,*PFILE_NOTIFY_INFORMATION
;
3228 typedef union _FILE_SEGMENT_ELEMENT
{
3230 ULONGLONG Alignment
;
3231 }FILE_SEGMENT_ELEMENT
,*PFILE_SEGMENT_ELEMENT
;
3233 typedef struct _REPARSE_GUID_DATA_BUFFER
{
3235 WORD ReparseDataLength
;
3240 } GenericReparseBuffer
;
3241 } REPARSE_GUID_DATA_BUFFER
,*PREPARSE_GUID_DATA_BUFFER
;
3243 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER,GenericReparseBuffer)
3245 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 *1024)
3247 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
3248 #define IO_REPARSE_TAG_RESERVED_ONE (1)
3250 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
3252 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
3253 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
3255 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
3256 #define IO_REPARSE_TAG_HSM (0xC0000004L)
3257 #define IO_REPARSE_TAG_SIS (0x80000007L)
3258 #define IO_REPARSE_TAG_DFS (0x8000000AL)
3259 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
3260 #define IO_COMPLETION_MODIFY_STATE 0x0002
3261 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
3262 #define DUPLICATE_CLOSE_SOURCE 0x00000001
3263 #define DUPLICATE_SAME_ACCESS 0x00000002
3265 typedef enum _SYSTEM_POWER_STATE
{
3266 PowerSystemUnspecified
= 0,PowerSystemWorking
= 1,PowerSystemSleeping1
= 2,PowerSystemSleeping2
= 3,PowerSystemSleeping3
= 4,PowerSystemHibernate
= 5,PowerSystemShutdown
= 6,PowerSystemMaximum
= 7
3267 } SYSTEM_POWER_STATE
,*PSYSTEM_POWER_STATE
;
3269 #define POWER_SYSTEM_MAXIMUM 7
3272 PowerActionNone
= 0,PowerActionReserved
,PowerActionSleep
,PowerActionHibernate
,PowerActionShutdown
,PowerActionShutdownReset
,PowerActionShutdownOff
,PowerActionWarmEject
3273 } POWER_ACTION
,*PPOWER_ACTION
;
3275 typedef enum _DEVICE_POWER_STATE
{
3276 PowerDeviceUnspecified
= 0,PowerDeviceD0
,PowerDeviceD1
,PowerDeviceD2
,PowerDeviceD3
,PowerDeviceMaximum
3277 } DEVICE_POWER_STATE
,*PDEVICE_POWER_STATE
;
3279 #define ES_SYSTEM_REQUIRED ((DWORD)0x00000001)
3280 #define ES_DISPLAY_REQUIRED ((DWORD)0x00000002)
3281 #define ES_USER_PRESENT ((DWORD)0x00000004)
3282 #define ES_CONTINUOUS ((DWORD)0x80000000)
3284 typedef DWORD EXECUTION_STATE
;
3287 LT_DONT_CARE
,LT_LOWEST_LATENCY
3290 #define PDCAP_D0_SUPPORTED 0x00000001
3291 #define PDCAP_D1_SUPPORTED 0x00000002
3292 #define PDCAP_D2_SUPPORTED 0x00000004
3293 #define PDCAP_D3_SUPPORTED 0x00000008
3294 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
3295 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
3296 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
3297 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
3298 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
3300 typedef struct CM_Power_Data_s
{
3302 DEVICE_POWER_STATE PD_MostRecentPowerState
;
3303 DWORD PD_Capabilities
;
3307 DEVICE_POWER_STATE PD_PowerStateMapping
[POWER_SYSTEM_MAXIMUM
];
3308 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
3309 } CM_POWER_DATA
,*PCM_POWER_DATA
;
3312 SystemPowerPolicyAc
,SystemPowerPolicyDc
,VerifySystemPolicyAc
,VerifySystemPolicyDc
,SystemPowerCapabilities
,SystemBatteryState
,SystemPowerStateHandler
,ProcessorStateHandler
,SystemPowerPolicyCurrent
,AdministratorPowerPolicy
,SystemReserveHiberFile
,ProcessorInformation
,SystemPowerInformation
,ProcessorStateHandler2
,LastWakeTime
,LastSleepTime
,SystemExecutionState
,SystemPowerStateNotifyHandler
,ProcessorPowerPolicyAc
,ProcessorPowerPolicyDc
,VerifyProcessorPowerPolicyAc
,VerifyProcessorPowerPolicyDc
,ProcessorPowerPolicyCurrent
,SystemPowerStateLogging
,SystemPowerLoggingEntry
3313 } POWER_INFORMATION_LEVEL
;
3318 } BATTERY_REPORTING_SCALE
,*PBATTERY_REPORTING_SCALE
;
3321 POWER_ACTION Action
;
3324 } POWER_ACTION_POLICY
,*PPOWER_ACTION_POLICY
;
3326 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
3327 #define POWER_ACTION_UI_ALLOWED 0x00000002
3328 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
3329 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
3330 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
3331 #define POWER_ACTION_DISABLE_WAKES 0x40000000
3332 #define POWER_ACTION_CRITICAL 0x80000000
3334 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
3335 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
3336 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
3337 #define POWER_USER_NOTIFY_BUTTON 0x00000008
3338 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
3339 #define POWER_FORCE_TRIGGER_RESET 0x80000000
3345 POWER_ACTION_POLICY PowerPolicy
;
3346 SYSTEM_POWER_STATE MinSystemState
;
3347 } SYSTEM_POWER_LEVEL
,*PSYSTEM_POWER_LEVEL
;
3349 #define NUM_DISCHARGE_POLICIES 4
3350 #define DISCHARGE_POLICY_CRITICAL 0
3351 #define DISCHARGE_POLICY_LOW 1
3353 #define PO_THROTTLE_NONE 0
3354 #define PO_THROTTLE_CONSTANT 1
3355 #define PO_THROTTLE_DEGRADE 2
3356 #define PO_THROTTLE_ADAPTIVE 3
3357 #define PO_THROTTLE_MAXIMUM 4
3359 typedef struct _SYSTEM_POWER_POLICY
{
3361 POWER_ACTION_POLICY PowerButton
;
3362 POWER_ACTION_POLICY SleepButton
;
3363 POWER_ACTION_POLICY LidClose
;
3364 SYSTEM_POWER_STATE LidOpenWake
;
3366 POWER_ACTION_POLICY Idle
;
3368 BYTE IdleSensitivity
;
3369 BYTE DynamicThrottle
;
3371 SYSTEM_POWER_STATE MinSleep
;
3372 SYSTEM_POWER_STATE MaxSleep
;
3373 SYSTEM_POWER_STATE ReducedLatencySleep
;
3374 DWORD WinLogonFlags
;
3376 DWORD DozeS4Timeout
;
3377 DWORD BroadcastCapacityResolution
;
3378 SYSTEM_POWER_LEVEL DischargePolicy
[NUM_DISCHARGE_POLICIES
];
3380 BOOLEAN VideoDimDisplay
;
3381 DWORD VideoReserved
[3];
3382 DWORD SpindownTimeout
;
3383 BOOLEAN OptimizeForPower
;
3384 BYTE FanThrottleTolerance
;
3385 BYTE ForcedThrottle
;
3387 POWER_ACTION_POLICY OverThrottled
;
3388 } SYSTEM_POWER_POLICY
,*PSYSTEM_POWER_POLICY
;
3390 typedef struct _PROCESSOR_POWER_POLICY_INFO
{
3395 BYTE PromotePercent
;
3397 DWORD AllowDemotion
:1;
3398 DWORD AllowPromotion
:1;
3400 } PROCESSOR_POWER_POLICY_INFO
,*PPROCESSOR_POWER_POLICY_INFO
;
3402 typedef struct _PROCESSOR_POWER_POLICY
{
3404 BYTE DynamicThrottle
;
3406 DWORD DisableCStates
:1;
3409 PROCESSOR_POWER_POLICY_INFO Policy
[3];
3410 } PROCESSOR_POWER_POLICY
,*PPROCESSOR_POWER_POLICY
;
3412 typedef struct _ADMINISTRATOR_POWER_POLICY
{
3413 SYSTEM_POWER_STATE MinSleep
;
3414 SYSTEM_POWER_STATE MaxSleep
;
3415 DWORD MinVideoTimeout
;
3416 DWORD MaxVideoTimeout
;
3417 DWORD MinSpindownTimeout
;
3418 DWORD MaxSpindownTimeout
;
3419 } ADMINISTRATOR_POWER_POLICY
,*PADMINISTRATOR_POWER_POLICY
;
3422 BOOLEAN PowerButtonPresent
;
3423 BOOLEAN SleepButtonPresent
;
3430 BOOLEAN HiberFilePresent
;
3432 BOOLEAN VideoDimPresent
;
3435 BOOLEAN ThermalControl
;
3436 BOOLEAN ProcessorThrottle
;
3437 BYTE ProcessorMinThrottle
;
3438 BYTE ProcessorMaxThrottle
;
3440 BOOLEAN DiskSpinDown
;
3442 BOOLEAN SystemBatteriesPresent
;
3443 BOOLEAN BatteriesAreShortTerm
;
3444 BATTERY_REPORTING_SCALE BatteryScale
[3];
3445 SYSTEM_POWER_STATE AcOnLineWake
;
3446 SYSTEM_POWER_STATE SoftLidWake
;
3447 SYSTEM_POWER_STATE RtcWake
;
3448 SYSTEM_POWER_STATE MinDeviceWakeState
;
3449 SYSTEM_POWER_STATE DefaultLowLatencyWake
;
3450 } SYSTEM_POWER_CAPABILITIES
,*PSYSTEM_POWER_CAPABILITIES
;
3454 BOOLEAN BatteryPresent
;
3456 BOOLEAN Discharging
;
3459 DWORD RemainingCapacity
;
3461 DWORD EstimatedTime
;
3462 DWORD DefaultAlert1
;
3463 DWORD DefaultAlert2
;
3464 } SYSTEM_BATTERY_STATE
,*PSYSTEM_BATTERY_STATE
;
3466 #include "pshpack4.h"
3468 #define IMAGE_DOS_SIGNATURE 0x5A4D
3469 #define IMAGE_OS2_SIGNATURE 0x454E
3470 #define IMAGE_OS2_SIGNATURE_LE 0x454C
3471 #define IMAGE_VXD_SIGNATURE 0x454C
3472 #define IMAGE_NT_SIGNATURE 0x00004550
3474 #include "pshpack2.h"
3476 typedef struct _IMAGE_DOS_HEADER
{
3496 } IMAGE_DOS_HEADER
,*PIMAGE_DOS_HEADER
;
3498 typedef struct _IMAGE_OS2_HEADER
{
3524 BYTE ne_flagsothers
;
3526 WORD ne_psegrefbytes
;
3529 } IMAGE_OS2_HEADER
,*PIMAGE_OS2_HEADER
;
3531 typedef struct _IMAGE_VXD_HEADER
{
3546 DWORD e32_lastpagesize
;
3547 DWORD e32_fixupsize
;
3564 DWORD e32_impmodcnt
;
3570 DWORD e32_cbnrestab
;
3573 DWORD e32_debuginfo
;
3575 DWORD e32_instpreload
;
3576 DWORD e32_instdemand
;
3579 DWORD e32_winresoff
;
3580 DWORD e32_winreslen
;
3583 } IMAGE_VXD_HEADER
,*PIMAGE_VXD_HEADER
;
3585 #include "poppack.h"
3587 typedef struct _IMAGE_FILE_HEADER
{
3589 WORD NumberOfSections
;
3590 DWORD TimeDateStamp
;
3591 DWORD PointerToSymbolTable
;
3592 DWORD NumberOfSymbols
;
3593 WORD SizeOfOptionalHeader
;
3594 WORD Characteristics
;
3595 } IMAGE_FILE_HEADER
,*PIMAGE_FILE_HEADER
;
3597 #define IMAGE_SIZEOF_FILE_HEADER 20
3599 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001
3600 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
3601 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
3602 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
3603 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
3604 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
3605 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
3606 #define IMAGE_FILE_32BIT_MACHINE 0x0100
3607 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
3608 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
3609 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
3610 #define IMAGE_FILE_SYSTEM 0x1000
3611 #define IMAGE_FILE_DLL 0x2000
3612 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
3613 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
3615 #define IMAGE_FILE_MACHINE_UNKNOWN 0
3616 #define IMAGE_FILE_MACHINE_I386 0x014c
3617 #define IMAGE_FILE_MACHINE_R3000 0x0162
3618 #define IMAGE_FILE_MACHINE_R4000 0x0166
3619 #define IMAGE_FILE_MACHINE_R10000 0x0168
3620 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
3621 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
3622 #define IMAGE_FILE_MACHINE_SH3 0x01a2
3623 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
3624 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
3625 #define IMAGE_FILE_MACHINE_SH4 0x01a6
3626 #define IMAGE_FILE_MACHINE_SH5 0x01a8
3627 #define IMAGE_FILE_MACHINE_ARM 0x01c0
3628 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
3629 #define IMAGE_FILE_MACHINE_AM33 0x01d3
3630 #define IMAGE_FILE_MACHINE_POWERPC 0x01F0
3631 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
3632 #define IMAGE_FILE_MACHINE_IA64 0x0200
3633 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
3634 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
3635 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
3636 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
3637 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
3638 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
3639 #define IMAGE_FILE_MACHINE_CEF 0x0CEF
3640 #define IMAGE_FILE_MACHINE_EBC 0x0EBC
3641 #define IMAGE_FILE_MACHINE_AMD64 0x8664
3642 #define IMAGE_FILE_MACHINE_M32R 0x9041
3643 #define IMAGE_FILE_MACHINE_CEE 0xC0EE
3645 typedef struct _IMAGE_DATA_DIRECTORY
{
3646 DWORD VirtualAddress
;
3648 } IMAGE_DATA_DIRECTORY
,*PIMAGE_DATA_DIRECTORY
;
3650 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
3652 typedef struct _IMAGE_OPTIONAL_HEADER
{
3655 BYTE MajorLinkerVersion
;
3656 BYTE MinorLinkerVersion
;
3658 DWORD SizeOfInitializedData
;
3659 DWORD SizeOfUninitializedData
;
3660 DWORD AddressOfEntryPoint
;
3664 DWORD SectionAlignment
;
3665 DWORD FileAlignment
;
3666 WORD MajorOperatingSystemVersion
;
3667 WORD MinorOperatingSystemVersion
;
3668 WORD MajorImageVersion
;
3669 WORD MinorImageVersion
;
3670 WORD MajorSubsystemVersion
;
3671 WORD MinorSubsystemVersion
;
3672 DWORD Win32VersionValue
;
3674 DWORD SizeOfHeaders
;
3677 WORD DllCharacteristics
;
3678 DWORD SizeOfStackReserve
;
3679 DWORD SizeOfStackCommit
;
3680 DWORD SizeOfHeapReserve
;
3681 DWORD SizeOfHeapCommit
;
3683 DWORD NumberOfRvaAndSizes
;
3684 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
3685 } IMAGE_OPTIONAL_HEADER32
,*PIMAGE_OPTIONAL_HEADER32
;
3687 typedef struct _IMAGE_ROM_OPTIONAL_HEADER
{
3689 BYTE MajorLinkerVersion
;
3690 BYTE MinorLinkerVersion
;
3692 DWORD SizeOfInitializedData
;
3693 DWORD SizeOfUninitializedData
;
3694 DWORD AddressOfEntryPoint
;
3701 } IMAGE_ROM_OPTIONAL_HEADER
,*PIMAGE_ROM_OPTIONAL_HEADER
;
3703 typedef struct _IMAGE_OPTIONAL_HEADER64
{
3705 BYTE MajorLinkerVersion
;
3706 BYTE MinorLinkerVersion
;
3708 DWORD SizeOfInitializedData
;
3709 DWORD SizeOfUninitializedData
;
3710 DWORD AddressOfEntryPoint
;
3712 ULONGLONG ImageBase
;
3713 DWORD SectionAlignment
;
3714 DWORD FileAlignment
;
3715 WORD MajorOperatingSystemVersion
;
3716 WORD MinorOperatingSystemVersion
;
3717 WORD MajorImageVersion
;
3718 WORD MinorImageVersion
;
3719 WORD MajorSubsystemVersion
;
3720 WORD MinorSubsystemVersion
;
3721 DWORD Win32VersionValue
;
3723 DWORD SizeOfHeaders
;
3726 WORD DllCharacteristics
;
3727 ULONGLONG SizeOfStackReserve
;
3728 ULONGLONG SizeOfStackCommit
;
3729 ULONGLONG SizeOfHeapReserve
;
3730 ULONGLONG SizeOfHeapCommit
;
3732 DWORD NumberOfRvaAndSizes
;
3733 IMAGE_DATA_DIRECTORY DataDirectory
[IMAGE_NUMBEROF_DIRECTORY_ENTRIES
];
3734 } IMAGE_OPTIONAL_HEADER64
,*PIMAGE_OPTIONAL_HEADER64
;
3736 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
3737 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
3738 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
3739 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
3741 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
3742 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
3743 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
3746 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER
;
3747 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER
;
3748 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
3749 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
3751 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER
;
3752 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER
;
3753 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
3754 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
3757 typedef struct _IMAGE_NT_HEADERS64
{
3759 IMAGE_FILE_HEADER FileHeader
;
3760 IMAGE_OPTIONAL_HEADER64 OptionalHeader
;
3761 } IMAGE_NT_HEADERS64
,*PIMAGE_NT_HEADERS64
;
3763 typedef struct _IMAGE_NT_HEADERS
{
3765 IMAGE_FILE_HEADER FileHeader
;
3766 IMAGE_OPTIONAL_HEADER32 OptionalHeader
;
3767 } IMAGE_NT_HEADERS32
,*PIMAGE_NT_HEADERS32
;
3769 typedef struct _IMAGE_ROM_HEADERS
{
3770 IMAGE_FILE_HEADER FileHeader
;
3771 IMAGE_ROM_OPTIONAL_HEADER OptionalHeader
;
3772 } IMAGE_ROM_HEADERS
,*PIMAGE_ROM_HEADERS
;
3775 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS
;
3776 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS
;
3778 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS
;
3779 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS
;
3782 #define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
3784 #define IMAGE_SUBSYSTEM_UNKNOWN 0
3785 #define IMAGE_SUBSYSTEM_NATIVE 1
3786 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
3787 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
3788 #define IMAGE_SUBSYSTEM_OS2_CUI 5
3789 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
3790 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8
3791 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
3792 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
3793 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
3794 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
3795 #define IMAGE_SUBSYSTEM_EFI_ROM 13
3796 #define IMAGE_SUBSYSTEM_XBOX 14
3798 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
3799 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
3800 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
3801 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
3802 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
3804 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
3805 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
3806 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
3807 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
3808 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
3809 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
3810 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
3812 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
3813 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
3814 #define IMAGE_DIRECTORY_ENTRY_TLS 9
3815 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
3816 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
3817 #define IMAGE_DIRECTORY_ENTRY_IAT 12
3818 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
3819 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
3821 typedef struct ANON_OBJECT_HEADER
{
3826 DWORD TimeDateStamp
;
3829 } ANON_OBJECT_HEADER
;
3831 #define IMAGE_SIZEOF_SHORT_NAME 8
3833 typedef struct _IMAGE_SECTION_HEADER
{
3834 BYTE Name
[IMAGE_SIZEOF_SHORT_NAME
];
3836 DWORD PhysicalAddress
;
3839 DWORD VirtualAddress
;
3840 DWORD SizeOfRawData
;
3841 DWORD PointerToRawData
;
3842 DWORD PointerToRelocations
;
3843 DWORD PointerToLinenumbers
;
3844 WORD NumberOfRelocations
;
3845 WORD NumberOfLinenumbers
;
3846 DWORD Characteristics
;
3847 } IMAGE_SECTION_HEADER
,*PIMAGE_SECTION_HEADER
;
3849 #define IMAGE_SIZEOF_SECTION_HEADER 40
3851 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008
3853 #define IMAGE_SCN_CNT_CODE 0x00000020
3854 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
3855 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
3856 #define IMAGE_SCN_LNK_OTHER 0x00000100
3857 #define IMAGE_SCN_LNK_INFO 0x00000200
3858 #define IMAGE_SCN_LNK_REMOVE 0x00000800
3859 #define IMAGE_SCN_LNK_COMDAT 0x00001000
3860 #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
3861 #define IMAGE_SCN_GPREL 0x00008000
3862 #define IMAGE_SCN_MEM_FARDATA 0x00008000
3863 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
3864 #define IMAGE_SCN_MEM_16BIT 0x00020000
3865 #define IMAGE_SCN_MEM_LOCKED 0x00040000
3866 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
3868 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
3869 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
3870 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
3871 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
3872 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000
3873 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
3874 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
3875 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
3876 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
3877 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
3878 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
3879 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
3880 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
3881 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
3883 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
3885 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
3886 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
3887 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
3888 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
3889 #define IMAGE_SCN_MEM_SHARED 0x10000000
3890 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
3891 #define IMAGE_SCN_MEM_READ 0x40000000
3892 #define IMAGE_SCN_MEM_WRITE 0x80000000
3894 #define IMAGE_SCN_SCALE_INDEX 0x00000001
3896 #include "pshpack2.h"
3898 typedef struct _IMAGE_SYMBOL
{
3908 SHORT SectionNumber
;
3911 BYTE NumberOfAuxSymbols
;
3913 typedef IMAGE_SYMBOL UNALIGNED
*PIMAGE_SYMBOL
;
3915 #define IMAGE_SIZEOF_SYMBOL 18
3917 #define IMAGE_SYM_UNDEFINED (SHORT)0
3918 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
3919 #define IMAGE_SYM_DEBUG (SHORT)-2
3920 #define IMAGE_SYM_SECTION_MAX 0xFEFF
3922 #define IMAGE_SYM_TYPE_NULL 0x0000
3923 #define IMAGE_SYM_TYPE_VOID 0x0001
3924 #define IMAGE_SYM_TYPE_CHAR 0x0002
3925 #define IMAGE_SYM_TYPE_SHORT 0x0003
3926 #define IMAGE_SYM_TYPE_INT 0x0004
3927 #define IMAGE_SYM_TYPE_LONG 0x0005
3928 #define IMAGE_SYM_TYPE_FLOAT 0x0006
3929 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
3930 #define IMAGE_SYM_TYPE_STRUCT 0x0008
3931 #define IMAGE_SYM_TYPE_UNION 0x0009
3932 #define IMAGE_SYM_TYPE_ENUM 0x000A
3933 #define IMAGE_SYM_TYPE_MOE 0x000B
3934 #define IMAGE_SYM_TYPE_BYTE 0x000C
3935 #define IMAGE_SYM_TYPE_WORD 0x000D
3936 #define IMAGE_SYM_TYPE_UINT 0x000E
3937 #define IMAGE_SYM_TYPE_DWORD 0x000F
3938 #define IMAGE_SYM_TYPE_PCODE 0x8000
3940 #define IMAGE_SYM_DTYPE_NULL 0
3941 #define IMAGE_SYM_DTYPE_POINTER 1
3942 #define IMAGE_SYM_DTYPE_FUNCTION 2
3943 #define IMAGE_SYM_DTYPE_ARRAY 3
3945 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE)-1
3946 #define IMAGE_SYM_CLASS_NULL 0x0000
3947 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
3948 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
3949 #define IMAGE_SYM_CLASS_STATIC 0x0003
3950 #define IMAGE_SYM_CLASS_REGISTER 0x0004
3951 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
3952 #define IMAGE_SYM_CLASS_LABEL 0x0006
3953 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
3954 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
3955 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
3956 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
3957 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
3958 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
3959 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
3960 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
3961 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
3962 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
3963 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
3964 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
3965 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
3966 #define IMAGE_SYM_CLASS_BLOCK 0x0064
3967 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
3968 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
3969 #define IMAGE_SYM_CLASS_FILE 0x0067
3970 #define IMAGE_SYM_CLASS_SECTION 0x0068
3971 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
3972 #define IMAGE_SYM_CLASS_CLR_TOKEN 0x006B
3974 #define N_BTMASK 0x000F
3975 #define N_TMASK 0x0030
3976 #define N_TMASK1 0x00C0
3977 #define N_TMASK2 0x00F0
3981 #define BTYPE(x) ((x) & N_BTMASK)
3984 #define ISPTR(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
3988 #define ISFCN(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
3992 #define ISARY(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
3996 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
4000 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
4003 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
4006 typedef union _IMAGE_AUX_SYMBOL
{
4018 DWORD PointerToLinenumber
;
4019 DWORD PointerToNextFunction
;
4028 BYTE Name
[IMAGE_SIZEOF_SYMBOL
];
4032 WORD NumberOfRelocations
;
4033 WORD NumberOfLinenumbers
;
4039 typedef IMAGE_AUX_SYMBOL UNALIGNED
*PIMAGE_AUX_SYMBOL
;
4041 #define IMAGE_SIZEOF_AUX_SYMBOL 18
4043 typedef enum IMAGE_AUX_SYMBOL_TYPE
{
4044 IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF
= 1
4045 } IMAGE_AUX_SYMBOL_TYPE
;
4047 #include <pshpack2.h>
4049 typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF
{
4052 DWORD SymbolTableIndex
;
4053 BYTE rgbReserved
[12];
4054 } IMAGE_AUX_SYMBOL_TOKEN_DEF
;
4056 typedef IMAGE_AUX_SYMBOL_TOKEN_DEF UNALIGNED
*PIMAGE_AUX_SYMBOL_TOKEN_DEF
;
4058 #include <poppack.h>
4060 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
4061 #define IMAGE_COMDAT_SELECT_ANY 2
4062 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
4063 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
4064 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
4065 #define IMAGE_COMDAT_SELECT_LARGEST 6
4066 #define IMAGE_COMDAT_SELECT_NEWEST 7
4068 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
4069 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
4070 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
4072 typedef struct _IMAGE_RELOCATION
{
4074 DWORD VirtualAddress
;
4077 DWORD SymbolTableIndex
;
4080 typedef IMAGE_RELOCATION UNALIGNED
*PIMAGE_RELOCATION
;
4082 #define IMAGE_SIZEOF_RELOCATION 10
4084 #define IMAGE_REL_I386_ABSOLUTE 0x0000
4085 #define IMAGE_REL_I386_DIR16 0x0001
4086 #define IMAGE_REL_I386_REL16 0x0002
4087 #define IMAGE_REL_I386_DIR32 0x0006
4088 #define IMAGE_REL_I386_DIR32NB 0x0007
4089 #define IMAGE_REL_I386_SEG12 0x0009
4090 #define IMAGE_REL_I386_SECTION 0x000A
4091 #define IMAGE_REL_I386_SECREL 0x000B
4092 #define IMAGE_REL_I386_TOKEN 0x000C
4093 #define IMAGE_REL_I386_SECREL7 0x000D
4094 #define IMAGE_REL_I386_REL32 0x0014
4096 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
4097 #define IMAGE_REL_MIPS_REFHALF 0x0001
4098 #define IMAGE_REL_MIPS_REFWORD 0x0002
4099 #define IMAGE_REL_MIPS_JMPADDR 0x0003
4100 #define IMAGE_REL_MIPS_REFHI 0x0004
4101 #define IMAGE_REL_MIPS_REFLO 0x0005
4102 #define IMAGE_REL_MIPS_GPREL 0x0006
4103 #define IMAGE_REL_MIPS_LITERAL 0x0007
4104 #define IMAGE_REL_MIPS_SECTION 0x000A
4105 #define IMAGE_REL_MIPS_SECREL 0x000B
4106 #define IMAGE_REL_MIPS_SECRELLO 0x000C
4107 #define IMAGE_REL_MIPS_SECRELHI 0x000D
4108 #define IMAGE_REL_MIPS_TOKEN 0x000E
4109 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
4110 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
4111 #define IMAGE_REL_MIPS_PAIR 0x0025
4113 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
4114 #define IMAGE_REL_ALPHA_REFLONG 0x0001
4115 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
4116 #define IMAGE_REL_ALPHA_GPREL32 0x0003
4117 #define IMAGE_REL_ALPHA_LITERAL 0x0004
4118 #define IMAGE_REL_ALPHA_LITUSE 0x0005
4119 #define IMAGE_REL_ALPHA_GPDISP 0x0006
4120 #define IMAGE_REL_ALPHA_BRADDR 0x0007
4121 #define IMAGE_REL_ALPHA_HINT 0x0008
4122 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
4123 #define IMAGE_REL_ALPHA_REFHI 0x000A
4124 #define IMAGE_REL_ALPHA_REFLO 0x000B
4125 #define IMAGE_REL_ALPHA_PAIR 0x000C
4126 #define IMAGE_REL_ALPHA_MATCH 0x000D
4127 #define IMAGE_REL_ALPHA_SECTION 0x000E
4128 #define IMAGE_REL_ALPHA_SECREL 0x000F
4129 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
4130 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
4131 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
4132 #define IMAGE_REL_ALPHA_REFQ3 0x0013
4133 #define IMAGE_REL_ALPHA_REFQ2 0x0014
4134 #define IMAGE_REL_ALPHA_REFQ1 0x0015
4135 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
4136 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
4138 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
4139 #define IMAGE_REL_PPC_ADDR64 0x0001
4140 #define IMAGE_REL_PPC_ADDR32 0x0002
4141 #define IMAGE_REL_PPC_ADDR24 0x0003
4142 #define IMAGE_REL_PPC_ADDR16 0x0004
4143 #define IMAGE_REL_PPC_ADDR14 0x0005
4144 #define IMAGE_REL_PPC_REL24 0x0006
4145 #define IMAGE_REL_PPC_REL14 0x0007
4146 #define IMAGE_REL_PPC_TOCREL16 0x0008
4147 #define IMAGE_REL_PPC_TOCREL14 0x0009
4148 #define IMAGE_REL_PPC_ADDR32NB 0x000A
4149 #define IMAGE_REL_PPC_SECREL 0x000B
4150 #define IMAGE_REL_PPC_SECTION 0x000C
4151 #define IMAGE_REL_PPC_IFGLUE 0x000D
4152 #define IMAGE_REL_PPC_IMGLUE 0x000E
4153 #define IMAGE_REL_PPC_SECREL16 0x000F
4154 #define IMAGE_REL_PPC_REFHI 0x0010
4155 #define IMAGE_REL_PPC_REFLO 0x0011
4156 #define IMAGE_REL_PPC_PAIR 0x0012
4157 #define IMAGE_REL_PPC_SECRELLO 0x0013
4158 #define IMAGE_REL_PPC_SECRELHI 0x0014
4159 #define IMAGE_REL_PPC_GPREL 0x0015
4160 #define IMAGE_REL_PPC_TOKEN 0x0016
4161 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
4162 #define IMAGE_REL_PPC_NEG 0x0100
4163 #define IMAGE_REL_PPC_BRTAKEN 0x0200
4164 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
4165 #define IMAGE_REL_PPC_TOCDEFN 0x0800
4167 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
4168 #define IMAGE_REL_SH3_DIRECT16 0x0001
4169 #define IMAGE_REL_SH3_DIRECT32 0x0002
4170 #define IMAGE_REL_SH3_DIRECT8 0x0003
4171 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
4172 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
4173 #define IMAGE_REL_SH3_DIRECT4 0x0006
4174 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
4175 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
4176 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
4177 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
4178 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
4179 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
4180 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
4181 #define IMAGE_REL_SH3_SECTION 0x000E
4182 #define IMAGE_REL_SH3_SECREL 0x000F
4183 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
4184 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
4185 #define IMAGE_REL_SH3_TOKEN 0x0012
4187 #define IMAGE_REL_SHM_PCRELPT 0x0013
4188 #define IMAGE_REL_SHM_REFLO 0x0014
4189 #define IMAGE_REL_SHM_REFHALF 0x0015
4190 #define IMAGE_REL_SHM_RELLO 0x0016
4191 #define IMAGE_REL_SHM_RELHALF 0x0017
4192 #define IMAGE_REL_SHM_PAIR 0x0018
4194 #define IMAGE_REL_SH_NOMODE 0x8000
4196 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
4197 #define IMAGE_REL_ARM_ADDR32 0x0001
4198 #define IMAGE_REL_ARM_ADDR32NB 0x0002
4199 #define IMAGE_REL_ARM_BRANCH24 0x0003
4200 #define IMAGE_REL_ARM_BRANCH11 0x0004
4201 #define IMAGE_REL_ARM_TOKEN 0x0005
4202 #define IMAGE_REL_ARM_GPREL12 0x0006
4203 #define IMAGE_REL_ARM_GPREL7 0x0007
4204 #define IMAGE_REL_ARM_BLX24 0x0008
4205 #define IMAGE_REL_ARM_BLX11 0x0009
4206 #define IMAGE_REL_ARM_SECTION 0x000E
4207 #define IMAGE_REL_ARM_SECREL 0x000F
4209 #define IMAGE_REL_AM_ABSOLUTE 0x0000
4210 #define IMAGE_REL_AM_ADDR32 0x0001
4211 #define IMAGE_REL_AM_ADDR32NB 0x0002
4212 #define IMAGE_REL_AM_CALL32 0x0003
4213 #define IMAGE_REL_AM_FUNCINFO 0x0004
4214 #define IMAGE_REL_AM_REL32_1 0x0005
4215 #define IMAGE_REL_AM_REL32_2 0x0006
4216 #define IMAGE_REL_AM_SECREL 0x0007
4217 #define IMAGE_REL_AM_SECTION 0x0008
4218 #define IMAGE_REL_AM_TOKEN 0x0009
4220 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
4221 #define IMAGE_REL_AMD64_ADDR64 0x0001
4222 #define IMAGE_REL_AMD64_ADDR32 0x0002
4223 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
4224 #define IMAGE_REL_AMD64_REL32 0x0004
4225 #define IMAGE_REL_AMD64_REL32_1 0x0005
4226 #define IMAGE_REL_AMD64_REL32_2 0x0006
4227 #define IMAGE_REL_AMD64_REL32_3 0x0007
4228 #define IMAGE_REL_AMD64_REL32_4 0x0008
4229 #define IMAGE_REL_AMD64_REL32_5 0x0009
4230 #define IMAGE_REL_AMD64_SECTION 0x000A
4231 #define IMAGE_REL_AMD64_SECREL 0x000B
4232 #define IMAGE_REL_AMD64_SECREL7 0x000C
4233 #define IMAGE_REL_AMD64_TOKEN 0x000D
4234 #define IMAGE_REL_AMD64_SREL32 0x000E
4235 #define IMAGE_REL_AMD64_PAIR 0x000F
4236 #define IMAGE_REL_AMD64_SSPAN32 0x0010
4238 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
4239 #define IMAGE_REL_IA64_IMM14 0x0001
4240 #define IMAGE_REL_IA64_IMM22 0x0002
4241 #define IMAGE_REL_IA64_IMM64 0x0003
4242 #define IMAGE_REL_IA64_DIR32 0x0004
4243 #define IMAGE_REL_IA64_DIR64 0x0005
4244 #define IMAGE_REL_IA64_PCREL21B 0x0006
4245 #define IMAGE_REL_IA64_PCREL21M 0x0007
4246 #define IMAGE_REL_IA64_PCREL21F 0x0008
4247 #define IMAGE_REL_IA64_GPREL22 0x0009
4248 #define IMAGE_REL_IA64_LTOFF22 0x000A
4249 #define IMAGE_REL_IA64_SECTION 0x000B
4250 #define IMAGE_REL_IA64_SECREL22 0x000C
4251 #define IMAGE_REL_IA64_SECREL64I 0x000D
4252 #define IMAGE_REL_IA64_SECREL32 0x000E
4254 #define IMAGE_REL_IA64_DIR32NB 0x0010
4255 #define IMAGE_REL_IA64_SREL14 0x0011
4256 #define IMAGE_REL_IA64_SREL22 0x0012
4257 #define IMAGE_REL_IA64_SREL32 0x0013
4258 #define IMAGE_REL_IA64_UREL32 0x0014
4259 #define IMAGE_REL_IA64_PCREL60X 0x0015
4260 #define IMAGE_REL_IA64_PCREL60B 0x0016
4261 #define IMAGE_REL_IA64_PCREL60F 0x0017
4262 #define IMAGE_REL_IA64_PCREL60I 0x0018
4263 #define IMAGE_REL_IA64_PCREL60M 0x0019
4264 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
4265 #define IMAGE_REL_IA64_TOKEN 0x001B
4266 #define IMAGE_REL_IA64_GPREL32 0x001C
4267 #define IMAGE_REL_IA64_ADDEND 0x001F
4269 #define IMAGE_REL_CEF_ABSOLUTE 0x0000
4270 #define IMAGE_REL_CEF_ADDR32 0x0001
4271 #define IMAGE_REL_CEF_ADDR64 0x0002
4272 #define IMAGE_REL_CEF_ADDR32NB 0x0003
4273 #define IMAGE_REL_CEF_SECTION 0x0004
4274 #define IMAGE_REL_CEF_SECREL 0x0005
4275 #define IMAGE_REL_CEF_TOKEN 0x0006
4277 #define IMAGE_REL_CEE_ABSOLUTE 0x0000
4278 #define IMAGE_REL_CEE_ADDR32 0x0001
4279 #define IMAGE_REL_CEE_ADDR64 0x0002
4280 #define IMAGE_REL_CEE_ADDR32NB 0x0003
4281 #define IMAGE_REL_CEE_SECTION 0x0004
4282 #define IMAGE_REL_CEE_SECREL 0x0005
4283 #define IMAGE_REL_CEE_TOKEN 0x0006
4285 #define IMAGE_REL_M32R_ABSOLUTE 0x0000
4286 #define IMAGE_REL_M32R_ADDR32 0x0001
4287 #define IMAGE_REL_M32R_ADDR32NB 0x0002
4288 #define IMAGE_REL_M32R_ADDR24 0x0003
4289 #define IMAGE_REL_M32R_GPREL16 0x0004
4290 #define IMAGE_REL_M32R_PCREL24 0x0005
4291 #define IMAGE_REL_M32R_PCREL16 0x0006
4292 #define IMAGE_REL_M32R_PCREL8 0x0007
4293 #define IMAGE_REL_M32R_REFHALF 0x0008
4294 #define IMAGE_REL_M32R_REFHI 0x0009
4295 #define IMAGE_REL_M32R_REFLO 0x000A
4296 #define IMAGE_REL_M32R_PAIR 0x000B
4297 #define IMAGE_REL_M32R_SECTION 0x000C
4298 #define IMAGE_REL_M32R_SECREL32 0x000D
4299 #define IMAGE_REL_M32R_TOKEN 0x000E
4301 #define EXT_IMM64(Value,Address,Size,InstPos,ValPos) Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)
4302 #define INS_IMM64(Value,Address,Size,InstPos,ValPos) *(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | ((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos)
4304 #define EMARCH_ENC_I17_IMM7B_INST_WORD_X 3
4305 #define EMARCH_ENC_I17_IMM7B_SIZE_X 7
4306 #define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 4
4307 #define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0
4309 #define EMARCH_ENC_I17_IMM9D_INST_WORD_X 3
4310 #define EMARCH_ENC_I17_IMM9D_SIZE_X 9
4311 #define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 18
4312 #define EMARCH_ENC_I17_IMM9D_VAL_POS_X 7
4314 #define EMARCH_ENC_I17_IMM5C_INST_WORD_X 3
4315 #define EMARCH_ENC_I17_IMM5C_SIZE_X 5
4316 #define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 13
4317 #define EMARCH_ENC_I17_IMM5C_VAL_POS_X 16
4319 #define EMARCH_ENC_I17_IC_INST_WORD_X 3
4320 #define EMARCH_ENC_I17_IC_SIZE_X 1
4321 #define EMARCH_ENC_I17_IC_INST_WORD_POS_X 12
4322 #define EMARCH_ENC_I17_IC_VAL_POS_X 21
4324 #define EMARCH_ENC_I17_IMM41a_INST_WORD_X 1
4325 #define EMARCH_ENC_I17_IMM41a_SIZE_X 10
4326 #define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 14
4327 #define EMARCH_ENC_I17_IMM41a_VAL_POS_X 22
4329 #define EMARCH_ENC_I17_IMM41b_INST_WORD_X 1
4330 #define EMARCH_ENC_I17_IMM41b_SIZE_X 8
4331 #define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 24
4332 #define EMARCH_ENC_I17_IMM41b_VAL_POS_X 32
4334 #define EMARCH_ENC_I17_IMM41c_INST_WORD_X 2
4335 #define EMARCH_ENC_I17_IMM41c_SIZE_X 23
4336 #define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0
4337 #define EMARCH_ENC_I17_IMM41c_VAL_POS_X 40
4339 #define EMARCH_ENC_I17_SIGN_INST_WORD_X 3
4340 #define EMARCH_ENC_I17_SIGN_SIZE_X 1
4341 #define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 27
4342 #define EMARCH_ENC_I17_SIGN_VAL_POS_X 63
4344 #define X3_OPCODE_INST_WORD_X 3
4345 #define X3_OPCODE_SIZE_X 4
4346 #define X3_OPCODE_INST_WORD_POS_X 28
4347 #define X3_OPCODE_SIGN_VAL_POS_X 0
4349 #define X3_I_INST_WORD_X 3
4350 #define X3_I_SIZE_X 1
4351 #define X3_I_INST_WORD_POS_X 27
4352 #define X3_I_SIGN_VAL_POS_X 59
4354 #define X3_D_WH_INST_WORD_X 3
4355 #define X3_D_WH_SIZE_X 3
4356 #define X3_D_WH_INST_WORD_POS_X 24
4357 #define X3_D_WH_SIGN_VAL_POS_X 0
4359 #define X3_IMM20_INST_WORD_X 3
4360 #define X3_IMM20_SIZE_X 20
4361 #define X3_IMM20_INST_WORD_POS_X 4
4362 #define X3_IMM20_SIGN_VAL_POS_X 0
4364 #define X3_IMM39_1_INST_WORD_X 2
4365 #define X3_IMM39_1_SIZE_X 23
4366 #define X3_IMM39_1_INST_WORD_POS_X 0
4367 #define X3_IMM39_1_SIGN_VAL_POS_X 36
4369 #define X3_IMM39_2_INST_WORD_X 1
4370 #define X3_IMM39_2_SIZE_X 16
4371 #define X3_IMM39_2_INST_WORD_POS_X 16
4372 #define X3_IMM39_2_SIGN_VAL_POS_X 20
4374 #define X3_P_INST_WORD_X 3
4375 #define X3_P_SIZE_X 4
4376 #define X3_P_INST_WORD_POS_X 0
4377 #define X3_P_SIGN_VAL_POS_X 0
4379 #define X3_TMPLT_INST_WORD_X 0
4380 #define X3_TMPLT_SIZE_X 4
4381 #define X3_TMPLT_INST_WORD_POS_X 0
4382 #define X3_TMPLT_SIGN_VAL_POS_X 0
4384 #define X3_BTYPE_QP_INST_WORD_X 2
4385 #define X3_BTYPE_QP_SIZE_X 9
4386 #define X3_BTYPE_QP_INST_WORD_POS_X 23
4387 #define X3_BTYPE_QP_INST_VAL_POS_X 0
4389 #define X3_EMPTY_INST_WORD_X 1
4390 #define X3_EMPTY_SIZE_X 2
4391 #define X3_EMPTY_INST_WORD_POS_X 14
4392 #define X3_EMPTY_INST_VAL_POS_X 0
4394 typedef struct _IMAGE_LINENUMBER
{
4396 DWORD SymbolTableIndex
;
4397 DWORD VirtualAddress
;
4401 typedef IMAGE_LINENUMBER UNALIGNED
*PIMAGE_LINENUMBER
;
4403 #define IMAGE_SIZEOF_LINENUMBER 6
4405 #include "poppack.h"
4407 typedef struct _IMAGE_BASE_RELOCATION
{
4408 DWORD VirtualAddress
;
4411 } IMAGE_BASE_RELOCATION
;
4412 typedef IMAGE_BASE_RELOCATION UNALIGNED
*PIMAGE_BASE_RELOCATION
;
4414 #define IMAGE_SIZEOF_BASE_RELOCATION 8
4416 #define IMAGE_REL_BASED_ABSOLUTE 0
4417 #define IMAGE_REL_BASED_HIGH 1
4418 #define IMAGE_REL_BASED_LOW 2
4419 #define IMAGE_REL_BASED_HIGHLOW 3
4420 #define IMAGE_REL_BASED_HIGHADJ 4
4421 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
4422 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
4423 #define IMAGE_REL_BASED_IA64_IMM64 9
4424 #define IMAGE_REL_BASED_DIR64 10
4426 #define IMAGE_ARCHIVE_START_SIZE 8
4427 #define IMAGE_ARCHIVE_START "!<arch>\n"
4428 #define IMAGE_ARCHIVE_END "`\n"
4429 #define IMAGE_ARCHIVE_PAD "\n"
4430 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
4431 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
4433 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER
{
4441 } IMAGE_ARCHIVE_MEMBER_HEADER
,*PIMAGE_ARCHIVE_MEMBER_HEADER
;
4443 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
4445 typedef struct _IMAGE_EXPORT_DIRECTORY
{
4446 DWORD Characteristics
;
4447 DWORD TimeDateStamp
;
4452 DWORD NumberOfFunctions
;
4453 DWORD NumberOfNames
;
4454 DWORD AddressOfFunctions
;
4455 DWORD AddressOfNames
;
4456 DWORD AddressOfNameOrdinals
;
4457 } IMAGE_EXPORT_DIRECTORY
,*PIMAGE_EXPORT_DIRECTORY
;
4459 typedef struct _IMAGE_IMPORT_BY_NAME
{
4462 } IMAGE_IMPORT_BY_NAME
,*PIMAGE_IMPORT_BY_NAME
;
4464 #include "pshpack8.h"
4466 typedef struct _IMAGE_THUNK_DATA64
{
4468 ULONGLONG ForwarderString
;
4471 ULONGLONG AddressOfData
;
4473 } IMAGE_THUNK_DATA64
;
4474 typedef IMAGE_THUNK_DATA64
*PIMAGE_THUNK_DATA64
;
4476 #include "poppack.h"
4478 typedef struct _IMAGE_THUNK_DATA32
{
4480 DWORD ForwarderString
;
4483 DWORD AddressOfData
;
4485 } IMAGE_THUNK_DATA32
;
4486 typedef IMAGE_THUNK_DATA32
*PIMAGE_THUNK_DATA32
;
4488 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ull
4489 #define IMAGE_ORDINAL_FLAG32 0x80000000
4490 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffffull)
4491 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
4492 #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
4493 #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
4496 (NTAPI
*PIMAGE_TLS_CALLBACK
)(PVOID DllHandle
,DWORD Reason
,PVOID Reserved
);
4498 typedef struct _IMAGE_TLS_DIRECTORY64
{
4499 ULONGLONG StartAddressOfRawData
;
4500 ULONGLONG EndAddressOfRawData
;
4501 ULONGLONG AddressOfIndex
;
4502 ULONGLONG AddressOfCallBacks
;
4503 DWORD SizeOfZeroFill
;
4504 DWORD Characteristics
;
4505 } IMAGE_TLS_DIRECTORY64
;
4506 typedef IMAGE_TLS_DIRECTORY64
*PIMAGE_TLS_DIRECTORY64
;
4508 typedef struct _IMAGE_TLS_DIRECTORY32
{
4509 DWORD StartAddressOfRawData
;
4510 DWORD EndAddressOfRawData
;
4511 DWORD AddressOfIndex
;
4512 DWORD AddressOfCallBacks
;
4513 DWORD SizeOfZeroFill
;
4514 DWORD Characteristics
;
4515 } IMAGE_TLS_DIRECTORY32
;
4516 typedef IMAGE_TLS_DIRECTORY32
*PIMAGE_TLS_DIRECTORY32
;
4519 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
4520 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
4521 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA
;
4522 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA
;
4523 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
4524 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY
;
4525 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY
;
4527 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
4528 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
4529 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA
;
4530 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA
;
4531 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
4532 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY
;
4533 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY
;
4536 typedef struct _IMAGE_IMPORT_DESCRIPTOR
{
4538 DWORD Characteristics
;
4539 DWORD OriginalFirstThunk
;
4541 DWORD TimeDateStamp
;
4543 DWORD ForwarderChain
;
4546 } IMAGE_IMPORT_DESCRIPTOR
;
4547 typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED
*PIMAGE_IMPORT_DESCRIPTOR
;
4549 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR
{
4550 DWORD TimeDateStamp
;
4551 WORD OffsetModuleName
;
4552 WORD NumberOfModuleForwarderRefs
;
4553 } IMAGE_BOUND_IMPORT_DESCRIPTOR
,*PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
4555 typedef struct _IMAGE_BOUND_FORWARDER_REF
{
4556 DWORD TimeDateStamp
;
4557 WORD OffsetModuleName
;
4559 } IMAGE_BOUND_FORWARDER_REF
,*PIMAGE_BOUND_FORWARDER_REF
;
4561 typedef struct _IMAGE_RESOURCE_DIRECTORY
{
4562 DWORD Characteristics
;
4563 DWORD TimeDateStamp
;
4566 WORD NumberOfNamedEntries
;
4567 WORD NumberOfIdEntries
;
4568 } IMAGE_RESOURCE_DIRECTORY
,*PIMAGE_RESOURCE_DIRECTORY
;
4570 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
4571 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
4573 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY
{
4576 DWORD NameOffset
:31;
4577 DWORD NameIsString
:1;
4585 DWORD OffsetToDirectory
:31;
4586 DWORD DataIsDirectory
:1;
4589 } IMAGE_RESOURCE_DIRECTORY_ENTRY
,*PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
4591 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING
{
4594 } IMAGE_RESOURCE_DIRECTORY_STRING
,*PIMAGE_RESOURCE_DIRECTORY_STRING
;
4596 typedef struct _IMAGE_RESOURCE_DIR_STRING_U
{
4598 WCHAR NameString
[1];
4599 } IMAGE_RESOURCE_DIR_STRING_U
,*PIMAGE_RESOURCE_DIR_STRING_U
;
4601 typedef struct _IMAGE_RESOURCE_DATA_ENTRY
{
4606 } IMAGE_RESOURCE_DATA_ENTRY
,*PIMAGE_RESOURCE_DATA_ENTRY
;
4610 DWORD TimeDateStamp
;
4613 DWORD GlobalFlagsClear
;
4614 DWORD GlobalFlagsSet
;
4615 DWORD CriticalSectionDefaultTimeout
;
4616 DWORD DeCommitFreeBlockThreshold
;
4617 DWORD DeCommitTotalFreeThreshold
;
4618 DWORD LockPrefixTable
;
4619 DWORD MaximumAllocationSize
;
4620 DWORD VirtualMemoryThreshold
;
4621 DWORD ProcessHeapFlags
;
4622 DWORD ProcessAffinityMask
;
4626 DWORD SecurityCookie
;
4627 DWORD SEHandlerTable
;
4628 DWORD SEHandlerCount
;
4629 } IMAGE_LOAD_CONFIG_DIRECTORY32
,*PIMAGE_LOAD_CONFIG_DIRECTORY32
;
4633 DWORD TimeDateStamp
;
4636 DWORD GlobalFlagsClear
;
4637 DWORD GlobalFlagsSet
;
4638 DWORD CriticalSectionDefaultTimeout
;
4639 ULONGLONG DeCommitFreeBlockThreshold
;
4640 ULONGLONG DeCommitTotalFreeThreshold
;
4641 ULONGLONG LockPrefixTable
;
4642 ULONGLONG MaximumAllocationSize
;
4643 ULONGLONG VirtualMemoryThreshold
;
4644 ULONGLONG ProcessAffinityMask
;
4645 DWORD ProcessHeapFlags
;
4649 ULONGLONG SecurityCookie
;
4650 ULONGLONG SEHandlerTable
;
4651 ULONGLONG SEHandlerCount
;
4652 } IMAGE_LOAD_CONFIG_DIRECTORY64
,*PIMAGE_LOAD_CONFIG_DIRECTORY64
;
4655 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY
;
4656 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY
;
4658 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY
;
4659 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY
;
4662 typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY
{
4664 DWORD PrologLen
: 8;
4666 DWORD ThirtyTwoBit
: 1;
4667 DWORD ExceptionFlag
: 1;
4668 } IMAGE_CE_RUNTIME_FUNCTION_ENTRY
,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY
;
4670 typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
{
4671 ULONGLONG BeginAddress
;
4672 ULONGLONG EndAddress
;
4673 ULONGLONG ExceptionHandler
;
4674 ULONGLONG HandlerData
;
4675 ULONGLONG PrologEndAddress
;
4676 } IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
,*PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
;
4678 typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
{
4681 DWORD ExceptionHandler
;
4683 DWORD PrologEndAddress
;
4684 } IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
,*PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
;
4686 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY
{
4689 DWORD UnwindInfoAddress
;
4690 } _IMAGE_RUNTIME_FUNCTION_ENTRY
,*_PIMAGE_RUNTIME_FUNCTION_ENTRY
;
4692 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_IA64_RUNTIME_FUNCTION_ENTRY
;
4693 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY
;
4695 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY
;
4696 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY
;
4698 typedef struct _IMAGE_DEBUG_DIRECTORY
{
4699 DWORD Characteristics
;
4700 DWORD TimeDateStamp
;
4705 DWORD AddressOfRawData
;
4706 DWORD PointerToRawData
;
4707 } IMAGE_DEBUG_DIRECTORY
,*PIMAGE_DEBUG_DIRECTORY
;
4709 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
4710 #define IMAGE_DEBUG_TYPE_COFF 1
4711 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
4712 #define IMAGE_DEBUG_TYPE_FPO 3
4713 #define IMAGE_DEBUG_TYPE_MISC 4
4714 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
4715 #define IMAGE_DEBUG_TYPE_FIXUP 6
4716 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
4717 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
4718 #define IMAGE_DEBUG_TYPE_BORLAND 9
4719 #define IMAGE_DEBUG_TYPE_RESERVED10 10
4720 #define IMAGE_DEBUG_TYPE_CLSID 11
4722 typedef struct _IMAGE_COFF_SYMBOLS_HEADER
{
4723 DWORD NumberOfSymbols
;
4724 DWORD LvaToFirstSymbol
;
4725 DWORD NumberOfLinenumbers
;
4726 DWORD LvaToFirstLinenumber
;
4727 DWORD RvaToFirstByteOfCode
;
4728 DWORD RvaToLastByteOfCode
;
4729 DWORD RvaToFirstByteOfData
;
4730 DWORD RvaToLastByteOfData
;
4731 } IMAGE_COFF_SYMBOLS_HEADER
,*PIMAGE_COFF_SYMBOLS_HEADER
;
4734 #define FRAME_TRAP 1
4736 #define FRAME_NONFPO 3
4738 typedef struct _FPO_DATA
{
4749 } FPO_DATA
,*PFPO_DATA
;
4750 #define SIZEOF_RFPO_DATA 16
4752 #define IMAGE_DEBUG_MISC_EXENAME 1
4754 typedef struct _IMAGE_DEBUG_MISC
{
4760 } IMAGE_DEBUG_MISC
,*PIMAGE_DEBUG_MISC
;
4762 typedef struct _IMAGE_FUNCTION_ENTRY
{
4763 DWORD StartingAddress
;
4764 DWORD EndingAddress
;
4765 DWORD EndOfPrologue
;
4766 } IMAGE_FUNCTION_ENTRY
,*PIMAGE_FUNCTION_ENTRY
;
4768 typedef struct _IMAGE_FUNCTION_ENTRY64
{
4769 ULONGLONG StartingAddress
;
4770 ULONGLONG EndingAddress
;
4772 ULONGLONG EndOfPrologue
;
4773 ULONGLONG UnwindInfoAddress
;
4775 } IMAGE_FUNCTION_ENTRY64
,*PIMAGE_FUNCTION_ENTRY64
;
4777 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER
{
4781 WORD Characteristics
;
4782 DWORD TimeDateStamp
;
4786 DWORD NumberOfSections
;
4787 DWORD ExportedNamesSize
;
4788 DWORD DebugDirectorySize
;
4789 DWORD SectionAlignment
;
4791 } IMAGE_SEPARATE_DEBUG_HEADER
,*PIMAGE_SEPARATE_DEBUG_HEADER
;
4793 typedef struct _NON_PAGED_DEBUG_INFO
{
4798 WORD Characteristics
;
4799 DWORD TimeDateStamp
;
4802 ULONGLONG ImageBase
;
4804 } NON_PAGED_DEBUG_INFO
,*PNON_PAGED_DEBUG_INFO
;
4806 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
4807 #define NON_PAGED_DEBUG_SIGNATURE 0x494E
4809 #define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
4810 #define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000
4812 typedef struct _ImageArchitectureHeader
{
4813 unsigned int AmaskValue
: 1;
4815 unsigned int AmaskShift
: 8;
4817 DWORD FirstEntryRVA
;
4818 } IMAGE_ARCHITECTURE_HEADER
,*PIMAGE_ARCHITECTURE_HEADER
;
4820 typedef struct _ImageArchitectureEntry
{
4823 } IMAGE_ARCHITECTURE_ENTRY
,*PIMAGE_ARCHITECTURE_ENTRY
;
4825 #include "poppack.h"
4827 #define IMPORT_OBJECT_HDR_SIG2 0xffff
4829 typedef struct IMPORT_OBJECT_HEADER
{
4834 DWORD TimeDateStamp
;
4843 } IMPORT_OBJECT_HEADER
;
4845 typedef enum IMPORT_OBJECT_TYPE
{
4846 IMPORT_OBJECT_CODE
= 0,IMPORT_OBJECT_DATA
= 1,IMPORT_OBJECT_CONST
= 2
4847 } IMPORT_OBJECT_TYPE
;
4849 typedef enum IMPORT_OBJECT_NAME_TYPE
{
4850 IMPORT_OBJECT_ORDINAL
= 0,IMPORT_OBJECT_NAME
= 1,IMPORT_OBJECT_NAME_NO_PREFIX
= 2,IMPORT_OBJECT_NAME_UNDECORATE
= 3
4851 } IMPORT_OBJECT_NAME_TYPE
;
4853 #ifndef __IMAGE_COR20_HEADER_DEFINED__
4854 #define __IMAGE_COR20_HEADER_DEFINED__
4855 typedef enum ReplacesCorHdrNumericDefines
{
4856 COMIMAGE_FLAGS_ILONLY
=0x00000001,COMIMAGE_FLAGS_32BITREQUIRED
=0x00000002,COMIMAGE_FLAGS_IL_LIBRARY
=0x00000004,
4857 COMIMAGE_FLAGS_STRONGNAMESIGNED
=0x00000008,COMIMAGE_FLAGS_TRACKDEBUGDATA
=0x00010000,COR_VERSION_MAJOR_V2
=2,
4858 COR_VERSION_MAJOR
=COR_VERSION_MAJOR_V2
,COR_VERSION_MINOR
=0,COR_DELETED_NAME_LENGTH
=8,COR_VTABLEGAP_NAME_LENGTH
=8,
4859 NATIVE_TYPE_MAX_CB
=1,COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
=0xFF,IMAGE_COR_MIH_METHODRVA
=0x01,IMAGE_COR_MIH_EHRVA
=0x02,
4860 IMAGE_COR_MIH_BASICBLOCK
=0x08,COR_VTABLE_32BIT
=0x01,COR_VTABLE_64BIT
=0x02,COR_VTABLE_FROM_UNMANAGED
=0x04,
4861 COR_VTABLE_CALL_MOST_DERIVED
=0x10,IMAGE_COR_EATJ_THUNK_SIZE
=32,MAX_CLASS_NAME
=1024,MAX_PACKAGE_NAME
=1024
4862 } ReplacesCorHdrNumericDefines
;
4864 typedef struct IMAGE_COR20_HEADER
{
4866 WORD MajorRuntimeVersion
;
4867 WORD MinorRuntimeVersion
;
4868 IMAGE_DATA_DIRECTORY MetaData
;
4870 DWORD EntryPointToken
;
4871 IMAGE_DATA_DIRECTORY Resources
;
4872 IMAGE_DATA_DIRECTORY StrongNameSignature
;
4873 IMAGE_DATA_DIRECTORY CodeManagerTable
;
4874 IMAGE_DATA_DIRECTORY VTableFixups
;
4875 IMAGE_DATA_DIRECTORY ExportAddressTableJumps
;
4876 IMAGE_DATA_DIRECTORY ManagedNativeHeader
;
4877 } IMAGE_COR20_HEADER
,*PIMAGE_COR20_HEADER
;
4882 #ifndef _SLIST_HEADER_
4883 #define _SLIST_HEADER_
4886 typedef struct _SLIST_ENTRY
*PSLIST_ENTRY
;
4887 typedef DECLSPEC_ALIGN(16) struct _SLIST_ENTRY
{
4892 #define SLIST_ENTRY SINGLE_LIST_ENTRY
4893 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
4894 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
4899 typedef DECLSPEC_ALIGN(16) struct _SLIST_HEADER
{
4900 ULONGLONG Alignment
;
4904 typedef struct _SLIST_HEADER
*PSLIST_HEADER
;
4907 typedef union _SLIST_HEADER
{
4908 ULONGLONG Alignment
;
4914 } SLIST_HEADER
,*PSLIST_HEADER
;
4918 NTSYSAPI VOID NTAPI
RtlInitializeSListHead(PSLIST_HEADER ListHead
);
4919 NTSYSAPI PSLIST_ENTRY NTAPI
RtlFirstEntrySList(const SLIST_HEADER
*ListHead
);
4920 NTSYSAPI PSLIST_ENTRY NTAPI
RtlInterlockedPopEntrySList(PSLIST_HEADER ListHead
);
4921 NTSYSAPI PSLIST_ENTRY NTAPI
RtlInterlockedPushEntrySList(PSLIST_HEADER ListHead
,PSLIST_ENTRY ListEntry
);
4922 NTSYSAPI PSLIST_ENTRY NTAPI
RtlInterlockedFlushSList(PSLIST_HEADER ListHead
);
4923 NTSYSAPI WORD NTAPI
RtlQueryDepthSList(PSLIST_HEADER ListHead
);
4925 #define HEAP_NO_SERIALIZE 0x00000001
4926 #define HEAP_GROWABLE 0x00000002
4927 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
4928 #define HEAP_ZERO_MEMORY 0x00000008
4929 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
4930 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
4931 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
4932 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
4933 #define HEAP_CREATE_ALIGN_16 0x00010000
4934 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
4935 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
4936 #define HEAP_MAXIMUM_TAG 0x0FFF
4937 #define HEAP_PSEUDO_TAG_FLAG 0x8000
4938 #define HEAP_TAG_SHIFT 18
4939 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b) + ((o) << 18)))
4941 NTSYSAPI VOID NTAPI
RtlCaptureContext(PCONTEXT ContextRecord
);
4943 #define IS_TEXT_UNICODE_ASCII16 0x0001
4944 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
4946 #define IS_TEXT_UNICODE_STATISTICS 0x0002
4947 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
4949 #define IS_TEXT_UNICODE_CONTROLS 0x0004
4950 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
4952 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
4953 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
4955 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
4956 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
4957 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
4958 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
4960 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
4961 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
4962 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
4963 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
4965 #define COMPRESSION_FORMAT_NONE (0x0000)
4966 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
4967 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
4968 #define COMPRESSION_ENGINE_STANDARD (0x0000)
4969 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
4970 #define COMPRESSION_ENGINE_HIBER (0x0200)
4972 #if _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
4973 #define _MEMCPY_INLINE_
4974 __CRT_INLINE PVOID __cdecl
memcpy_inline(void *dst
,const void *src
,size_t size
) {
4975 if(((char *)dst
> (char *)src
) && ((char *)dst
< ((char *)src
+ size
))) {
4978 return memcpy(dst
,src
,size
);
4980 #define memcpy memcpy_inline
4983 NTSYSAPI SIZE_T NTAPI
RtlCompareMemory(const VOID
*Source1
,const VOID
*Source2
,SIZE_T Length
);
4985 #define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
4986 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
4987 #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
4988 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
4989 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
4991 __CRT_INLINE PVOID
RtlSecureZeroMemory(PVOID ptr
,SIZE_T cnt
) {
4992 volatile char *vptr
=(volatile char *)ptr
;
4994 __stosb((PBYTE
)((DWORD64
)vptr
),0,cnt
);
5005 typedef struct _MESSAGE_RESOURCE_ENTRY
{
5009 } MESSAGE_RESOURCE_ENTRY
,*PMESSAGE_RESOURCE_ENTRY
;
5011 #define MESSAGE_RESOURCE_UNICODE 0x0001
5013 typedef struct _MESSAGE_RESOURCE_BLOCK
{
5016 DWORD OffsetToEntries
;
5017 } MESSAGE_RESOURCE_BLOCK
,*PMESSAGE_RESOURCE_BLOCK
;
5019 typedef struct _MESSAGE_RESOURCE_DATA
{
5020 DWORD NumberOfBlocks
;
5021 MESSAGE_RESOURCE_BLOCK Blocks
[1];
5022 } MESSAGE_RESOURCE_DATA
,*PMESSAGE_RESOURCE_DATA
;
5024 typedef struct _OSVERSIONINFOA
{
5025 DWORD dwOSVersionInfoSize
;
5026 DWORD dwMajorVersion
;
5027 DWORD dwMinorVersion
;
5028 DWORD dwBuildNumber
;
5030 CHAR szCSDVersion
[128];
5031 } OSVERSIONINFOA
,*POSVERSIONINFOA
,*LPOSVERSIONINFOA
;
5033 typedef struct _OSVERSIONINFOW
{
5034 DWORD dwOSVersionInfoSize
;
5035 DWORD dwMajorVersion
;
5036 DWORD dwMinorVersion
;
5037 DWORD dwBuildNumber
;
5039 WCHAR szCSDVersion
[128];
5040 } OSVERSIONINFOW
,*POSVERSIONINFOW
,*LPOSVERSIONINFOW
,RTL_OSVERSIONINFOW
,*PRTL_OSVERSIONINFOW
;
5043 typedef OSVERSIONINFOW OSVERSIONINFO
;
5044 typedef POSVERSIONINFOW POSVERSIONINFO
;
5045 typedef LPOSVERSIONINFOW LPOSVERSIONINFO
;
5047 typedef OSVERSIONINFOA OSVERSIONINFO
;
5048 typedef POSVERSIONINFOA POSVERSIONINFO
;
5049 typedef LPOSVERSIONINFOA LPOSVERSIONINFO
;
5052 typedef struct _OSVERSIONINFOEXA
{
5053 DWORD dwOSVersionInfoSize
;
5054 DWORD dwMajorVersion
;
5055 DWORD dwMinorVersion
;
5056 DWORD dwBuildNumber
;
5058 CHAR szCSDVersion
[128];
5059 WORD wServicePackMajor
;
5060 WORD wServicePackMinor
;
5064 } OSVERSIONINFOEXA
,*POSVERSIONINFOEXA
,*LPOSVERSIONINFOEXA
;
5066 typedef struct _OSVERSIONINFOEXW
{
5067 DWORD dwOSVersionInfoSize
;
5068 DWORD dwMajorVersion
;
5069 DWORD dwMinorVersion
;
5070 DWORD dwBuildNumber
;
5072 WCHAR szCSDVersion
[128];
5073 WORD wServicePackMajor
;
5074 WORD wServicePackMinor
;
5078 } OSVERSIONINFOEXW
,*POSVERSIONINFOEXW
,*LPOSVERSIONINFOEXW
,RTL_OSVERSIONINFOEXW
,*PRTL_OSVERSIONINFOEXW
;
5080 typedef OSVERSIONINFOEXW OSVERSIONINFOEX
;
5081 typedef POSVERSIONINFOEXW POSVERSIONINFOEX
;
5082 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX
;
5084 typedef OSVERSIONINFOEXA OSVERSIONINFOEX
;
5085 typedef POSVERSIONINFOEXA POSVERSIONINFOEX
;
5086 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX
;
5090 #define VER_GREATER 2
5091 #define VER_GREATER_EQUAL 3
5093 #define VER_LESS_EQUAL 5
5097 #define VER_CONDITION_MASK 7
5098 #define VER_NUM_BITS_PER_CONDITION_MASK 3
5100 #define VER_MINORVERSION 0x0000001
5101 #define VER_MAJORVERSION 0x0000002
5102 #define VER_BUILDNUMBER 0x0000004
5103 #define VER_PLATFORMID 0x0000008
5104 #define VER_SERVICEPACKMINOR 0x0000010
5105 #define VER_SERVICEPACKMAJOR 0x0000020
5106 #define VER_SUITENAME 0x0000040
5107 #define VER_PRODUCT_TYPE 0x0000080
5109 #define VER_NT_WORKSTATION 0x0000001
5110 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
5111 #define VER_NT_SERVER 0x0000003
5113 #define VER_PLATFORM_WIN32s 0
5114 #define VER_PLATFORM_WIN32_WINDOWS 1
5115 #define VER_PLATFORM_WIN32_NT 2
5117 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
5119 NTSYSAPI ULONGLONG NTAPI
VerSetConditionMask(ULONGLONG ConditionMask
,DWORD TypeMask
,BYTE Condition
);
5121 typedef struct _RTL_CRITICAL_SECTION_DEBUG
{
5123 WORD CreatorBackTraceIndex
;
5124 struct _RTL_CRITICAL_SECTION
*CriticalSection
;
5125 LIST_ENTRY ProcessLocksList
;
5127 DWORD ContentionCount
;
5129 } RTL_CRITICAL_SECTION_DEBUG
,*PRTL_CRITICAL_SECTION_DEBUG
,RTL_RESOURCE_DEBUG
,*PRTL_RESOURCE_DEBUG
;
5131 #define RTL_CRITSECT_TYPE 0
5132 #define RTL_RESOURCE_TYPE 1
5134 typedef struct _RTL_CRITICAL_SECTION
{
5135 PRTL_CRITICAL_SECTION_DEBUG DebugInfo
;
5137 LONG RecursionCount
;
5138 HANDLE OwningThread
;
5139 HANDLE LockSemaphore
;
5140 ULONG_PTR SpinCount
;
5141 } RTL_CRITICAL_SECTION
,*PRTL_CRITICAL_SECTION
;
5143 typedef VOID (NTAPI
*RTL_VERIFIER_DLL_LOAD_CALLBACK
) (PWSTR DllName
,PVOID DllBase
,SIZE_T DllSize
,PVOID Reserved
);
5144 typedef VOID (NTAPI
*RTL_VERIFIER_DLL_UNLOAD_CALLBACK
) (PWSTR DllName
,PVOID DllBase
,SIZE_T DllSize
,PVOID Reserved
);
5145 typedef VOID (NTAPI
*RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK
)(PVOID AllocationBase
,SIZE_T AllocationSize
);
5147 typedef struct _RTL_VERIFIER_THUNK_DESCRIPTOR
{
5149 PVOID ThunkOldAddress
;
5150 PVOID ThunkNewAddress
;
5151 } RTL_VERIFIER_THUNK_DESCRIPTOR
,*PRTL_VERIFIER_THUNK_DESCRIPTOR
;
5153 typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR
{
5157 PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks
;
5158 } RTL_VERIFIER_DLL_DESCRIPTOR
,*PRTL_VERIFIER_DLL_DESCRIPTOR
;
5160 typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR
{
5162 PRTL_VERIFIER_DLL_DESCRIPTOR ProviderDlls
;
5163 RTL_VERIFIER_DLL_LOAD_CALLBACK ProviderDllLoadCallback
;
5164 RTL_VERIFIER_DLL_UNLOAD_CALLBACK ProviderDllUnloadCallback
;
5165 PWSTR VerifierImage
;
5166 DWORD VerifierFlags
;
5167 DWORD VerifierDebug
;
5168 PVOID RtlpGetStackTraceAddress
;
5169 PVOID RtlpDebugPageHeapCreate
;
5170 PVOID RtlpDebugPageHeapDestroy
;
5171 RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderNtdllHeapFreeCallback
;
5172 } RTL_VERIFIER_PROVIDER_DESCRIPTOR
,*PRTL_VERIFIER_PROVIDER_DESCRIPTOR
;
5174 #define RTL_VRF_FLG_FULL_PAGE_HEAP 0x00000001
5175 #define RTL_VRF_FLG_RESERVED_DONOTUSE 0x00000002
5176 #define RTL_VRF_FLG_HANDLE_CHECKS 0x00000004
5177 #define RTL_VRF_FLG_STACK_CHECKS 0x00000008
5178 #define RTL_VRF_FLG_APPCOMPAT_CHECKS 0x00000010
5179 #define RTL_VRF_FLG_TLS_CHECKS 0x00000020
5180 #define RTL_VRF_FLG_DIRTY_STACKS 0x00000040
5181 #define RTL_VRF_FLG_RPC_CHECKS 0x00000080
5182 #define RTL_VRF_FLG_COM_CHECKS 0x00000100
5183 #define RTL_VRF_FLG_DANGEROUS_APIS 0x00000200
5184 #define RTL_VRF_FLG_RACE_CHECKS 0x00000400
5185 #define RTL_VRF_FLG_DEADLOCK_CHECKS 0x00000800
5186 #define RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS 0x00001000
5187 #define RTL_VRF_FLG_VIRTUAL_MEM_CHECKS 0x00002000
5188 #define RTL_VRF_FLG_ENABLE_LOGGING 0x00004000
5189 #define RTL_VRF_FLG_FAST_FILL_HEAP 0x00008000
5190 #define RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING 0x00010000
5191 #define RTL_VRF_FLG_ENABLED_SYSTEM_WIDE 0x00020000
5192 #define RTL_VRF_FLG_MISCELLANEOUS_CHECKS 0x00020000
5193 #define RTL_VRF_FLG_LOCK_CHECKS 0x00040000
5195 #define APPLICATION_VERIFIER_INTERNAL_ERROR 0x80000000
5196 #define APPLICATION_VERIFIER_INTERNAL_WARNING 0x40000000
5197 #define APPLICATION_VERIFIER_NO_BREAK 0x20000000
5198 #define APPLICATION_VERIFIER_CONTINUABLE_BREAK 0x10000000
5200 #define APPLICATION_VERIFIER_UNKNOWN_ERROR 0x0001
5201 #define APPLICATION_VERIFIER_ACCESS_VIOLATION 0x0002
5202 #define APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS 0x0003
5203 #define APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST 0x0004
5204 #define APPLICATION_VERIFIER_BAD_HEAP_HANDLE 0x0005
5205 #define APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE 0x0006
5206 #define APPLICATION_VERIFIER_DOUBLE_FREE 0x0007
5207 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK 0x0008
5208 #define APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP 0x0009
5209 #define APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION 0x000A
5210 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER 0x000B
5211 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING 0x000C
5212 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_HEADER 0x000D
5213 #define APPLICATION_VERIFIER_CORRUPTED_FREED_HEAP_BLOCK 0x000E
5214 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_SUFFIX 0x000F
5215 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_START_STAMP 0x0010
5216 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_END_STAMP 0x0011
5217 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_PREFIX 0x0012
5218 #define APPLICATION_VERIFIER_FIRST_CHANCE_ACCESS_VIOLATION 0x0013
5219 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_LIST 0x0014
5221 #define APPLICATION_VERIFIER_TERMINATE_THREAD_CALL 0x0100
5222 #define APPLICATION_VERIFIER_STACK_OVERFLOW 0x0101
5223 #define APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL 0x0102
5225 #define APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK 0x0200
5226 #define APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL 0x0201
5227 #define APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP 0x0202
5228 #define APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE 0x0203
5229 #define APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY 0x0204
5230 #define APPLICATION_VERIFIER_LOCK_CORRUPTED 0x0205
5231 #define APPLICATION_VERIFIER_LOCK_INVALID_OWNER 0x0206
5232 #define APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT 0x0207
5233 #define APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT 0x0208
5234 #define APPLICATION_VERIFIER_LOCK_OVER_RELEASED 0x0209
5235 #define APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED 0x0210
5236 #define APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED 0x0211
5237 #define APPLICATION_VERIFIER_LOCK_IN_FREED_VMEM 0x0212
5238 #define APPLICATION_VERIFIER_LOCK_IN_UNMAPPED_MEM 0x0213
5239 #define APPLICATION_VERIFIER_THREAD_NOT_LOCK_OWNER 0x0214
5241 #define APPLICATION_VERIFIER_INVALID_HANDLE 0x0300
5242 #define APPLICATION_VERIFIER_INVALID_TLS_VALUE 0x0301
5243 #define APPLICATION_VERIFIER_INCORRECT_WAIT_CALL 0x0302
5244 #define APPLICATION_VERIFIER_NULL_HANDLE 0x0303
5245 #define APPLICATION_VERIFIER_WAIT_IN_DLLMAIN 0x0304
5247 #define APPLICATION_VERIFIER_COM_ERROR 0x0400
5248 #define APPLICATION_VERIFIER_COM_API_IN_DLLMAIN 0x0401
5249 #define APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION 0x0402
5250 #define APPLICATION_VERIFIER_COM_UNBALANCED_COINIT 0x0403
5251 #define APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT 0x0404
5252 #define APPLICATION_VERIFIER_COM_UNBALANCED_SWC 0x0405
5253 #define APPLICATION_VERIFIER_COM_NULL_DACL 0x0406
5254 #define APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION 0x0407
5255 #define APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER 0x0408
5256 #define APPLICATION_VERIFIER_COM_SMUGGLED_PROXY 0x0409
5257 #define APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL 0x040A
5258 #define APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL 0x040B
5259 #define APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY 0x040C
5260 #define APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL 0x040D
5261 #define APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY 0x040E
5262 #define APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL 0x040F
5263 #define APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL 0x0410
5265 #define APPLICATION_VERIFIER_RPC_ERROR 0x0500
5267 #define APPLICATION_VERIFIER_INVALID_FREEMEM 0x0600
5268 #define APPLICATION_VERIFIER_INVALID_ALLOCMEM 0x0601
5269 #define APPLICATION_VERIFIER_INVALID_MAPVIEW 0x0602
5270 #define APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS 0x0603
5271 #define APPLICATION_VERIFIER_PROBE_FREE_MEM 0x0604
5272 #define APPLICATION_VERIFIER_PROBE_GUARD_PAGE 0x0605
5273 #define APPLICATION_VERIFIER_PROBE_NULL 0x0606
5274 #define APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE 0x0607
5275 #define APPLICATION_VERIFIER_SIZE_HEAP_UNEXPECTED_EXCEPTION 0x0618
5277 #define VERIFIER_STOP(Code,Msg,P1,S1,P2,S2,P3,S3,P4,S4) { RtlApplicationVerifierStop ((Code),(Msg),(ULONG_PTR)(P1),(S1),(ULONG_PTR)(P2),(S2),(ULONG_PTR)(P3),(S3),(ULONG_PTR)(P4),(S4)); }
5279 VOID NTAPI
RtlApplicationVerifierStop(ULONG_PTR Code
,PSTR Message
,ULONG_PTR Param1
,PSTR Description1
,ULONG_PTR Param2
,PSTR Description2
,ULONG_PTR Param3
,PSTR Description3
,ULONG_PTR Param4
,PSTR Description4
);
5281 typedef LONG (NTAPI
*PVECTORED_EXCEPTION_HANDLER
)(struct _EXCEPTION_POINTERS
*ExceptionInfo
);
5282 #define SEF_DACL_AUTO_INHERIT 0x01
5283 #define SEF_SACL_AUTO_INHERIT 0x02
5284 #define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
5285 #define SEF_AVOID_PRIVILEGE_CHECK 0x08
5286 #define SEF_AVOID_OWNER_CHECK 0x10
5287 #define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
5288 #define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
5290 typedef enum _HEAP_INFORMATION_CLASS
{
5291 HeapCompatibilityInformation
5292 } HEAP_INFORMATION_CLASS
;
5294 NTSYSAPI DWORD NTAPI
RtlSetHeapInformation(PVOID HeapHandle
,HEAP_INFORMATION_CLASS HeapInformationClass
,PVOID HeapInformation
,SIZE_T HeapInformationLength
);
5295 NTSYSAPI DWORD NTAPI
RtlQueryHeapInformation(PVOID HeapHandle
,HEAP_INFORMATION_CLASS HeapInformationClass
,PVOID HeapInformation
,SIZE_T HeapInformationLength
,PSIZE_T ReturnLength
);
5296 DWORD NTAPI
RtlMultipleAllocateHeap(PVOID HeapHandle
,DWORD Flags
,SIZE_T Size
,DWORD Count
,PVOID
*Array
);
5297 DWORD NTAPI
RtlMultipleFreeHeap(PVOID HeapHandle
,DWORD Flags
,DWORD Count
,PVOID
*Array
);
5299 #define WT_EXECUTEDEFAULT 0x00000000
5300 #define WT_EXECUTEINIOTHREAD 0x00000001
5301 #define WT_EXECUTEINUITHREAD 0x00000002
5302 #define WT_EXECUTEINWAITTHREAD 0x00000004
5303 #define WT_EXECUTEONLYONCE 0x00000008
5304 #define WT_EXECUTEINTIMERTHREAD 0x00000020
5305 #define WT_EXECUTELONGFUNCTION 0x00000010
5306 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
5307 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
5308 #define WT_TRANSFER_IMPERSONATION 0x00000100
5309 #define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags) |= (Limit)<<16)
5310 typedef VOID (NTAPI
*WAITORTIMERCALLBACKFUNC
)(PVOID
,BOOLEAN
);
5311 typedef VOID (NTAPI
*WORKERCALLBACKFUNC
)(PVOID
);
5312 typedef VOID (NTAPI
*APC_CALLBACK_FUNCTION
)(DWORD
,PVOID
,PVOID
);
5315 (NTAPI
*PFLS_CALLBACK_FUNCTION
)(PVOID lpFlsData
);
5316 #define WT_EXECUTEINLONGTHREAD 0x00000010
5317 #define WT_EXECUTEDELETEWAIT 0x00000008
5319 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS
{
5320 ActivationContextBasicInformation
= 1,ActivationContextDetailedInformation
= 2,AssemblyDetailedInformationInActivationContext
= 3,FileInformationInAssemblyOfAssemblyInActivationContext
= 4,MaxActivationContextInfoClass
,AssemblyDetailedInformationInActivationContxt
= 3,FileInformationInAssemblyOfAssemblyInActivationContxt
= 4
5321 } ACTIVATION_CONTEXT_INFO_CLASS
;
5323 #define ACTIVATIONCONTEXTINFOCLASS ACTIVATION_CONTEXT_INFO_CLASS
5325 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX
{
5326 DWORD ulAssemblyIndex
;
5327 DWORD ulFileIndexInAssembly
;
5328 } ACTIVATION_CONTEXT_QUERY_INDEX
,*PACTIVATION_CONTEXT_QUERY_INDEX
;
5330 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX
*PCACTIVATION_CONTEXT_QUERY_INDEX
;
5332 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE (1)
5333 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE (2)
5334 #define ACTIVATION_CONTEXT_PATH_TYPE_URL (3)
5335 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF (4)
5337 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION
{
5339 DWORD ulFilenameLength
;
5344 } ASSEMBLY_FILE_DETAILED_INFORMATION
,*PASSEMBLY_FILE_DETAILED_INFORMATION
;
5345 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION
*PCASSEMBLY_FILE_DETAILED_INFORMATION
;
5347 #define _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION _ASSEMBLY_FILE_DETAILED_INFORMATION
5348 #define ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION ASSEMBLY_FILE_DETAILED_INFORMATION
5349 #define PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PASSEMBLY_FILE_DETAILED_INFORMATION
5350 #define PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PCASSEMBLY_FILE_DETAILED_INFORMATION
5352 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
5354 DWORD ulEncodedAssemblyIdentityLength
;
5355 DWORD ulManifestPathType
;
5356 DWORD ulManifestPathLength
;
5357 LARGE_INTEGER liManifestLastWriteTime
;
5358 DWORD ulPolicyPathType
;
5359 DWORD ulPolicyPathLength
;
5360 LARGE_INTEGER liPolicyLastWriteTime
;
5361 DWORD ulMetadataSatelliteRosterIndex
;
5362 DWORD ulManifestVersionMajor
;
5363 DWORD ulManifestVersionMinor
;
5364 DWORD ulPolicyVersionMajor
;
5365 DWORD ulPolicyVersionMinor
;
5366 DWORD ulAssemblyDirectoryNameLength
;
5367 PCWSTR lpAssemblyEncodedAssemblyIdentity
;
5368 PCWSTR lpAssemblyManifestPath
;
5369 PCWSTR lpAssemblyPolicyPath
;
5370 PCWSTR lpAssemblyDirectoryName
;
5372 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
5374 typedef const struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
*PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
5376 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
5378 DWORD ulFormatVersion
;
5379 DWORD ulAssemblyCount
;
5380 DWORD ulRootManifestPathType
;
5381 DWORD ulRootManifestPathChars
;
5382 DWORD ulRootConfigurationPathType
;
5383 DWORD ulRootConfigurationPathChars
;
5384 DWORD ulAppDirPathType
;
5385 DWORD ulAppDirPathChars
;
5386 PCWSTR lpRootManifestPath
;
5387 PCWSTR lpRootConfigurationPath
;
5388 PCWSTR lpAppDirPath
;
5389 } ACTIVATION_CONTEXT_DETAILED_INFORMATION
,*PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
5391 typedef const struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION
*PCACTIVATION_CONTEXT_DETAILED_INFORMATION
;
5393 #define DLL_PROCESS_ATTACH 1
5394 #define DLL_THREAD_ATTACH 2
5395 #define DLL_THREAD_DETACH 3
5396 #define DLL_PROCESS_DETACH 0
5397 #define DLL_PROCESS_VERIFIER 4
5399 #define EVENTLOG_SEQUENTIAL_READ 0x0001
5400 #define EVENTLOG_SEEK_READ 0x0002
5401 #define EVENTLOG_FORWARDS_READ 0x0004
5402 #define EVENTLOG_BACKWARDS_READ 0x0008
5404 #define EVENTLOG_SUCCESS 0x0000
5405 #define EVENTLOG_ERROR_TYPE 0x0001
5406 #define EVENTLOG_WARNING_TYPE 0x0002
5407 #define EVENTLOG_INFORMATION_TYPE 0x0004
5408 #define EVENTLOG_AUDIT_SUCCESS 0x0008
5409 #define EVENTLOG_AUDIT_FAILURE 0x0010
5411 #define EVENTLOG_START_PAIRED_EVENT 0x0001
5412 #define EVENTLOG_END_PAIRED_EVENT 0x0002
5413 #define EVENTLOG_END_ALL_PAIRED_EVENTS 0x0004
5414 #define EVENTLOG_PAIRED_EVENT_ACTIVE 0x0008
5415 #define EVENTLOG_PAIRED_EVENT_INACTIVE 0x0010
5417 typedef struct _EVENTLOGRECORD
{
5421 DWORD TimeGenerated
;
5428 DWORD ClosingRecordNumber
;
5430 DWORD UserSidLength
;
5431 DWORD UserSidOffset
;
5434 } EVENTLOGRECORD
,*PEVENTLOGRECORD
;
5436 #define MAXLOGICALLOGNAMESIZE 256
5438 typedef struct _EVENTSFORLOGFILE
{
5440 WCHAR szLogicalLogFile
[MAXLOGICALLOGNAMESIZE
];
5442 EVENTLOGRECORD pEventLogRecords
[];
5443 } EVENTSFORLOGFILE
,*PEVENTSFORLOGFILE
;
5445 typedef struct _PACKEDEVENTINFO
{
5447 DWORD ulNumEventsForLogFile
;
5449 } PACKEDEVENTINFO
,*PPACKEDEVENTINFO
;
5451 #define KEY_QUERY_VALUE (0x0001)
5452 #define KEY_SET_VALUE (0x0002)
5453 #define KEY_CREATE_SUB_KEY (0x0004)
5454 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
5455 #define KEY_NOTIFY (0x0010)
5456 #define KEY_CREATE_LINK (0x0020)
5457 #define KEY_WOW64_32KEY (0x0200)
5458 #define KEY_WOW64_64KEY (0x0100)
5459 #define KEY_WOW64_RES (0x0300)
5461 #define KEY_READ ((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE))
5462 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE))
5463 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
5464 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL | KEY_QUERY_VALUE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY | KEY_CREATE_LINK) & (~SYNCHRONIZE))
5465 #define REG_OPTION_RESERVED (0x00000000L)
5467 #define REG_OPTION_NON_VOLATILE (0x00000000L)
5468 #define REG_OPTION_VOLATILE (0x00000001L)
5469 #define REG_OPTION_CREATE_LINK (0x00000002L)
5470 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
5471 #define REG_OPTION_OPEN_LINK (0x00000008L)
5472 #define REG_LEGAL_OPTION (REG_OPTION_RESERVED | REG_OPTION_NON_VOLATILE | REG_OPTION_VOLATILE | REG_OPTION_CREATE_LINK | REG_OPTION_BACKUP_RESTORE | REG_OPTION_OPEN_LINK)
5473 #define REG_CREATED_NEW_KEY (0x00000001L)
5474 #define REG_OPENED_EXISTING_KEY (0x00000002L)
5475 #define REG_STANDARD_FORMAT 1
5476 #define REG_LATEST_FORMAT 2
5477 #define REG_NO_COMPRESSION 4
5478 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
5479 #define REG_REFRESH_HIVE (0x00000002L)
5480 #define REG_NO_LAZY_FLUSH (0x00000004L)
5481 #define REG_FORCE_RESTORE (0x00000008L)
5482 #define REG_FORCE_UNLOAD 1
5484 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
5485 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
5486 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
5487 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
5489 #define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY)
5491 #define REG_NONE (0)
5493 #define REG_EXPAND_SZ (2)
5495 #define REG_BINARY (3)
5496 #define REG_DWORD (4)
5497 #define REG_DWORD_LITTLE_ENDIAN (4)
5498 #define REG_DWORD_BIG_ENDIAN (5)
5499 #define REG_LINK (6)
5500 #define REG_MULTI_SZ (7)
5501 #define REG_RESOURCE_LIST (8)
5502 #define REG_FULL_RESOURCE_DESCRIPTOR (9)
5503 #define REG_RESOURCE_REQUIREMENTS_LIST (10)
5504 #define REG_QWORD (11)
5505 #define REG_QWORD_LITTLE_ENDIAN (11)
5507 #define SERVICE_KERNEL_DRIVER 0x00000001
5508 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
5509 #define SERVICE_ADAPTER 0x00000004
5510 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
5512 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER)
5514 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
5515 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
5516 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
5518 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
5520 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
5522 #define SERVICE_BOOT_START 0x00000000
5523 #define SERVICE_SYSTEM_START 0x00000001
5524 #define SERVICE_AUTO_START 0x00000002
5525 #define SERVICE_DEMAND_START 0x00000003
5526 #define SERVICE_DISABLED 0x00000004
5528 #define SERVICE_ERROR_IGNORE 0x00000000
5529 #define SERVICE_ERROR_NORMAL 0x00000001
5530 #define SERVICE_ERROR_SEVERE 0x00000002
5531 #define SERVICE_ERROR_CRITICAL 0x00000003
5533 typedef enum _CM_SERVICE_NODE_TYPE
{
5534 DriverType
= SERVICE_KERNEL_DRIVER
,FileSystemType
= SERVICE_FILE_SYSTEM_DRIVER
,Win32ServiceOwnProcess
= SERVICE_WIN32_OWN_PROCESS
,
5535 Win32ServiceShareProcess
= SERVICE_WIN32_SHARE_PROCESS
,AdapterType
= SERVICE_ADAPTER
,RecognizerType
= SERVICE_RECOGNIZER_DRIVER
5536 } SERVICE_NODE_TYPE
;
5538 typedef enum _CM_SERVICE_LOAD_TYPE
{
5539 BootLoad
= SERVICE_BOOT_START
,SystemLoad
= SERVICE_SYSTEM_START
,AutoLoad
= SERVICE_AUTO_START
,DemandLoad
= SERVICE_DEMAND_START
,
5540 DisableLoad
= SERVICE_DISABLED
5541 } SERVICE_LOAD_TYPE
;
5543 typedef enum _CM_ERROR_CONTROL_TYPE
{
5544 IgnoreError
= SERVICE_ERROR_IGNORE
,NormalError
= SERVICE_ERROR_NORMAL
,SevereError
= SERVICE_ERROR_SEVERE
,CriticalError
= SERVICE_ERROR_CRITICAL
5545 } SERVICE_ERROR_TYPE
;
5547 #define TAPE_ERASE_SHORT 0L
5548 #define TAPE_ERASE_LONG 1L
5550 typedef struct _TAPE_ERASE
{
5553 } TAPE_ERASE
,*PTAPE_ERASE
;
5555 #define TAPE_LOAD 0L
5556 #define TAPE_UNLOAD 1L
5557 #define TAPE_TENSION 2L
5558 #define TAPE_LOCK 3L
5559 #define TAPE_UNLOCK 4L
5560 #define TAPE_FORMAT 5L
5562 typedef struct _TAPE_PREPARE
{
5565 } TAPE_PREPARE
,*PTAPE_PREPARE
;
5567 #define TAPE_SETMARKS 0L
5568 #define TAPE_FILEMARKS 1L
5569 #define TAPE_SHORT_FILEMARKS 2L
5570 #define TAPE_LONG_FILEMARKS 3L
5572 typedef struct _TAPE_WRITE_MARKS
{
5576 } TAPE_WRITE_MARKS
,*PTAPE_WRITE_MARKS
;
5578 #define TAPE_ABSOLUTE_POSITION 0L
5579 #define TAPE_LOGICAL_POSITION 1L
5580 #define TAPE_PSEUDO_LOGICAL_POSITION 2L
5582 typedef struct _TAPE_GET_POSITION
{
5585 LARGE_INTEGER Offset
;
5586 } TAPE_GET_POSITION
,*PTAPE_GET_POSITION
;
5588 #define TAPE_REWIND 0L
5589 #define TAPE_ABSOLUTE_BLOCK 1L
5590 #define TAPE_LOGICAL_BLOCK 2L
5591 #define TAPE_PSEUDO_LOGICAL_BLOCK 3L
5592 #define TAPE_SPACE_END_OF_DATA 4L
5593 #define TAPE_SPACE_RELATIVE_BLOCKS 5L
5594 #define TAPE_SPACE_FILEMARKS 6L
5595 #define TAPE_SPACE_SEQUENTIAL_FMKS 7L
5596 #define TAPE_SPACE_SETMARKS 8L
5597 #define TAPE_SPACE_SEQUENTIAL_SMKS 9L
5599 typedef struct _TAPE_SET_POSITION
{
5602 LARGE_INTEGER Offset
;
5604 } TAPE_SET_POSITION
,*PTAPE_SET_POSITION
;
5606 #define TAPE_DRIVE_FIXED 0x00000001
5607 #define TAPE_DRIVE_SELECT 0x00000002
5608 #define TAPE_DRIVE_INITIATOR 0x00000004
5610 #define TAPE_DRIVE_ERASE_SHORT 0x00000010
5611 #define TAPE_DRIVE_ERASE_LONG 0x00000020
5612 #define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040
5613 #define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080
5615 #define TAPE_DRIVE_TAPE_CAPACITY 0x00000100
5616 #define TAPE_DRIVE_TAPE_REMAINING 0x00000200
5617 #define TAPE_DRIVE_FIXED_BLOCK 0x00000400
5618 #define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800
5620 #define TAPE_DRIVE_WRITE_PROTECT 0x00001000
5621 #define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000
5623 #define TAPE_DRIVE_ECC 0x00010000
5624 #define TAPE_DRIVE_COMPRESSION 0x00020000
5625 #define TAPE_DRIVE_PADDING 0x00040000
5626 #define TAPE_DRIVE_REPORT_SMKS 0x00080000
5628 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000
5629 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000
5630 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000
5632 #define TAPE_DRIVE_EJECT_MEDIA 0x01000000
5633 #define TAPE_DRIVE_CLEAN_REQUESTS 0x02000000
5634 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x04000000
5636 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
5638 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
5639 #define TAPE_DRIVE_TENSION 0x80000002
5640 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
5641 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
5643 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
5644 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
5645 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
5646 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
5648 #define TAPE_DRIVE_SET_ECC 0x80000100
5649 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
5650 #define TAPE_DRIVE_SET_PADDING 0x80000400
5651 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
5653 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
5654 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
5655 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
5656 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
5658 #define TAPE_DRIVE_END_OF_DATA 0x80010000
5659 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
5660 #define TAPE_DRIVE_FILEMARKS 0x80040000
5661 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
5663 #define TAPE_DRIVE_SETMARKS 0x80100000
5664 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
5665 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
5666 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
5668 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
5669 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
5670 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
5671 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
5673 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
5674 #define TAPE_DRIVE_FORMAT 0xA0000000
5675 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
5676 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
5678 typedef struct _TAPE_GET_DRIVE_PARAMETERS
{
5680 BOOLEAN Compression
;
5681 BOOLEAN DataPadding
;
5682 BOOLEAN ReportSetmarks
;
5683 DWORD DefaultBlockSize
;
5684 DWORD MaximumBlockSize
;
5685 DWORD MinimumBlockSize
;
5686 DWORD MaximumPartitionCount
;
5689 DWORD EOTWarningZoneSize
;
5690 } TAPE_GET_DRIVE_PARAMETERS
,*PTAPE_GET_DRIVE_PARAMETERS
;
5692 typedef struct _TAPE_SET_DRIVE_PARAMETERS
{
5694 BOOLEAN Compression
;
5695 BOOLEAN DataPadding
;
5696 BOOLEAN ReportSetmarks
;
5697 DWORD EOTWarningZoneSize
;
5698 } TAPE_SET_DRIVE_PARAMETERS
,*PTAPE_SET_DRIVE_PARAMETERS
;
5700 typedef struct _TAPE_GET_MEDIA_PARAMETERS
{
5701 LARGE_INTEGER Capacity
;
5702 LARGE_INTEGER Remaining
;
5704 DWORD PartitionCount
;
5705 BOOLEAN WriteProtected
;
5706 } TAPE_GET_MEDIA_PARAMETERS
,*PTAPE_GET_MEDIA_PARAMETERS
;
5708 typedef struct _TAPE_SET_MEDIA_PARAMETERS
{
5710 } TAPE_SET_MEDIA_PARAMETERS
,*PTAPE_SET_MEDIA_PARAMETERS
;
5712 #define TAPE_FIXED_PARTITIONS 0L
5713 #define TAPE_SELECT_PARTITIONS 1L
5714 #define TAPE_INITIATOR_PARTITIONS 2L
5716 typedef struct _TAPE_CREATE_PARTITION
{
5720 } TAPE_CREATE_PARTITION
,*PTAPE_CREATE_PARTITION
;
5722 #define TAPE_QUERY_DRIVE_PARAMETERS 0L
5723 #define TAPE_QUERY_MEDIA_CAPACITY 1L
5724 #define TAPE_CHECK_FOR_DRIVE_PROBLEM 2L
5725 #define TAPE_QUERY_IO_ERROR_DATA 3L
5726 #define TAPE_QUERY_DEVICE_ERROR_DATA 4L
5728 typedef struct _TAPE_WMI_OPERATIONS
{
5730 DWORD DataBufferSize
;
5732 } TAPE_WMI_OPERATIONS
,*PTAPE_WMI_OPERATIONS
;
5734 typedef enum _TAPE_DRIVE_PROBLEM_TYPE
{
5735 TapeDriveProblemNone
,TapeDriveReadWriteWarning
,TapeDriveReadWriteError
,TapeDriveReadWarning
,TapeDriveWriteWarning
,TapeDriveReadError
,TapeDriveWriteError
,TapeDriveHardwareError
,TapeDriveUnsupportedMedia
,TapeDriveScsiConnectionError
,TapeDriveTimetoClean
,TapeDriveCleanDriveNow
,TapeDriveMediaLifeExpired
,TapeDriveSnappedTape
5736 } TAPE_DRIVE_PROBLEM_TYPE
;
5738 #if defined(__x86_64)
5739 __CRT_INLINE
struct _TEB
*NtCurrentTeb(VOID
) { return (struct _TEB
*)__readgsqword(FIELD_OFFSET(NT_TIB
,Self
)); }
5740 __CRT_INLINE PVOID
GetCurrentFiber(VOID
) { return(PVOID
)__readgsqword(FIELD_OFFSET(NT_TIB
,FiberData
)); }
5741 __CRT_INLINE PVOID
GetFiberData(VOID
) {
5742 return *(PVOID
*)GetCurrentFiber();
5746 #if(defined(_X86_) && !defined(__x86_64))
5748 __CRT_INLINE
struct _TEB
*NtCurrentTeb(void) {
5750 __asm__
volatile ("movl %%fs:0x18,%0"
5756 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION (1)
5757 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION (2)
5758 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION (3)
5759 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION (4)
5760 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION (5)
5761 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION (6)
5762 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION (7)
5763 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE (8)
5764 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES (9)
5765 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS (10)