win64: use new headers from mingw
[tinycc.git] / win32 / include / winapi / winnt.h
blob295df277d4e9dc76796a774452e4ae72b9762056
1 /**
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.
5 */
6 #ifndef _WINNT_
7 #define _WINNT_
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
13 #include <ctype.h>
14 #define ANYSIZE_ARRAY 1
16 #include <specstrings.h>
18 #define RESTRICTED_POINTER
20 #ifndef __CRT_UNALIGNED
21 #define __CRT_UNALIGNED
22 #endif
24 #if defined(__ia64__) || defined(__x86_64)
25 #define UNALIGNED __CRT_UNALIGNED
26 #ifdef _WIN64
27 #define UNALIGNED64 __CRT_UNALIGNED
28 #else
29 #define UNALIGNED64
30 #endif
31 #else
32 #define UNALIGNED
33 #define UNALIGNED64
34 #endif
36 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && (defined(_X86_) && !defined(__x86_64))
37 #define I_X86_
38 #endif
40 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(__x86_64)
41 #define _AMD64_
42 #endif
44 #if !defined(I_X86_) && !(defined(_X86_) && !defined(__x86_64)) && !defined(_AMD64_) && defined(__ia64__)
45 #if !defined(_IA64_)
46 #define _IA64_
47 #endif
48 #endif
51 #ifdef _WIN64
52 #define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
53 #define MEMORY_ALLOCATION_ALIGNMENT 16
54 #else
55 #define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
56 #define MEMORY_ALLOCATION_ALIGNMENT 8
57 #endif
59 #ifdef __cplusplus
60 #define TYPE_ALIGNMENT(t) __alignof__ (t)
61 #else
62 #define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; },test)
63 #endif
65 #ifdef _WIN64
66 #ifdef _AMD64_
67 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
68 #elif defined(_IA64_)
69 #define PROBE_ALIGNMENT(_s) (TYPE_ALIGNMENT(_s) > TYPE_ALIGNMENT(DWORD) ? TYPE_ALIGNMENT(_s) : TYPE_ALIGNMENT(DWORD))
70 #else
71 #error No Target Architecture
72 #endif
73 #define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT(DWORD)
74 #else
75 #define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT(DWORD)
76 #endif
78 #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
80 #include <basetsd.h>
82 #if defined(_X86_) || defined(__ia64__) || defined(__x86_64)
83 #define DECLSPEC_IMPORT __declspec(dllimport)
84 #else
85 #define DECLSPEC_IMPORT
86 #endif
88 #ifndef DECLSPEC_NORETURN
89 #define DECLSPEC_NORETURN __declspec(noreturn)
90 #endif
92 #ifndef DECLSPEC_ALIGN
93 #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x)))
94 #endif
96 #ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
97 #if defined(_AMD64_) || defined(I_X86_)
98 #define SYSTEM_CACHE_ALIGNMENT_SIZE 64
99 #else
100 #define SYSTEM_CACHE_ALIGNMENT_SIZE 128
101 #endif
102 #endif
104 #ifndef DECLSPEC_CACHEALIGN
105 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
106 #endif
108 #ifndef DECLSPEC_UUID
109 #define DECLSPEC_UUID(x)
110 #endif
112 #ifndef DECLSPEC_NOVTABLE
113 #define DECLSPEC_NOVTABLE
114 #endif
116 #ifndef DECLSPEC_SELECTANY
117 #define DECLSPEC_SELECTANY __declspec(selectany)
118 #endif
120 #ifndef NOP_FUNCTION
121 #define NOP_FUNCTION (void)0
122 #endif
124 #ifndef DECLSPEC_NOINLINE
125 #define DECLSPEC_NOINLINE
126 #endif
128 #ifndef FORCEINLINE
129 #define FORCEINLINE static __inline__
130 #endif
132 #ifndef DECLSPEC_DEPRECATED
133 #define DECLSPEC_DEPRECATED __declspec(deprecated)
134 #define DEPRECATE_SUPPORTED
135 #endif
137 #define DECLSPEC_DEPRECATED_DDK
138 #define PRAGMA_DEPRECATED_DDK 0
140 typedef void *PVOID;
141 typedef void *PVOID64;
143 #define NTAPI __stdcall
144 #define NTSYSAPI DECLSPEC_IMPORT
145 #define NTSYSCALLAPI DECLSPEC_IMPORT
147 #ifndef VOID
148 #define VOID void
149 typedef char CHAR;
150 typedef short SHORT;
151 typedef long LONG;
152 #endif
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;
172 #ifdef UNICODE
173 #ifndef _TCHAR_DEFINED
174 #define _TCHAR_DEFINED
175 typedef WCHAR TCHAR,*PTCHAR;
176 typedef WCHAR TBYTE ,*PTBYTE;
177 #endif
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;
184 typedef LPWSTR LP;
185 #define __TEXT(quote) L##quote
186 #else
187 #ifndef _TCHAR_DEFINED
188 #define _TCHAR_DEFINED
189 typedef char TCHAR,*PTCHAR;
190 typedef unsigned char TBYTE ,*PTBYTE;
191 #endif
193 typedef LPSTR LPTCH,PTCH;
194 typedef LPSTR PTSTR,LPTSTR,PUTSTR,LPUTSTR;
195 typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
196 #define __TEXT(quote) quote
197 #endif
199 #define TEXT(quote) __TEXT(quote)
201 typedef SHORT *PSHORT;
202 typedef LONG *PLONG;
204 typedef void *HANDLE;
205 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
206 typedef HANDLE *PHANDLE;
208 typedef BYTE FCHAR;
209 typedef WORD FSHORT;
210 typedef DWORD FLONG;
212 #ifndef _HRESULT_DEFINED
213 #define _HRESULT_DEFINED
214 typedef LONG HRESULT;
215 #endif
217 #ifdef __cplusplus
218 #define EXTERN_C extern "C"
219 #else
220 #define EXTERN_C extern
221 #endif
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
236 typedef char CCHAR;
237 #ifndef _LCID_DEFINED
238 #define _LCID_DEFINED
239 typedef DWORD LCID;
240 #endif
241 typedef PDWORD PLCID;
242 #ifndef _LANGID_DEFINED
243 #define _LANGID_DEFINED
244 typedef WORD LANGID;
245 #endif
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
252 #ifdef __ia64__
253 __declspec(align(16))
254 #endif
255 typedef struct _FLOAT128 {
256 __int64 LowPart;
257 __int64 HighPart;
258 } FLOAT128;
260 typedef FLOAT128 *PFLOAT128;
262 #define _ULONGLONG_
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)
268 #else
270 typedef double LONGLONG;
271 typedef double ULONGLONG;
272 #endif
274 typedef LONGLONG *PLONGLONG;
275 typedef ULONGLONG *PULONGLONG;
277 typedef LONGLONG USN;
279 typedef union _LARGE_INTEGER {
280 struct {
281 DWORD LowPart;
282 LONG HighPart;
284 struct {
285 DWORD LowPart;
286 LONG HighPart;
287 } u;
288 LONGLONG QuadPart;
289 } LARGE_INTEGER;
291 typedef LARGE_INTEGER *PLARGE_INTEGER;
293 typedef union _ULARGE_INTEGER {
294 struct {
295 DWORD LowPart;
296 DWORD HighPart;
298 struct {
299 DWORD LowPart;
300 DWORD HighPart;
301 } u;
302 ULONGLONG QuadPart;
303 } ULARGE_INTEGER;
305 typedef ULARGE_INTEGER *PULARGE_INTEGER;
307 typedef struct _LUID {
308 DWORD LowPart;
309 LONG HighPart;
310 } LUID,*PLUID;
312 #define _DWORDLONG_
313 typedef ULONGLONG DWORDLONG;
314 typedef DWORDLONG *PDWORDLONG;
316 #ifdef RC_INVOKED
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))
328 #else
329 #error Must define a target architecture.
330 #endif
332 #define Int64ShraMod32(a,b) ((LONGLONG)(a) >> (b))
333 #define Int64ShllMod32(a,b) ((ULONGLONG)(a) << (b))
335 #ifdef __cplusplus
336 extern "C" {
337 #endif
339 #ifdef __x86_64
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);
350 #endif
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);
361 #ifdef __cplusplus
363 #endif
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)
370 #ifndef _BOOLEAN_
371 #define _BOOLEAN_
372 typedef BYTE BOOLEAN;
373 #endif
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 {
386 DWORD Flink;
387 DWORD Blink;
388 } LIST_ENTRY32;
389 typedef LIST_ENTRY32 *PLIST_ENTRY32;
391 typedef struct LIST_ENTRY64 {
392 ULONGLONG Flink;
393 ULONGLONG Blink;
394 } LIST_ENTRY64;
395 typedef LIST_ENTRY64 *PLIST_ENTRY64;
397 #include <guiddef.h>
399 #ifndef __OBJECTID_DEFINED
400 #define __OBJECTID_DEFINED
401 typedef struct _OBJECTID {
402 GUID Lineage;
403 DWORD Uniquifier;
404 } OBJECTID;
405 #endif
407 #define MINCHAR 0x80
408 #define MAXCHAR 0x7f
409 #define MINSHORT 0x8000
410 #define MAXSHORT 0x7fff
411 #define MINLONG 0x80000000
412 #define MAXLONG 0x7fffffff
413 #define MAXBYTE 0xff
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)
426 #else
427 #define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
428 #endif
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)))
437 #ifdef __cplusplus
438 #define RTL_CONST_CAST(type) const_cast<type>
439 #else
440 #define RTL_CONST_CAST(type) (type)
441 #endif
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
621 #define LANG_YI 0x78
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)
824 #endif
826 #define MAXIMUM_WAIT_OBJECTS 64
827 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
829 typedef ULONG_PTR KSPIN_LOCK;
830 typedef KSPIN_LOCK *PKSPIN_LOCK;
832 #ifdef _AMD64_
834 #if defined(__x86_64) && !defined(RC_INVOKED)
836 #ifdef __cplusplus
837 extern "C" {
838 #endif
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) {
854 int old = 0;
855 __asm__ __volatile__("btl %2,%1\n\tsbbl %0,%0 "
856 :"=r" (old),"=m" ((*(volatile long *) Base))
857 :"Ir" (Offset));
858 return (BOOLEAN) (old!=0);
860 __CRT_INLINE BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset) {
861 int old = 0;
862 __asm__ __volatile__("btcl %2,%1\n\tsbbl %0,%0 "
863 :"=r" (old),"=m" ((*(volatile long *) Base))
864 :"Ir" (Offset));
865 return (BOOLEAN) (old!=0);
867 __CRT_INLINE BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit) {
868 int old = 0;
869 __asm__ __volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
870 :"=r" (old),"=m" ((*(volatile long *) Base))
871 :"Ir" (Bit));
872 return (BOOLEAN) (old!=0);
874 __CRT_INLINE BOOLEAN _bittestandset(LONG *Base,LONG Offset) {
875 int old = 0;
876 __asm__ __volatile__("btsl %2,%1\n\tsbbl %0,%0 "
877 :"=r" (old),"=m" ((*(volatile long *) Base))
878 :"Ir" (Offset));
879 return (BOOLEAN) (old!=0);
881 __CRT_INLINE BOOLEAN _bittestandreset(LONG *Base,LONG Offset) {
882 int old = 0;
883 __asm__ __volatile__("btrl %2,%1\n\tsbbl %0,%0 "
884 :"=r" (old),"=m" ((*(volatile long *) Base))
885 :"Ir" (Offset));
886 return (BOOLEAN) (old!=0);
888 __CRT_INLINE BOOLEAN _interlockedbittestandset(LONG *Base,LONG Offset) {
889 int old = 0;
890 __asm__ __volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
891 :"=r" (old),"=m" ((*(volatile long *) Base))
892 :"Ir" (Offset));
893 return (BOOLEAN) (old!=0);
895 __CRT_INLINE BOOLEAN _interlockedbittestandreset(LONG *Base,LONG Offset) {
896 int old = 0;
897 __asm__ __volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
898 :"=r" (old),"=m" ((*(volatile long *) Base))
899 :"Ir" (Offset));
900 return (BOOLEAN) (old!=0);
902 __CRT_INLINE BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset) {
903 int old = 0;
904 __asm__ __volatile__("btq %2,%1\n\tsbbl %0,%0 "
905 :"=r" (old),"=m" ((*(volatile long long *) Base))
906 :"Ir" (Offset));
907 return (BOOLEAN) (old!=0);
909 __CRT_INLINE BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset) {
910 int old = 0;
911 __asm__ __volatile__("btcq %2,%1\n\tsbbl %0,%0 "
912 :"=r" (old),"=m" ((*(volatile long long *) Base))
913 :"Ir" (Offset));
914 return (BOOLEAN) (old!=0);
916 __CRT_INLINE BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset) {
917 int old = 0;
918 __asm__ __volatile__("btsq %2,%1\n\tsbbl %0,%0 "
919 :"=r" (old),"=m" ((*(volatile long long *) Base))
920 :"Ir" (Offset));
921 return (BOOLEAN) (old!=0);
923 __CRT_INLINE BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset) {
924 int old = 0;
925 __asm__ __volatile__("btrq %2,%1\n\tsbbl %0,%0 "
926 :"=r" (old),"=m" ((*(volatile long long *) Base))
927 :"Ir" (Offset));
928 return (BOOLEAN) (old!=0);
930 __CRT_INLINE BOOLEAN _interlockedbittestandset64(LONG64 *Base,LONG64 Offset) {
931 int old = 0;
932 __asm__ __volatile__("lock ; btsq %2,%1\n\tsbbl %0,%0 "
933 :"=r" (old),"=m" ((*(volatile long long *) Base))
934 :"Ir" (Offset));
935 return (BOOLEAN) (old!=0);
937 __CRT_INLINE BOOLEAN _interlockedbittestandreset64(LONG64 *Base,LONG64 Offset) {
938 int old = 0;
939 __asm__ __volatile__("lock ; btrq %2,%1\n\tsbbl %0,%0 "
940 :"=r" (old),"=m" ((*(volatile long long *) Base))
941 :"Ir" (Offset));
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)));
951 return Mask!=0;
953 __CRT_INLINE BOOLEAN _BitScanReverse(DWORD *Index,DWORD Mask) {
954 __asm__ __volatile__("bsrl %1,%0" : "=r" (Mask),"=m" ((*(volatile long *)Index)));
955 return Mask!=0;
957 __CRT_INLINE BOOLEAN _BitScanForward64(DWORD *Index,DWORD64 Mask) {
958 __asm__ __volatile__("bsfq %1,%0" : "=r" (Mask),"=m" ((*(volatile long long *)Index)));
959 return Mask!=0;
961 __CRT_INLINE BOOLEAN _BitScanReverse64(DWORD *Index,DWORD64 Mask) {
962 __asm__ __volatile__("bsrq %1,%0" : "=r" (Mask),"=m" ((*(volatile long long *)Index)));
963 return Mask!=0;
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) {
1011 unsigned char c;
1012 unsigned char s;
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) {
1020 unsigned char c;
1021 unsigned char s;
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) {
1029 SHORT prev;
1030 __asm__ __volatile__("lock ; cmpxchgw %w1,%2"
1031 :"=a"(prev)
1032 :"q"(ExChange), "m"(*Destination), "0"(Comperand)
1033 : "memory");
1034 return prev;
1036 __CRT_INLINE LONG InterlockedAnd(LONG volatile *Destination,LONG Value) {
1037 __asm__ __volatile__("lock ; andl %0,%1"
1038 : :"r"(Value),"m"(*Destination)
1039 : "memory");
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;
1052 // $$$$
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) {
1069 unsigned char c;
1070 unsigned char s;
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) {
1078 unsigned char c;
1079 unsigned char s;
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"
1088 : "=r"(Value)
1089 : "m"(*Target),"0"(Value)
1090 : "memory");
1091 return Value;
1093 LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value);
1095 #ifndef _X86AMD64_
1096 __CRT_INLINE LONG InterlockedAdd(LONG volatile *Addend,LONG Value) { return InterlockedExchangeAdd(Addend,Value) + Value; }
1097 #endif
1098 __CRT_INLINE LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand) {
1099 LONG prev;
1100 __asm__ __volatile__("lock ; cmpxchgl %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
1101 return prev;
1103 __CRT_INLINE LONG64 InterlockedIncrement64(LONG64 volatile *Addend) {
1104 unsigned char c;
1105 unsigned char s;
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) {
1113 unsigned char c;
1114 unsigned char s;
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"
1123 : "=r"(Value)
1124 : "m"(*Target),"0"(Value)
1125 : "memory");
1126 return Value;
1128 LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value);
1130 #ifndef _X86AMD64_
1131 __CRT_INLINE LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value) { return InterlockedExchangeAdd64(Addend,Value) + Value; }
1132 #endif
1134 __CRT_INLINE LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand) {
1135 LONG64 prev;
1136 __asm__ __volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
1137 return prev;
1139 __CRT_INLINE PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand) {
1140 PVOID prev;
1141 __asm__ __volatile__("lock ; cmpxchgq %1,%2" : "=a" (prev) : "q" (ExChange),"m" (*Destination), "0" (Comperand) : "memory");
1142 return prev;
1144 __CRT_INLINE PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value) {
1145 __asm__ __volatile("lock ; xchgq %0,%1"
1146 : "=r"(Value)
1147 : "m"(*Target),"0"(Value)
1148 : "memory");
1149 return 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
1180 VOID __int2c(VOID);
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;
1225 LONG64 highProduct;
1226 LONG64 lowProduct;
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;
1235 DWORD64 lowProduct;
1236 lowProduct = UnsignedMultiply128(Multiplier,Multiplicand,&highProduct);
1237 extractedProduct = ShiftRight128(lowProduct,highProduct,Shift);
1238 return extractedProduct;
1241 __CRT_INLINE BYTE __readgsbyte(DWORD Offset) {
1242 BYTE ret;
1243 __asm__ volatile ("movb %%gs:%1,%0"
1244 : "=r" (ret) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1245 return ret;
1247 __CRT_INLINE WORD __readgsword(DWORD Offset) {
1248 WORD ret;
1249 __asm__ volatile ("movw %%gs:%1,%0"
1250 : "=r" (ret) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1251 return ret;
1253 __CRT_INLINE DWORD __readgsdword(DWORD Offset) {
1254 DWORD ret;
1255 __asm__ volatile ("movl %%gs:%1,%0"
1256 : "=r" (ret) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1257 return ret;
1259 __CRT_INLINE DWORD64 __readgsqword(DWORD Offset) {
1260 void *ret;
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)));
1282 #ifdef __cplusplus
1284 #endif
1285 #endif
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
1308 #endif
1310 #define INITIAL_MXCSR 0x1f80
1311 #define INITIAL_FPCSR 0x027f
1313 typedef DECLSPEC_ALIGN(16) struct _M128A {
1314 ULONGLONG Low;
1315 LONGLONG High;
1316 } M128A,*PM128A;
1318 typedef struct _XMM_SAVE_AREA32 {
1319 WORD ControlWord;
1320 WORD StatusWord;
1321 BYTE TagWord;
1322 BYTE Reserved1;
1323 WORD ErrorOpcode;
1324 DWORD ErrorOffset;
1325 WORD ErrorSelector;
1326 WORD Reserved2;
1327 DWORD DataOffset;
1328 WORD DataSelector;
1329 WORD Reserved3;
1330 DWORD MxCsr;
1331 DWORD MxCsr_Mask;
1332 M128A FloatRegisters[8];
1333 M128A XmmRegisters[16];
1334 BYTE Reserved4[96];
1335 } XMM_SAVE_AREA32,*PXMM_SAVE_AREA32;
1337 #define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
1339 typedef DECLSPEC_ALIGN(16) struct _CONTEXT {
1340 DWORD64 P1Home;
1341 DWORD64 P2Home;
1342 DWORD64 P3Home;
1343 DWORD64 P4Home;
1344 DWORD64 P5Home;
1345 DWORD64 P6Home;
1346 DWORD ContextFlags;
1347 DWORD MxCsr;
1348 WORD SegCs;
1349 WORD SegDs;
1350 WORD SegEs;
1351 WORD SegFs;
1352 WORD SegGs;
1353 WORD SegSs;
1354 DWORD EFlags;
1355 DWORD64 Dr0;
1356 DWORD64 Dr1;
1357 DWORD64 Dr2;
1358 DWORD64 Dr3;
1359 DWORD64 Dr6;
1360 DWORD64 Dr7;
1361 DWORD64 Rax;
1362 DWORD64 Rcx;
1363 DWORD64 Rdx;
1364 DWORD64 Rbx;
1365 DWORD64 Rsp;
1366 DWORD64 Rbp;
1367 DWORD64 Rsi;
1368 DWORD64 Rdi;
1369 DWORD64 R8;
1370 DWORD64 R9;
1371 DWORD64 R10;
1372 DWORD64 R11;
1373 DWORD64 R12;
1374 DWORD64 R13;
1375 DWORD64 R14;
1376 DWORD64 R15;
1377 DWORD64 Rip;
1378 union {
1379 XMM_SAVE_AREA32 FltSave;
1380 XMM_SAVE_AREA32 FloatSave;
1381 struct {
1382 M128A Header[2];
1383 M128A Legacy[8];
1384 M128A Xmm0;
1385 M128A Xmm1;
1386 M128A Xmm2;
1387 M128A Xmm3;
1388 M128A Xmm4;
1389 M128A Xmm5;
1390 M128A Xmm6;
1391 M128A Xmm7;
1392 M128A Xmm8;
1393 M128A Xmm9;
1394 M128A Xmm10;
1395 M128A Xmm11;
1396 M128A Xmm12;
1397 M128A Xmm13;
1398 M128A Xmm14;
1399 M128A Xmm15;
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 {
1414 DWORD BeginAddress;
1415 DWORD EndAddress;
1416 DWORD UnwindData;
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);
1428 #endif
1430 #ifdef I_X86_
1431 #if(defined(_X86_) && !defined(__x86_64)) && !defined(RC_INVOKED)
1432 #ifdef __cplusplus
1433 extern "C" {
1434 #endif
1436 __CRT_INLINE BOOLEAN InterlockedBitTestAndSet(LONG *Base,LONG Bit) {
1437 int old = 0;
1438 __asm__ __volatile__("lock ; btsl %2,%1\n\tsbbl %0,%0 "
1439 :"=r" (old),"=m" ((*(volatile long *) Base))
1440 :"Ir" (Bit));
1441 return (BOOLEAN) (old!=0);
1444 __CRT_INLINE BOOLEAN InterlockedBitTestAndReset(LONG *Base,LONG Bit) {
1445 int old = 0;
1446 __asm__ __volatile__("lock ; btrl %2,%1\n\tsbbl %0,%0 "
1447 :"=r" (old),"=m" ((*(volatile long *) Base))
1448 :"Ir" (Bit));
1449 return (BOOLEAN) (old!=0);
1452 __CRT_INLINE BOOLEAN InterlockedBitTestAndComplement(LONG *Base,LONG Bit) {
1453 int old = 0;
1454 __asm__ __volatile__("lock ; btcl %2,%1\n\tsbbl %0,%0 "
1455 :"=r" (old),"=m" ((*(volatile long *) Base))
1456 :"Ir" (Bit));
1457 return (BOOLEAN) (old!=0);
1460 #ifdef _PREFIX_
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);
1467 #endif
1469 #ifdef __cplusplus
1471 #endif
1472 #endif
1474 #if(defined(_X86_) && !defined(__x86_64))
1475 __CRT_INLINE VOID MemoryBarrier(VOID) {
1476 LONG Barrier;
1477 __asm__ __volatile__("xchgl %eax,%0 "
1478 :"=r" (Barrier));
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)
1494 void *ret;
1495 __asm__ volatile ("movl %%fs:0x10,%0"
1496 : "=r" (ret));
1497 return ret;
1499 PVOID GetFiberData(void);
1500 __CRT_INLINE PVOID GetFiberData(void)
1502 void *ret;
1503 __asm__ volatile ("movl %%fs:0x10,%0\n"
1504 "movl (%0),%0"
1505 : "=r" (ret));
1506 return ret;
1508 #endif
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)
1531 #endif
1533 #define MAXIMUM_SUPPORTED_EXTENSION 512
1535 typedef struct _FLOATING_SAVE_AREA {
1536 DWORD ControlWord;
1537 DWORD StatusWord;
1538 DWORD TagWord;
1539 DWORD ErrorOffset;
1540 DWORD ErrorSelector;
1541 DWORD DataOffset;
1542 DWORD DataSelector;
1543 BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
1544 DWORD Cr0NpxState;
1545 } FLOATING_SAVE_AREA;
1547 typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
1549 typedef struct _CONTEXT {
1550 DWORD ContextFlags;
1551 DWORD Dr0;
1552 DWORD Dr1;
1553 DWORD Dr2;
1554 DWORD Dr3;
1555 DWORD Dr6;
1556 DWORD Dr7;
1557 FLOATING_SAVE_AREA FloatSave;
1558 DWORD SegGs;
1559 DWORD SegFs;
1560 DWORD SegEs;
1561 DWORD SegDs;
1563 DWORD Edi;
1564 DWORD Esi;
1565 DWORD Ebx;
1566 DWORD Edx;
1567 DWORD Ecx;
1568 DWORD Eax;
1569 DWORD Ebp;
1570 DWORD Eip;
1571 DWORD SegCs;
1572 DWORD EFlags;
1573 DWORD Esp;
1574 DWORD SegSs;
1575 BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
1576 } CONTEXT;
1578 typedef CONTEXT *PCONTEXT;
1579 #endif
1581 #ifndef _LDT_ENTRY_DEFINED
1582 #define _LDT_ENTRY_DEFINED
1584 typedef struct _LDT_ENTRY {
1585 WORD LimitLow;
1586 WORD BaseLow;
1587 union {
1588 struct {
1589 BYTE BaseMid;
1590 BYTE Flags1;
1591 BYTE Flags2;
1592 BYTE BaseHi;
1593 } Bytes;
1594 struct {
1595 DWORD BaseMid : 8;
1596 DWORD Type : 5;
1597 DWORD Dpl : 2;
1598 DWORD Pres : 1;
1599 DWORD LimitHi : 4;
1600 DWORD Sys : 1;
1601 DWORD Reserved_0 : 1;
1602 DWORD Default_Big : 1;
1603 DWORD Granularity : 1;
1604 DWORD BaseHi : 8;
1605 } Bits;
1606 } HighWord;
1607 } LDT_ENTRY,*PLDT_ENTRY;
1608 #endif
1610 #if defined(__ia64__) && !defined(RC_INVOKED)
1612 #ifdef __cplusplus
1613 extern "C" {
1614 #endif
1616 BOOLEAN BitScanForward64(DWORD *Index,DWORD64 Mask);
1617 BOOLEAN BitScanReverse64(DWORD *Index,DWORD64 Mask);
1619 #ifdef __cplusplus
1621 #endif
1622 #endif
1624 #if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
1626 void *_cdecl _rdteb(void);
1627 #ifdef __ia64__
1629 #define NtCurrentTeb() ((struct _TEB *)_rdteb())
1630 #define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
1631 #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
1633 #ifdef __cplusplus
1634 extern "C" {
1635 #endif
1637 void __break(int);
1638 void __yield(void);
1639 void __mf(void);
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
1650 #ifdef __cplusplus
1652 #endif
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);
1666 #else
1667 struct _TEB *NtCurrentTeb(void);
1668 #endif
1669 #endif
1671 #ifdef _IA64_
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
1696 #endif
1698 typedef struct _CONTEXT {
1699 DWORD ContextFlags;
1700 DWORD Fill1[3];
1701 ULONGLONG DbI0;
1702 ULONGLONG DbI1;
1703 ULONGLONG DbI2;
1704 ULONGLONG DbI3;
1705 ULONGLONG DbI4;
1706 ULONGLONG DbI5;
1707 ULONGLONG DbI6;
1708 ULONGLONG DbI7;
1709 ULONGLONG DbD0;
1710 ULONGLONG DbD1;
1711 ULONGLONG DbD2;
1712 ULONGLONG DbD3;
1713 ULONGLONG DbD4;
1714 ULONGLONG DbD5;
1715 ULONGLONG DbD6;
1716 ULONGLONG DbD7;
1717 FLOAT128 FltS0;
1718 FLOAT128 FltS1;
1719 FLOAT128 FltS2;
1720 FLOAT128 FltS3;
1721 FLOAT128 FltT0;
1722 FLOAT128 FltT1;
1723 FLOAT128 FltT2;
1724 FLOAT128 FltT3;
1725 FLOAT128 FltT4;
1726 FLOAT128 FltT5;
1727 FLOAT128 FltT6;
1728 FLOAT128 FltT7;
1729 FLOAT128 FltT8;
1730 FLOAT128 FltT9;
1731 FLOAT128 FltS4;
1732 FLOAT128 FltS5;
1733 FLOAT128 FltS6;
1734 FLOAT128 FltS7;
1735 FLOAT128 FltS8;
1736 FLOAT128 FltS9;
1737 FLOAT128 FltS10;
1738 FLOAT128 FltS11;
1739 FLOAT128 FltS12;
1740 FLOAT128 FltS13;
1741 FLOAT128 FltS14;
1742 FLOAT128 FltS15;
1743 FLOAT128 FltS16;
1744 FLOAT128 FltS17;
1745 FLOAT128 FltS18;
1746 FLOAT128 FltS19;
1747 FLOAT128 FltF32;
1748 FLOAT128 FltF33;
1749 FLOAT128 FltF34;
1750 FLOAT128 FltF35;
1751 FLOAT128 FltF36;
1752 FLOAT128 FltF37;
1753 FLOAT128 FltF38;
1754 FLOAT128 FltF39;
1755 FLOAT128 FltF40;
1756 FLOAT128 FltF41;
1757 FLOAT128 FltF42;
1758 FLOAT128 FltF43;
1759 FLOAT128 FltF44;
1760 FLOAT128 FltF45;
1761 FLOAT128 FltF46;
1762 FLOAT128 FltF47;
1763 FLOAT128 FltF48;
1764 FLOAT128 FltF49;
1765 FLOAT128 FltF50;
1766 FLOAT128 FltF51;
1767 FLOAT128 FltF52;
1768 FLOAT128 FltF53;
1769 FLOAT128 FltF54;
1770 FLOAT128 FltF55;
1771 FLOAT128 FltF56;
1772 FLOAT128 FltF57;
1773 FLOAT128 FltF58;
1774 FLOAT128 FltF59;
1775 FLOAT128 FltF60;
1776 FLOAT128 FltF61;
1777 FLOAT128 FltF62;
1778 FLOAT128 FltF63;
1779 FLOAT128 FltF64;
1780 FLOAT128 FltF65;
1781 FLOAT128 FltF66;
1782 FLOAT128 FltF67;
1783 FLOAT128 FltF68;
1784 FLOAT128 FltF69;
1785 FLOAT128 FltF70;
1786 FLOAT128 FltF71;
1787 FLOAT128 FltF72;
1788 FLOAT128 FltF73;
1789 FLOAT128 FltF74;
1790 FLOAT128 FltF75;
1791 FLOAT128 FltF76;
1792 FLOAT128 FltF77;
1793 FLOAT128 FltF78;
1794 FLOAT128 FltF79;
1795 FLOAT128 FltF80;
1796 FLOAT128 FltF81;
1797 FLOAT128 FltF82;
1798 FLOAT128 FltF83;
1799 FLOAT128 FltF84;
1800 FLOAT128 FltF85;
1801 FLOAT128 FltF86;
1802 FLOAT128 FltF87;
1803 FLOAT128 FltF88;
1804 FLOAT128 FltF89;
1805 FLOAT128 FltF90;
1806 FLOAT128 FltF91;
1807 FLOAT128 FltF92;
1808 FLOAT128 FltF93;
1809 FLOAT128 FltF94;
1810 FLOAT128 FltF95;
1811 FLOAT128 FltF96;
1812 FLOAT128 FltF97;
1813 FLOAT128 FltF98;
1814 FLOAT128 FltF99;
1815 FLOAT128 FltF100;
1816 FLOAT128 FltF101;
1817 FLOAT128 FltF102;
1818 FLOAT128 FltF103;
1819 FLOAT128 FltF104;
1820 FLOAT128 FltF105;
1821 FLOAT128 FltF106;
1822 FLOAT128 FltF107;
1823 FLOAT128 FltF108;
1824 FLOAT128 FltF109;
1825 FLOAT128 FltF110;
1826 FLOAT128 FltF111;
1827 FLOAT128 FltF112;
1828 FLOAT128 FltF113;
1829 FLOAT128 FltF114;
1830 FLOAT128 FltF115;
1831 FLOAT128 FltF116;
1832 FLOAT128 FltF117;
1833 FLOAT128 FltF118;
1834 FLOAT128 FltF119;
1835 FLOAT128 FltF120;
1836 FLOAT128 FltF121;
1837 FLOAT128 FltF122;
1838 FLOAT128 FltF123;
1839 FLOAT128 FltF124;
1840 FLOAT128 FltF125;
1841 FLOAT128 FltF126;
1842 FLOAT128 FltF127;
1843 ULONGLONG StFPSR;
1844 ULONGLONG IntGp;
1845 ULONGLONG IntT0;
1846 ULONGLONG IntT1;
1847 ULONGLONG IntS0;
1848 ULONGLONG IntS1;
1849 ULONGLONG IntS2;
1850 ULONGLONG IntS3;
1851 ULONGLONG IntV0;
1852 ULONGLONG IntT2;
1853 ULONGLONG IntT3;
1854 ULONGLONG IntT4;
1855 ULONGLONG IntSp;
1856 ULONGLONG IntTeb;
1857 ULONGLONG IntT5;
1858 ULONGLONG IntT6;
1859 ULONGLONG IntT7;
1860 ULONGLONG IntT8;
1861 ULONGLONG IntT9;
1862 ULONGLONG IntT10;
1863 ULONGLONG IntT11;
1864 ULONGLONG IntT12;
1865 ULONGLONG IntT13;
1866 ULONGLONG IntT14;
1867 ULONGLONG IntT15;
1868 ULONGLONG IntT16;
1869 ULONGLONG IntT17;
1870 ULONGLONG IntT18;
1871 ULONGLONG IntT19;
1872 ULONGLONG IntT20;
1873 ULONGLONG IntT21;
1874 ULONGLONG IntT22;
1875 ULONGLONG IntNats;
1876 ULONGLONG Preds;
1877 ULONGLONG BrRp;
1878 ULONGLONG BrS0;
1879 ULONGLONG BrS1;
1880 ULONGLONG BrS2;
1881 ULONGLONG BrS3;
1882 ULONGLONG BrS4;
1883 ULONGLONG BrT0;
1884 ULONGLONG BrT1;
1885 ULONGLONG ApUNAT;
1886 ULONGLONG ApLC;
1887 ULONGLONG ApEC;
1888 ULONGLONG ApCCV;
1889 ULONGLONG ApDCR;
1890 ULONGLONG RsPFS;
1891 ULONGLONG RsBSP;
1892 ULONGLONG RsBSPSTORE;
1893 ULONGLONG RsRSC;
1894 ULONGLONG RsRNAT;
1895 ULONGLONG StIPSR;
1896 ULONGLONG StIIP;
1897 ULONGLONG StIFS;
1898 ULONGLONG StFCR;
1899 ULONGLONG Eflag;
1900 ULONGLONG SegCSD;
1901 ULONGLONG SegSSD;
1902 ULONGLONG Cflag;
1903 ULONGLONG StFSR;
1904 ULONGLONG StFIR;
1905 ULONGLONG StFDR;
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 {
1915 DWORD BeginAddress;
1916 DWORD EndAddress;
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);
1930 #endif
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];
1942 } EXCEPTION_RECORD;
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;
1971 typedef PVOID PSID;
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;
2004 } GENERIC_MAPPING;
2005 typedef GENERIC_MAPPING *PGENERIC_MAPPING;
2007 #include <pshpack4.h>
2009 typedef struct _LUID_AND_ATTRIBUTES {
2010 LUID Luid;
2011 DWORD 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 {
2021 BYTE Value[6];
2022 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
2023 #endif
2025 #ifndef SID_DEFINED
2026 #define SID_DEFINED
2027 typedef struct _SID {
2028 BYTE Revision;
2029 BYTE SubAuthorityCount;
2030 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
2031 DWORD SubAuthority[ANYSIZE_ARRAY];
2032 } SID,*PISID;
2033 #endif
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 {
2046 PSID Sid;
2047 DWORD 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)
2179 typedef enum {
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 {
2210 BYTE AclRevision;
2211 BYTE Sbz1;
2212 WORD AclSize;
2213 WORD AceCount;
2214 WORD Sbz2;
2215 } ACL;
2216 typedef ACL *PACL;
2218 typedef struct _ACE_HEADER {
2219 BYTE AceType;
2220 BYTE AceFlags;
2221 WORD AceSize;
2222 } 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 {
2268 ACE_HEADER Header;
2269 ACCESS_MASK Mask;
2270 DWORD SidStart;
2271 } ACCESS_ALLOWED_ACE;
2273 typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
2275 typedef struct _ACCESS_DENIED_ACE {
2276 ACE_HEADER Header;
2277 ACCESS_MASK Mask;
2278 DWORD SidStart;
2279 } ACCESS_DENIED_ACE;
2280 typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
2282 typedef struct _SYSTEM_AUDIT_ACE {
2283 ACE_HEADER Header;
2284 ACCESS_MASK Mask;
2285 DWORD SidStart;
2286 } SYSTEM_AUDIT_ACE;
2287 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
2289 typedef struct _SYSTEM_ALARM_ACE {
2290 ACE_HEADER Header;
2291 ACCESS_MASK Mask;
2292 DWORD SidStart;
2293 } SYSTEM_ALARM_ACE;
2294 typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
2296 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
2297 ACE_HEADER Header;
2298 ACCESS_MASK Mask;
2299 DWORD Flags;
2300 GUID ObjectType;
2301 GUID InheritedObjectType;
2302 DWORD SidStart;
2303 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
2305 typedef struct _ACCESS_DENIED_OBJECT_ACE {
2306 ACE_HEADER Header;
2307 ACCESS_MASK Mask;
2308 DWORD Flags;
2309 GUID ObjectType;
2310 GUID InheritedObjectType;
2311 DWORD SidStart;
2312 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
2314 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
2315 ACE_HEADER Header;
2316 ACCESS_MASK Mask;
2317 DWORD Flags;
2318 GUID ObjectType;
2319 GUID InheritedObjectType;
2320 DWORD SidStart;
2321 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
2323 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
2324 ACE_HEADER Header;
2325 ACCESS_MASK Mask;
2326 DWORD Flags;
2327 GUID ObjectType;
2328 GUID InheritedObjectType;
2329 DWORD SidStart;
2330 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
2332 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
2333 ACE_HEADER Header;
2334 ACCESS_MASK Mask;
2335 DWORD SidStart;
2337 } ACCESS_ALLOWED_CALLBACK_ACE,*PACCESS_ALLOWED_CALLBACK_ACE;
2339 typedef struct _ACCESS_DENIED_CALLBACK_ACE {
2340 ACE_HEADER Header;
2341 ACCESS_MASK Mask;
2342 DWORD SidStart;
2344 } ACCESS_DENIED_CALLBACK_ACE,*PACCESS_DENIED_CALLBACK_ACE;
2346 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
2347 ACE_HEADER Header;
2348 ACCESS_MASK Mask;
2349 DWORD SidStart;
2351 } SYSTEM_AUDIT_CALLBACK_ACE,*PSYSTEM_AUDIT_CALLBACK_ACE;
2353 typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
2354 ACE_HEADER Header;
2355 ACCESS_MASK Mask;
2356 DWORD SidStart;
2358 } SYSTEM_ALARM_CALLBACK_ACE,*PSYSTEM_ALARM_CALLBACK_ACE;
2360 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
2361 ACE_HEADER Header;
2362 ACCESS_MASK Mask;
2363 DWORD Flags;
2364 GUID ObjectType;
2365 GUID InheritedObjectType;
2366 DWORD SidStart;
2368 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE,*PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
2370 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
2371 ACE_HEADER Header;
2372 ACCESS_MASK Mask;
2373 DWORD Flags;
2374 GUID ObjectType;
2375 GUID InheritedObjectType;
2376 DWORD SidStart;
2378 } ACCESS_DENIED_CALLBACK_OBJECT_ACE,*PACCESS_DENIED_CALLBACK_OBJECT_ACE;
2380 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
2381 ACE_HEADER Header;
2382 ACCESS_MASK Mask;
2383 DWORD Flags;
2384 GUID ObjectType;
2385 GUID InheritedObjectType;
2386 DWORD SidStart;
2388 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE,*PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
2390 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
2391 ACE_HEADER Header;
2392 ACCESS_MASK Mask;
2393 DWORD Flags;
2394 GUID ObjectType;
2395 GUID InheritedObjectType;
2396 DWORD SidStart;
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 {
2408 DWORD AclRevision;
2409 } ACL_REVISION_INFORMATION;
2410 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
2412 typedef struct _ACL_SIZE_INFORMATION {
2413 DWORD AceCount;
2414 DWORD AclBytesInUse;
2415 DWORD AclBytesFree;
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 {
2442 BYTE Revision;
2443 BYTE Sbz1;
2444 SECURITY_DESCRIPTOR_CONTROL Control;
2445 DWORD Owner;
2446 DWORD Group;
2447 DWORD Sacl;
2448 DWORD Dacl;
2449 } SECURITY_DESCRIPTOR_RELATIVE,*PISECURITY_DESCRIPTOR_RELATIVE;
2451 typedef struct _SECURITY_DESCRIPTOR {
2452 BYTE Revision;
2453 BYTE Sbz1;
2454 SECURITY_DESCRIPTOR_CONTROL Control;
2455 PSID Owner;
2456 PSID Group;
2457 PACL Sacl;
2458 PACL Dacl;
2460 } SECURITY_DESCRIPTOR,*PISECURITY_DESCRIPTOR;
2462 typedef struct _OBJECT_TYPE_LIST {
2463 WORD Level;
2464 WORD Sbz;
2465 GUID *ObjectType;
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;
2494 DWORD Control;
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
2558 } TOKEN_TYPE;
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 {
2572 DWORD GroupCount;
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 {
2582 PSID Owner;
2583 } TOKEN_OWNER,*PTOKEN_OWNER;
2585 typedef struct _TOKEN_PRIMARY_GROUP {
2586 PSID PrimaryGroup;
2587 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
2589 typedef struct _TOKEN_DEFAULT_DACL {
2590 PACL DefaultDacl;
2591 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
2593 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
2594 DWORD SidCount;
2595 DWORD SidLength;
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 {
2615 DWORD Category;
2616 DWORD PolicyMask;
2617 } TOKEN_AUDIT_POLICY_ELEMENT,*PTOKEN_AUDIT_POLICY_ELEMENT;
2619 typedef struct _TOKEN_AUDIT_POLICY {
2620 DWORD PolicyCount;
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 {
2635 LUID TokenId;
2636 LUID AuthenticationId;
2637 LARGE_INTEGER ExpirationTime;
2638 TOKEN_TYPE TokenType;
2639 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2640 DWORD DynamicCharged;
2641 DWORD DynamicAvailable;
2642 DWORD GroupCount;
2643 DWORD PrivilegeCount;
2644 LUID ModifiedId;
2645 } TOKEN_STATISTICS,*PTOKEN_STATISTICS;
2647 typedef struct _TOKEN_CONTROL {
2648 LUID TokenId;
2649 LUID AuthenticationId;
2650 LUID ModifiedId;
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 {
2664 DWORD Length;
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;
2672 BOOLEAN CopyOnOpen;
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)
2706 #ifdef _WIN64
2707 #define MAXIMUM_PROCESSORS 64
2708 #else
2709 #define MAXIMUM_PROCESSORS 32
2710 #endif
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 {
2732 HANDLE JobHandle;
2733 DWORD MemberLevel;
2734 DWORD Flags;
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;
2744 PVOID StackBase;
2745 PVOID StackLimit;
2746 PVOID SubSystemTib;
2747 union {
2748 PVOID FiberData;
2749 DWORD Version;
2751 PVOID ArbitraryUserPointer;
2752 struct _NT_TIB *Self;
2753 } NT_TIB;
2754 typedef NT_TIB *PNT_TIB;
2755 #endif
2757 typedef struct _NT_TIB32 {
2758 DWORD ExceptionList;
2759 DWORD StackBase;
2760 DWORD StackLimit;
2761 DWORD SubSystemTib;
2762 union {
2763 DWORD FiberData;
2764 DWORD Version;
2766 DWORD ArbitraryUserPointer;
2767 DWORD Self;
2768 } NT_TIB32,*PNT_TIB32;
2770 typedef struct _NT_TIB64 {
2771 DWORD64 ExceptionList;
2772 DWORD64 StackBase;
2773 DWORD64 StackLimit;
2774 DWORD64 SubSystemTib;
2775 union {
2776 DWORD64 FiberData;
2777 DWORD Version;
2779 DWORD64 ArbitraryUserPointer;
2780 DWORD64 Self;
2781 } NT_TIB64,*PNT_TIB64;
2783 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_)
2784 #define WX86
2785 #endif
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;
2813 SIZE_T Reserved1;
2814 SIZE_T Reserved2;
2815 SIZE_T Reserved3;
2816 SIZE_T Reserved4;
2817 DWORD Flags;
2818 DWORD Reserved5;
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;
2828 } IO_COUNTERS;
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;
2845 DWORD LimitFlags;
2846 SIZE_T MinimumWorkingSetSize;
2847 SIZE_T MaximumWorkingSetSize;
2848 DWORD ActiveProcessLimit;
2849 ULONG_PTR Affinity;
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;
2856 IO_COUNTERS IoInfo;
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;
2875 HANDLE JobToken;
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;
2892 IO_COUNTERS IoInfo;
2893 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
2895 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
2896 DWORD MemberLevel;
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 {
2999 BYTE Level;
3000 BYTE Associativity;
3001 WORD LineSize;
3002 DWORD Size;
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;
3009 union {
3010 struct {
3011 BYTE Flags;
3012 } ProcessorCore;
3013 struct {
3014 DWORD NodeNumber;
3015 } NumaNode;
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 {
3074 PVOID BaseAddress;
3075 PVOID AllocationBase;
3076 DWORD AllocationProtect;
3077 SIZE_T RegionSize;
3078 DWORD State;
3079 DWORD Protect;
3080 DWORD Type;
3081 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
3083 typedef struct _MEMORY_BASIC_INFORMATION32 {
3084 DWORD BaseAddress;
3085 DWORD AllocationBase;
3086 DWORD AllocationProtect;
3087 DWORD RegionSize;
3088 DWORD State;
3089 DWORD Protect;
3090 DWORD Type;
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;
3097 DWORD __alignment1;
3098 ULONGLONG RegionSize;
3099 DWORD State;
3100 DWORD Protect;
3101 DWORD Type;
3102 DWORD __alignment2;
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;
3223 DWORD Action;
3224 DWORD FileNameLength;
3225 WCHAR FileName[1];
3226 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
3228 typedef union _FILE_SEGMENT_ELEMENT {
3229 PVOID64 Buffer;
3230 ULONGLONG Alignment;
3231 }FILE_SEGMENT_ELEMENT,*PFILE_SEGMENT_ELEMENT;
3233 typedef struct _REPARSE_GUID_DATA_BUFFER {
3234 DWORD ReparseTag;
3235 WORD ReparseDataLength;
3236 WORD Reserved;
3237 GUID ReparseGuid;
3238 struct {
3239 BYTE DataBuffer[1];
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
3271 typedef enum {
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;
3286 typedef enum {
3287 LT_DONT_CARE,LT_LOWEST_LATENCY
3288 } LATENCY_TIME;
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 {
3301 DWORD PD_Size;
3302 DEVICE_POWER_STATE PD_MostRecentPowerState;
3303 DWORD PD_Capabilities;
3304 DWORD PD_D1Latency;
3305 DWORD PD_D2Latency;
3306 DWORD PD_D3Latency;
3307 DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
3308 SYSTEM_POWER_STATE PD_DeepestSystemWake;
3309 } CM_POWER_DATA,*PCM_POWER_DATA;
3311 typedef enum {
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;
3315 typedef struct {
3316 DWORD Granularity;
3317 DWORD Capacity;
3318 } BATTERY_REPORTING_SCALE,*PBATTERY_REPORTING_SCALE;
3320 typedef struct {
3321 POWER_ACTION Action;
3322 DWORD Flags;
3323 DWORD EventCode;
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
3341 typedef struct {
3342 BOOLEAN Enable;
3343 BYTE Spare[3];
3344 DWORD BatteryLevel;
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 {
3360 DWORD Revision;
3361 POWER_ACTION_POLICY PowerButton;
3362 POWER_ACTION_POLICY SleepButton;
3363 POWER_ACTION_POLICY LidClose;
3364 SYSTEM_POWER_STATE LidOpenWake;
3365 DWORD Reserved;
3366 POWER_ACTION_POLICY Idle;
3367 DWORD IdleTimeout;
3368 BYTE IdleSensitivity;
3369 BYTE DynamicThrottle;
3370 BYTE Spare2[2];
3371 SYSTEM_POWER_STATE MinSleep;
3372 SYSTEM_POWER_STATE MaxSleep;
3373 SYSTEM_POWER_STATE ReducedLatencySleep;
3374 DWORD WinLogonFlags;
3375 DWORD Spare3;
3376 DWORD DozeS4Timeout;
3377 DWORD BroadcastCapacityResolution;
3378 SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
3379 DWORD VideoTimeout;
3380 BOOLEAN VideoDimDisplay;
3381 DWORD VideoReserved[3];
3382 DWORD SpindownTimeout;
3383 BOOLEAN OptimizeForPower;
3384 BYTE FanThrottleTolerance;
3385 BYTE ForcedThrottle;
3386 BYTE MinThrottle;
3387 POWER_ACTION_POLICY OverThrottled;
3388 } SYSTEM_POWER_POLICY,*PSYSTEM_POWER_POLICY;
3390 typedef struct _PROCESSOR_POWER_POLICY_INFO {
3391 DWORD TimeCheck;
3392 DWORD DemoteLimit;
3393 DWORD PromoteLimit;
3394 BYTE DemotePercent;
3395 BYTE PromotePercent;
3396 BYTE Spare[2];
3397 DWORD AllowDemotion:1;
3398 DWORD AllowPromotion:1;
3399 DWORD Reserved:30;
3400 } PROCESSOR_POWER_POLICY_INFO,*PPROCESSOR_POWER_POLICY_INFO;
3402 typedef struct _PROCESSOR_POWER_POLICY {
3403 DWORD Revision;
3404 BYTE DynamicThrottle;
3405 BYTE Spare[3];
3406 DWORD DisableCStates:1;
3407 DWORD Reserved:31;
3408 DWORD PolicyCount;
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;
3421 typedef struct {
3422 BOOLEAN PowerButtonPresent;
3423 BOOLEAN SleepButtonPresent;
3424 BOOLEAN LidPresent;
3425 BOOLEAN SystemS1;
3426 BOOLEAN SystemS2;
3427 BOOLEAN SystemS3;
3428 BOOLEAN SystemS4;
3429 BOOLEAN SystemS5;
3430 BOOLEAN HiberFilePresent;
3431 BOOLEAN FullWake;
3432 BOOLEAN VideoDimPresent;
3433 BOOLEAN ApmPresent;
3434 BOOLEAN UpsPresent;
3435 BOOLEAN ThermalControl;
3436 BOOLEAN ProcessorThrottle;
3437 BYTE ProcessorMinThrottle;
3438 BYTE ProcessorMaxThrottle;
3439 BYTE spare2[4];
3440 BOOLEAN DiskSpinDown;
3441 BYTE spare3[8];
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;
3452 typedef struct {
3453 BOOLEAN AcOnLine;
3454 BOOLEAN BatteryPresent;
3455 BOOLEAN Charging;
3456 BOOLEAN Discharging;
3457 BOOLEAN Spare1[4];
3458 DWORD MaxCapacity;
3459 DWORD RemainingCapacity;
3460 DWORD Rate;
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 {
3477 WORD e_magic;
3478 WORD e_cblp;
3479 WORD e_cp;
3480 WORD e_crlc;
3481 WORD e_cparhdr;
3482 WORD e_minalloc;
3483 WORD e_maxalloc;
3484 WORD e_ss;
3485 WORD e_sp;
3486 WORD e_csum;
3487 WORD e_ip;
3488 WORD e_cs;
3489 WORD e_lfarlc;
3490 WORD e_ovno;
3491 WORD e_res[4];
3492 WORD e_oemid;
3493 WORD e_oeminfo;
3494 WORD e_res2[10];
3495 LONG e_lfanew;
3496 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
3498 typedef struct _IMAGE_OS2_HEADER {
3499 WORD ne_magic;
3500 CHAR ne_ver;
3501 CHAR ne_rev;
3502 WORD ne_enttab;
3503 WORD ne_cbenttab;
3504 LONG ne_crc;
3505 WORD ne_flags;
3506 WORD ne_autodata;
3507 WORD ne_heap;
3508 WORD ne_stack;
3509 LONG ne_csip;
3510 LONG ne_sssp;
3511 WORD ne_cseg;
3512 WORD ne_cmod;
3513 WORD ne_cbnrestab;
3514 WORD ne_segtab;
3515 WORD ne_rsrctab;
3516 WORD ne_restab;
3517 WORD ne_modtab;
3518 WORD ne_imptab;
3519 LONG ne_nrestab;
3520 WORD ne_cmovent;
3521 WORD ne_align;
3522 WORD ne_cres;
3523 BYTE ne_exetyp;
3524 BYTE ne_flagsothers;
3525 WORD ne_pretthunks;
3526 WORD ne_psegrefbytes;
3527 WORD ne_swaparea;
3528 WORD ne_expver;
3529 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
3531 typedef struct _IMAGE_VXD_HEADER {
3532 WORD e32_magic;
3533 BYTE e32_border;
3534 BYTE e32_worder;
3535 DWORD e32_level;
3536 WORD e32_cpu;
3537 WORD e32_os;
3538 DWORD e32_ver;
3539 DWORD e32_mflags;
3540 DWORD e32_mpages;
3541 DWORD e32_startobj;
3542 DWORD e32_eip;
3543 DWORD e32_stackobj;
3544 DWORD e32_esp;
3545 DWORD e32_pagesize;
3546 DWORD e32_lastpagesize;
3547 DWORD e32_fixupsize;
3548 DWORD e32_fixupsum;
3549 DWORD e32_ldrsize;
3550 DWORD e32_ldrsum;
3551 DWORD e32_objtab;
3552 DWORD e32_objcnt;
3553 DWORD e32_objmap;
3554 DWORD e32_itermap;
3555 DWORD e32_rsrctab;
3556 DWORD e32_rsrccnt;
3557 DWORD e32_restab;
3558 DWORD e32_enttab;
3559 DWORD e32_dirtab;
3560 DWORD e32_dircnt;
3561 DWORD e32_fpagetab;
3562 DWORD e32_frectab;
3563 DWORD e32_impmod;
3564 DWORD e32_impmodcnt;
3565 DWORD e32_impproc;
3566 DWORD e32_pagesum;
3567 DWORD e32_datapage;
3568 DWORD e32_preload;
3569 DWORD e32_nrestab;
3570 DWORD e32_cbnrestab;
3571 DWORD e32_nressum;
3572 DWORD e32_autodata;
3573 DWORD e32_debuginfo;
3574 DWORD e32_debuglen;
3575 DWORD e32_instpreload;
3576 DWORD e32_instdemand;
3577 DWORD e32_heapsize;
3578 BYTE e32_res3[12];
3579 DWORD e32_winresoff;
3580 DWORD e32_winreslen;
3581 WORD e32_devid;
3582 WORD e32_ddkver;
3583 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
3585 #include "poppack.h"
3587 typedef struct _IMAGE_FILE_HEADER {
3588 WORD Machine;
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;
3647 DWORD Size;
3648 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
3650 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
3652 typedef struct _IMAGE_OPTIONAL_HEADER {
3654 WORD Magic;
3655 BYTE MajorLinkerVersion;
3656 BYTE MinorLinkerVersion;
3657 DWORD SizeOfCode;
3658 DWORD SizeOfInitializedData;
3659 DWORD SizeOfUninitializedData;
3660 DWORD AddressOfEntryPoint;
3661 DWORD BaseOfCode;
3662 DWORD BaseOfData;
3663 DWORD ImageBase;
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;
3673 DWORD SizeOfImage;
3674 DWORD SizeOfHeaders;
3675 DWORD CheckSum;
3676 WORD Subsystem;
3677 WORD DllCharacteristics;
3678 DWORD SizeOfStackReserve;
3679 DWORD SizeOfStackCommit;
3680 DWORD SizeOfHeapReserve;
3681 DWORD SizeOfHeapCommit;
3682 DWORD LoaderFlags;
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 {
3688 WORD Magic;
3689 BYTE MajorLinkerVersion;
3690 BYTE MinorLinkerVersion;
3691 DWORD SizeOfCode;
3692 DWORD SizeOfInitializedData;
3693 DWORD SizeOfUninitializedData;
3694 DWORD AddressOfEntryPoint;
3695 DWORD BaseOfCode;
3696 DWORD BaseOfData;
3697 DWORD BaseOfBss;
3698 DWORD GprMask;
3699 DWORD CprMask[4];
3700 DWORD GpValue;
3701 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
3703 typedef struct _IMAGE_OPTIONAL_HEADER64 {
3704 WORD Magic;
3705 BYTE MajorLinkerVersion;
3706 BYTE MinorLinkerVersion;
3707 DWORD SizeOfCode;
3708 DWORD SizeOfInitializedData;
3709 DWORD SizeOfUninitializedData;
3710 DWORD AddressOfEntryPoint;
3711 DWORD BaseOfCode;
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;
3722 DWORD SizeOfImage;
3723 DWORD SizeOfHeaders;
3724 DWORD CheckSum;
3725 WORD Subsystem;
3726 WORD DllCharacteristics;
3727 ULONGLONG SizeOfStackReserve;
3728 ULONGLONG SizeOfStackCommit;
3729 ULONGLONG SizeOfHeapReserve;
3730 ULONGLONG SizeOfHeapCommit;
3731 DWORD LoaderFlags;
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
3745 #ifdef _WIN64
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
3750 #else
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
3755 #endif
3757 typedef struct _IMAGE_NT_HEADERS64 {
3758 DWORD Signature;
3759 IMAGE_FILE_HEADER FileHeader;
3760 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
3761 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
3763 typedef struct _IMAGE_NT_HEADERS {
3764 DWORD Signature;
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;
3774 #ifdef _WIN64
3775 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
3776 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
3777 #else
3778 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
3779 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
3780 #endif
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 {
3822 WORD Sig1;
3823 WORD Sig2;
3824 WORD Version;
3825 WORD Machine;
3826 DWORD TimeDateStamp;
3827 CLSID ClassID;
3828 DWORD SizeOfData;
3829 } ANON_OBJECT_HEADER;
3831 #define IMAGE_SIZEOF_SHORT_NAME 8
3833 typedef struct _IMAGE_SECTION_HEADER {
3834 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
3835 union {
3836 DWORD PhysicalAddress;
3837 DWORD VirtualSize;
3838 } Misc;
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 {
3899 union {
3900 BYTE ShortName[8];
3901 struct {
3902 DWORD Short;
3903 DWORD Long;
3904 } Name;
3905 DWORD LongName[2];
3906 } N;
3907 DWORD Value;
3908 SHORT SectionNumber;
3909 WORD Type;
3910 BYTE StorageClass;
3911 BYTE NumberOfAuxSymbols;
3912 } IMAGE_SYMBOL;
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
3978 #define N_BTSHFT 4
3979 #define N_TSHIFT 2
3981 #define BTYPE(x) ((x) & N_BTMASK)
3983 #ifndef ISPTR
3984 #define ISPTR(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
3985 #endif
3987 #ifndef ISFCN
3988 #define ISFCN(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
3989 #endif
3991 #ifndef ISARY
3992 #define ISARY(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
3993 #endif
3995 #ifndef ISTAG
3996 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
3997 #endif
3999 #ifndef INCREF
4000 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
4001 #endif
4002 #ifndef DECREF
4003 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
4004 #endif
4006 typedef union _IMAGE_AUX_SYMBOL {
4007 struct {
4008 DWORD TagIndex;
4009 union {
4010 struct {
4011 WORD Linenumber;
4012 WORD Size;
4013 } LnSz;
4014 DWORD TotalSize;
4015 } Misc;
4016 union {
4017 struct {
4018 DWORD PointerToLinenumber;
4019 DWORD PointerToNextFunction;
4020 } Function;
4021 struct {
4022 WORD Dimension[4];
4023 } Array;
4024 } FcnAry;
4025 WORD TvIndex;
4026 } Sym;
4027 struct {
4028 BYTE Name[IMAGE_SIZEOF_SYMBOL];
4029 } File;
4030 struct {
4031 DWORD Length;
4032 WORD NumberOfRelocations;
4033 WORD NumberOfLinenumbers;
4034 DWORD CheckSum;
4035 SHORT Number;
4036 BYTE Selection;
4037 } Section;
4038 } IMAGE_AUX_SYMBOL;
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 {
4050 BYTE bAuxType;
4051 BYTE bReserved;
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 {
4073 union {
4074 DWORD VirtualAddress;
4075 DWORD RelocCount;
4077 DWORD SymbolTableIndex;
4078 WORD Type;
4079 } IMAGE_RELOCATION;
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 {
4395 union {
4396 DWORD SymbolTableIndex;
4397 DWORD VirtualAddress;
4398 } Type;
4399 WORD Linenumber;
4400 } IMAGE_LINENUMBER;
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;
4409 DWORD SizeOfBlock;
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 {
4434 BYTE Name[16];
4435 BYTE Date[12];
4436 BYTE UserID[6];
4437 BYTE GroupID[6];
4438 BYTE Mode[8];
4439 BYTE Size[10];
4440 BYTE EndHeader[2];
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;
4448 WORD MajorVersion;
4449 WORD MinorVersion;
4450 DWORD Name;
4451 DWORD Base;
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 {
4460 WORD Hint;
4461 BYTE Name[1];
4462 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
4464 #include "pshpack8.h"
4466 typedef struct _IMAGE_THUNK_DATA64 {
4467 union {
4468 ULONGLONG ForwarderString;
4469 ULONGLONG Function;
4470 ULONGLONG Ordinal;
4471 ULONGLONG AddressOfData;
4472 } u1;
4473 } IMAGE_THUNK_DATA64;
4474 typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
4476 #include "poppack.h"
4478 typedef struct _IMAGE_THUNK_DATA32 {
4479 union {
4480 DWORD ForwarderString;
4481 DWORD Function;
4482 DWORD Ordinal;
4483 DWORD AddressOfData;
4484 } u1;
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)
4495 typedef VOID
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;
4518 #ifdef _WIN64
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;
4526 #else
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;
4534 #endif
4536 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
4537 union {
4538 DWORD Characteristics;
4539 DWORD OriginalFirstThunk;
4541 DWORD TimeDateStamp;
4543 DWORD ForwarderChain;
4544 DWORD Name;
4545 DWORD FirstThunk;
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;
4558 WORD Reserved;
4559 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
4561 typedef struct _IMAGE_RESOURCE_DIRECTORY {
4562 DWORD Characteristics;
4563 DWORD TimeDateStamp;
4564 WORD MajorVersion;
4565 WORD MinorVersion;
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 {
4574 union {
4575 struct {
4576 DWORD NameOffset:31;
4577 DWORD NameIsString:1;
4579 DWORD Name;
4580 WORD Id;
4582 union {
4583 DWORD OffsetToData;
4584 struct {
4585 DWORD OffsetToDirectory:31;
4586 DWORD DataIsDirectory:1;
4589 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
4591 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
4592 WORD Length;
4593 CHAR NameString[1];
4594 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
4596 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
4597 WORD Length;
4598 WCHAR NameString[1];
4599 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
4601 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
4602 DWORD OffsetToData;
4603 DWORD Size;
4604 DWORD CodePage;
4605 DWORD Reserved;
4606 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
4608 typedef struct {
4609 DWORD Size;
4610 DWORD TimeDateStamp;
4611 WORD MajorVersion;
4612 WORD MinorVersion;
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;
4623 WORD CSDVersion;
4624 WORD Reserved1;
4625 DWORD EditList;
4626 DWORD SecurityCookie;
4627 DWORD SEHandlerTable;
4628 DWORD SEHandlerCount;
4629 } IMAGE_LOAD_CONFIG_DIRECTORY32,*PIMAGE_LOAD_CONFIG_DIRECTORY32;
4631 typedef struct {
4632 DWORD Size;
4633 DWORD TimeDateStamp;
4634 WORD MajorVersion;
4635 WORD MinorVersion;
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;
4646 WORD CSDVersion;
4647 WORD Reserved1;
4648 ULONGLONG EditList;
4649 ULONGLONG SecurityCookie;
4650 ULONGLONG SEHandlerTable;
4651 ULONGLONG SEHandlerCount;
4652 } IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
4654 #ifdef _WIN64
4655 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
4656 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
4657 #else
4658 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
4659 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
4660 #endif
4662 typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
4663 DWORD FuncStart;
4664 DWORD PrologLen : 8;
4665 DWORD FuncLen : 22;
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 {
4679 DWORD BeginAddress;
4680 DWORD EndAddress;
4681 DWORD ExceptionHandler;
4682 DWORD HandlerData;
4683 DWORD PrologEndAddress;
4684 } IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
4686 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
4687 DWORD BeginAddress;
4688 DWORD EndAddress;
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;
4701 WORD MajorVersion;
4702 WORD MinorVersion;
4703 DWORD Type;
4704 DWORD SizeOfData;
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;
4733 #define FRAME_FPO 0
4734 #define FRAME_TRAP 1
4735 #define FRAME_TSS 2
4736 #define FRAME_NONFPO 3
4738 typedef struct _FPO_DATA {
4739 DWORD ulOffStart;
4740 DWORD cbProcSize;
4741 DWORD cdwLocals;
4742 WORD cdwParams;
4743 WORD cbProlog : 8;
4744 WORD cbRegs : 3;
4745 WORD fHasSEH : 1;
4746 WORD fUseBP : 1;
4747 WORD reserved : 1;
4748 WORD cbFrame : 2;
4749 } FPO_DATA,*PFPO_DATA;
4750 #define SIZEOF_RFPO_DATA 16
4752 #define IMAGE_DEBUG_MISC_EXENAME 1
4754 typedef struct _IMAGE_DEBUG_MISC {
4755 DWORD DataType;
4756 DWORD Length;
4757 BOOLEAN Unicode;
4758 BYTE Reserved[3];
4759 BYTE Data[1];
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;
4771 union {
4772 ULONGLONG EndOfPrologue;
4773 ULONGLONG UnwindInfoAddress;
4775 } IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
4777 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
4778 WORD Signature;
4779 WORD Flags;
4780 WORD Machine;
4781 WORD Characteristics;
4782 DWORD TimeDateStamp;
4783 DWORD CheckSum;
4784 DWORD ImageBase;
4785 DWORD SizeOfImage;
4786 DWORD NumberOfSections;
4787 DWORD ExportedNamesSize;
4788 DWORD DebugDirectorySize;
4789 DWORD SectionAlignment;
4790 DWORD Reserved[2];
4791 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
4793 typedef struct _NON_PAGED_DEBUG_INFO {
4794 WORD Signature;
4795 WORD Flags;
4796 DWORD Size;
4797 WORD Machine;
4798 WORD Characteristics;
4799 DWORD TimeDateStamp;
4800 DWORD CheckSum;
4801 DWORD SizeOfImage;
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;
4814 int Adummy1 :7;
4815 unsigned int AmaskShift: 8;
4816 int Adummy2 :16;
4817 DWORD FirstEntryRVA;
4818 } IMAGE_ARCHITECTURE_HEADER,*PIMAGE_ARCHITECTURE_HEADER;
4820 typedef struct _ImageArchitectureEntry {
4821 DWORD FixupInstRVA;
4822 DWORD NewInst;
4823 } IMAGE_ARCHITECTURE_ENTRY,*PIMAGE_ARCHITECTURE_ENTRY;
4825 #include "poppack.h"
4827 #define IMPORT_OBJECT_HDR_SIG2 0xffff
4829 typedef struct IMPORT_OBJECT_HEADER {
4830 WORD Sig1;
4831 WORD Sig2;
4832 WORD Version;
4833 WORD Machine;
4834 DWORD TimeDateStamp;
4835 DWORD SizeOfData;
4836 union {
4837 WORD Ordinal;
4838 WORD Hint;
4840 WORD Type : 2;
4841 WORD NameType : 3;
4842 WORD Reserved : 11;
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 {
4865 DWORD cb;
4866 WORD MajorRuntimeVersion;
4867 WORD MinorRuntimeVersion;
4868 IMAGE_DATA_DIRECTORY MetaData;
4869 DWORD Flags;
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;
4878 #endif
4880 #include <string.h>
4882 #ifndef _SLIST_HEADER_
4883 #define _SLIST_HEADER_
4885 #ifdef _WIN64
4886 typedef struct _SLIST_ENTRY *PSLIST_ENTRY;
4887 typedef DECLSPEC_ALIGN(16) struct _SLIST_ENTRY {
4888 PSLIST_ENTRY Next;
4889 } SLIST_ENTRY;
4890 #else
4892 #define SLIST_ENTRY SINGLE_LIST_ENTRY
4893 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
4894 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
4895 #endif
4897 #if defined(_WIN64)
4899 typedef DECLSPEC_ALIGN(16) struct _SLIST_HEADER {
4900 ULONGLONG Alignment;
4901 ULONGLONG Region;
4902 } SLIST_HEADER;
4904 typedef struct _SLIST_HEADER *PSLIST_HEADER;
4905 #else
4907 typedef union _SLIST_HEADER {
4908 ULONGLONG Alignment;
4909 struct {
4910 SLIST_ENTRY Next;
4911 WORD Depth;
4912 WORD Sequence;
4914 } SLIST_HEADER,*PSLIST_HEADER;
4915 #endif
4916 #endif
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))) {
4976 __debugbreak();
4978 return memcpy(dst,src,size);
4980 #define memcpy memcpy_inline
4981 #endif
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;
4993 #ifdef __x86_64
4994 __stosb((PBYTE)((DWORD64)vptr),0,cnt);
4995 #else
4996 while(cnt) {
4997 *vptr = 0;
4998 vptr++;
4999 cnt--;
5001 #endif
5002 return ptr;
5005 typedef struct _MESSAGE_RESOURCE_ENTRY {
5006 WORD Length;
5007 WORD Flags;
5008 BYTE Text[1];
5009 } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
5011 #define MESSAGE_RESOURCE_UNICODE 0x0001
5013 typedef struct _MESSAGE_RESOURCE_BLOCK {
5014 DWORD LowId;
5015 DWORD HighId;
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;
5029 DWORD dwPlatformId;
5030 CHAR szCSDVersion[128];
5031 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
5033 typedef struct _OSVERSIONINFOW {
5034 DWORD dwOSVersionInfoSize;
5035 DWORD dwMajorVersion;
5036 DWORD dwMinorVersion;
5037 DWORD dwBuildNumber;
5038 DWORD dwPlatformId;
5039 WCHAR szCSDVersion[128];
5040 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW,RTL_OSVERSIONINFOW,*PRTL_OSVERSIONINFOW;
5042 #ifdef UNICODE
5043 typedef OSVERSIONINFOW OSVERSIONINFO;
5044 typedef POSVERSIONINFOW POSVERSIONINFO;
5045 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
5046 #else
5047 typedef OSVERSIONINFOA OSVERSIONINFO;
5048 typedef POSVERSIONINFOA POSVERSIONINFO;
5049 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
5050 #endif
5052 typedef struct _OSVERSIONINFOEXA {
5053 DWORD dwOSVersionInfoSize;
5054 DWORD dwMajorVersion;
5055 DWORD dwMinorVersion;
5056 DWORD dwBuildNumber;
5057 DWORD dwPlatformId;
5058 CHAR szCSDVersion[128];
5059 WORD wServicePackMajor;
5060 WORD wServicePackMinor;
5061 WORD wSuiteMask;
5062 BYTE wProductType;
5063 BYTE wReserved;
5064 } OSVERSIONINFOEXA,*POSVERSIONINFOEXA,*LPOSVERSIONINFOEXA;
5066 typedef struct _OSVERSIONINFOEXW {
5067 DWORD dwOSVersionInfoSize;
5068 DWORD dwMajorVersion;
5069 DWORD dwMinorVersion;
5070 DWORD dwBuildNumber;
5071 DWORD dwPlatformId;
5072 WCHAR szCSDVersion[128];
5073 WORD wServicePackMajor;
5074 WORD wServicePackMinor;
5075 WORD wSuiteMask;
5076 BYTE wProductType;
5077 BYTE wReserved;
5078 } OSVERSIONINFOEXW,*POSVERSIONINFOEXW,*LPOSVERSIONINFOEXW,RTL_OSVERSIONINFOEXW,*PRTL_OSVERSIONINFOEXW;
5079 #ifdef UNICODE
5080 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
5081 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
5082 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
5083 #else
5084 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
5085 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
5086 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
5087 #endif
5089 #define VER_EQUAL 1
5090 #define VER_GREATER 2
5091 #define VER_GREATER_EQUAL 3
5092 #define VER_LESS 4
5093 #define VER_LESS_EQUAL 5
5094 #define VER_AND 6
5095 #define VER_OR 7
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 {
5122 WORD Type;
5123 WORD CreatorBackTraceIndex;
5124 struct _RTL_CRITICAL_SECTION *CriticalSection;
5125 LIST_ENTRY ProcessLocksList;
5126 DWORD EntryCount;
5127 DWORD ContentionCount;
5128 DWORD Spare[2];
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;
5136 LONG LockCount;
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 {
5148 PCHAR ThunkName;
5149 PVOID ThunkOldAddress;
5150 PVOID ThunkNewAddress;
5151 } RTL_VERIFIER_THUNK_DESCRIPTOR,*PRTL_VERIFIER_THUNK_DESCRIPTOR;
5153 typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR {
5154 PWCHAR DllName;
5155 DWORD DllFlags;
5156 PVOID DllAddress;
5157 PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks;
5158 } RTL_VERIFIER_DLL_DESCRIPTOR,*PRTL_VERIFIER_DLL_DESCRIPTOR;
5160 typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR {
5161 DWORD Length;
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);
5313 typedef
5314 VOID
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 {
5338 DWORD ulFlags;
5339 DWORD ulFilenameLength;
5340 DWORD ulPathLength;
5342 PCWSTR lpFileName;
5343 PCWSTR lpFilePath;
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 {
5353 DWORD ulFlags;
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;
5371 DWORD ulFileCount;
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 {
5377 DWORD dwFlags;
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 {
5418 DWORD Length;
5419 DWORD Reserved;
5420 DWORD RecordNumber;
5421 DWORD TimeGenerated;
5422 DWORD TimeWritten;
5423 DWORD EventID;
5424 WORD EventType;
5425 WORD NumStrings;
5426 WORD EventCategory;
5427 WORD ReservedFlags;
5428 DWORD ClosingRecordNumber;
5429 DWORD StringOffset;
5430 DWORD UserSidLength;
5431 DWORD UserSidOffset;
5432 DWORD DataLength;
5433 DWORD DataOffset;
5434 } EVENTLOGRECORD,*PEVENTLOGRECORD;
5436 #define MAXLOGICALLOGNAMESIZE 256
5438 typedef struct _EVENTSFORLOGFILE{
5439 DWORD ulSize;
5440 WCHAR szLogicalLogFile[MAXLOGICALLOGNAMESIZE];
5441 DWORD ulNumRecords;
5442 EVENTLOGRECORD pEventLogRecords[];
5443 } EVENTSFORLOGFILE,*PEVENTSFORLOGFILE;
5445 typedef struct _PACKEDEVENTINFO{
5446 DWORD ulSize;
5447 DWORD ulNumEventsForLogFile;
5448 DWORD ulOffsets[];
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)
5492 #define REG_SZ (1)
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 {
5551 DWORD Type;
5552 BOOLEAN Immediate;
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 {
5563 DWORD Operation;
5564 BOOLEAN Immediate;
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 {
5573 DWORD Type;
5574 DWORD Count;
5575 BOOLEAN Immediate;
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 {
5583 DWORD Type;
5584 DWORD Partition;
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 {
5600 DWORD Method;
5601 DWORD Partition;
5602 LARGE_INTEGER Offset;
5603 BOOLEAN Immediate;
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 {
5679 BOOLEAN ECC;
5680 BOOLEAN Compression;
5681 BOOLEAN DataPadding;
5682 BOOLEAN ReportSetmarks;
5683 DWORD DefaultBlockSize;
5684 DWORD MaximumBlockSize;
5685 DWORD MinimumBlockSize;
5686 DWORD MaximumPartitionCount;
5687 DWORD FeaturesLow;
5688 DWORD FeaturesHigh;
5689 DWORD EOTWarningZoneSize;
5690 } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
5692 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
5693 BOOLEAN ECC;
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;
5703 DWORD BlockSize;
5704 DWORD PartitionCount;
5705 BOOLEAN WriteProtected;
5706 } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
5708 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
5709 DWORD BlockSize;
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 {
5717 DWORD Method;
5718 DWORD Count;
5719 DWORD Size;
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 {
5729 DWORD Method;
5730 DWORD DataBufferSize;
5731 PVOID DataBuffer;
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();
5744 #endif
5746 #if(defined(_X86_) && !defined(__x86_64))
5747 #define PcTeb 0x18
5748 __CRT_INLINE struct _TEB *NtCurrentTeb(void) {
5749 struct _TEB *ret;
5750 __asm__ volatile ("movl %%fs:0x18,%0"
5751 : "=r" (ret));
5752 return ret;
5754 #endif
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)
5767 #ifdef __cplusplus
5769 #endif
5770 #endif