comparison fuhtark_test/include/winapi/winnt.h @ 1500:91c8c3b7cbf0

add: futhark tests for generating vulkan api
author sam <sam@basx.dev>
date Wed, 26 Nov 2025 21:36:48 +0700
parents
children
comparison
equal deleted inserted replaced
1499:1f58458b7ef7 1500:91c8c3b7cbf0
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_
8
9 #ifdef __cplusplus
10 extern "C" {
11 #endif
12
13 #include <ctype.h>
14 #define ANYSIZE_ARRAY 1
15
16 //gr #include <specstrings.h>
17
18 #define RESTRICTED_POINTER
19
20 #ifndef __CRT_UNALIGNED
21 #define __CRT_UNALIGNED
22 #endif
23
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
35
36 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && (defined(_X86_) && !defined(__x86_64))
37 #define I_X86_
38 #endif
39
40 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_) && defined(__x86_64)
41 #define _AMD64_
42 #endif
43
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
49
50
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
58
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
64
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
77
78 #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
79
80 #include <basetsd.h>
81
82 #if defined(_X86_) || defined(__ia64__) || defined(__x86_64)
83 #define DECLSPEC_IMPORT __declspec(dllimport)
84 #else
85 #define DECLSPEC_IMPORT
86 #endif
87
88 #ifndef DECLSPEC_NORETURN
89 #define DECLSPEC_NORETURN __declspec(noreturn)
90 #endif
91
92 #ifndef DECLSPEC_ALIGN
93 #define DECLSPEC_ALIGN(x) __attribute__ ((aligned(x)))
94 #endif
95
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
103
104 #ifndef DECLSPEC_CACHEALIGN
105 #define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
106 #endif
107
108 #ifndef DECLSPEC_UUID
109 #define DECLSPEC_UUID(x)
110 #endif
111
112 #ifndef DECLSPEC_NOVTABLE
113 #define DECLSPEC_NOVTABLE
114 #endif
115
116 #ifndef DECLSPEC_SELECTANY
117 #define DECLSPEC_SELECTANY __declspec(selectany)
118 #endif
119
120 #ifndef NOP_FUNCTION
121 #define NOP_FUNCTION (void)0
122 #endif
123
124 #ifndef DECLSPEC_NOINLINE
125 #define DECLSPEC_NOINLINE
126 #endif
127
128 #ifndef FORCEINLINE
129 #define FORCEINLINE static __inline__
130 #endif
131
132 #ifndef DECLSPEC_DEPRECATED
133 #define DECLSPEC_DEPRECATED __declspec(deprecated)
134 #define DEPRECATE_SUPPORTED
135 #endif
136
137 #define DECLSPEC_DEPRECATED_DDK
138 #define PRAGMA_DEPRECATED_DDK 0
139
140 typedef void *PVOID;
141 typedef void *PVOID64;
142
143 #define NTAPI __stdcall
144 #define NTSYSAPI DECLSPEC_IMPORT
145 #define NTSYSCALLAPI DECLSPEC_IMPORT
146
147 #ifndef VOID
148 #define VOID void
149 typedef char CHAR;
150 typedef short SHORT;
151 typedef long LONG;
152 #endif
153
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;
171
172 #ifdef UNICODE
173 #ifndef _TCHAR_DEFINED
174 #define _TCHAR_DEFINED
175 typedef WCHAR TCHAR,*PTCHAR;
176 typedef WCHAR TBYTE ,*PTBYTE;
177 #endif
178
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
192
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
198
199 #define TEXT(quote) __TEXT(quote)
200
201 typedef SHORT *PSHORT;
202 typedef LONG *PLONG;
203
204 typedef void *HANDLE;
205 #define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
206 typedef HANDLE *PHANDLE;
207
208 typedef BYTE FCHAR;
209 typedef WORD FSHORT;
210 typedef DWORD FLONG;
211
212 #ifndef _HRESULT_DEFINED
213 #define _HRESULT_DEFINED
214 typedef LONG HRESULT;
215 #endif
216
217 #ifdef __cplusplus
218 #define EXTERN_C extern "C"
219 #else
220 #define EXTERN_C extern
221 #endif
222
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
235
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
251
252 #ifdef __ia64__
253 __declspec(align(16))
254 #endif
255 typedef struct _FLOAT128 {
256 __int64 LowPart;
257 __int64 HighPart;
258 } FLOAT128;
259
260 typedef FLOAT128 *PFLOAT128;
261
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;
266
267 #define MAXLONGLONG (0x7fffffffffffffff)
268 #else
269
270 typedef double LONGLONG;
271 typedef double ULONGLONG;
272 #endif
273
274 typedef LONGLONG *PLONGLONG;
275 typedef ULONGLONG *PULONGLONG;
276
277 typedef LONGLONG USN;
278
279 typedef union _LARGE_INTEGER {
280 struct {
281 DWORD LowPart;
282 LONG HighPart;
283 };
284 struct {
285 DWORD LowPart;
286 LONG HighPart;
287 } u;
288 LONGLONG QuadPart;
289 } LARGE_INTEGER;
290
291 typedef LARGE_INTEGER *PLARGE_INTEGER;
292
293 typedef union _ULARGE_INTEGER {
294 struct {
295 DWORD LowPart;
296 DWORD HighPart;
297 };
298 struct {
299 DWORD LowPart;
300 DWORD HighPart;
301 } u;
302 ULONGLONG QuadPart;
303 } ULARGE_INTEGER;
304
305 typedef ULARGE_INTEGER *PULARGE_INTEGER;
306
307 typedef struct _LUID {
308 DWORD LowPart;
309 LONG HighPart;
310 } LUID,*PLUID;
311
312 #define _DWORDLONG_
313 typedef ULONGLONG DWORDLONG;
314 typedef DWORDLONG *PDWORDLONG;
315
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
331
332 #define Int64ShraMod32(a,b) ((LONGLONG)(a) >> (b))
333 #define Int64ShllMod32(a,b) ((ULONGLONG)(a) << (b))
334
335 #ifdef __cplusplus
336 extern "C" {
337 #endif
338
339 #ifdef __x86_64
340
341 #define RotateLeft8 _rotl8
342 #define RotateLeft16 _rotl16
343 #define RotateRight8 _rotr8
344 #define RotateRight16 _rotr16
345
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
351
352 #define RotateLeft32 _rotl
353 #define RotateLeft64 _rotl64
354 #define RotateRight32 _rotr
355 #define RotateRight64 _rotr64
356
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
362 }
363 #endif
364
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)
369
370 #ifndef _BOOLEAN_
371 #define _BOOLEAN_
372 typedef BYTE BOOLEAN;
373 #endif
374 typedef BOOLEAN *PBOOLEAN;
375
376 typedef struct _LIST_ENTRY {
377 struct _LIST_ENTRY *Flink;
378 struct _LIST_ENTRY *Blink;
379 } LIST_ENTRY,*PLIST_ENTRY,*RESTRICTED_POINTER PRLIST_ENTRY;
380
381 typedef struct _SINGLE_LIST_ENTRY {
382 struct _SINGLE_LIST_ENTRY *Next;
383 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
384
385 typedef struct LIST_ENTRY32 {
386 DWORD Flink;
387 DWORD Blink;
388 } LIST_ENTRY32;
389 typedef LIST_ENTRY32 *PLIST_ENTRY32;
390
391 typedef struct LIST_ENTRY64 {
392 ULONGLONG Flink;
393 ULONGLONG Blink;
394 } LIST_ENTRY64;
395 typedef LIST_ENTRY64 *PLIST_ENTRY64;
396
397 #include <guiddef.h>
398
399 #ifndef __OBJECTID_DEFINED
400 #define __OBJECTID_DEFINED
401 typedef struct _OBJECTID {
402 GUID Lineage;
403 DWORD Uniquifier;
404 } OBJECTID;
405 #endif
406
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
416
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)
423
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
429
430 #define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
431 #define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
432
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)))
436
437 #ifdef __cplusplus
438 #define RTL_CONST_CAST(type) const_cast<type>
439 #else
440 #define RTL_CONST_CAST(type) (type)
441 #endif
442
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)))
446
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
464
465 #define PRODUCT_UNDEFINED 0x0
466
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
492
493 #define PRODUCT_UNLICENSED 0xabcdabcd
494
495 #define LANG_NEUTRAL 0x00
496 #define LANG_INVARIANT 0x7f
497
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
624
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
631
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
722
723 #define SORT_DEFAULT 0x0
724 #define SORT_INVARIANT_MATH 0x1
725
726 #define SORT_JAPANESE_XJIS 0x0
727 #define SORT_JAPANESE_UNICODE 0x1
728 #define SORT_JAPANESE_RADICALSTROKE 0x4
729
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
735
736 #define SORT_KOREAN_KSC 0x0
737 #define SORT_KOREAN_UNICODE 0x1
738
739 #define SORT_GERMAN_PHONE_BOOK 0x1
740
741 #define SORT_HUNGARIAN_DEFAULT 0x0
742 #define SORT_HUNGARIAN_TECHNICAL 0x1
743
744 #define SORT_GEORGIAN_TRADITIONAL 0x0
745 #define SORT_GEORGIAN_MODERN 0x1
746
747 #define MAKELANGID(p,s) ((((WORD)(s)) << 10) | (WORD)(p))
748 #define PRIMARYLANGID(lgid) ((WORD)(lgid) & 0x3ff)
749 #define SUBLANGID(lgid) ((WORD)(lgid) >> 10)
750
751 #define NLS_VALID_LOCALE_MASK 0x000fffff
752
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))
758
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))
762
763 #define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT,SORT_DEFAULT))
764 #define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT,SORT_DEFAULT))
765
766 #define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
767
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))
771
772 #define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
773
774 #define UNREFERENCED_PARAMETER(P) (P)
775 #define DBG_UNREFERENCED_PARAMETER(P) (P)
776 #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
777
778 #define DEFAULT_UNREACHABLE
779
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
825
826 #define MAXIMUM_WAIT_OBJECTS 64
827 #define MAXIMUM_SUSPEND_COUNT MAXCHAR
828
829 typedef ULONG_PTR KSPIN_LOCK;
830 typedef KSPIN_LOCK *PKSPIN_LOCK;
831
832 #ifdef _AMD64_
833
834 #if defined(__x86_64) && !defined(RC_INVOKED)
835
836 #ifdef __cplusplus
837 extern "C" {
838 #endif
839
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
852
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);
859 }
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);
866 }
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);
873 }
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);
880 }
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);
887 }
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);
894 }
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);
901 }
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);
908 }
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);
915 }
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);
922 }
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);
929 }
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);
936 }
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);
943 }
944 #define BitScanForward _BitScanForward
945 #define BitScanReverse _BitScanReverse
946 #define BitScanForward64 _BitScanForward64
947 #define BitScanReverse64 _BitScanReverse64
948
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;
952 }
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;
956 }
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;
960 }
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;
964 }
965
966 #define InterlockedIncrement16 _InterlockedIncrement16
967 #define InterlockedDecrement16 _InterlockedDecrement16
968 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
969
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
985
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
1000
1001 #define InterlockedExchangePointer _InterlockedExchangePointer
1002 #define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1003 #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1004 #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1005
1006 #define InterlockedExchangeAddSizeT(a,b) InterlockedExchangeAdd64((LONG64 *)a,b)
1007 #define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
1008 #define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
1009
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));
1018 }
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));
1027 }
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;
1035 }
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;
1041 }
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;
1046 }
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;
1051 }
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;
1057 }
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;
1062 }
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;
1067 }
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));
1076 }
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));
1085 }
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;
1092 }
1093 LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value);
1094
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;
1102 }
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));
1111 }
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));
1120 }
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;
1127 }
1128 LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value);
1129
1130 #ifndef _X86AMD64_
1131 __CRT_INLINE LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value) { return InterlockedExchangeAdd64(Addend,Value) + Value; }
1132 #endif
1133
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;
1138 }
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;
1143 }
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;
1150 }
1151
1152 #define CacheLineFlush(Address) _mm_clflush(Address)
1153
1154 VOID _ReadWriteBarrier(VOID);
1155
1156 #define FastFence __faststorefence
1157 #define LoadFence _mm_lfence
1158 #define MemoryFence _mm_mfence
1159 #define StoreFence _mm_sfence
1160
1161 VOID __faststorefence(VOID);
1162 VOID _m_prefetchw(volatile CONST VOID *Source);
1163
1164 //!__TINYC__: #include <intrin.h>
1165
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))
1171
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
1176
1177 #define ReadMxCsr _mm_getcsr
1178 #define WriteMxCsr _mm_setcsr
1179
1180 VOID __int2c(VOID);
1181
1182 #define DbgRaiseAssertionFailure() __int2c()
1183 #define GetCallersEflags() __getcallerseflags()
1184
1185 unsigned __int32 __getcallerseflags(VOID);
1186
1187 #define GetSegmentLimit __segmentlimit
1188
1189 DWORD __segmentlimit(DWORD Selector);
1190
1191 #define ReadTimeStampCounter() __rdtsc()
1192
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);
1202
1203 #define MultiplyHigh __mulh
1204 #define UnsignedMultiplyHigh __umulh
1205
1206 LONGLONG MultiplyHigh(LONGLONG Multiplier,LONGLONG Multiplicand);
1207 ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
1208
1209 #define ShiftLeft128 __shiftleft128
1210 #define ShiftRight128 __shiftright128
1211
1212 DWORD64 ShiftLeft128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1213 DWORD64 ShiftRight128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1214
1215 #define Multiply128 _mul128
1216
1217 LONG64 Multiply128(LONG64 Multiplier,LONG64 Multiplicand,LONG64 *HighProduct);
1218
1219 #define UnsignedMultiply128 _umul128
1220
1221 DWORD64 UnsignedMultiply128(DWORD64 Multiplier,DWORD64 Multiplicand,DWORD64 *HighProduct);
1222
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;
1230 }
1231
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;
1239 }
1240
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;
1246 }
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;
1252 }
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;
1258 }
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;
1264 }
1265 __CRT_INLINE VOID __writegsbyte(DWORD Offset,BYTE Data) {
1266 __asm__ volatile ("movb %0,%%gs:%1"
1267 : "=r" (Data) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1268 }
1269 __CRT_INLINE VOID __writegsword(DWORD Offset,WORD Data) {
1270 __asm__ volatile ("movw %0,%%gs:%1"
1271 : "=r" (Data) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1272 }
1273 __CRT_INLINE VOID __writegsdword(DWORD Offset,DWORD Data) {
1274 __asm__ volatile ("movl %0,%%gs:%1"
1275 : "=r" (Data) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1276 }
1277 __CRT_INLINE VOID __writegsqword(DWORD Offset,DWORD64 Data) {
1278 __asm__ volatile ("movq %0,%%gs:%1"
1279 : "=r" (Data) ,"=m" ((*(volatile long *) (DWORD64) Offset)));
1280 }
1281
1282 #ifdef __cplusplus
1283 }
1284 #endif
1285 #endif
1286
1287 #define EXCEPTION_READ_FAULT 0
1288 #define EXCEPTION_WRITE_FAULT 1
1289 #define EXCEPTION_EXECUTE_FAULT 8
1290
1291 #if !defined(RC_INVOKED)
1292
1293 #define CONTEXT_AMD64 0x100000
1294
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)
1300
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)
1303
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
1309
1310 #define INITIAL_MXCSR 0x1f80
1311 #define INITIAL_FPCSR 0x027f
1312
1313 typedef DECLSPEC_ALIGN(16) struct _M128A {
1314 ULONGLONG Low;
1315 LONGLONG High;
1316 } M128A,*PM128A;
1317
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;
1336
1337 #define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
1338
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;
1400 };
1401 };
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;
1410
1411 #define RUNTIME_FUNCTION_INDIRECT 0x1
1412
1413 typedef struct _RUNTIME_FUNCTION {
1414 DWORD BeginAddress;
1415 DWORD EndAddress;
1416 DWORD UnwindData;
1417 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
1418
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);
1421
1422 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1423
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
1429
1430 #ifdef I_X86_
1431 #if(defined(_X86_) && !defined(__x86_64)) && !defined(RC_INVOKED)
1432 #ifdef __cplusplus
1433 extern "C" {
1434 #endif
1435
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);
1442 }
1443
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);
1450 }
1451
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);
1458 }
1459
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
1468
1469 #ifdef __cplusplus
1470 }
1471 #endif
1472 #endif
1473
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));
1479 }
1480 #define YieldProcessor() __asm__ __volatile__("rep nop ");
1481
1482 #define PreFetchCacheLine(l,a)
1483 #define ReadForWriteAccess(p) (*(p))
1484
1485 #define PF_TEMPORAL_LEVEL_1
1486 #define PF_NON_TEMPORAL_LEVEL_ALL
1487
1488 __CRT_INLINE VOID DbgRaiseAssertionFailure(void) {
1489 __asm__ __volatile__("int 0x2c ");
1490 }
1491 PVOID GetCurrentFiber(void);
1492 __CRT_INLINE PVOID GetCurrentFiber(void)
1493 {
1494 void *ret;
1495 __asm__ volatile ("movl %%fs:0x10,%0"
1496 : "=r" (ret));
1497 return ret;
1498 }
1499 PVOID GetFiberData(void);
1500 __CRT_INLINE PVOID GetFiberData(void)
1501 {
1502 void *ret;
1503 __asm__ volatile ("movl %%fs:0x10,%0\n"
1504 "movl (%0),%0"
1505 : "=r" (ret));
1506 return ret;
1507 }
1508 #endif
1509
1510 #define EXCEPTION_READ_FAULT 0
1511 #define EXCEPTION_WRITE_FAULT 1
1512 #define EXCEPTION_EXECUTE_FAULT 8
1513
1514 #define SIZE_OF_80387_REGISTERS 80
1515
1516 #if !defined(RC_INVOKED)
1517
1518 #define CONTEXT_i386 0x00010000
1519 #define CONTEXT_i486 0x00010000
1520
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)
1527
1528 #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
1529
1530 #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
1531 #endif
1532
1533 #define MAXIMUM_SUPPORTED_EXTENSION 512
1534
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;
1546
1547 typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
1548
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;
1562
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;
1577
1578 typedef CONTEXT *PCONTEXT;
1579 #endif
1580
1581 #ifndef _LDT_ENTRY_DEFINED
1582 #define _LDT_ENTRY_DEFINED
1583
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
1609
1610 #if defined(__ia64__) && !defined(RC_INVOKED)
1611
1612 #ifdef __cplusplus
1613 extern "C" {
1614 #endif
1615
1616 BOOLEAN BitScanForward64(DWORD *Index,DWORD64 Mask);
1617 BOOLEAN BitScanReverse64(DWORD *Index,DWORD64 Mask);
1618
1619 #ifdef __cplusplus
1620 }
1621 #endif
1622 #endif
1623
1624 #if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
1625
1626 void *_cdecl _rdteb(void);
1627 #ifdef __ia64__
1628
1629 #define NtCurrentTeb() ((struct _TEB *)_rdteb())
1630 #define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
1631 #define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
1632
1633 #ifdef __cplusplus
1634 extern "C" {
1635 #endif
1636
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);
1644
1645 #define MD_LFHINT_NONE 0x00
1646 #define MD_LFHINT_NT1 0x01
1647 #define MD_LFHINT_NT2 0x02
1648 #define MD_LFHINT_NTA 0x03
1649
1650 #ifdef __cplusplus
1651 }
1652 #endif
1653
1654 #define YieldProcessor __yield
1655 #define MemoryBarrier __mf
1656 #define PreFetchCacheLine __lfetch
1657 #define ReadForWriteAccess(p) (*(p))
1658 #define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
1659
1660 #define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
1661 #define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
1662
1663 #define UnsignedMultiplyHigh __UMULH
1664
1665 ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
1666 #else
1667 struct _TEB *NtCurrentTeb(void);
1668 #endif
1669 #endif
1670
1671 #ifdef _IA64_
1672
1673 #define EXCEPTION_READ_FAULT 0
1674 #define EXCEPTION_WRITE_FAULT 1
1675 #define EXCEPTION_EXECUTE_FAULT 2
1676
1677 #if !defined(RC_INVOKED)
1678
1679 #define CONTEXT_IA64 0x00080000
1680
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)
1687
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)
1691
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
1697
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;
1908
1909 typedef struct _PLABEL_DESCRIPTOR {
1910 ULONGLONG EntryPoint;
1911 ULONGLONG GlobalPointer;
1912 } PLABEL_DESCRIPTOR,*PPLABEL_DESCRIPTOR;
1913
1914 typedef struct _RUNTIME_FUNCTION {
1915 DWORD BeginAddress;
1916 DWORD EndAddress;
1917 DWORD UnwindInfoAddress;
1918 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
1919
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);
1922
1923 #define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1924
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
1931
1932 #define EXCEPTION_NONCONTINUABLE 0x1
1933 #define EXCEPTION_MAXIMUM_PARAMETERS 15
1934
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;
1943
1944 typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
1945
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;
1954
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;
1964
1965 typedef struct _EXCEPTION_POINTERS {
1966 PEXCEPTION_RECORD ExceptionRecord;
1967 PCONTEXT ContextRecord;
1968 } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS;
1969
1970 #ifdef __x86_64
1971
1972 typedef EXCEPTION_DISPOSITION NTAPI EXCEPTION_ROUTINE (struct _EXCEPTION_RECORD *ExceptionRecord, PVOID EstablisherFrame, struct _CONTEXT *ContextRecord, PVOID DispatcherContext);
1973 #ifndef __PEXCEPTION_ROUTINE_DEFINED
1974 #define __PEXCEPTION_ROUTINE_DEFINED
1975 typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
1976 #endif
1977
1978 /* http://msdn.microsoft.com/en-us/library/ms680597(VS.85).aspx */
1979
1980 #define UNWIND_HISTORY_TABLE_SIZE 12
1981
1982 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
1983 ULONG64 ImageBase;
1984 PRUNTIME_FUNCTION FunctionEntry;
1985 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
1986
1987 #define UNWIND_HISTORY_TABLE_NONE 0
1988 #define UNWIND_HISTORY_TABLE_GLOBAL 1
1989 #define UNWIND_HISTORY_TABLE_LOCAL 2
1990
1991 typedef struct _UNWIND_HISTORY_TABLE {
1992 ULONG Count;
1993 UCHAR Search;
1994 ULONG64 LowAddress;
1995 ULONG64 HighAddress;
1996 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
1997 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
1998
1999 /* http://msdn.microsoft.com/en-us/library/b6sf5kbd(VS.80).aspx */
2000
2001 struct _DISPATCHER_CONTEXT;
2002 typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
2003 typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
2004
2005 struct _DISPATCHER_CONTEXT {
2006 ULONG64 ControlPc;
2007 ULONG64 ImageBase;
2008 PRUNTIME_FUNCTION FunctionEntry;
2009 ULONG64 EstablisherFrame;
2010 ULONG64 TargetIp;
2011 PCONTEXT ContextRecord;
2012 PEXCEPTION_ROUTINE LanguageHandler;
2013 PVOID HandlerData;
2014 /* http://www.nynaeve.net/?p=99 */
2015 PUNWIND_HISTORY_TABLE HistoryTable;
2016 ULONG ScopeIndex;
2017 ULONG Fill0;
2018 };
2019
2020 /* http://msdn.microsoft.com/en-us/library/ms680617(VS.85).aspx */
2021
2022 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
2023 {
2024 PM128A FloatingContext[16];
2025 PULONG64 IntegerContext[16];
2026 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2027 #endif /* defined(__x86_64) */
2028
2029 typedef PVOID PACCESS_TOKEN;
2030 typedef PVOID PSECURITY_DESCRIPTOR;
2031 typedef PVOID PSID;
2032
2033 typedef DWORD ACCESS_MASK;
2034 typedef ACCESS_MASK *PACCESS_MASK;
2035
2036 #define DELETE (0x00010000L)
2037 #define READ_CONTROL (0x00020000L)
2038 #define WRITE_DAC (0x00040000L)
2039 #define WRITE_OWNER (0x00080000L)
2040 #define SYNCHRONIZE (0x00100000L)
2041
2042 #define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
2043 #define STANDARD_RIGHTS_READ (READ_CONTROL)
2044 #define STANDARD_RIGHTS_WRITE (READ_CONTROL)
2045 #define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
2046 #define STANDARD_RIGHTS_ALL (0x001F0000L)
2047
2048 #define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
2049
2050 #define ACCESS_SYSTEM_SECURITY (0x01000000L)
2051
2052 #define MAXIMUM_ALLOWED (0x02000000L)
2053
2054 #define GENERIC_READ (0x80000000L)
2055 #define GENERIC_WRITE (0x40000000L)
2056 #define GENERIC_EXECUTE (0x20000000L)
2057 #define GENERIC_ALL (0x10000000L)
2058
2059 typedef struct _GENERIC_MAPPING {
2060 ACCESS_MASK GenericRead;
2061 ACCESS_MASK GenericWrite;
2062 ACCESS_MASK GenericExecute;
2063 ACCESS_MASK GenericAll;
2064 } GENERIC_MAPPING;
2065 typedef GENERIC_MAPPING *PGENERIC_MAPPING;
2066
2067 #include <pshpack4.h>
2068
2069 typedef struct _LUID_AND_ATTRIBUTES {
2070 LUID Luid;
2071 DWORD Attributes;
2072 } LUID_AND_ATTRIBUTES,*PLUID_AND_ATTRIBUTES;
2073 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2074 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
2075
2076 #include <poppack.h>
2077
2078 #ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
2079 #define SID_IDENTIFIER_AUTHORITY_DEFINED
2080 typedef struct _SID_IDENTIFIER_AUTHORITY {
2081 BYTE Value[6];
2082 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
2083 #endif
2084
2085 #ifndef SID_DEFINED
2086 #define SID_DEFINED
2087 typedef struct _SID {
2088 BYTE Revision;
2089 BYTE SubAuthorityCount;
2090 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
2091 DWORD SubAuthority[ANYSIZE_ARRAY];
2092 } SID,*PISID;
2093 #endif
2094
2095 #define SID_REVISION (1)
2096 #define SID_MAX_SUB_AUTHORITIES (15)
2097 #define SID_RECOMMENDED_SUB_AUTHORITIES (1)
2098
2099 #define SECURITY_MAX_SID_SIZE (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES *sizeof(DWORD)))
2100
2101 typedef enum _SID_NAME_USE {
2102 SidTypeUser = 1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown,SidTypeComputer
2103 } SID_NAME_USE,*PSID_NAME_USE;
2104
2105 typedef struct _SID_AND_ATTRIBUTES {
2106 PSID Sid;
2107 DWORD Attributes;
2108 } SID_AND_ATTRIBUTES,*PSID_AND_ATTRIBUTES;
2109
2110 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
2111 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
2112
2113 #define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
2114 #define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
2115 #define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
2116 #define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
2117 #define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
2118 #define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
2119
2120 #define SECURITY_NULL_RID (0x00000000L)
2121 #define SECURITY_WORLD_RID (0x00000000L)
2122 #define SECURITY_LOCAL_RID (0x00000000L)
2123
2124 #define SECURITY_CREATOR_OWNER_RID (0x00000000L)
2125 #define SECURITY_CREATOR_GROUP_RID (0x00000001L)
2126
2127 #define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
2128 #define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
2129
2130 #define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
2131
2132 #define SECURITY_DIALUP_RID (0x00000001L)
2133 #define SECURITY_NETWORK_RID (0x00000002L)
2134 #define SECURITY_BATCH_RID (0x00000003L)
2135 #define SECURITY_INTERACTIVE_RID (0x00000004L)
2136 #define SECURITY_LOGON_IDS_RID (0x00000005L)
2137 #define SECURITY_LOGON_IDS_RID_COUNT (3L)
2138 #define SECURITY_SERVICE_RID (0x00000006L)
2139 #define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
2140 #define SECURITY_PROXY_RID (0x00000008L)
2141 #define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
2142 #define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
2143 #define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
2144 #define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
2145 #define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
2146 #define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
2147 #define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
2148 #define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
2149 #define SECURITY_IUSER_RID (0x00000011L)
2150
2151 #define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
2152 #define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
2153 #define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
2154
2155 #define SECURITY_NT_NON_UNIQUE (0x00000015L)
2156 #define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
2157
2158 #define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
2159
2160 #define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
2161 #define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
2162
2163 #define SECURITY_PACKAGE_BASE_RID (0x00000040L)
2164 #define SECURITY_PACKAGE_RID_COUNT (2L)
2165 #define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
2166 #define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
2167 #define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
2168
2169 #define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
2170 #define SECURITY_SERVICE_ID_RID_COUNT (6L)
2171
2172 #define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
2173
2174 #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
2175 #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
2176
2177 #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
2178
2179 #define FOREST_USER_RID_MAX (0x000001F3L)
2180
2181 #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
2182 #define DOMAIN_USER_RID_GUEST (0x000001F5L)
2183 #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
2184
2185 #define DOMAIN_USER_RID_MAX (0x000003E7L)
2186
2187 #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
2188 #define DOMAIN_GROUP_RID_USERS (0x00000201L)
2189 #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
2190 #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
2191 #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
2192 #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
2193 #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
2194 #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
2195 #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
2196 #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
2197
2198 #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
2199 #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
2200 #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
2201 #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
2202
2203 #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
2204 #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
2205 #define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
2206 #define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
2207
2208 #define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
2209 #define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
2210 #define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
2211 #define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
2212 #define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
2213 #define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
2214
2215 #define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
2216 #define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
2217 #define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
2218 #define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
2219 #define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
2220
2221 #define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
2222 #define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
2223 #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
2224 #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
2225 #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
2226
2227 #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
2228 #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
2229 #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
2230 #define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
2231 #define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
2232 #define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
2233 #define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
2234
2235 #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
2236
2237 #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
2238
2239 typedef enum {
2240 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
2241 } WELL_KNOWN_SID_TYPE;
2242
2243 #define SYSTEM_LUID { 0x3E7,0x0 }
2244 #define ANONYMOUS_LOGON_LUID { 0x3e6,0x0 }
2245 #define LOCALSERVICE_LUID { 0x3e5,0x0 }
2246 #define NETWORKSERVICE_LUID { 0x3e4,0x0 }
2247 #define IUSER_LUID { 0x3e3, 0x0 }
2248
2249 #define SE_GROUP_MANDATORY (0x00000001L)
2250 #define SE_GROUP_ENABLED_BY_DEFAULT (0x00000002L)
2251 #define SE_GROUP_ENABLED (0x00000004L)
2252 #define SE_GROUP_OWNER (0x00000008L)
2253 #define SE_GROUP_USE_FOR_DENY_ONLY (0x00000010L)
2254 #define SE_GROUP_INTEGRITY (0x00000020L)
2255 #define SE_GROUP_INTEGRITY_ENABLED (0x00000040L)
2256 #define SE_GROUP_LOGON_ID (0xC0000000L)
2257 #define SE_GROUP_RESOURCE (0x20000000L)
2258
2259 #define ACL_REVISION (2)
2260 #define ACL_REVISION_DS (4)
2261
2262 #define ACL_REVISION1 (1)
2263 #define MIN_ACL_REVISION ACL_REVISION2
2264 #define ACL_REVISION2 (2)
2265 #define ACL_REVISION3 (3)
2266 #define ACL_REVISION4 (4)
2267 #define MAX_ACL_REVISION ACL_REVISION4
2268
2269 typedef struct _ACL {
2270 BYTE AclRevision;
2271 BYTE Sbz1;
2272 WORD AclSize;
2273 WORD AceCount;
2274 WORD Sbz2;
2275 } ACL;
2276 typedef ACL *PACL;
2277
2278 typedef struct _ACE_HEADER {
2279 BYTE AceType;
2280 BYTE AceFlags;
2281 WORD AceSize;
2282 } ACE_HEADER;
2283 typedef ACE_HEADER *PACE_HEADER;
2284
2285 #define ACCESS_MIN_MS_ACE_TYPE (0x0)
2286 #define ACCESS_ALLOWED_ACE_TYPE (0x0)
2287 #define ACCESS_DENIED_ACE_TYPE (0x1)
2288 #define SYSTEM_AUDIT_ACE_TYPE (0x2)
2289 #define SYSTEM_ALARM_ACE_TYPE (0x3)
2290 #define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
2291
2292 #define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
2293 #define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
2294
2295 #define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
2296 #define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
2297 #define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
2298 #define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
2299 #define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
2300 #define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
2301
2302 #define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
2303 #define ACCESS_MAX_MS_ACE_TYPE (0x8)
2304
2305 #define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
2306 #define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
2307 #define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
2308 #define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
2309 #define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
2310 #define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
2311 #define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
2312 #define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
2313
2314 #define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
2315 #define ACCESS_MAX_MS_V5_ACE_TYPE (0x11)
2316
2317 #define OBJECT_INHERIT_ACE (0x1)
2318 #define CONTAINER_INHERIT_ACE (0x2)
2319 #define NO_PROPAGATE_INHERIT_ACE (0x4)
2320 #define INHERIT_ONLY_ACE (0x8)
2321 #define INHERITED_ACE (0x10)
2322 #define VALID_INHERIT_FLAGS (0x1F)
2323
2324 #define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
2325 #define FAILED_ACCESS_ACE_FLAG (0x80)
2326
2327 typedef struct _ACCESS_ALLOWED_ACE {
2328 ACE_HEADER Header;
2329 ACCESS_MASK Mask;
2330 DWORD SidStart;
2331 } ACCESS_ALLOWED_ACE;
2332
2333 typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
2334
2335 typedef struct _ACCESS_DENIED_ACE {
2336 ACE_HEADER Header;
2337 ACCESS_MASK Mask;
2338 DWORD SidStart;
2339 } ACCESS_DENIED_ACE;
2340 typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
2341
2342 typedef struct _SYSTEM_AUDIT_ACE {
2343 ACE_HEADER Header;
2344 ACCESS_MASK Mask;
2345 DWORD SidStart;
2346 } SYSTEM_AUDIT_ACE;
2347 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
2348
2349 typedef struct _SYSTEM_ALARM_ACE {
2350 ACE_HEADER Header;
2351 ACCESS_MASK Mask;
2352 DWORD SidStart;
2353 } SYSTEM_ALARM_ACE;
2354 typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
2355
2356 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
2357 ACE_HEADER Header;
2358 ACCESS_MASK Mask;
2359 DWORD Flags;
2360 GUID ObjectType;
2361 GUID InheritedObjectType;
2362 DWORD SidStart;
2363 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
2364
2365 typedef struct _ACCESS_DENIED_OBJECT_ACE {
2366 ACE_HEADER Header;
2367 ACCESS_MASK Mask;
2368 DWORD Flags;
2369 GUID ObjectType;
2370 GUID InheritedObjectType;
2371 DWORD SidStart;
2372 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
2373
2374 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
2375 ACE_HEADER Header;
2376 ACCESS_MASK Mask;
2377 DWORD Flags;
2378 GUID ObjectType;
2379 GUID InheritedObjectType;
2380 DWORD SidStart;
2381 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
2382
2383 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
2384 ACE_HEADER Header;
2385 ACCESS_MASK Mask;
2386 DWORD Flags;
2387 GUID ObjectType;
2388 GUID InheritedObjectType;
2389 DWORD SidStart;
2390 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
2391
2392 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
2393 ACE_HEADER Header;
2394 ACCESS_MASK Mask;
2395 DWORD SidStart;
2396
2397 } ACCESS_ALLOWED_CALLBACK_ACE,*PACCESS_ALLOWED_CALLBACK_ACE;
2398
2399 typedef struct _ACCESS_DENIED_CALLBACK_ACE {
2400 ACE_HEADER Header;
2401 ACCESS_MASK Mask;
2402 DWORD SidStart;
2403
2404 } ACCESS_DENIED_CALLBACK_ACE,*PACCESS_DENIED_CALLBACK_ACE;
2405
2406 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
2407 ACE_HEADER Header;
2408 ACCESS_MASK Mask;
2409 DWORD SidStart;
2410
2411 } SYSTEM_AUDIT_CALLBACK_ACE,*PSYSTEM_AUDIT_CALLBACK_ACE;
2412
2413 typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
2414 ACE_HEADER Header;
2415 ACCESS_MASK Mask;
2416 DWORD SidStart;
2417
2418 } SYSTEM_ALARM_CALLBACK_ACE,*PSYSTEM_ALARM_CALLBACK_ACE;
2419
2420 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
2421 ACE_HEADER Header;
2422 ACCESS_MASK Mask;
2423 DWORD Flags;
2424 GUID ObjectType;
2425 GUID InheritedObjectType;
2426 DWORD SidStart;
2427
2428 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE,*PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
2429
2430 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
2431 ACE_HEADER Header;
2432 ACCESS_MASK Mask;
2433 DWORD Flags;
2434 GUID ObjectType;
2435 GUID InheritedObjectType;
2436 DWORD SidStart;
2437
2438 } ACCESS_DENIED_CALLBACK_OBJECT_ACE,*PACCESS_DENIED_CALLBACK_OBJECT_ACE;
2439
2440 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
2441 ACE_HEADER Header;
2442 ACCESS_MASK Mask;
2443 DWORD Flags;
2444 GUID ObjectType;
2445 GUID InheritedObjectType;
2446 DWORD SidStart;
2447
2448 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE,*PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
2449
2450 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
2451 ACE_HEADER Header;
2452 ACCESS_MASK Mask;
2453 DWORD Flags;
2454 GUID ObjectType;
2455 GUID InheritedObjectType;
2456 DWORD SidStart;
2457
2458 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE,*PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
2459
2460 #define ACE_OBJECT_TYPE_PRESENT 0x1
2461 #define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
2462
2463 typedef enum _ACL_INFORMATION_CLASS {
2464 AclRevisionInformation = 1,AclSizeInformation
2465 } ACL_INFORMATION_CLASS;
2466
2467 typedef struct _ACL_REVISION_INFORMATION {
2468 DWORD AclRevision;
2469 } ACL_REVISION_INFORMATION;
2470 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
2471
2472 typedef struct _ACL_SIZE_INFORMATION {
2473 DWORD AceCount;
2474 DWORD AclBytesInUse;
2475 DWORD AclBytesFree;
2476 } ACL_SIZE_INFORMATION;
2477 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
2478
2479 #define SECURITY_DESCRIPTOR_REVISION (1)
2480 #define SECURITY_DESCRIPTOR_REVISION1 (1)
2481
2482 #define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
2483
2484 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
2485
2486 #define SE_OWNER_DEFAULTED (0x0001)
2487 #define SE_GROUP_DEFAULTED (0x0002)
2488 #define SE_DACL_PRESENT (0x0004)
2489 #define SE_DACL_DEFAULTED (0x0008)
2490 #define SE_SACL_PRESENT (0x0010)
2491 #define SE_SACL_DEFAULTED (0x0020)
2492 #define SE_DACL_AUTO_INHERIT_REQ (0x0100)
2493 #define SE_SACL_AUTO_INHERIT_REQ (0x0200)
2494 #define SE_DACL_AUTO_INHERITED (0x0400)
2495 #define SE_SACL_AUTO_INHERITED (0x0800)
2496 #define SE_DACL_PROTECTED (0x1000)
2497 #define SE_SACL_PROTECTED (0x2000)
2498 #define SE_RM_CONTROL_VALID (0x4000)
2499 #define SE_SELF_RELATIVE (0x8000)
2500
2501 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
2502 BYTE Revision;
2503 BYTE Sbz1;
2504 SECURITY_DESCRIPTOR_CONTROL Control;
2505 DWORD Owner;
2506 DWORD Group;
2507 DWORD Sacl;
2508 DWORD Dacl;
2509 } SECURITY_DESCRIPTOR_RELATIVE,*PISECURITY_DESCRIPTOR_RELATIVE;
2510
2511 typedef struct _SECURITY_DESCRIPTOR {
2512 BYTE Revision;
2513 BYTE Sbz1;
2514 SECURITY_DESCRIPTOR_CONTROL Control;
2515 PSID Owner;
2516 PSID Group;
2517 PACL Sacl;
2518 PACL Dacl;
2519
2520 } SECURITY_DESCRIPTOR,*PISECURITY_DESCRIPTOR;
2521
2522 typedef struct _OBJECT_TYPE_LIST {
2523 WORD Level;
2524 WORD Sbz;
2525 GUID *ObjectType;
2526 } OBJECT_TYPE_LIST,*POBJECT_TYPE_LIST;
2527
2528 #define ACCESS_OBJECT_GUID 0
2529 #define ACCESS_PROPERTY_SET_GUID 1
2530 #define ACCESS_PROPERTY_GUID 2
2531
2532 #define ACCESS_MAX_LEVEL 4
2533
2534 typedef enum _AUDIT_EVENT_TYPE {
2535 AuditEventObjectAccess,AuditEventDirectoryServiceAccess
2536 } AUDIT_EVENT_TYPE,*PAUDIT_EVENT_TYPE;
2537
2538 #define AUDIT_ALLOW_NO_PRIVILEGE 0x1
2539
2540 #define ACCESS_DS_SOURCE_A "DS"
2541 #define ACCESS_DS_SOURCE_W L"DS"
2542 #define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
2543 #define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
2544
2545 #define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
2546 #define SE_PRIVILEGE_ENABLED (0x00000002L)
2547 #define SE_PRIVILEGE_REMOVED (0X00000004L)
2548 #define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
2549
2550 #define PRIVILEGE_SET_ALL_NECESSARY (1)
2551
2552 typedef struct _PRIVILEGE_SET {
2553 DWORD PrivilegeCount;
2554 DWORD Control;
2555 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
2556 } PRIVILEGE_SET,*PPRIVILEGE_SET;
2557
2558 #define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
2559 #define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
2560 #define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
2561 #define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
2562 #define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
2563 #define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
2564 #define SE_TCB_NAME TEXT("SeTcbPrivilege")
2565 #define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
2566 #define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
2567 #define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
2568 #define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
2569 #define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
2570 #define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
2571 #define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
2572 #define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
2573 #define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
2574 #define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
2575 #define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
2576 #define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
2577 #define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
2578 #define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
2579 #define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
2580 #define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
2581 #define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
2582 #define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
2583 #define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
2584 #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
2585 #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
2586 #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
2587 #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
2588
2589 typedef enum _SECURITY_IMPERSONATION_LEVEL {
2590 SecurityAnonymous,SecurityIdentification,SecurityImpersonation,SecurityDelegation
2591 } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
2592
2593 #define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
2594 #define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
2595 #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
2596 #define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
2597
2598 #define TOKEN_ASSIGN_PRIMARY (0x0001)
2599 #define TOKEN_DUPLICATE (0x0002)
2600 #define TOKEN_IMPERSONATE (0x0004)
2601 #define TOKEN_QUERY (0x0008)
2602 #define TOKEN_QUERY_SOURCE (0x0010)
2603 #define TOKEN_ADJUST_PRIVILEGES (0x0020)
2604 #define TOKEN_ADJUST_GROUPS (0x0040)
2605 #define TOKEN_ADJUST_DEFAULT (0x0080)
2606 #define TOKEN_ADJUST_SESSIONID (0x0100)
2607
2608 #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)
2609 #define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID)
2610 #define TOKEN_READ (STANDARD_RIGHTS_READ | TOKEN_QUERY)
2611
2612 #define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
2613
2614 #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
2615
2616 typedef enum _TOKEN_TYPE {
2617 TokenPrimary = 1,TokenImpersonation
2618 } TOKEN_TYPE;
2619 typedef TOKEN_TYPE *PTOKEN_TYPE;
2620
2621 typedef enum _TOKEN_INFORMATION_CLASS {
2622 TokenUser = 1,TokenGroups,TokenPrivileges,TokenOwner,TokenPrimaryGroup,TokenDefaultDacl,TokenSource,TokenType,TokenImpersonationLevel,
2623 TokenStatistics,TokenRestrictedSids,TokenSessionId,TokenGroupsAndPrivileges,TokenSessionReference,TokenSandBoxInert,TokenAuditPolicy,
2624 TokenOrigin,MaxTokenInfoClass
2625 } TOKEN_INFORMATION_CLASS,*PTOKEN_INFORMATION_CLASS;
2626
2627 typedef struct _TOKEN_USER {
2628 SID_AND_ATTRIBUTES User;
2629 } TOKEN_USER,*PTOKEN_USER;
2630
2631 typedef struct _TOKEN_GROUPS {
2632 DWORD GroupCount;
2633 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
2634 } TOKEN_GROUPS,*PTOKEN_GROUPS;
2635
2636 typedef struct _TOKEN_PRIVILEGES {
2637 DWORD PrivilegeCount;
2638 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
2639 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES;
2640
2641 typedef struct _TOKEN_OWNER {
2642 PSID Owner;
2643 } TOKEN_OWNER,*PTOKEN_OWNER;
2644
2645 typedef struct _TOKEN_PRIMARY_GROUP {
2646 PSID PrimaryGroup;
2647 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
2648
2649 typedef struct _TOKEN_DEFAULT_DACL {
2650 PACL DefaultDacl;
2651 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
2652
2653 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
2654 DWORD SidCount;
2655 DWORD SidLength;
2656 PSID_AND_ATTRIBUTES Sids;
2657 DWORD RestrictedSidCount;
2658 DWORD RestrictedSidLength;
2659 PSID_AND_ATTRIBUTES RestrictedSids;
2660 DWORD PrivilegeCount;
2661 DWORD PrivilegeLength;
2662 PLUID_AND_ATTRIBUTES Privileges;
2663 LUID AuthenticationId;
2664 } TOKEN_GROUPS_AND_PRIVILEGES,*PTOKEN_GROUPS_AND_PRIVILEGES;
2665
2666 #define TOKEN_AUDIT_SUCCESS_INCLUDE 0x1
2667 #define TOKEN_AUDIT_SUCCESS_EXCLUDE 0x2
2668 #define TOKEN_AUDIT_FAILURE_INCLUDE 0x4
2669 #define TOKEN_AUDIT_FAILURE_EXCLUDE 0x8
2670
2671 #define VALID_AUDIT_POLICY_BITS (TOKEN_AUDIT_SUCCESS_INCLUDE | TOKEN_AUDIT_SUCCESS_EXCLUDE | TOKEN_AUDIT_FAILURE_INCLUDE | TOKEN_AUDIT_FAILURE_EXCLUDE)
2672 #define VALID_TOKEN_AUDIT_POLICY_ELEMENT(P) ((((P).PolicyMask & ~VALID_AUDIT_POLICY_BITS)==0) && ((P).Category <= AuditEventMaxType))
2673
2674 typedef struct _TOKEN_AUDIT_POLICY_ELEMENT {
2675 DWORD Category;
2676 DWORD PolicyMask;
2677 } TOKEN_AUDIT_POLICY_ELEMENT,*PTOKEN_AUDIT_POLICY_ELEMENT;
2678
2679 typedef struct _TOKEN_AUDIT_POLICY {
2680 DWORD PolicyCount;
2681 TOKEN_AUDIT_POLICY_ELEMENT Policy[ANYSIZE_ARRAY];
2682 } TOKEN_AUDIT_POLICY,*PTOKEN_AUDIT_POLICY;
2683
2684 #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))
2685 #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))
2686
2687 #define TOKEN_SOURCE_LENGTH 8
2688
2689 typedef struct _TOKEN_SOURCE {
2690 CHAR SourceName[TOKEN_SOURCE_LENGTH];
2691 LUID SourceIdentifier;
2692 } TOKEN_SOURCE,*PTOKEN_SOURCE;
2693
2694 typedef struct _TOKEN_STATISTICS {
2695 LUID TokenId;
2696 LUID AuthenticationId;
2697 LARGE_INTEGER ExpirationTime;
2698 TOKEN_TYPE TokenType;
2699 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2700 DWORD DynamicCharged;
2701 DWORD DynamicAvailable;
2702 DWORD GroupCount;
2703 DWORD PrivilegeCount;
2704 LUID ModifiedId;
2705 } TOKEN_STATISTICS,*PTOKEN_STATISTICS;
2706
2707 typedef struct _TOKEN_CONTROL {
2708 LUID TokenId;
2709 LUID AuthenticationId;
2710 LUID ModifiedId;
2711 TOKEN_SOURCE TokenSource;
2712 } TOKEN_CONTROL,*PTOKEN_CONTROL;
2713
2714 typedef struct _TOKEN_ORIGIN {
2715 LUID OriginatingLogonSession;
2716 } TOKEN_ORIGIN,*PTOKEN_ORIGIN;
2717
2718 #define SECURITY_DYNAMIC_TRACKING (TRUE)
2719 #define SECURITY_STATIC_TRACKING (FALSE)
2720
2721 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
2722
2723 typedef struct _SECURITY_QUALITY_OF_SERVICE {
2724 DWORD Length;
2725 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
2726 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
2727 BOOLEAN EffectiveOnly;
2728 } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
2729
2730 typedef struct _SE_IMPERSONATION_STATE {
2731 PACCESS_TOKEN Token;
2732 BOOLEAN CopyOnOpen;
2733 BOOLEAN EffectiveOnly;
2734 SECURITY_IMPERSONATION_LEVEL Level;
2735 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
2736
2737 #define DISABLE_MAX_PRIVILEGE 0x1
2738 #define SANDBOX_INERT 0x2
2739
2740 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
2741
2742 #define OWNER_SECURITY_INFORMATION (0x00000001L)
2743 #define GROUP_SECURITY_INFORMATION (0x00000002L)
2744 #define DACL_SECURITY_INFORMATION (0x00000004L)
2745 #define SACL_SECURITY_INFORMATION (0x00000008L)
2746
2747 #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
2748 #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
2749 #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
2750 #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
2751
2752 #define PROCESS_TERMINATE (0x0001)
2753 #define PROCESS_CREATE_THREAD (0x0002)
2754 #define PROCESS_SET_SESSIONID (0x0004)
2755 #define PROCESS_VM_OPERATION (0x0008)
2756 #define PROCESS_VM_READ (0x0010)
2757 #define PROCESS_VM_WRITE (0x0020)
2758 #define PROCESS_DUP_HANDLE (0x0040)
2759 #define PROCESS_CREATE_PROCESS (0x0080)
2760 #define PROCESS_SET_QUOTA (0x0100)
2761 #define PROCESS_SET_INFORMATION (0x0200)
2762 #define PROCESS_QUERY_INFORMATION (0x0400)
2763 #define PROCESS_SUSPEND_RESUME (0x0800)
2764 #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xFFF)
2765
2766 #ifdef _WIN64
2767 #define MAXIMUM_PROCESSORS 64
2768 #else
2769 #define MAXIMUM_PROCESSORS 32
2770 #endif
2771
2772 #define THREAD_TERMINATE (0x0001)
2773 #define THREAD_SUSPEND_RESUME (0x0002)
2774 #define THREAD_GET_CONTEXT (0x0008)
2775 #define THREAD_SET_CONTEXT (0x0010)
2776 #define THREAD_SET_INFORMATION (0x0020)
2777 #define THREAD_QUERY_INFORMATION (0x0040)
2778 #define THREAD_SET_THREAD_TOKEN (0x0080)
2779 #define THREAD_IMPERSONATE (0x0100)
2780 #define THREAD_DIRECT_IMPERSONATION (0x0200)
2781
2782 #define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3FF)
2783
2784 #define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
2785 #define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
2786 #define JOB_OBJECT_QUERY (0x0004)
2787 #define JOB_OBJECT_TERMINATE (0x0008)
2788 #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
2789 #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1F)
2790
2791 typedef struct _JOB_SET_ARRAY {
2792 HANDLE JobHandle;
2793 DWORD MemberLevel;
2794 DWORD Flags;
2795 } JOB_SET_ARRAY,*PJOB_SET_ARRAY;
2796
2797 #define FLS_MAXIMUM_AVAILABLE 128
2798 #define TLS_MINIMUM_AVAILABLE 64
2799
2800 #ifndef _NT_TIB_DEFINED
2801 #define _NT_TIB_DEFINED
2802 typedef struct _NT_TIB {
2803 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
2804 PVOID StackBase;
2805 PVOID StackLimit;
2806 PVOID SubSystemTib;
2807 union {
2808 PVOID FiberData;
2809 DWORD Version;
2810 };
2811 PVOID ArbitraryUserPointer;
2812 struct _NT_TIB *Self;
2813 } NT_TIB;
2814 typedef NT_TIB *PNT_TIB;
2815 #endif
2816
2817 typedef struct _NT_TIB32 {
2818 DWORD ExceptionList;
2819 DWORD StackBase;
2820 DWORD StackLimit;
2821 DWORD SubSystemTib;
2822 union {
2823 DWORD FiberData;
2824 DWORD Version;
2825 };
2826 DWORD ArbitraryUserPointer;
2827 DWORD Self;
2828 } NT_TIB32,*PNT_TIB32;
2829
2830 typedef struct _NT_TIB64 {
2831 DWORD64 ExceptionList;
2832 DWORD64 StackBase;
2833 DWORD64 StackLimit;
2834 DWORD64 SubSystemTib;
2835 union {
2836 DWORD64 FiberData;
2837 DWORD Version;
2838 };
2839 DWORD64 ArbitraryUserPointer;
2840 DWORD64 Self;
2841 } NT_TIB64,*PNT_TIB64;
2842
2843 #if !defined(I_X86_) && !defined(_IA64_) && !defined(_AMD64_)
2844 #define WX86
2845 #endif
2846
2847 #define THREAD_BASE_PRIORITY_LOWRT 15
2848 #define THREAD_BASE_PRIORITY_MAX 2
2849 #define THREAD_BASE_PRIORITY_MIN (-2)
2850 #define THREAD_BASE_PRIORITY_IDLE (-15)
2851
2852 typedef struct _QUOTA_LIMITS {
2853 SIZE_T PagedPoolLimit;
2854 SIZE_T NonPagedPoolLimit;
2855 SIZE_T MinimumWorkingSetSize;
2856 SIZE_T MaximumWorkingSetSize;
2857 SIZE_T PagefileLimit;
2858 LARGE_INTEGER TimeLimit;
2859 } QUOTA_LIMITS,*PQUOTA_LIMITS;
2860
2861 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
2862 #define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
2863 #define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
2864 #define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
2865
2866 typedef struct _QUOTA_LIMITS_EX {
2867 SIZE_T PagedPoolLimit;
2868 SIZE_T NonPagedPoolLimit;
2869 SIZE_T MinimumWorkingSetSize;
2870 SIZE_T MaximumWorkingSetSize;
2871 SIZE_T PagefileLimit;
2872 LARGE_INTEGER TimeLimit;
2873 SIZE_T Reserved1;
2874 SIZE_T Reserved2;
2875 SIZE_T Reserved3;
2876 SIZE_T Reserved4;
2877 DWORD Flags;
2878 DWORD Reserved5;
2879 } QUOTA_LIMITS_EX,*PQUOTA_LIMITS_EX;
2880
2881 typedef struct _IO_COUNTERS {
2882 ULONGLONG ReadOperationCount;
2883 ULONGLONG WriteOperationCount;
2884 ULONGLONG OtherOperationCount;
2885 ULONGLONG ReadTransferCount;
2886 ULONGLONG WriteTransferCount;
2887 ULONGLONG OtherTransferCount;
2888 } IO_COUNTERS;
2889 typedef IO_COUNTERS *PIO_COUNTERS;
2890
2891 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
2892 LARGE_INTEGER TotalUserTime;
2893 LARGE_INTEGER TotalKernelTime;
2894 LARGE_INTEGER ThisPeriodTotalUserTime;
2895 LARGE_INTEGER ThisPeriodTotalKernelTime;
2896 DWORD TotalPageFaultCount;
2897 DWORD TotalProcesses;
2898 DWORD ActiveProcesses;
2899 DWORD TotalTerminatedProcesses;
2900 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
2901
2902 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
2903 LARGE_INTEGER PerProcessUserTimeLimit;
2904 LARGE_INTEGER PerJobUserTimeLimit;
2905 DWORD LimitFlags;
2906 SIZE_T MinimumWorkingSetSize;
2907 SIZE_T MaximumWorkingSetSize;
2908 DWORD ActiveProcessLimit;
2909 ULONG_PTR Affinity;
2910 DWORD PriorityClass;
2911 DWORD SchedulingClass;
2912 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
2913
2914 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
2915 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
2916 IO_COUNTERS IoInfo;
2917 SIZE_T ProcessMemoryLimit;
2918 SIZE_T JobMemoryLimit;
2919 SIZE_T PeakProcessMemoryUsed;
2920 SIZE_T PeakJobMemoryUsed;
2921 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
2922
2923 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
2924 DWORD NumberOfAssignedProcesses;
2925 DWORD NumberOfProcessIdsInList;
2926 ULONG_PTR ProcessIdList[1];
2927 } JOBOBJECT_BASIC_PROCESS_ID_LIST,*PJOBOBJECT_BASIC_PROCESS_ID_LIST;
2928
2929 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
2930 DWORD UIRestrictionsClass;
2931 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
2932
2933 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
2934 DWORD SecurityLimitFlags;
2935 HANDLE JobToken;
2936 PTOKEN_GROUPS SidsToDisable;
2937 PTOKEN_PRIVILEGES PrivilegesToDelete;
2938 PTOKEN_GROUPS RestrictedSids;
2939 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
2940
2941 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
2942 DWORD EndOfJobTimeAction;
2943 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
2944
2945 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
2946 PVOID CompletionKey;
2947 HANDLE CompletionPort;
2948 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
2949
2950 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
2951 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
2952 IO_COUNTERS IoInfo;
2953 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
2954
2955 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
2956 DWORD MemberLevel;
2957 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
2958
2959 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
2960 #define JOB_OBJECT_POST_AT_END_OF_JOB 1
2961
2962 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
2963 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
2964 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
2965 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
2966 #define JOB_OBJECT_MSG_NEW_PROCESS 6
2967 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
2968 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
2969 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
2970 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
2971
2972 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
2973 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
2974 #define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
2975 #define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
2976 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
2977 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
2978 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
2979 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
2980
2981 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
2982 #define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
2983 #define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
2984 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
2985 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
2986 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
2987
2988 #define JOB_OBJECT_LIMIT_RESERVED2 0x00004000
2989 #define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
2990 #define JOB_OBJECT_LIMIT_RESERVED4 0x00010000
2991 #define JOB_OBJECT_LIMIT_RESERVED5 0x00020000
2992 #define JOB_OBJECT_LIMIT_RESERVED6 0x00040000
2993
2994 #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
2995
2996 #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
2997 #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00003fff
2998 #define JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS 0x0007ffff
2999
3000 #define JOB_OBJECT_UILIMIT_NONE 0x00000000
3001
3002 #define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
3003 #define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
3004 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
3005 #define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
3006 #define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
3007 #define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
3008 #define JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
3009 #define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
3010
3011 #define JOB_OBJECT_UILIMIT_ALL 0x000000FF
3012
3013 #define JOB_OBJECT_UI_VALID_FLAGS 0x000000FF
3014
3015 #define JOB_OBJECT_SECURITY_NO_ADMIN 0x00000001
3016 #define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x00000002
3017 #define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x00000004
3018 #define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x00000008
3019
3020 #define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
3021
3022 typedef enum _JOBOBJECTINFOCLASS {
3023 JobObjectBasicAccountingInformation = 1,JobObjectBasicLimitInformation,JobObjectBasicProcessIdList,JobObjectBasicUIRestrictions,
3024 JobObjectSecurityLimitInformation,JobObjectEndOfJobTimeInformation,JobObjectAssociateCompletionPortInformation,
3025 JobObjectBasicAndIoAccountingInformation,JobObjectExtendedLimitInformation,JobObjectJobSetInformation,MaxJobObjectInfoClass
3026 } JOBOBJECTINFOCLASS;
3027
3028 #define EVENT_MODIFY_STATE 0x0002
3029 #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
3030
3031 #define MUTANT_QUERY_STATE 0x0001
3032
3033 #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| MUTANT_QUERY_STATE)
3034 #define SEMAPHORE_MODIFY_STATE 0x0002
3035 #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
3036
3037 #define TIMER_QUERY_STATE 0x0001
3038 #define TIMER_MODIFY_STATE 0x0002
3039
3040 #define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
3041
3042 #define TIME_ZONE_ID_UNKNOWN 0
3043 #define TIME_ZONE_ID_STANDARD 1
3044 #define TIME_ZONE_ID_DAYLIGHT 2
3045
3046 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
3047 RelationProcessorCore,RelationNumaNode,RelationCache
3048 } LOGICAL_PROCESSOR_RELATIONSHIP;
3049
3050 #define LTP_PC_SMT 0x1
3051
3052 typedef enum _PROCESSOR_CACHE_TYPE {
3053 CacheUnified,CacheInstruction,CacheData,CacheTrace
3054 } PROCESSOR_CACHE_TYPE;
3055
3056 #define CACHE_FULLY_ASSOCIATIVE 0xFF
3057
3058 typedef struct _CACHE_DESCRIPTOR {
3059 BYTE Level;
3060 BYTE Associativity;
3061 WORD LineSize;
3062 DWORD Size;
3063 PROCESSOR_CACHE_TYPE Type;
3064 } CACHE_DESCRIPTOR,*PCACHE_DESCRIPTOR;
3065
3066 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
3067 ULONG_PTR ProcessorMask;
3068 LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
3069 union {
3070 struct {
3071 BYTE Flags;
3072 } ProcessorCore;
3073 struct {
3074 DWORD NodeNumber;
3075 } NumaNode;
3076 CACHE_DESCRIPTOR Cache;
3077 ULONGLONG Reserved[2];
3078 };
3079 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION,*PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
3080
3081 #define PROCESSOR_INTEL_386 386
3082 #define PROCESSOR_INTEL_486 486
3083 #define PROCESSOR_INTEL_PENTIUM 586
3084 #define PROCESSOR_INTEL_IA64 2200
3085 #define PROCESSOR_AMD_X8664 8664
3086 #define PROCESSOR_MIPS_R4000 4000
3087 #define PROCESSOR_ALPHA_21064 21064
3088 #define PROCESSOR_PPC_601 601
3089 #define PROCESSOR_PPC_603 603
3090 #define PROCESSOR_PPC_604 604
3091 #define PROCESSOR_PPC_620 620
3092 #define PROCESSOR_HITACHI_SH3 10003
3093 #define PROCESSOR_HITACHI_SH3E 10004
3094 #define PROCESSOR_HITACHI_SH4 10005
3095 #define PROCESSOR_MOTOROLA_821 821
3096 #define PROCESSOR_SHx_SH3 103
3097 #define PROCESSOR_SHx_SH4 104
3098 #define PROCESSOR_STRONGARM 2577
3099 #define PROCESSOR_ARM720 1824
3100 #define PROCESSOR_ARM820 2080
3101 #define PROCESSOR_ARM920 2336
3102 #define PROCESSOR_ARM_7TDMI 70001
3103 #define PROCESSOR_OPTIL 0x494f
3104
3105 #define PROCESSOR_ARCHITECTURE_INTEL 0
3106 #define PROCESSOR_ARCHITECTURE_MIPS 1
3107 #define PROCESSOR_ARCHITECTURE_ALPHA 2
3108 #define PROCESSOR_ARCHITECTURE_PPC 3
3109 #define PROCESSOR_ARCHITECTURE_SHX 4
3110 #define PROCESSOR_ARCHITECTURE_ARM 5
3111 #define PROCESSOR_ARCHITECTURE_IA64 6
3112 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
3113 #define PROCESSOR_ARCHITECTURE_MSIL 8
3114 #define PROCESSOR_ARCHITECTURE_AMD64 9
3115 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
3116
3117 #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
3118
3119 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
3120 #define PF_FLOATING_POINT_EMULATED 1
3121 #define PF_COMPARE_EXCHANGE_DOUBLE 2
3122 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
3123 #define PF_PPC_MOVEMEM_64BIT_OK 4
3124 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
3125 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
3126 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
3127 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
3128 #define PF_PAE_ENABLED 9
3129 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
3130 #define PF_SSE_DAZ_MODE_AVAILABLE 11
3131 #define PF_NX_ENABLED 12
3132
3133 typedef struct _MEMORY_BASIC_INFORMATION {
3134 PVOID BaseAddress;
3135 PVOID AllocationBase;
3136 DWORD AllocationProtect;
3137 SIZE_T RegionSize;
3138 DWORD State;
3139 DWORD Protect;
3140 DWORD Type;
3141 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
3142
3143 typedef struct _MEMORY_BASIC_INFORMATION32 {
3144 DWORD BaseAddress;
3145 DWORD AllocationBase;
3146 DWORD AllocationProtect;
3147 DWORD RegionSize;
3148 DWORD State;
3149 DWORD Protect;
3150 DWORD Type;
3151 } MEMORY_BASIC_INFORMATION32,*PMEMORY_BASIC_INFORMATION32;
3152
3153 typedef DECLSPEC_ALIGN(16) struct _MEMORY_BASIC_INFORMATION64 {
3154 ULONGLONG BaseAddress;
3155 ULONGLONG AllocationBase;
3156 DWORD AllocationProtect;
3157 DWORD __alignment1;
3158 ULONGLONG RegionSize;
3159 DWORD State;
3160 DWORD Protect;
3161 DWORD Type;
3162 DWORD __alignment2;
3163 } MEMORY_BASIC_INFORMATION64,*PMEMORY_BASIC_INFORMATION64;
3164
3165 #define SECTION_QUERY 0x0001
3166 #define SECTION_MAP_WRITE 0x0002
3167 #define SECTION_MAP_READ 0x0004
3168 #define SECTION_MAP_EXECUTE 0x0008
3169 #define SECTION_EXTEND_SIZE 0x0010
3170 #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
3171
3172 #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE)
3173 #define PAGE_NOACCESS 0x01
3174 #define PAGE_READONLY 0x02
3175 #define PAGE_READWRITE 0x04
3176 #define PAGE_WRITECOPY 0x08
3177 #define PAGE_EXECUTE 0x10
3178 #define PAGE_EXECUTE_READ 0x20
3179 #define PAGE_EXECUTE_READWRITE 0x40
3180 #define PAGE_EXECUTE_WRITECOPY 0x80
3181 #define PAGE_GUARD 0x100
3182 #define PAGE_NOCACHE 0x200
3183 #define PAGE_WRITECOMBINE 0x400
3184 #define MEM_COMMIT 0x1000
3185 #define MEM_RESERVE 0x2000
3186 #define MEM_DECOMMIT 0x4000
3187 #define MEM_RELEASE 0x8000
3188 #define MEM_FREE 0x10000
3189 #define MEM_PRIVATE 0x20000
3190 #define MEM_MAPPED 0x40000
3191 #define MEM_RESET 0x80000
3192 #define MEM_TOP_DOWN 0x100000
3193 #define MEM_WRITE_WATCH 0x200000
3194 #define MEM_PHYSICAL 0x400000
3195 #define MEM_LARGE_PAGES 0x20000000
3196 #define MEM_4MB_PAGES 0x80000000
3197 #define SEC_FILE 0x800000
3198 #define SEC_IMAGE 0x1000000
3199 #define SEC_RESERVE 0x4000000
3200 #define SEC_COMMIT 0x8000000
3201 #define SEC_NOCACHE 0x10000000
3202 #define SEC_LARGE_PAGES 0x80000000
3203 #define MEM_IMAGE SEC_IMAGE
3204 #define WRITE_WATCH_FLAG_RESET 0x01
3205
3206 #define FILE_READ_DATA (0x0001)
3207 #define FILE_LIST_DIRECTORY (0x0001)
3208
3209 #define FILE_WRITE_DATA (0x0002)
3210 #define FILE_ADD_FILE (0x0002)
3211
3212 #define FILE_APPEND_DATA (0x0004)
3213 #define FILE_ADD_SUBDIRECTORY (0x0004)
3214 #define FILE_CREATE_PIPE_INSTANCE (0x0004)
3215
3216 #define FILE_READ_EA (0x0008)
3217
3218 #define FILE_WRITE_EA (0x0010)
3219
3220 #define FILE_EXECUTE (0x0020)
3221 #define FILE_TRAVERSE (0x0020)
3222
3223 #define FILE_DELETE_CHILD (0x0040)
3224
3225 #define FILE_READ_ATTRIBUTES (0x0080)
3226
3227 #define FILE_WRITE_ATTRIBUTES (0x0100)
3228
3229 #define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
3230 #define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)
3231 #define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
3232 #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
3233
3234 #define FILE_SHARE_READ 0x00000001
3235 #define FILE_SHARE_WRITE 0x00000002
3236 #define FILE_SHARE_DELETE 0x00000004
3237 #define FILE_ATTRIBUTE_READONLY 0x00000001
3238 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
3239 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
3240 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
3241 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
3242 #define FILE_ATTRIBUTE_DEVICE 0x00000040
3243 #define FILE_ATTRIBUTE_NORMAL 0x00000080
3244 #define FILE_ATTRIBUTE_TEMPORARY 0x00000100
3245 #define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
3246 #define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
3247 #define FILE_ATTRIBUTE_COMPRESSED 0x00000800
3248 #define FILE_ATTRIBUTE_OFFLINE 0x00001000
3249 #define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
3250 #define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
3251 #define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
3252 #define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
3253 #define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
3254 #define FILE_NOTIFY_CHANGE_SIZE 0x00000008
3255 #define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
3256 #define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
3257 #define FILE_NOTIFY_CHANGE_CREATION 0x00000040
3258 #define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
3259 #define FILE_ACTION_ADDED 0x00000001
3260 #define FILE_ACTION_REMOVED 0x00000002
3261 #define FILE_ACTION_MODIFIED 0x00000003
3262 #define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
3263 #define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
3264 #define MAILSLOT_NO_MESSAGE ((DWORD)-1)
3265 #define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
3266 #define FILE_CASE_SENSITIVE_SEARCH 0x00000001
3267 #define FILE_CASE_PRESERVED_NAMES 0x00000002
3268 #define FILE_UNICODE_ON_DISK 0x00000004
3269 #define FILE_PERSISTENT_ACLS 0x00000008
3270 #define FILE_FILE_COMPRESSION 0x00000010
3271 #define FILE_VOLUME_QUOTAS 0x00000020
3272 #define FILE_SUPPORTS_SPARSE_FILES 0x00000040
3273 #define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
3274 #define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
3275 #define FILE_VOLUME_IS_COMPRESSED 0x00008000
3276 #define FILE_SUPPORTS_OBJECT_IDS 0x00010000
3277 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
3278 #define FILE_NAMED_STREAMS 0x00040000
3279 #define FILE_READ_ONLY_VOLUME 0x00080000
3280
3281 typedef struct _FILE_NOTIFY_INFORMATION {
3282 DWORD NextEntryOffset;
3283 DWORD Action;
3284 DWORD FileNameLength;
3285 WCHAR FileName[1];
3286 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
3287
3288 typedef union _FILE_SEGMENT_ELEMENT {
3289 PVOID64 Buffer;
3290 ULONGLONG Alignment;
3291 }FILE_SEGMENT_ELEMENT,*PFILE_SEGMENT_ELEMENT;
3292
3293 typedef struct _REPARSE_GUID_DATA_BUFFER {
3294 DWORD ReparseTag;
3295 WORD ReparseDataLength;
3296 WORD Reserved;
3297 GUID ReparseGuid;
3298 struct {
3299 BYTE DataBuffer[1];
3300 } GenericReparseBuffer;
3301 } REPARSE_GUID_DATA_BUFFER,*PREPARSE_GUID_DATA_BUFFER;
3302
3303 #define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER,GenericReparseBuffer)
3304
3305 #define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 *1024)
3306
3307 #define IO_REPARSE_TAG_RESERVED_ZERO (0)
3308 #define IO_REPARSE_TAG_RESERVED_ONE (1)
3309
3310 #define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_ONE
3311
3312 #define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
3313 #define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
3314
3315 #define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
3316 #define IO_REPARSE_TAG_HSM (0xC0000004L)
3317 #define IO_REPARSE_TAG_SIS (0x80000007L)
3318 #define IO_REPARSE_TAG_DFS (0x8000000AL)
3319 #define IO_REPARSE_TAG_FILTER_MANAGER (0x8000000BL)
3320 #define IO_COMPLETION_MODIFY_STATE 0x0002
3321 #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
3322 #define DUPLICATE_CLOSE_SOURCE 0x00000001
3323 #define DUPLICATE_SAME_ACCESS 0x00000002
3324
3325 typedef enum _SYSTEM_POWER_STATE {
3326 PowerSystemUnspecified = 0,PowerSystemWorking = 1,PowerSystemSleeping1 = 2,PowerSystemSleeping2 = 3,PowerSystemSleeping3 = 4,PowerSystemHibernate = 5,PowerSystemShutdown = 6,PowerSystemMaximum = 7
3327 } SYSTEM_POWER_STATE,*PSYSTEM_POWER_STATE;
3328
3329 #define POWER_SYSTEM_MAXIMUM 7
3330
3331 typedef enum {
3332 PowerActionNone = 0,PowerActionReserved,PowerActionSleep,PowerActionHibernate,PowerActionShutdown,PowerActionShutdownReset,PowerActionShutdownOff,PowerActionWarmEject
3333 } POWER_ACTION,*PPOWER_ACTION;
3334
3335 typedef enum _DEVICE_POWER_STATE {
3336 PowerDeviceUnspecified = 0,PowerDeviceD0,PowerDeviceD1,PowerDeviceD2,PowerDeviceD3,PowerDeviceMaximum
3337 } DEVICE_POWER_STATE,*PDEVICE_POWER_STATE;
3338
3339 #define ES_SYSTEM_REQUIRED ((DWORD)0x00000001)
3340 #define ES_DISPLAY_REQUIRED ((DWORD)0x00000002)
3341 #define ES_USER_PRESENT ((DWORD)0x00000004)
3342 #define ES_CONTINUOUS ((DWORD)0x80000000)
3343
3344 typedef DWORD EXECUTION_STATE;
3345
3346 typedef enum {
3347 LT_DONT_CARE,LT_LOWEST_LATENCY
3348 } LATENCY_TIME;
3349
3350 #define PDCAP_D0_SUPPORTED 0x00000001
3351 #define PDCAP_D1_SUPPORTED 0x00000002
3352 #define PDCAP_D2_SUPPORTED 0x00000004
3353 #define PDCAP_D3_SUPPORTED 0x00000008
3354 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
3355 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
3356 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
3357 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
3358 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
3359
3360 typedef struct CM_Power_Data_s {
3361 DWORD PD_Size;
3362 DEVICE_POWER_STATE PD_MostRecentPowerState;
3363 DWORD PD_Capabilities;
3364 DWORD PD_D1Latency;
3365 DWORD PD_D2Latency;
3366 DWORD PD_D3Latency;
3367 DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
3368 SYSTEM_POWER_STATE PD_DeepestSystemWake;
3369 } CM_POWER_DATA,*PCM_POWER_DATA;
3370
3371 typedef enum {
3372 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
3373 } POWER_INFORMATION_LEVEL;
3374
3375 typedef struct {
3376 DWORD Granularity;
3377 DWORD Capacity;
3378 } BATTERY_REPORTING_SCALE,*PBATTERY_REPORTING_SCALE;
3379
3380 typedef struct {
3381 POWER_ACTION Action;
3382 DWORD Flags;
3383 DWORD EventCode;
3384 } POWER_ACTION_POLICY,*PPOWER_ACTION_POLICY;
3385
3386 #define POWER_ACTION_QUERY_ALLOWED 0x00000001
3387 #define POWER_ACTION_UI_ALLOWED 0x00000002
3388 #define POWER_ACTION_OVERRIDE_APPS 0x00000004
3389 #define POWER_ACTION_LIGHTEST_FIRST 0x10000000
3390 #define POWER_ACTION_LOCK_CONSOLE 0x20000000
3391 #define POWER_ACTION_DISABLE_WAKES 0x40000000
3392 #define POWER_ACTION_CRITICAL 0x80000000
3393
3394 #define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
3395 #define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
3396 #define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
3397 #define POWER_USER_NOTIFY_BUTTON 0x00000008
3398 #define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
3399 #define POWER_FORCE_TRIGGER_RESET 0x80000000
3400
3401 typedef struct {
3402 BOOLEAN Enable;
3403 BYTE Spare[3];
3404 DWORD BatteryLevel;
3405 POWER_ACTION_POLICY PowerPolicy;
3406 SYSTEM_POWER_STATE MinSystemState;
3407 } SYSTEM_POWER_LEVEL,*PSYSTEM_POWER_LEVEL;
3408
3409 #define NUM_DISCHARGE_POLICIES 4
3410 #define DISCHARGE_POLICY_CRITICAL 0
3411 #define DISCHARGE_POLICY_LOW 1
3412
3413 #define PO_THROTTLE_NONE 0
3414 #define PO_THROTTLE_CONSTANT 1
3415 #define PO_THROTTLE_DEGRADE 2
3416 #define PO_THROTTLE_ADAPTIVE 3
3417 #define PO_THROTTLE_MAXIMUM 4
3418
3419 typedef struct _SYSTEM_POWER_POLICY {
3420 DWORD Revision;
3421 POWER_ACTION_POLICY PowerButton;
3422 POWER_ACTION_POLICY SleepButton;
3423 POWER_ACTION_POLICY LidClose;
3424 SYSTEM_POWER_STATE LidOpenWake;
3425 DWORD Reserved;
3426 POWER_ACTION_POLICY Idle;
3427 DWORD IdleTimeout;
3428 BYTE IdleSensitivity;
3429 BYTE DynamicThrottle;
3430 BYTE Spare2[2];
3431 SYSTEM_POWER_STATE MinSleep;
3432 SYSTEM_POWER_STATE MaxSleep;
3433 SYSTEM_POWER_STATE ReducedLatencySleep;
3434 DWORD WinLogonFlags;
3435 DWORD Spare3;
3436 DWORD DozeS4Timeout;
3437 DWORD BroadcastCapacityResolution;
3438 SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
3439 DWORD VideoTimeout;
3440 BOOLEAN VideoDimDisplay;
3441 DWORD VideoReserved[3];
3442 DWORD SpindownTimeout;
3443 BOOLEAN OptimizeForPower;
3444 BYTE FanThrottleTolerance;
3445 BYTE ForcedThrottle;
3446 BYTE MinThrottle;
3447 POWER_ACTION_POLICY OverThrottled;
3448 } SYSTEM_POWER_POLICY,*PSYSTEM_POWER_POLICY;
3449
3450 typedef struct _PROCESSOR_POWER_POLICY_INFO {
3451 DWORD TimeCheck;
3452 DWORD DemoteLimit;
3453 DWORD PromoteLimit;
3454 BYTE DemotePercent;
3455 BYTE PromotePercent;
3456 BYTE Spare[2];
3457 DWORD AllowDemotion:1;
3458 DWORD AllowPromotion:1;
3459 DWORD Reserved:30;
3460 } PROCESSOR_POWER_POLICY_INFO,*PPROCESSOR_POWER_POLICY_INFO;
3461
3462 typedef struct _PROCESSOR_POWER_POLICY {
3463 DWORD Revision;
3464 BYTE DynamicThrottle;
3465 BYTE Spare[3];
3466 DWORD DisableCStates:1;
3467 DWORD Reserved:31;
3468 DWORD PolicyCount;
3469 PROCESSOR_POWER_POLICY_INFO Policy[3];
3470 } PROCESSOR_POWER_POLICY,*PPROCESSOR_POWER_POLICY;
3471
3472 typedef struct _ADMINISTRATOR_POWER_POLICY {
3473 SYSTEM_POWER_STATE MinSleep;
3474 SYSTEM_POWER_STATE MaxSleep;
3475 DWORD MinVideoTimeout;
3476 DWORD MaxVideoTimeout;
3477 DWORD MinSpindownTimeout;
3478 DWORD MaxSpindownTimeout;
3479 } ADMINISTRATOR_POWER_POLICY,*PADMINISTRATOR_POWER_POLICY;
3480
3481 typedef struct {
3482 BOOLEAN PowerButtonPresent;
3483 BOOLEAN SleepButtonPresent;
3484 BOOLEAN LidPresent;
3485 BOOLEAN SystemS1;
3486 BOOLEAN SystemS2;
3487 BOOLEAN SystemS3;
3488 BOOLEAN SystemS4;
3489 BOOLEAN SystemS5;
3490 BOOLEAN HiberFilePresent;
3491 BOOLEAN FullWake;
3492 BOOLEAN VideoDimPresent;
3493 BOOLEAN ApmPresent;
3494 BOOLEAN UpsPresent;
3495 BOOLEAN ThermalControl;
3496 BOOLEAN ProcessorThrottle;
3497 BYTE ProcessorMinThrottle;
3498 BYTE ProcessorMaxThrottle;
3499 BYTE spare2[4];
3500 BOOLEAN DiskSpinDown;
3501 BYTE spare3[8];
3502 BOOLEAN SystemBatteriesPresent;
3503 BOOLEAN BatteriesAreShortTerm;
3504 BATTERY_REPORTING_SCALE BatteryScale[3];
3505 SYSTEM_POWER_STATE AcOnLineWake;
3506 SYSTEM_POWER_STATE SoftLidWake;
3507 SYSTEM_POWER_STATE RtcWake;
3508 SYSTEM_POWER_STATE MinDeviceWakeState;
3509 SYSTEM_POWER_STATE DefaultLowLatencyWake;
3510 } SYSTEM_POWER_CAPABILITIES,*PSYSTEM_POWER_CAPABILITIES;
3511
3512 typedef struct {
3513 BOOLEAN AcOnLine;
3514 BOOLEAN BatteryPresent;
3515 BOOLEAN Charging;
3516 BOOLEAN Discharging;
3517 BOOLEAN Spare1[4];
3518 DWORD MaxCapacity;
3519 DWORD RemainingCapacity;
3520 DWORD Rate;
3521 DWORD EstimatedTime;
3522 DWORD DefaultAlert1;
3523 DWORD DefaultAlert2;
3524 } SYSTEM_BATTERY_STATE,*PSYSTEM_BATTERY_STATE;
3525
3526 #include "pshpack4.h"
3527
3528 #define IMAGE_DOS_SIGNATURE 0x5A4D
3529 #define IMAGE_OS2_SIGNATURE 0x454E
3530 #define IMAGE_OS2_SIGNATURE_LE 0x454C
3531 #define IMAGE_VXD_SIGNATURE 0x454C
3532 #define IMAGE_NT_SIGNATURE 0x00004550
3533
3534 #include "pshpack2.h"
3535
3536 typedef struct _IMAGE_DOS_HEADER {
3537 WORD e_magic;
3538 WORD e_cblp;
3539 WORD e_cp;
3540 WORD e_crlc;
3541 WORD e_cparhdr;
3542 WORD e_minalloc;
3543 WORD e_maxalloc;
3544 WORD e_ss;
3545 WORD e_sp;
3546 WORD e_csum;
3547 WORD e_ip;
3548 WORD e_cs;
3549 WORD e_lfarlc;
3550 WORD e_ovno;
3551 WORD e_res[4];
3552 WORD e_oemid;
3553 WORD e_oeminfo;
3554 WORD e_res2[10];
3555 LONG e_lfanew;
3556 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
3557
3558 typedef struct _IMAGE_OS2_HEADER {
3559 WORD ne_magic;
3560 CHAR ne_ver;
3561 CHAR ne_rev;
3562 WORD ne_enttab;
3563 WORD ne_cbenttab;
3564 LONG ne_crc;
3565 WORD ne_flags;
3566 WORD ne_autodata;
3567 WORD ne_heap;
3568 WORD ne_stack;
3569 LONG ne_csip;
3570 LONG ne_sssp;
3571 WORD ne_cseg;
3572 WORD ne_cmod;
3573 WORD ne_cbnrestab;
3574 WORD ne_segtab;
3575 WORD ne_rsrctab;
3576 WORD ne_restab;
3577 WORD ne_modtab;
3578 WORD ne_imptab;
3579 LONG ne_nrestab;
3580 WORD ne_cmovent;
3581 WORD ne_align;
3582 WORD ne_cres;
3583 BYTE ne_exetyp;
3584 BYTE ne_flagsothers;
3585 WORD ne_pretthunks;
3586 WORD ne_psegrefbytes;
3587 WORD ne_swaparea;
3588 WORD ne_expver;
3589 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
3590
3591 typedef struct _IMAGE_VXD_HEADER {
3592 WORD e32_magic;
3593 BYTE e32_border;
3594 BYTE e32_worder;
3595 DWORD e32_level;
3596 WORD e32_cpu;
3597 WORD e32_os;
3598 DWORD e32_ver;
3599 DWORD e32_mflags;
3600 DWORD e32_mpages;
3601 DWORD e32_startobj;
3602 DWORD e32_eip;
3603 DWORD e32_stackobj;
3604 DWORD e32_esp;
3605 DWORD e32_pagesize;
3606 DWORD e32_lastpagesize;
3607 DWORD e32_fixupsize;
3608 DWORD e32_fixupsum;
3609 DWORD e32_ldrsize;
3610 DWORD e32_ldrsum;
3611 DWORD e32_objtab;
3612 DWORD e32_objcnt;
3613 DWORD e32_objmap;
3614 DWORD e32_itermap;
3615 DWORD e32_rsrctab;
3616 DWORD e32_rsrccnt;
3617 DWORD e32_restab;
3618 DWORD e32_enttab;
3619 DWORD e32_dirtab;
3620 DWORD e32_dircnt;
3621 DWORD e32_fpagetab;
3622 DWORD e32_frectab;
3623 DWORD e32_impmod;
3624 DWORD e32_impmodcnt;
3625 DWORD e32_impproc;
3626 DWORD e32_pagesum;
3627 DWORD e32_datapage;
3628 DWORD e32_preload;
3629 DWORD e32_nrestab;
3630 DWORD e32_cbnrestab;
3631 DWORD e32_nressum;
3632 DWORD e32_autodata;
3633 DWORD e32_debuginfo;
3634 DWORD e32_debuglen;
3635 DWORD e32_instpreload;
3636 DWORD e32_instdemand;
3637 DWORD e32_heapsize;
3638 BYTE e32_res3[12];
3639 DWORD e32_winresoff;
3640 DWORD e32_winreslen;
3641 WORD e32_devid;
3642 WORD e32_ddkver;
3643 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
3644
3645 #include "poppack.h"
3646
3647 typedef struct _IMAGE_FILE_HEADER {
3648 WORD Machine;
3649 WORD NumberOfSections;
3650 DWORD TimeDateStamp;
3651 DWORD PointerToSymbolTable;
3652 DWORD NumberOfSymbols;
3653 WORD SizeOfOptionalHeader;
3654 WORD Characteristics;
3655 } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
3656
3657 #define IMAGE_SIZEOF_FILE_HEADER 20
3658
3659 #define IMAGE_FILE_RELOCS_STRIPPED 0x0001
3660 #define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
3661 #define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
3662 #define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
3663 #define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
3664 #define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
3665 #define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
3666 #define IMAGE_FILE_32BIT_MACHINE 0x0100
3667 #define IMAGE_FILE_DEBUG_STRIPPED 0x0200
3668 #define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
3669 #define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
3670 #define IMAGE_FILE_SYSTEM 0x1000
3671 #define IMAGE_FILE_DLL 0x2000
3672 #define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
3673 #define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
3674
3675 #define IMAGE_FILE_MACHINE_UNKNOWN 0
3676 #define IMAGE_FILE_MACHINE_I386 0x014c
3677 #define IMAGE_FILE_MACHINE_R3000 0x0162
3678 #define IMAGE_FILE_MACHINE_R4000 0x0166
3679 #define IMAGE_FILE_MACHINE_R10000 0x0168
3680 #define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
3681 #define IMAGE_FILE_MACHINE_ALPHA 0x0184
3682 #define IMAGE_FILE_MACHINE_SH3 0x01a2
3683 #define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
3684 #define IMAGE_FILE_MACHINE_SH3E 0x01a4
3685 #define IMAGE_FILE_MACHINE_SH4 0x01a6
3686 #define IMAGE_FILE_MACHINE_SH5 0x01a8
3687 #define IMAGE_FILE_MACHINE_ARM 0x01c0
3688 #define IMAGE_FILE_MACHINE_THUMB 0x01c2
3689 #define IMAGE_FILE_MACHINE_AM33 0x01d3
3690 #define IMAGE_FILE_MACHINE_POWERPC 0x01F0
3691 #define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
3692 #define IMAGE_FILE_MACHINE_IA64 0x0200
3693 #define IMAGE_FILE_MACHINE_MIPS16 0x0266
3694 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284
3695 #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
3696 #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
3697 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
3698 #define IMAGE_FILE_MACHINE_TRICORE 0x0520
3699 #define IMAGE_FILE_MACHINE_CEF 0x0CEF
3700 #define IMAGE_FILE_MACHINE_EBC 0x0EBC
3701 #define IMAGE_FILE_MACHINE_AMD64 0x8664
3702 #define IMAGE_FILE_MACHINE_M32R 0x9041
3703 #define IMAGE_FILE_MACHINE_CEE 0xC0EE
3704
3705 typedef struct _IMAGE_DATA_DIRECTORY {
3706 DWORD VirtualAddress;
3707 DWORD Size;
3708 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
3709
3710 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
3711
3712 typedef struct _IMAGE_OPTIONAL_HEADER {
3713
3714 WORD Magic;
3715 BYTE MajorLinkerVersion;
3716 BYTE MinorLinkerVersion;
3717 DWORD SizeOfCode;
3718 DWORD SizeOfInitializedData;
3719 DWORD SizeOfUninitializedData;
3720 DWORD AddressOfEntryPoint;
3721 DWORD BaseOfCode;
3722 DWORD BaseOfData;
3723 DWORD ImageBase;
3724 DWORD SectionAlignment;
3725 DWORD FileAlignment;
3726 WORD MajorOperatingSystemVersion;
3727 WORD MinorOperatingSystemVersion;
3728 WORD MajorImageVersion;
3729 WORD MinorImageVersion;
3730 WORD MajorSubsystemVersion;
3731 WORD MinorSubsystemVersion;
3732 DWORD Win32VersionValue;
3733 DWORD SizeOfImage;
3734 DWORD SizeOfHeaders;
3735 DWORD CheckSum;
3736 WORD Subsystem;
3737 WORD DllCharacteristics;
3738 DWORD SizeOfStackReserve;
3739 DWORD SizeOfStackCommit;
3740 DWORD SizeOfHeapReserve;
3741 DWORD SizeOfHeapCommit;
3742 DWORD LoaderFlags;
3743 DWORD NumberOfRvaAndSizes;
3744 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
3745 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
3746
3747 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
3748 WORD Magic;
3749 BYTE MajorLinkerVersion;
3750 BYTE MinorLinkerVersion;
3751 DWORD SizeOfCode;
3752 DWORD SizeOfInitializedData;
3753 DWORD SizeOfUninitializedData;
3754 DWORD AddressOfEntryPoint;
3755 DWORD BaseOfCode;
3756 DWORD BaseOfData;
3757 DWORD BaseOfBss;
3758 DWORD GprMask;
3759 DWORD CprMask[4];
3760 DWORD GpValue;
3761 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
3762
3763 typedef struct _IMAGE_OPTIONAL_HEADER64 {
3764 WORD Magic;
3765 BYTE MajorLinkerVersion;
3766 BYTE MinorLinkerVersion;
3767 DWORD SizeOfCode;
3768 DWORD SizeOfInitializedData;
3769 DWORD SizeOfUninitializedData;
3770 DWORD AddressOfEntryPoint;
3771 DWORD BaseOfCode;
3772 ULONGLONG ImageBase;
3773 DWORD SectionAlignment;
3774 DWORD FileAlignment;
3775 WORD MajorOperatingSystemVersion;
3776 WORD MinorOperatingSystemVersion;
3777 WORD MajorImageVersion;
3778 WORD MinorImageVersion;
3779 WORD MajorSubsystemVersion;
3780 WORD MinorSubsystemVersion;
3781 DWORD Win32VersionValue;
3782 DWORD SizeOfImage;
3783 DWORD SizeOfHeaders;
3784 DWORD CheckSum;
3785 WORD Subsystem;
3786 WORD DllCharacteristics;
3787 ULONGLONG SizeOfStackReserve;
3788 ULONGLONG SizeOfStackCommit;
3789 ULONGLONG SizeOfHeapReserve;
3790 ULONGLONG SizeOfHeapCommit;
3791 DWORD LoaderFlags;
3792 DWORD NumberOfRvaAndSizes;
3793 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
3794 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
3795
3796 #define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
3797 #define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
3798 #define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
3799 #define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
3800
3801 #define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
3802 #define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
3803 #define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
3804
3805 #ifdef _WIN64
3806 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
3807 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
3808 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
3809 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
3810 #else
3811 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
3812 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
3813 #define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
3814 #define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
3815 #endif
3816
3817 typedef struct _IMAGE_NT_HEADERS64 {
3818 DWORD Signature;
3819 IMAGE_FILE_HEADER FileHeader;
3820 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
3821 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
3822
3823 typedef struct _IMAGE_NT_HEADERS {
3824 DWORD Signature;
3825 IMAGE_FILE_HEADER FileHeader;
3826 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
3827 } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
3828
3829 typedef struct _IMAGE_ROM_HEADERS {
3830 IMAGE_FILE_HEADER FileHeader;
3831 IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
3832 } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
3833
3834 #ifdef _WIN64
3835 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
3836 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
3837 #else
3838 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
3839 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
3840 #endif
3841
3842 #define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
3843
3844 #define IMAGE_SUBSYSTEM_UNKNOWN 0
3845 #define IMAGE_SUBSYSTEM_NATIVE 1
3846 #define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
3847 #define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
3848 #define IMAGE_SUBSYSTEM_OS2_CUI 5
3849 #define IMAGE_SUBSYSTEM_POSIX_CUI 7
3850 #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8
3851 #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
3852 #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
3853 #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
3854 #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
3855 #define IMAGE_SUBSYSTEM_EFI_ROM 13
3856 #define IMAGE_SUBSYSTEM_XBOX 14
3857
3858 #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
3859 #define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
3860 #define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
3861 #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
3862 #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
3863
3864 #define IMAGE_DIRECTORY_ENTRY_EXPORT 0
3865 #define IMAGE_DIRECTORY_ENTRY_IMPORT 1
3866 #define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
3867 #define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
3868 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4
3869 #define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
3870 #define IMAGE_DIRECTORY_ENTRY_DEBUG 6
3871
3872 #define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
3873 #define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
3874 #define IMAGE_DIRECTORY_ENTRY_TLS 9
3875 #define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
3876 #define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
3877 #define IMAGE_DIRECTORY_ENTRY_IAT 12
3878 #define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
3879 #define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
3880
3881 typedef struct ANON_OBJECT_HEADER {
3882 WORD Sig1;
3883 WORD Sig2;
3884 WORD Version;
3885 WORD Machine;
3886 DWORD TimeDateStamp;
3887 CLSID ClassID;
3888 DWORD SizeOfData;
3889 } ANON_OBJECT_HEADER;
3890
3891 #define IMAGE_SIZEOF_SHORT_NAME 8
3892
3893 typedef struct _IMAGE_SECTION_HEADER {
3894 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
3895 union {
3896 DWORD PhysicalAddress;
3897 DWORD VirtualSize;
3898 } Misc;
3899 DWORD VirtualAddress;
3900 DWORD SizeOfRawData;
3901 DWORD PointerToRawData;
3902 DWORD PointerToRelocations;
3903 DWORD PointerToLinenumbers;
3904 WORD NumberOfRelocations;
3905 WORD NumberOfLinenumbers;
3906 DWORD Characteristics;
3907 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
3908
3909 #define IMAGE_SIZEOF_SECTION_HEADER 40
3910
3911 #define IMAGE_SCN_TYPE_NO_PAD 0x00000008
3912
3913 #define IMAGE_SCN_CNT_CODE 0x00000020
3914 #define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
3915 #define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
3916 #define IMAGE_SCN_LNK_OTHER 0x00000100
3917 #define IMAGE_SCN_LNK_INFO 0x00000200
3918 #define IMAGE_SCN_LNK_REMOVE 0x00000800
3919 #define IMAGE_SCN_LNK_COMDAT 0x00001000
3920 #define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
3921 #define IMAGE_SCN_GPREL 0x00008000
3922 #define IMAGE_SCN_MEM_FARDATA 0x00008000
3923 #define IMAGE_SCN_MEM_PURGEABLE 0x00020000
3924 #define IMAGE_SCN_MEM_16BIT 0x00020000
3925 #define IMAGE_SCN_MEM_LOCKED 0x00040000
3926 #define IMAGE_SCN_MEM_PRELOAD 0x00080000
3927
3928 #define IMAGE_SCN_ALIGN_1BYTES 0x00100000
3929 #define IMAGE_SCN_ALIGN_2BYTES 0x00200000
3930 #define IMAGE_SCN_ALIGN_4BYTES 0x00300000
3931 #define IMAGE_SCN_ALIGN_8BYTES 0x00400000
3932 #define IMAGE_SCN_ALIGN_16BYTES 0x00500000
3933 #define IMAGE_SCN_ALIGN_32BYTES 0x00600000
3934 #define IMAGE_SCN_ALIGN_64BYTES 0x00700000
3935 #define IMAGE_SCN_ALIGN_128BYTES 0x00800000
3936 #define IMAGE_SCN_ALIGN_256BYTES 0x00900000
3937 #define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
3938 #define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
3939 #define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
3940 #define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
3941 #define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
3942
3943 #define IMAGE_SCN_ALIGN_MASK 0x00F00000
3944
3945 #define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
3946 #define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
3947 #define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
3948 #define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
3949 #define IMAGE_SCN_MEM_SHARED 0x10000000
3950 #define IMAGE_SCN_MEM_EXECUTE 0x20000000
3951 #define IMAGE_SCN_MEM_READ 0x40000000
3952 #define IMAGE_SCN_MEM_WRITE 0x80000000
3953
3954 #define IMAGE_SCN_SCALE_INDEX 0x00000001
3955
3956 #include "pshpack2.h"
3957
3958 typedef struct _IMAGE_SYMBOL {
3959 union {
3960 BYTE ShortName[8];
3961 struct {
3962 DWORD Short;
3963 DWORD Long;
3964 } Name;
3965 DWORD LongName[2];
3966 } N;
3967 DWORD Value;
3968 SHORT SectionNumber;
3969 WORD Type;
3970 BYTE StorageClass;
3971 BYTE NumberOfAuxSymbols;
3972 } IMAGE_SYMBOL;
3973 typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
3974
3975 #define IMAGE_SIZEOF_SYMBOL 18
3976
3977 #define IMAGE_SYM_UNDEFINED (SHORT)0
3978 #define IMAGE_SYM_ABSOLUTE (SHORT)-1
3979 #define IMAGE_SYM_DEBUG (SHORT)-2
3980 #define IMAGE_SYM_SECTION_MAX 0xFEFF
3981
3982 #define IMAGE_SYM_TYPE_NULL 0x0000
3983 #define IMAGE_SYM_TYPE_VOID 0x0001
3984 #define IMAGE_SYM_TYPE_CHAR 0x0002
3985 #define IMAGE_SYM_TYPE_SHORT 0x0003
3986 #define IMAGE_SYM_TYPE_INT 0x0004
3987 #define IMAGE_SYM_TYPE_LONG 0x0005
3988 #define IMAGE_SYM_TYPE_FLOAT 0x0006
3989 #define IMAGE_SYM_TYPE_DOUBLE 0x0007
3990 #define IMAGE_SYM_TYPE_STRUCT 0x0008
3991 #define IMAGE_SYM_TYPE_UNION 0x0009
3992 #define IMAGE_SYM_TYPE_ENUM 0x000A
3993 #define IMAGE_SYM_TYPE_MOE 0x000B
3994 #define IMAGE_SYM_TYPE_BYTE 0x000C
3995 #define IMAGE_SYM_TYPE_WORD 0x000D
3996 #define IMAGE_SYM_TYPE_UINT 0x000E
3997 #define IMAGE_SYM_TYPE_DWORD 0x000F
3998 #define IMAGE_SYM_TYPE_PCODE 0x8000
3999
4000 #define IMAGE_SYM_DTYPE_NULL 0
4001 #define IMAGE_SYM_DTYPE_POINTER 1
4002 #define IMAGE_SYM_DTYPE_FUNCTION 2
4003 #define IMAGE_SYM_DTYPE_ARRAY 3
4004
4005 #define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE)-1
4006 #define IMAGE_SYM_CLASS_NULL 0x0000
4007 #define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
4008 #define IMAGE_SYM_CLASS_EXTERNAL 0x0002
4009 #define IMAGE_SYM_CLASS_STATIC 0x0003
4010 #define IMAGE_SYM_CLASS_REGISTER 0x0004
4011 #define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
4012 #define IMAGE_SYM_CLASS_LABEL 0x0006
4013 #define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
4014 #define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
4015 #define IMAGE_SYM_CLASS_ARGUMENT 0x0009
4016 #define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
4017 #define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
4018 #define IMAGE_SYM_CLASS_UNION_TAG 0x000C
4019 #define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
4020 #define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
4021 #define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
4022 #define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
4023 #define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
4024 #define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
4025 #define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
4026 #define IMAGE_SYM_CLASS_BLOCK 0x0064
4027 #define IMAGE_SYM_CLASS_FUNCTION 0x0065
4028 #define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
4029 #define IMAGE_SYM_CLASS_FILE 0x0067
4030 #define IMAGE_SYM_CLASS_SECTION 0x0068
4031 #define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
4032 #define IMAGE_SYM_CLASS_CLR_TOKEN 0x006B
4033
4034 #define N_BTMASK 0x000F
4035 #define N_TMASK 0x0030
4036 #define N_TMASK1 0x00C0
4037 #define N_TMASK2 0x00F0
4038 #define N_BTSHFT 4
4039 #define N_TSHIFT 2
4040
4041 #define BTYPE(x) ((x) & N_BTMASK)
4042
4043 #ifndef ISPTR
4044 #define ISPTR(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
4045 #endif
4046
4047 #ifndef ISFCN
4048 #define ISFCN(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
4049 #endif
4050
4051 #ifndef ISARY
4052 #define ISARY(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
4053 #endif
4054
4055 #ifndef ISTAG
4056 #define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
4057 #endif
4058
4059 #ifndef INCREF
4060 #define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
4061 #endif
4062 #ifndef DECREF
4063 #define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
4064 #endif
4065
4066 typedef union _IMAGE_AUX_SYMBOL {
4067 struct {
4068 DWORD TagIndex;
4069 union {
4070 struct {
4071 WORD Linenumber;
4072 WORD Size;
4073 } LnSz;
4074 DWORD TotalSize;
4075 } Misc;
4076 union {
4077 struct {
4078 DWORD PointerToLinenumber;
4079 DWORD PointerToNextFunction;
4080 } Function;
4081 struct {
4082 WORD Dimension[4];
4083 } Array;
4084 } FcnAry;
4085 WORD TvIndex;
4086 } Sym;
4087 struct {
4088 BYTE Name[IMAGE_SIZEOF_SYMBOL];
4089 } File;
4090 struct {
4091 DWORD Length;
4092 WORD NumberOfRelocations;
4093 WORD NumberOfLinenumbers;
4094 DWORD CheckSum;
4095 SHORT Number;
4096 BYTE Selection;
4097 } Section;
4098 } IMAGE_AUX_SYMBOL;
4099 typedef IMAGE_AUX_SYMBOL UNALIGNED *PIMAGE_AUX_SYMBOL;
4100
4101 #define IMAGE_SIZEOF_AUX_SYMBOL 18
4102
4103 typedef enum IMAGE_AUX_SYMBOL_TYPE {
4104 IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1
4105 } IMAGE_AUX_SYMBOL_TYPE;
4106
4107 #include <pshpack2.h>
4108
4109 typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
4110 BYTE bAuxType;
4111 BYTE bReserved;
4112 DWORD SymbolTableIndex;
4113 BYTE rgbReserved[12];
4114 } IMAGE_AUX_SYMBOL_TOKEN_DEF;
4115
4116 typedef IMAGE_AUX_SYMBOL_TOKEN_DEF UNALIGNED *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
4117
4118 #include <poppack.h>
4119
4120 #define IMAGE_COMDAT_SELECT_NODUPLICATES 1
4121 #define IMAGE_COMDAT_SELECT_ANY 2
4122 #define IMAGE_COMDAT_SELECT_SAME_SIZE 3
4123 #define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
4124 #define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
4125 #define IMAGE_COMDAT_SELECT_LARGEST 6
4126 #define IMAGE_COMDAT_SELECT_NEWEST 7
4127
4128 #define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
4129 #define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
4130 #define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
4131
4132 typedef struct _IMAGE_RELOCATION {
4133 union {
4134 DWORD VirtualAddress;
4135 DWORD RelocCount;
4136 };
4137 DWORD SymbolTableIndex;
4138 WORD Type;
4139 } IMAGE_RELOCATION;
4140 typedef IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;
4141
4142 #define IMAGE_SIZEOF_RELOCATION 10
4143
4144 #define IMAGE_REL_I386_ABSOLUTE 0x0000
4145 #define IMAGE_REL_I386_DIR16 0x0001
4146 #define IMAGE_REL_I386_REL16 0x0002
4147 #define IMAGE_REL_I386_DIR32 0x0006
4148 #define IMAGE_REL_I386_DIR32NB 0x0007
4149 #define IMAGE_REL_I386_SEG12 0x0009
4150 #define IMAGE_REL_I386_SECTION 0x000A
4151 #define IMAGE_REL_I386_SECREL 0x000B
4152 #define IMAGE_REL_I386_TOKEN 0x000C
4153 #define IMAGE_REL_I386_SECREL7 0x000D
4154 #define IMAGE_REL_I386_REL32 0x0014
4155
4156 #define IMAGE_REL_MIPS_ABSOLUTE 0x0000
4157 #define IMAGE_REL_MIPS_REFHALF 0x0001
4158 #define IMAGE_REL_MIPS_REFWORD 0x0002
4159 #define IMAGE_REL_MIPS_JMPADDR 0x0003
4160 #define IMAGE_REL_MIPS_REFHI 0x0004
4161 #define IMAGE_REL_MIPS_REFLO 0x0005
4162 #define IMAGE_REL_MIPS_GPREL 0x0006
4163 #define IMAGE_REL_MIPS_LITERAL 0x0007
4164 #define IMAGE_REL_MIPS_SECTION 0x000A
4165 #define IMAGE_REL_MIPS_SECREL 0x000B
4166 #define IMAGE_REL_MIPS_SECRELLO 0x000C
4167 #define IMAGE_REL_MIPS_SECRELHI 0x000D
4168 #define IMAGE_REL_MIPS_TOKEN 0x000E
4169 #define IMAGE_REL_MIPS_JMPADDR16 0x0010
4170 #define IMAGE_REL_MIPS_REFWORDNB 0x0022
4171 #define IMAGE_REL_MIPS_PAIR 0x0025
4172
4173 #define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
4174 #define IMAGE_REL_ALPHA_REFLONG 0x0001
4175 #define IMAGE_REL_ALPHA_REFQUAD 0x0002
4176 #define IMAGE_REL_ALPHA_GPREL32 0x0003
4177 #define IMAGE_REL_ALPHA_LITERAL 0x0004
4178 #define IMAGE_REL_ALPHA_LITUSE 0x0005
4179 #define IMAGE_REL_ALPHA_GPDISP 0x0006
4180 #define IMAGE_REL_ALPHA_BRADDR 0x0007
4181 #define IMAGE_REL_ALPHA_HINT 0x0008
4182 #define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
4183 #define IMAGE_REL_ALPHA_REFHI 0x000A
4184 #define IMAGE_REL_ALPHA_REFLO 0x000B
4185 #define IMAGE_REL_ALPHA_PAIR 0x000C
4186 #define IMAGE_REL_ALPHA_MATCH 0x000D
4187 #define IMAGE_REL_ALPHA_SECTION 0x000E
4188 #define IMAGE_REL_ALPHA_SECREL 0x000F
4189 #define IMAGE_REL_ALPHA_REFLONGNB 0x0010
4190 #define IMAGE_REL_ALPHA_SECRELLO 0x0011
4191 #define IMAGE_REL_ALPHA_SECRELHI 0x0012
4192 #define IMAGE_REL_ALPHA_REFQ3 0x0013
4193 #define IMAGE_REL_ALPHA_REFQ2 0x0014
4194 #define IMAGE_REL_ALPHA_REFQ1 0x0015
4195 #define IMAGE_REL_ALPHA_GPRELLO 0x0016
4196 #define IMAGE_REL_ALPHA_GPRELHI 0x0017
4197
4198 #define IMAGE_REL_PPC_ABSOLUTE 0x0000
4199 #define IMAGE_REL_PPC_ADDR64 0x0001
4200 #define IMAGE_REL_PPC_ADDR32 0x0002
4201 #define IMAGE_REL_PPC_ADDR24 0x0003
4202 #define IMAGE_REL_PPC_ADDR16 0x0004
4203 #define IMAGE_REL_PPC_ADDR14 0x0005
4204 #define IMAGE_REL_PPC_REL24 0x0006
4205 #define IMAGE_REL_PPC_REL14 0x0007
4206 #define IMAGE_REL_PPC_TOCREL16 0x0008
4207 #define IMAGE_REL_PPC_TOCREL14 0x0009
4208 #define IMAGE_REL_PPC_ADDR32NB 0x000A
4209 #define IMAGE_REL_PPC_SECREL 0x000B
4210 #define IMAGE_REL_PPC_SECTION 0x000C
4211 #define IMAGE_REL_PPC_IFGLUE 0x000D
4212 #define IMAGE_REL_PPC_IMGLUE 0x000E
4213 #define IMAGE_REL_PPC_SECREL16 0x000F
4214 #define IMAGE_REL_PPC_REFHI 0x0010
4215 #define IMAGE_REL_PPC_REFLO 0x0011
4216 #define IMAGE_REL_PPC_PAIR 0x0012
4217 #define IMAGE_REL_PPC_SECRELLO 0x0013
4218 #define IMAGE_REL_PPC_SECRELHI 0x0014
4219 #define IMAGE_REL_PPC_GPREL 0x0015
4220 #define IMAGE_REL_PPC_TOKEN 0x0016
4221 #define IMAGE_REL_PPC_TYPEMASK 0x00FF
4222 #define IMAGE_REL_PPC_NEG 0x0100
4223 #define IMAGE_REL_PPC_BRTAKEN 0x0200
4224 #define IMAGE_REL_PPC_BRNTAKEN 0x0400
4225 #define IMAGE_REL_PPC_TOCDEFN 0x0800
4226
4227 #define IMAGE_REL_SH3_ABSOLUTE 0x0000
4228 #define IMAGE_REL_SH3_DIRECT16 0x0001
4229 #define IMAGE_REL_SH3_DIRECT32 0x0002
4230 #define IMAGE_REL_SH3_DIRECT8 0x0003
4231 #define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
4232 #define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
4233 #define IMAGE_REL_SH3_DIRECT4 0x0006
4234 #define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
4235 #define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
4236 #define IMAGE_REL_SH3_PCREL8_WORD 0x0009
4237 #define IMAGE_REL_SH3_PCREL8_LONG 0x000A
4238 #define IMAGE_REL_SH3_PCREL12_WORD 0x000B
4239 #define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
4240 #define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
4241 #define IMAGE_REL_SH3_SECTION 0x000E
4242 #define IMAGE_REL_SH3_SECREL 0x000F
4243 #define IMAGE_REL_SH3_DIRECT32_NB 0x0010
4244 #define IMAGE_REL_SH3_GPREL4_LONG 0x0011
4245 #define IMAGE_REL_SH3_TOKEN 0x0012
4246
4247 #define IMAGE_REL_SHM_PCRELPT 0x0013
4248 #define IMAGE_REL_SHM_REFLO 0x0014
4249 #define IMAGE_REL_SHM_REFHALF 0x0015
4250 #define IMAGE_REL_SHM_RELLO 0x0016
4251 #define IMAGE_REL_SHM_RELHALF 0x0017
4252 #define IMAGE_REL_SHM_PAIR 0x0018
4253
4254 #define IMAGE_REL_SH_NOMODE 0x8000
4255
4256 #define IMAGE_REL_ARM_ABSOLUTE 0x0000
4257 #define IMAGE_REL_ARM_ADDR32 0x0001
4258 #define IMAGE_REL_ARM_ADDR32NB 0x0002
4259 #define IMAGE_REL_ARM_BRANCH24 0x0003
4260 #define IMAGE_REL_ARM_BRANCH11 0x0004
4261 #define IMAGE_REL_ARM_TOKEN 0x0005
4262 #define IMAGE_REL_ARM_GPREL12 0x0006
4263 #define IMAGE_REL_ARM_GPREL7 0x0007
4264 #define IMAGE_REL_ARM_BLX24 0x0008
4265 #define IMAGE_REL_ARM_BLX11 0x0009
4266 #define IMAGE_REL_ARM_SECTION 0x000E
4267 #define IMAGE_REL_ARM_SECREL 0x000F
4268
4269 #define IMAGE_REL_AM_ABSOLUTE 0x0000
4270 #define IMAGE_REL_AM_ADDR32 0x0001
4271 #define IMAGE_REL_AM_ADDR32NB 0x0002
4272 #define IMAGE_REL_AM_CALL32 0x0003
4273 #define IMAGE_REL_AM_FUNCINFO 0x0004
4274 #define IMAGE_REL_AM_REL32_1 0x0005
4275 #define IMAGE_REL_AM_REL32_2 0x0006
4276 #define IMAGE_REL_AM_SECREL 0x0007
4277 #define IMAGE_REL_AM_SECTION 0x0008
4278 #define IMAGE_REL_AM_TOKEN 0x0009
4279
4280 #define IMAGE_REL_AMD64_ABSOLUTE 0x0000
4281 #define IMAGE_REL_AMD64_ADDR64 0x0001
4282 #define IMAGE_REL_AMD64_ADDR32 0x0002
4283 #define IMAGE_REL_AMD64_ADDR32NB 0x0003
4284 #define IMAGE_REL_AMD64_REL32 0x0004
4285 #define IMAGE_REL_AMD64_REL32_1 0x0005
4286 #define IMAGE_REL_AMD64_REL32_2 0x0006
4287 #define IMAGE_REL_AMD64_REL32_3 0x0007
4288 #define IMAGE_REL_AMD64_REL32_4 0x0008
4289 #define IMAGE_REL_AMD64_REL32_5 0x0009
4290 #define IMAGE_REL_AMD64_SECTION 0x000A
4291 #define IMAGE_REL_AMD64_SECREL 0x000B
4292 #define IMAGE_REL_AMD64_SECREL7 0x000C
4293 #define IMAGE_REL_AMD64_TOKEN 0x000D
4294 #define IMAGE_REL_AMD64_SREL32 0x000E
4295 #define IMAGE_REL_AMD64_PAIR 0x000F
4296 #define IMAGE_REL_AMD64_SSPAN32 0x0010
4297
4298 #define IMAGE_REL_IA64_ABSOLUTE 0x0000
4299 #define IMAGE_REL_IA64_IMM14 0x0001
4300 #define IMAGE_REL_IA64_IMM22 0x0002
4301 #define IMAGE_REL_IA64_IMM64 0x0003
4302 #define IMAGE_REL_IA64_DIR32 0x0004
4303 #define IMAGE_REL_IA64_DIR64 0x0005
4304 #define IMAGE_REL_IA64_PCREL21B 0x0006
4305 #define IMAGE_REL_IA64_PCREL21M 0x0007
4306 #define IMAGE_REL_IA64_PCREL21F 0x0008
4307 #define IMAGE_REL_IA64_GPREL22 0x0009
4308 #define IMAGE_REL_IA64_LTOFF22 0x000A
4309 #define IMAGE_REL_IA64_SECTION 0x000B
4310 #define IMAGE_REL_IA64_SECREL22 0x000C
4311 #define IMAGE_REL_IA64_SECREL64I 0x000D
4312 #define IMAGE_REL_IA64_SECREL32 0x000E
4313
4314 #define IMAGE_REL_IA64_DIR32NB 0x0010
4315 #define IMAGE_REL_IA64_SREL14 0x0011
4316 #define IMAGE_REL_IA64_SREL22 0x0012
4317 #define IMAGE_REL_IA64_SREL32 0x0013
4318 #define IMAGE_REL_IA64_UREL32 0x0014
4319 #define IMAGE_REL_IA64_PCREL60X 0x0015
4320 #define IMAGE_REL_IA64_PCREL60B 0x0016
4321 #define IMAGE_REL_IA64_PCREL60F 0x0017
4322 #define IMAGE_REL_IA64_PCREL60I 0x0018
4323 #define IMAGE_REL_IA64_PCREL60M 0x0019
4324 #define IMAGE_REL_IA64_IMMGPREL64 0x001A
4325 #define IMAGE_REL_IA64_TOKEN 0x001B
4326 #define IMAGE_REL_IA64_GPREL32 0x001C
4327 #define IMAGE_REL_IA64_ADDEND 0x001F
4328
4329 #define IMAGE_REL_CEF_ABSOLUTE 0x0000
4330 #define IMAGE_REL_CEF_ADDR32 0x0001
4331 #define IMAGE_REL_CEF_ADDR64 0x0002
4332 #define IMAGE_REL_CEF_ADDR32NB 0x0003
4333 #define IMAGE_REL_CEF_SECTION 0x0004
4334 #define IMAGE_REL_CEF_SECREL 0x0005
4335 #define IMAGE_REL_CEF_TOKEN 0x0006
4336
4337 #define IMAGE_REL_CEE_ABSOLUTE 0x0000
4338 #define IMAGE_REL_CEE_ADDR32 0x0001
4339 #define IMAGE_REL_CEE_ADDR64 0x0002
4340 #define IMAGE_REL_CEE_ADDR32NB 0x0003
4341 #define IMAGE_REL_CEE_SECTION 0x0004
4342 #define IMAGE_REL_CEE_SECREL 0x0005
4343 #define IMAGE_REL_CEE_TOKEN 0x0006
4344
4345 #define IMAGE_REL_M32R_ABSOLUTE 0x0000
4346 #define IMAGE_REL_M32R_ADDR32 0x0001
4347 #define IMAGE_REL_M32R_ADDR32NB 0x0002
4348 #define IMAGE_REL_M32R_ADDR24 0x0003
4349 #define IMAGE_REL_M32R_GPREL16 0x0004
4350 #define IMAGE_REL_M32R_PCREL24 0x0005
4351 #define IMAGE_REL_M32R_PCREL16 0x0006
4352 #define IMAGE_REL_M32R_PCREL8 0x0007
4353 #define IMAGE_REL_M32R_REFHALF 0x0008
4354 #define IMAGE_REL_M32R_REFHI 0x0009
4355 #define IMAGE_REL_M32R_REFLO 0x000A
4356 #define IMAGE_REL_M32R_PAIR 0x000B
4357 #define IMAGE_REL_M32R_SECTION 0x000C
4358 #define IMAGE_REL_M32R_SECREL32 0x000D
4359 #define IMAGE_REL_M32R_TOKEN 0x000E
4360
4361 #define EXT_IMM64(Value,Address,Size,InstPos,ValPos) Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)
4362 #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)
4363
4364 #define EMARCH_ENC_I17_IMM7B_INST_WORD_X 3
4365 #define EMARCH_ENC_I17_IMM7B_SIZE_X 7
4366 #define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 4
4367 #define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0
4368
4369 #define EMARCH_ENC_I17_IMM9D_INST_WORD_X 3
4370 #define EMARCH_ENC_I17_IMM9D_SIZE_X 9
4371 #define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 18
4372 #define EMARCH_ENC_I17_IMM9D_VAL_POS_X 7
4373
4374 #define EMARCH_ENC_I17_IMM5C_INST_WORD_X 3
4375 #define EMARCH_ENC_I17_IMM5C_SIZE_X 5
4376 #define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 13
4377 #define EMARCH_ENC_I17_IMM5C_VAL_POS_X 16
4378
4379 #define EMARCH_ENC_I17_IC_INST_WORD_X 3
4380 #define EMARCH_ENC_I17_IC_SIZE_X 1
4381 #define EMARCH_ENC_I17_IC_INST_WORD_POS_X 12
4382 #define EMARCH_ENC_I17_IC_VAL_POS_X 21
4383
4384 #define EMARCH_ENC_I17_IMM41a_INST_WORD_X 1
4385 #define EMARCH_ENC_I17_IMM41a_SIZE_X 10
4386 #define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 14
4387 #define EMARCH_ENC_I17_IMM41a_VAL_POS_X 22
4388
4389 #define EMARCH_ENC_I17_IMM41b_INST_WORD_X 1
4390 #define EMARCH_ENC_I17_IMM41b_SIZE_X 8
4391 #define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 24
4392 #define EMARCH_ENC_I17_IMM41b_VAL_POS_X 32
4393
4394 #define EMARCH_ENC_I17_IMM41c_INST_WORD_X 2
4395 #define EMARCH_ENC_I17_IMM41c_SIZE_X 23
4396 #define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0
4397 #define EMARCH_ENC_I17_IMM41c_VAL_POS_X 40
4398
4399 #define EMARCH_ENC_I17_SIGN_INST_WORD_X 3
4400 #define EMARCH_ENC_I17_SIGN_SIZE_X 1
4401 #define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 27
4402 #define EMARCH_ENC_I17_SIGN_VAL_POS_X 63
4403
4404 #define X3_OPCODE_INST_WORD_X 3
4405 #define X3_OPCODE_SIZE_X 4
4406 #define X3_OPCODE_INST_WORD_POS_X 28
4407 #define X3_OPCODE_SIGN_VAL_POS_X 0
4408
4409 #define X3_I_INST_WORD_X 3
4410 #define X3_I_SIZE_X 1
4411 #define X3_I_INST_WORD_POS_X 27
4412 #define X3_I_SIGN_VAL_POS_X 59
4413
4414 #define X3_D_WH_INST_WORD_X 3
4415 #define X3_D_WH_SIZE_X 3
4416 #define X3_D_WH_INST_WORD_POS_X 24
4417 #define X3_D_WH_SIGN_VAL_POS_X 0
4418
4419 #define X3_IMM20_INST_WORD_X 3
4420 #define X3_IMM20_SIZE_X 20
4421 #define X3_IMM20_INST_WORD_POS_X 4
4422 #define X3_IMM20_SIGN_VAL_POS_X 0
4423
4424 #define X3_IMM39_1_INST_WORD_X 2
4425 #define X3_IMM39_1_SIZE_X 23
4426 #define X3_IMM39_1_INST_WORD_POS_X 0
4427 #define X3_IMM39_1_SIGN_VAL_POS_X 36
4428
4429 #define X3_IMM39_2_INST_WORD_X 1
4430 #define X3_IMM39_2_SIZE_X 16
4431 #define X3_IMM39_2_INST_WORD_POS_X 16
4432 #define X3_IMM39_2_SIGN_VAL_POS_X 20
4433
4434 #define X3_P_INST_WORD_X 3
4435 #define X3_P_SIZE_X 4
4436 #define X3_P_INST_WORD_POS_X 0
4437 #define X3_P_SIGN_VAL_POS_X 0
4438
4439 #define X3_TMPLT_INST_WORD_X 0
4440 #define X3_TMPLT_SIZE_X 4
4441 #define X3_TMPLT_INST_WORD_POS_X 0
4442 #define X3_TMPLT_SIGN_VAL_POS_X 0
4443
4444 #define X3_BTYPE_QP_INST_WORD_X 2
4445 #define X3_BTYPE_QP_SIZE_X 9
4446 #define X3_BTYPE_QP_INST_WORD_POS_X 23
4447 #define X3_BTYPE_QP_INST_VAL_POS_X 0
4448
4449 #define X3_EMPTY_INST_WORD_X 1
4450 #define X3_EMPTY_SIZE_X 2
4451 #define X3_EMPTY_INST_WORD_POS_X 14
4452 #define X3_EMPTY_INST_VAL_POS_X 0
4453
4454 typedef struct _IMAGE_LINENUMBER {
4455 union {
4456 DWORD SymbolTableIndex;
4457 DWORD VirtualAddress;
4458 } Type;
4459 WORD Linenumber;
4460 } IMAGE_LINENUMBER;
4461 typedef IMAGE_LINENUMBER UNALIGNED *PIMAGE_LINENUMBER;
4462
4463 #define IMAGE_SIZEOF_LINENUMBER 6
4464
4465 #include "poppack.h"
4466
4467 typedef struct _IMAGE_BASE_RELOCATION {
4468 DWORD VirtualAddress;
4469 DWORD SizeOfBlock;
4470
4471 } IMAGE_BASE_RELOCATION;
4472 typedef IMAGE_BASE_RELOCATION UNALIGNED *PIMAGE_BASE_RELOCATION;
4473
4474 #define IMAGE_SIZEOF_BASE_RELOCATION 8
4475
4476 #define IMAGE_REL_BASED_ABSOLUTE 0
4477 #define IMAGE_REL_BASED_HIGH 1
4478 #define IMAGE_REL_BASED_LOW 2
4479 #define IMAGE_REL_BASED_HIGHLOW 3
4480 #define IMAGE_REL_BASED_HIGHADJ 4
4481 #define IMAGE_REL_BASED_MIPS_JMPADDR 5
4482 #define IMAGE_REL_BASED_MIPS_JMPADDR16 9
4483 #define IMAGE_REL_BASED_IA64_IMM64 9
4484 #define IMAGE_REL_BASED_DIR64 10
4485
4486 #define IMAGE_ARCHIVE_START_SIZE 8
4487 #define IMAGE_ARCHIVE_START "!<arch>\n"
4488 #define IMAGE_ARCHIVE_END "`\n"
4489 #define IMAGE_ARCHIVE_PAD "\n"
4490 #define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
4491 #define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
4492
4493 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
4494 BYTE Name[16];
4495 BYTE Date[12];
4496 BYTE UserID[6];
4497 BYTE GroupID[6];
4498 BYTE Mode[8];
4499 BYTE Size[10];
4500 BYTE EndHeader[2];
4501 } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
4502
4503 #define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
4504
4505 typedef struct _IMAGE_EXPORT_DIRECTORY {
4506 DWORD Characteristics;
4507 DWORD TimeDateStamp;
4508 WORD MajorVersion;
4509 WORD MinorVersion;
4510 DWORD Name;
4511 DWORD Base;
4512 DWORD NumberOfFunctions;
4513 DWORD NumberOfNames;
4514 DWORD AddressOfFunctions;
4515 DWORD AddressOfNames;
4516 DWORD AddressOfNameOrdinals;
4517 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
4518
4519 typedef struct _IMAGE_IMPORT_BY_NAME {
4520 WORD Hint;
4521 BYTE Name[1];
4522 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
4523
4524 #include "pshpack8.h"
4525
4526 typedef struct _IMAGE_THUNK_DATA64 {
4527 union {
4528 ULONGLONG ForwarderString;
4529 ULONGLONG Function;
4530 ULONGLONG Ordinal;
4531 ULONGLONG AddressOfData;
4532 } u1;
4533 } IMAGE_THUNK_DATA64;
4534 typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
4535
4536 #include "poppack.h"
4537
4538 typedef struct _IMAGE_THUNK_DATA32 {
4539 union {
4540 DWORD ForwarderString;
4541 DWORD Function;
4542 DWORD Ordinal;
4543 DWORD AddressOfData;
4544 } u1;
4545 } IMAGE_THUNK_DATA32;
4546 typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
4547
4548 #define IMAGE_ORDINAL_FLAG64 0x8000000000000000ull
4549 #define IMAGE_ORDINAL_FLAG32 0x80000000
4550 #define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffffull)
4551 #define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
4552 #define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
4553 #define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
4554
4555 typedef VOID
4556 (NTAPI *PIMAGE_TLS_CALLBACK)(PVOID DllHandle,DWORD Reason,PVOID Reserved);
4557
4558 typedef struct _IMAGE_TLS_DIRECTORY64 {
4559 ULONGLONG StartAddressOfRawData;
4560 ULONGLONG EndAddressOfRawData;
4561 ULONGLONG AddressOfIndex;
4562 ULONGLONG AddressOfCallBacks;
4563 DWORD SizeOfZeroFill;
4564 DWORD Characteristics;
4565 } IMAGE_TLS_DIRECTORY64;
4566 typedef IMAGE_TLS_DIRECTORY64 *PIMAGE_TLS_DIRECTORY64;
4567
4568 typedef struct _IMAGE_TLS_DIRECTORY32 {
4569 DWORD StartAddressOfRawData;
4570 DWORD EndAddressOfRawData;
4571 DWORD AddressOfIndex;
4572 DWORD AddressOfCallBacks;
4573 DWORD SizeOfZeroFill;
4574 DWORD Characteristics;
4575 } IMAGE_TLS_DIRECTORY32;
4576 typedef IMAGE_TLS_DIRECTORY32 *PIMAGE_TLS_DIRECTORY32;
4577
4578 #ifdef _WIN64
4579 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
4580 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
4581 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
4582 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
4583 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
4584 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
4585 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
4586 #else
4587 #define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
4588 #define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
4589 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
4590 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
4591 #define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
4592 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
4593 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
4594 #endif
4595
4596 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
4597 union {
4598 DWORD Characteristics;
4599 DWORD OriginalFirstThunk;
4600 };
4601 DWORD TimeDateStamp;
4602
4603 DWORD ForwarderChain;
4604 DWORD Name;
4605 DWORD FirstThunk;
4606 } IMAGE_IMPORT_DESCRIPTOR;
4607 typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
4608
4609 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
4610 DWORD TimeDateStamp;
4611 WORD OffsetModuleName;
4612 WORD NumberOfModuleForwarderRefs;
4613 } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
4614
4615 typedef struct _IMAGE_BOUND_FORWARDER_REF {
4616 DWORD TimeDateStamp;
4617 WORD OffsetModuleName;
4618 WORD Reserved;
4619 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
4620
4621 typedef struct _IMAGE_RESOURCE_DIRECTORY {
4622 DWORD Characteristics;
4623 DWORD TimeDateStamp;
4624 WORD MajorVersion;
4625 WORD MinorVersion;
4626 WORD NumberOfNamedEntries;
4627 WORD NumberOfIdEntries;
4628 } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
4629
4630 #define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
4631 #define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
4632
4633 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
4634 union {
4635 struct {
4636 DWORD NameOffset:31;
4637 DWORD NameIsString:1;
4638 };
4639 DWORD Name;
4640 WORD Id;
4641 };
4642 union {
4643 DWORD OffsetToData;
4644 struct {
4645 DWORD OffsetToDirectory:31;
4646 DWORD DataIsDirectory:1;
4647 };
4648 };
4649 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
4650
4651 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
4652 WORD Length;
4653 CHAR NameString[1];
4654 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
4655
4656 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
4657 WORD Length;
4658 WCHAR NameString[1];
4659 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
4660
4661 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
4662 DWORD OffsetToData;
4663 DWORD Size;
4664 DWORD CodePage;
4665 DWORD Reserved;
4666 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
4667
4668 typedef struct {
4669 DWORD Size;
4670 DWORD TimeDateStamp;
4671 WORD MajorVersion;
4672 WORD MinorVersion;
4673 DWORD GlobalFlagsClear;
4674 DWORD GlobalFlagsSet;
4675 DWORD CriticalSectionDefaultTimeout;
4676 DWORD DeCommitFreeBlockThreshold;
4677 DWORD DeCommitTotalFreeThreshold;
4678 DWORD LockPrefixTable;
4679 DWORD MaximumAllocationSize;
4680 DWORD VirtualMemoryThreshold;
4681 DWORD ProcessHeapFlags;
4682 DWORD ProcessAffinityMask;
4683 WORD CSDVersion;
4684 WORD Reserved1;
4685 DWORD EditList;
4686 DWORD SecurityCookie;
4687 DWORD SEHandlerTable;
4688 DWORD SEHandlerCount;
4689 } IMAGE_LOAD_CONFIG_DIRECTORY32,*PIMAGE_LOAD_CONFIG_DIRECTORY32;
4690
4691 typedef struct {
4692 DWORD Size;
4693 DWORD TimeDateStamp;
4694 WORD MajorVersion;
4695 WORD MinorVersion;
4696 DWORD GlobalFlagsClear;
4697 DWORD GlobalFlagsSet;
4698 DWORD CriticalSectionDefaultTimeout;
4699 ULONGLONG DeCommitFreeBlockThreshold;
4700 ULONGLONG DeCommitTotalFreeThreshold;
4701 ULONGLONG LockPrefixTable;
4702 ULONGLONG MaximumAllocationSize;
4703 ULONGLONG VirtualMemoryThreshold;
4704 ULONGLONG ProcessAffinityMask;
4705 DWORD ProcessHeapFlags;
4706 WORD CSDVersion;
4707 WORD Reserved1;
4708 ULONGLONG EditList;
4709 ULONGLONG SecurityCookie;
4710 ULONGLONG SEHandlerTable;
4711 ULONGLONG SEHandlerCount;
4712 } IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
4713
4714 #ifdef _WIN64
4715 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
4716 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
4717 #else
4718 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
4719 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
4720 #endif
4721
4722 typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
4723 DWORD FuncStart;
4724 DWORD PrologLen : 8;
4725 DWORD FuncLen : 22;
4726 DWORD ThirtyTwoBit : 1;
4727 DWORD ExceptionFlag : 1;
4728 } IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
4729
4730 typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
4731 ULONGLONG BeginAddress;
4732 ULONGLONG EndAddress;
4733 ULONGLONG ExceptionHandler;
4734 ULONGLONG HandlerData;
4735 ULONGLONG PrologEndAddress;
4736 } IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
4737
4738 typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
4739 DWORD BeginAddress;
4740 DWORD EndAddress;
4741 DWORD ExceptionHandler;
4742 DWORD HandlerData;
4743 DWORD PrologEndAddress;
4744 } IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
4745
4746 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
4747 DWORD BeginAddress;
4748 DWORD EndAddress;
4749 DWORD UnwindInfoAddress;
4750 } _IMAGE_RUNTIME_FUNCTION_ENTRY,*_PIMAGE_RUNTIME_FUNCTION_ENTRY;
4751
4752 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
4753 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
4754
4755 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
4756 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
4757
4758 typedef struct _IMAGE_DEBUG_DIRECTORY {
4759 DWORD Characteristics;
4760 DWORD TimeDateStamp;
4761 WORD MajorVersion;
4762 WORD MinorVersion;
4763 DWORD Type;
4764 DWORD SizeOfData;
4765 DWORD AddressOfRawData;
4766 DWORD PointerToRawData;
4767 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
4768
4769 #define IMAGE_DEBUG_TYPE_UNKNOWN 0
4770 #define IMAGE_DEBUG_TYPE_COFF 1
4771 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
4772 #define IMAGE_DEBUG_TYPE_FPO 3
4773 #define IMAGE_DEBUG_TYPE_MISC 4
4774 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
4775 #define IMAGE_DEBUG_TYPE_FIXUP 6
4776 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
4777 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
4778 #define IMAGE_DEBUG_TYPE_BORLAND 9
4779 #define IMAGE_DEBUG_TYPE_RESERVED10 10
4780 #define IMAGE_DEBUG_TYPE_CLSID 11
4781
4782 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
4783 DWORD NumberOfSymbols;
4784 DWORD LvaToFirstSymbol;
4785 DWORD NumberOfLinenumbers;
4786 DWORD LvaToFirstLinenumber;
4787 DWORD RvaToFirstByteOfCode;
4788 DWORD RvaToLastByteOfCode;
4789 DWORD RvaToFirstByteOfData;
4790 DWORD RvaToLastByteOfData;
4791 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
4792
4793 #define FRAME_FPO 0
4794 #define FRAME_TRAP 1
4795 #define FRAME_TSS 2
4796 #define FRAME_NONFPO 3
4797
4798 typedef struct _FPO_DATA {
4799 DWORD ulOffStart;
4800 DWORD cbProcSize;
4801 DWORD cdwLocals;
4802 WORD cdwParams;
4803 WORD cbProlog : 8;
4804 WORD cbRegs : 3;
4805 WORD fHasSEH : 1;
4806 WORD fUseBP : 1;
4807 WORD reserved : 1;
4808 WORD cbFrame : 2;
4809 } FPO_DATA,*PFPO_DATA;
4810 #define SIZEOF_RFPO_DATA 16
4811
4812 #define IMAGE_DEBUG_MISC_EXENAME 1
4813
4814 typedef struct _IMAGE_DEBUG_MISC {
4815 DWORD DataType;
4816 DWORD Length;
4817 BOOLEAN Unicode;
4818 BYTE Reserved[3];
4819 BYTE Data[1];
4820 } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
4821
4822 typedef struct _IMAGE_FUNCTION_ENTRY {
4823 DWORD StartingAddress;
4824 DWORD EndingAddress;
4825 DWORD EndOfPrologue;
4826 } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
4827
4828 typedef struct _IMAGE_FUNCTION_ENTRY64 {
4829 ULONGLONG StartingAddress;
4830 ULONGLONG EndingAddress;
4831 union {
4832 ULONGLONG EndOfPrologue;
4833 ULONGLONG UnwindInfoAddress;
4834 };
4835 } IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
4836
4837 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
4838 WORD Signature;
4839 WORD Flags;
4840 WORD Machine;
4841 WORD Characteristics;
4842 DWORD TimeDateStamp;
4843 DWORD CheckSum;
4844 DWORD ImageBase;
4845 DWORD SizeOfImage;
4846 DWORD NumberOfSections;
4847 DWORD ExportedNamesSize;
4848 DWORD DebugDirectorySize;
4849 DWORD SectionAlignment;
4850 DWORD Reserved[2];
4851 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
4852
4853 typedef struct _NON_PAGED_DEBUG_INFO {
4854 WORD Signature;
4855 WORD Flags;
4856 DWORD Size;
4857 WORD Machine;
4858 WORD Characteristics;
4859 DWORD TimeDateStamp;
4860 DWORD CheckSum;
4861 DWORD SizeOfImage;
4862 ULONGLONG ImageBase;
4863
4864 } NON_PAGED_DEBUG_INFO,*PNON_PAGED_DEBUG_INFO;
4865
4866 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
4867 #define NON_PAGED_DEBUG_SIGNATURE 0x494E
4868
4869 #define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
4870 #define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000
4871
4872 typedef struct _ImageArchitectureHeader {
4873 unsigned int AmaskValue: 1;
4874 int Adummy1 :7;
4875 unsigned int AmaskShift: 8;
4876 int Adummy2 :16;
4877 DWORD FirstEntryRVA;
4878 } IMAGE_ARCHITECTURE_HEADER,*PIMAGE_ARCHITECTURE_HEADER;
4879
4880 typedef struct _ImageArchitectureEntry {
4881 DWORD FixupInstRVA;
4882 DWORD NewInst;
4883 } IMAGE_ARCHITECTURE_ENTRY,*PIMAGE_ARCHITECTURE_ENTRY;
4884
4885 #include "poppack.h"
4886
4887 #define IMPORT_OBJECT_HDR_SIG2 0xffff
4888
4889 typedef struct IMPORT_OBJECT_HEADER {
4890 WORD Sig1;
4891 WORD Sig2;
4892 WORD Version;
4893 WORD Machine;
4894 DWORD TimeDateStamp;
4895 DWORD SizeOfData;
4896 union {
4897 WORD Ordinal;
4898 WORD Hint;
4899 };
4900 WORD Type : 2;
4901 WORD NameType : 3;
4902 WORD Reserved : 11;
4903 } IMPORT_OBJECT_HEADER;
4904
4905 typedef enum IMPORT_OBJECT_TYPE {
4906 IMPORT_OBJECT_CODE = 0,IMPORT_OBJECT_DATA = 1,IMPORT_OBJECT_CONST = 2
4907 } IMPORT_OBJECT_TYPE;
4908
4909 typedef enum IMPORT_OBJECT_NAME_TYPE {
4910 IMPORT_OBJECT_ORDINAL = 0,IMPORT_OBJECT_NAME = 1,IMPORT_OBJECT_NAME_NO_PREFIX = 2,IMPORT_OBJECT_NAME_UNDECORATE = 3
4911 } IMPORT_OBJECT_NAME_TYPE;
4912
4913 #ifndef __IMAGE_COR20_HEADER_DEFINED__
4914 #define __IMAGE_COR20_HEADER_DEFINED__
4915 typedef enum ReplacesCorHdrNumericDefines {
4916 COMIMAGE_FLAGS_ILONLY =0x00000001,COMIMAGE_FLAGS_32BITREQUIRED =0x00000002,COMIMAGE_FLAGS_IL_LIBRARY =0x00000004,
4917 COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008,COMIMAGE_FLAGS_TRACKDEBUGDATA =0x00010000,COR_VERSION_MAJOR_V2 =2,
4918 COR_VERSION_MAJOR =COR_VERSION_MAJOR_V2,COR_VERSION_MINOR =0,COR_DELETED_NAME_LENGTH =8,COR_VTABLEGAP_NAME_LENGTH =8,
4919 NATIVE_TYPE_MAX_CB =1,COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE=0xFF,IMAGE_COR_MIH_METHODRVA =0x01,IMAGE_COR_MIH_EHRVA =0x02,
4920 IMAGE_COR_MIH_BASICBLOCK =0x08,COR_VTABLE_32BIT =0x01,COR_VTABLE_64BIT =0x02,COR_VTABLE_FROM_UNMANAGED =0x04,
4921 COR_VTABLE_CALL_MOST_DERIVED =0x10,IMAGE_COR_EATJ_THUNK_SIZE =32,MAX_CLASS_NAME =1024,MAX_PACKAGE_NAME =1024
4922 } ReplacesCorHdrNumericDefines;
4923
4924 typedef struct IMAGE_COR20_HEADER {
4925 DWORD cb;
4926 WORD MajorRuntimeVersion;
4927 WORD MinorRuntimeVersion;
4928 IMAGE_DATA_DIRECTORY MetaData;
4929 DWORD Flags;
4930 DWORD EntryPointToken;
4931 IMAGE_DATA_DIRECTORY Resources;
4932 IMAGE_DATA_DIRECTORY StrongNameSignature;
4933 IMAGE_DATA_DIRECTORY CodeManagerTable;
4934 IMAGE_DATA_DIRECTORY VTableFixups;
4935 IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
4936 IMAGE_DATA_DIRECTORY ManagedNativeHeader;
4937 } IMAGE_COR20_HEADER,*PIMAGE_COR20_HEADER;
4938 #endif
4939
4940 #if defined (__x86_64)
4941 NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (DWORD64 ControlPc, PDWORD64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
4942 NTSYSAPI VOID NTAPI RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
4943 #endif
4944
4945 #include <string.h>
4946
4947 #ifndef _SLIST_HEADER_
4948 #define _SLIST_HEADER_
4949
4950 #ifdef _WIN64
4951 typedef struct _SLIST_ENTRY *PSLIST_ENTRY;
4952 typedef DECLSPEC_ALIGN(16) struct _SLIST_ENTRY {
4953 PSLIST_ENTRY Next;
4954 } SLIST_ENTRY;
4955 #else
4956
4957 #define SLIST_ENTRY SINGLE_LIST_ENTRY
4958 #define _SLIST_ENTRY _SINGLE_LIST_ENTRY
4959 #define PSLIST_ENTRY PSINGLE_LIST_ENTRY
4960 #endif
4961
4962 #if defined(_WIN64)
4963
4964 typedef DECLSPEC_ALIGN(16) struct _SLIST_HEADER {
4965 ULONGLONG Alignment;
4966 ULONGLONG Region;
4967 } SLIST_HEADER;
4968
4969 typedef struct _SLIST_HEADER *PSLIST_HEADER;
4970 #else
4971
4972 typedef union _SLIST_HEADER {
4973 ULONGLONG Alignment;
4974 struct {
4975 SLIST_ENTRY Next;
4976 WORD Depth;
4977 WORD Sequence;
4978 };
4979 } SLIST_HEADER,*PSLIST_HEADER;
4980 #endif
4981 #endif
4982
4983 NTSYSAPI VOID NTAPI RtlInitializeSListHead(PSLIST_HEADER ListHead);
4984 NTSYSAPI PSLIST_ENTRY NTAPI RtlFirstEntrySList(const SLIST_HEADER *ListHead);
4985 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPopEntrySList(PSLIST_HEADER ListHead);
4986 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPushEntrySList(PSLIST_HEADER ListHead,PSLIST_ENTRY ListEntry);
4987 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedFlushSList(PSLIST_HEADER ListHead);
4988 NTSYSAPI WORD NTAPI RtlQueryDepthSList(PSLIST_HEADER ListHead);
4989
4990 #define HEAP_NO_SERIALIZE 0x00000001
4991 #define HEAP_GROWABLE 0x00000002
4992 #define HEAP_GENERATE_EXCEPTIONS 0x00000004
4993 #define HEAP_ZERO_MEMORY 0x00000008
4994 #define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
4995 #define HEAP_TAIL_CHECKING_ENABLED 0x00000020
4996 #define HEAP_FREE_CHECKING_ENABLED 0x00000040
4997 #define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
4998 #define HEAP_CREATE_ALIGN_16 0x00010000
4999 #define HEAP_CREATE_ENABLE_TRACING 0x00020000
5000 #define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
5001 #define HEAP_MAXIMUM_TAG 0x0FFF
5002 #define HEAP_PSEUDO_TAG_FLAG 0x8000
5003 #define HEAP_TAG_SHIFT 18
5004 #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b) + ((o) << 18)))
5005
5006 NTSYSAPI VOID NTAPI RtlCaptureContext(PCONTEXT ContextRecord);
5007
5008 #define IS_TEXT_UNICODE_ASCII16 0x0001
5009 #define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
5010
5011 #define IS_TEXT_UNICODE_STATISTICS 0x0002
5012 #define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
5013
5014 #define IS_TEXT_UNICODE_CONTROLS 0x0004
5015 #define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
5016
5017 #define IS_TEXT_UNICODE_SIGNATURE 0x0008
5018 #define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
5019
5020 #define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
5021 #define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
5022 #define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
5023 #define IS_TEXT_UNICODE_NULL_BYTES 0x1000
5024
5025 #define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
5026 #define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
5027 #define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
5028 #define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
5029
5030 #define COMPRESSION_FORMAT_NONE (0x0000)
5031 #define COMPRESSION_FORMAT_DEFAULT (0x0001)
5032 #define COMPRESSION_FORMAT_LZNT1 (0x0002)
5033 #define COMPRESSION_ENGINE_STANDARD (0x0000)
5034 #define COMPRESSION_ENGINE_MAXIMUM (0x0100)
5035 #define COMPRESSION_ENGINE_HIBER (0x0200)
5036
5037 #if _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
5038 #define _MEMCPY_INLINE_
5039 __CRT_INLINE PVOID __cdecl memcpy_inline(void *dst,const void *src,size_t size) {
5040 if(((char *)dst > (char *)src) && ((char *)dst < ((char *)src + size))) {
5041 __debugbreak();
5042 }
5043 return memcpy(dst,src,size);
5044 }
5045 #define memcpy memcpy_inline
5046 #endif
5047
5048 NTSYSAPI SIZE_T NTAPI RtlCompareMemory(const VOID *Source1,const VOID *Source2,SIZE_T Length);
5049
5050 #define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
5051 #define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
5052 #define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
5053 #define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
5054 #define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
5055
5056 __CRT_INLINE PVOID RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt) {
5057 volatile char *vptr =(volatile char *)ptr;
5058 #ifdef __x86_64
5059 __stosb((PBYTE)((DWORD64)vptr),0,cnt);
5060 #else
5061 while(cnt) {
5062 *vptr = 0;
5063 vptr++;
5064 cnt--;
5065 }
5066 #endif
5067 return ptr;
5068 }
5069
5070 typedef struct _MESSAGE_RESOURCE_ENTRY {
5071 WORD Length;
5072 WORD Flags;
5073 BYTE Text[1];
5074 } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
5075
5076 #define MESSAGE_RESOURCE_UNICODE 0x0001
5077
5078 typedef struct _MESSAGE_RESOURCE_BLOCK {
5079 DWORD LowId;
5080 DWORD HighId;
5081 DWORD OffsetToEntries;
5082 } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
5083
5084 typedef struct _MESSAGE_RESOURCE_DATA {
5085 DWORD NumberOfBlocks;
5086 MESSAGE_RESOURCE_BLOCK Blocks[1];
5087 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
5088
5089 typedef struct _OSVERSIONINFOA {
5090 DWORD dwOSVersionInfoSize;
5091 DWORD dwMajorVersion;
5092 DWORD dwMinorVersion;
5093 DWORD dwBuildNumber;
5094 DWORD dwPlatformId;
5095 CHAR szCSDVersion[128];
5096 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
5097
5098 typedef struct _OSVERSIONINFOW {
5099 DWORD dwOSVersionInfoSize;
5100 DWORD dwMajorVersion;
5101 DWORD dwMinorVersion;
5102 DWORD dwBuildNumber;
5103 DWORD dwPlatformId;
5104 WCHAR szCSDVersion[128];
5105 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW,RTL_OSVERSIONINFOW,*PRTL_OSVERSIONINFOW;
5106
5107 #ifdef UNICODE
5108 typedef OSVERSIONINFOW OSVERSIONINFO;
5109 typedef POSVERSIONINFOW POSVERSIONINFO;
5110 typedef LPOSVERSIONINFOW LPOSVERSIONINFO;
5111 #else
5112 typedef OSVERSIONINFOA OSVERSIONINFO;
5113 typedef POSVERSIONINFOA POSVERSIONINFO;
5114 typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
5115 #endif
5116
5117 typedef struct _OSVERSIONINFOEXA {
5118 DWORD dwOSVersionInfoSize;
5119 DWORD dwMajorVersion;
5120 DWORD dwMinorVersion;
5121 DWORD dwBuildNumber;
5122 DWORD dwPlatformId;
5123 CHAR szCSDVersion[128];
5124 WORD wServicePackMajor;
5125 WORD wServicePackMinor;
5126 WORD wSuiteMask;
5127 BYTE wProductType;
5128 BYTE wReserved;
5129 } OSVERSIONINFOEXA,*POSVERSIONINFOEXA,*LPOSVERSIONINFOEXA;
5130
5131 typedef struct _OSVERSIONINFOEXW {
5132 DWORD dwOSVersionInfoSize;
5133 DWORD dwMajorVersion;
5134 DWORD dwMinorVersion;
5135 DWORD dwBuildNumber;
5136 DWORD dwPlatformId;
5137 WCHAR szCSDVersion[128];
5138 WORD wServicePackMajor;
5139 WORD wServicePackMinor;
5140 WORD wSuiteMask;
5141 BYTE wProductType;
5142 BYTE wReserved;
5143 } OSVERSIONINFOEXW,*POSVERSIONINFOEXW,*LPOSVERSIONINFOEXW,RTL_OSVERSIONINFOEXW,*PRTL_OSVERSIONINFOEXW;
5144 #ifdef UNICODE
5145 typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
5146 typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
5147 typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
5148 #else
5149 typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
5150 typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
5151 typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
5152 #endif
5153
5154 #define VER_EQUAL 1
5155 #define VER_GREATER 2
5156 #define VER_GREATER_EQUAL 3
5157 #define VER_LESS 4
5158 #define VER_LESS_EQUAL 5
5159 #define VER_AND 6
5160 #define VER_OR 7
5161
5162 #define VER_CONDITION_MASK 7
5163 #define VER_NUM_BITS_PER_CONDITION_MASK 3
5164
5165 #define VER_MINORVERSION 0x0000001
5166 #define VER_MAJORVERSION 0x0000002
5167 #define VER_BUILDNUMBER 0x0000004
5168 #define VER_PLATFORMID 0x0000008
5169 #define VER_SERVICEPACKMINOR 0x0000010
5170 #define VER_SERVICEPACKMAJOR 0x0000020
5171 #define VER_SUITENAME 0x0000040
5172 #define VER_PRODUCT_TYPE 0x0000080
5173
5174 #define VER_NT_WORKSTATION 0x0000001
5175 #define VER_NT_DOMAIN_CONTROLLER 0x0000002
5176 #define VER_NT_SERVER 0x0000003
5177
5178 #define VER_PLATFORM_WIN32s 0
5179 #define VER_PLATFORM_WIN32_WINDOWS 1
5180 #define VER_PLATFORM_WIN32_NT 2
5181
5182 #define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
5183
5184 NTSYSAPI ULONGLONG NTAPI VerSetConditionMask(ULONGLONG ConditionMask,DWORD TypeMask,BYTE Condition);
5185
5186 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
5187 WORD Type;
5188 WORD CreatorBackTraceIndex;
5189 struct _RTL_CRITICAL_SECTION *CriticalSection;
5190 LIST_ENTRY ProcessLocksList;
5191 DWORD EntryCount;
5192 DWORD ContentionCount;
5193 DWORD Spare[2];
5194 } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG,RTL_RESOURCE_DEBUG,*PRTL_RESOURCE_DEBUG;
5195
5196 #define RTL_CRITSECT_TYPE 0
5197 #define RTL_RESOURCE_TYPE 1
5198
5199 typedef struct _RTL_CRITICAL_SECTION {
5200 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
5201 LONG LockCount;
5202 LONG RecursionCount;
5203 HANDLE OwningThread;
5204 HANDLE LockSemaphore;
5205 ULONG_PTR SpinCount;
5206 } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
5207
5208 typedef VOID (NTAPI *RTL_VERIFIER_DLL_LOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
5209 typedef VOID (NTAPI *RTL_VERIFIER_DLL_UNLOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
5210 typedef VOID (NTAPI *RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK)(PVOID AllocationBase,SIZE_T AllocationSize);
5211
5212 typedef struct _RTL_VERIFIER_THUNK_DESCRIPTOR {
5213 PCHAR ThunkName;
5214 PVOID ThunkOldAddress;
5215 PVOID ThunkNewAddress;
5216 } RTL_VERIFIER_THUNK_DESCRIPTOR,*PRTL_VERIFIER_THUNK_DESCRIPTOR;
5217
5218 typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR {
5219 PWCHAR DllName;
5220 DWORD DllFlags;
5221 PVOID DllAddress;
5222 PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks;
5223 } RTL_VERIFIER_DLL_DESCRIPTOR,*PRTL_VERIFIER_DLL_DESCRIPTOR;
5224
5225 typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR {
5226 DWORD Length;
5227 PRTL_VERIFIER_DLL_DESCRIPTOR ProviderDlls;
5228 RTL_VERIFIER_DLL_LOAD_CALLBACK ProviderDllLoadCallback;
5229 RTL_VERIFIER_DLL_UNLOAD_CALLBACK ProviderDllUnloadCallback;
5230 PWSTR VerifierImage;
5231 DWORD VerifierFlags;
5232 DWORD VerifierDebug;
5233 PVOID RtlpGetStackTraceAddress;
5234 PVOID RtlpDebugPageHeapCreate;
5235 PVOID RtlpDebugPageHeapDestroy;
5236 RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderNtdllHeapFreeCallback;
5237 } RTL_VERIFIER_PROVIDER_DESCRIPTOR,*PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
5238
5239 #define RTL_VRF_FLG_FULL_PAGE_HEAP 0x00000001
5240 #define RTL_VRF_FLG_RESERVED_DONOTUSE 0x00000002
5241 #define RTL_VRF_FLG_HANDLE_CHECKS 0x00000004
5242 #define RTL_VRF_FLG_STACK_CHECKS 0x00000008
5243 #define RTL_VRF_FLG_APPCOMPAT_CHECKS 0x00000010
5244 #define RTL_VRF_FLG_TLS_CHECKS 0x00000020
5245 #define RTL_VRF_FLG_DIRTY_STACKS 0x00000040
5246 #define RTL_VRF_FLG_RPC_CHECKS 0x00000080
5247 #define RTL_VRF_FLG_COM_CHECKS 0x00000100
5248 #define RTL_VRF_FLG_DANGEROUS_APIS 0x00000200
5249 #define RTL_VRF_FLG_RACE_CHECKS 0x00000400
5250 #define RTL_VRF_FLG_DEADLOCK_CHECKS 0x00000800
5251 #define RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS 0x00001000
5252 #define RTL_VRF_FLG_VIRTUAL_MEM_CHECKS 0x00002000
5253 #define RTL_VRF_FLG_ENABLE_LOGGING 0x00004000
5254 #define RTL_VRF_FLG_FAST_FILL_HEAP 0x00008000
5255 #define RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING 0x00010000
5256 #define RTL_VRF_FLG_ENABLED_SYSTEM_WIDE 0x00020000
5257 #define RTL_VRF_FLG_MISCELLANEOUS_CHECKS 0x00020000
5258 #define RTL_VRF_FLG_LOCK_CHECKS 0x00040000
5259
5260 #define APPLICATION_VERIFIER_INTERNAL_ERROR 0x80000000
5261 #define APPLICATION_VERIFIER_INTERNAL_WARNING 0x40000000
5262 #define APPLICATION_VERIFIER_NO_BREAK 0x20000000
5263 #define APPLICATION_VERIFIER_CONTINUABLE_BREAK 0x10000000
5264
5265 #define APPLICATION_VERIFIER_UNKNOWN_ERROR 0x0001
5266 #define APPLICATION_VERIFIER_ACCESS_VIOLATION 0x0002
5267 #define APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS 0x0003
5268 #define APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST 0x0004
5269 #define APPLICATION_VERIFIER_BAD_HEAP_HANDLE 0x0005
5270 #define APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE 0x0006
5271 #define APPLICATION_VERIFIER_DOUBLE_FREE 0x0007
5272 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK 0x0008
5273 #define APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP 0x0009
5274 #define APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION 0x000A
5275 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER 0x000B
5276 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING 0x000C
5277 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_HEADER 0x000D
5278 #define APPLICATION_VERIFIER_CORRUPTED_FREED_HEAP_BLOCK 0x000E
5279 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_SUFFIX 0x000F
5280 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_START_STAMP 0x0010
5281 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_END_STAMP 0x0011
5282 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_PREFIX 0x0012
5283 #define APPLICATION_VERIFIER_FIRST_CHANCE_ACCESS_VIOLATION 0x0013
5284 #define APPLICATION_VERIFIER_CORRUPTED_HEAP_LIST 0x0014
5285
5286 #define APPLICATION_VERIFIER_TERMINATE_THREAD_CALL 0x0100
5287 #define APPLICATION_VERIFIER_STACK_OVERFLOW 0x0101
5288 #define APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL 0x0102
5289
5290 #define APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK 0x0200
5291 #define APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL 0x0201
5292 #define APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP 0x0202
5293 #define APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE 0x0203
5294 #define APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY 0x0204
5295 #define APPLICATION_VERIFIER_LOCK_CORRUPTED 0x0205
5296 #define APPLICATION_VERIFIER_LOCK_INVALID_OWNER 0x0206
5297 #define APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT 0x0207
5298 #define APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT 0x0208
5299 #define APPLICATION_VERIFIER_LOCK_OVER_RELEASED 0x0209
5300 #define APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED 0x0210
5301 #define APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED 0x0211
5302 #define APPLICATION_VERIFIER_LOCK_IN_FREED_VMEM 0x0212
5303 #define APPLICATION_VERIFIER_LOCK_IN_UNMAPPED_MEM 0x0213
5304 #define APPLICATION_VERIFIER_THREAD_NOT_LOCK_OWNER 0x0214
5305
5306 #define APPLICATION_VERIFIER_INVALID_HANDLE 0x0300
5307 #define APPLICATION_VERIFIER_INVALID_TLS_VALUE 0x0301
5308 #define APPLICATION_VERIFIER_INCORRECT_WAIT_CALL 0x0302
5309 #define APPLICATION_VERIFIER_NULL_HANDLE 0x0303
5310 #define APPLICATION_VERIFIER_WAIT_IN_DLLMAIN 0x0304
5311
5312 #define APPLICATION_VERIFIER_COM_ERROR 0x0400
5313 #define APPLICATION_VERIFIER_COM_API_IN_DLLMAIN 0x0401
5314 #define APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION 0x0402
5315 #define APPLICATION_VERIFIER_COM_UNBALANCED_COINIT 0x0403
5316 #define APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT 0x0404
5317 #define APPLICATION_VERIFIER_COM_UNBALANCED_SWC 0x0405
5318 #define APPLICATION_VERIFIER_COM_NULL_DACL 0x0406
5319 #define APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION 0x0407
5320 #define APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER 0x0408
5321 #define APPLICATION_VERIFIER_COM_SMUGGLED_PROXY 0x0409
5322 #define APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL 0x040A
5323 #define APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL 0x040B
5324 #define APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY 0x040C
5325 #define APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL 0x040D
5326 #define APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY 0x040E
5327 #define APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL 0x040F
5328 #define APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL 0x0410
5329
5330 #define APPLICATION_VERIFIER_RPC_ERROR 0x0500
5331
5332 #define APPLICATION_VERIFIER_INVALID_FREEMEM 0x0600
5333 #define APPLICATION_VERIFIER_INVALID_ALLOCMEM 0x0601
5334 #define APPLICATION_VERIFIER_INVALID_MAPVIEW 0x0602
5335 #define APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS 0x0603
5336 #define APPLICATION_VERIFIER_PROBE_FREE_MEM 0x0604
5337 #define APPLICATION_VERIFIER_PROBE_GUARD_PAGE 0x0605
5338 #define APPLICATION_VERIFIER_PROBE_NULL 0x0606
5339 #define APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE 0x0607
5340 #define APPLICATION_VERIFIER_SIZE_HEAP_UNEXPECTED_EXCEPTION 0x0618
5341
5342 #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)); }
5343
5344 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);
5345
5346 typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER)(struct _EXCEPTION_POINTERS *ExceptionInfo);
5347 #define SEF_DACL_AUTO_INHERIT 0x01
5348 #define SEF_SACL_AUTO_INHERIT 0x02
5349 #define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
5350 #define SEF_AVOID_PRIVILEGE_CHECK 0x08
5351 #define SEF_AVOID_OWNER_CHECK 0x10
5352 #define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
5353 #define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
5354
5355 typedef enum _HEAP_INFORMATION_CLASS {
5356 HeapCompatibilityInformation
5357 } HEAP_INFORMATION_CLASS;
5358
5359 NTSYSAPI DWORD NTAPI RtlSetHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength);
5360 NTSYSAPI DWORD NTAPI RtlQueryHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength,PSIZE_T ReturnLength);
5361 DWORD NTAPI RtlMultipleAllocateHeap(PVOID HeapHandle,DWORD Flags,SIZE_T Size,DWORD Count,PVOID *Array);
5362 DWORD NTAPI RtlMultipleFreeHeap(PVOID HeapHandle,DWORD Flags,DWORD Count,PVOID *Array);
5363
5364 #define WT_EXECUTEDEFAULT 0x00000000
5365 #define WT_EXECUTEINIOTHREAD 0x00000001
5366 #define WT_EXECUTEINUITHREAD 0x00000002
5367 #define WT_EXECUTEINWAITTHREAD 0x00000004
5368 #define WT_EXECUTEONLYONCE 0x00000008
5369 #define WT_EXECUTEINTIMERTHREAD 0x00000020
5370 #define WT_EXECUTELONGFUNCTION 0x00000010
5371 #define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
5372 #define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
5373 #define WT_TRANSFER_IMPERSONATION 0x00000100
5374 #define WT_SET_MAX_THREADPOOL_THREADS(Flags,Limit) ((Flags) |= (Limit)<<16)
5375 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC)(PVOID,BOOLEAN);
5376 typedef VOID (NTAPI *WORKERCALLBACKFUNC)(PVOID);
5377 typedef VOID (NTAPI *APC_CALLBACK_FUNCTION)(DWORD ,PVOID,PVOID);
5378 typedef
5379 VOID
5380 (NTAPI *PFLS_CALLBACK_FUNCTION)(PVOID lpFlsData);
5381 #define WT_EXECUTEINLONGTHREAD 0x00000010
5382 #define WT_EXECUTEDELETEWAIT 0x00000008
5383
5384 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
5385 ActivationContextBasicInformation = 1,ActivationContextDetailedInformation = 2,AssemblyDetailedInformationInActivationContext = 3,FileInformationInAssemblyOfAssemblyInActivationContext = 4,MaxActivationContextInfoClass,AssemblyDetailedInformationInActivationContxt = 3,FileInformationInAssemblyOfAssemblyInActivationContxt = 4
5386 } ACTIVATION_CONTEXT_INFO_CLASS;
5387
5388 #define ACTIVATIONCONTEXTINFOCLASS ACTIVATION_CONTEXT_INFO_CLASS
5389
5390 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
5391 DWORD ulAssemblyIndex;
5392 DWORD ulFileIndexInAssembly;
5393 } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
5394
5395 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
5396
5397 #define ACTIVATION_CONTEXT_PATH_TYPE_NONE (1)
5398 #define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE (2)
5399 #define ACTIVATION_CONTEXT_PATH_TYPE_URL (3)
5400 #define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF (4)
5401
5402 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
5403 DWORD ulFlags;
5404 DWORD ulFilenameLength;
5405 DWORD ulPathLength;
5406
5407 PCWSTR lpFileName;
5408 PCWSTR lpFilePath;
5409 } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
5410 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
5411
5412 #define _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION _ASSEMBLY_FILE_DETAILED_INFORMATION
5413 #define ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION ASSEMBLY_FILE_DETAILED_INFORMATION
5414 #define PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PASSEMBLY_FILE_DETAILED_INFORMATION
5415 #define PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PCASSEMBLY_FILE_DETAILED_INFORMATION
5416
5417 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
5418 DWORD ulFlags;
5419 DWORD ulEncodedAssemblyIdentityLength;
5420 DWORD ulManifestPathType;
5421 DWORD ulManifestPathLength;
5422 LARGE_INTEGER liManifestLastWriteTime;
5423 DWORD ulPolicyPathType;
5424 DWORD ulPolicyPathLength;
5425 LARGE_INTEGER liPolicyLastWriteTime;
5426 DWORD ulMetadataSatelliteRosterIndex;
5427 DWORD ulManifestVersionMajor;
5428 DWORD ulManifestVersionMinor;
5429 DWORD ulPolicyVersionMajor;
5430 DWORD ulPolicyVersionMinor;
5431 DWORD ulAssemblyDirectoryNameLength;
5432 PCWSTR lpAssemblyEncodedAssemblyIdentity;
5433 PCWSTR lpAssemblyManifestPath;
5434 PCWSTR lpAssemblyPolicyPath;
5435 PCWSTR lpAssemblyDirectoryName;
5436 DWORD ulFileCount;
5437 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
5438
5439 typedef const struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
5440
5441 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
5442 DWORD dwFlags;
5443 DWORD ulFormatVersion;
5444 DWORD ulAssemblyCount;
5445 DWORD ulRootManifestPathType;
5446 DWORD ulRootManifestPathChars;
5447 DWORD ulRootConfigurationPathType;
5448 DWORD ulRootConfigurationPathChars;
5449 DWORD ulAppDirPathType;
5450 DWORD ulAppDirPathChars;
5451 PCWSTR lpRootManifestPath;
5452 PCWSTR lpRootConfigurationPath;
5453 PCWSTR lpAppDirPath;
5454 } ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
5455
5456 typedef const struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
5457
5458 #define DLL_PROCESS_ATTACH 1
5459 #define DLL_THREAD_ATTACH 2
5460 #define DLL_THREAD_DETACH 3
5461 #define DLL_PROCESS_DETACH 0
5462 #define DLL_PROCESS_VERIFIER 4
5463
5464 #define EVENTLOG_SEQUENTIAL_READ 0x0001
5465 #define EVENTLOG_SEEK_READ 0x0002
5466 #define EVENTLOG_FORWARDS_READ 0x0004
5467 #define EVENTLOG_BACKWARDS_READ 0x0008
5468
5469 #define EVENTLOG_SUCCESS 0x0000
5470 #define EVENTLOG_ERROR_TYPE 0x0001
5471 #define EVENTLOG_WARNING_TYPE 0x0002
5472 #define EVENTLOG_INFORMATION_TYPE 0x0004
5473 #define EVENTLOG_AUDIT_SUCCESS 0x0008
5474 #define EVENTLOG_AUDIT_FAILURE 0x0010
5475
5476 #define EVENTLOG_START_PAIRED_EVENT 0x0001
5477 #define EVENTLOG_END_PAIRED_EVENT 0x0002
5478 #define EVENTLOG_END_ALL_PAIRED_EVENTS 0x0004
5479 #define EVENTLOG_PAIRED_EVENT_ACTIVE 0x0008
5480 #define EVENTLOG_PAIRED_EVENT_INACTIVE 0x0010
5481
5482 typedef struct _EVENTLOGRECORD {
5483 DWORD Length;
5484 DWORD Reserved;
5485 DWORD RecordNumber;
5486 DWORD TimeGenerated;
5487 DWORD TimeWritten;
5488 DWORD EventID;
5489 WORD EventType;
5490 WORD NumStrings;
5491 WORD EventCategory;
5492 WORD ReservedFlags;
5493 DWORD ClosingRecordNumber;
5494 DWORD StringOffset;
5495 DWORD UserSidLength;
5496 DWORD UserSidOffset;
5497 DWORD DataLength;
5498 DWORD DataOffset;
5499 } EVENTLOGRECORD,*PEVENTLOGRECORD;
5500
5501 #define MAXLOGICALLOGNAMESIZE 256
5502
5503 typedef struct _EVENTSFORLOGFILE{
5504 DWORD ulSize;
5505 WCHAR szLogicalLogFile[MAXLOGICALLOGNAMESIZE];
5506 DWORD ulNumRecords;
5507 EVENTLOGRECORD pEventLogRecords[];
5508 } EVENTSFORLOGFILE,*PEVENTSFORLOGFILE;
5509
5510 typedef struct _PACKEDEVENTINFO{
5511 DWORD ulSize;
5512 DWORD ulNumEventsForLogFile;
5513 DWORD ulOffsets[];
5514 } PACKEDEVENTINFO,*PPACKEDEVENTINFO;
5515
5516 #define KEY_QUERY_VALUE (0x0001)
5517 #define KEY_SET_VALUE (0x0002)
5518 #define KEY_CREATE_SUB_KEY (0x0004)
5519 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
5520 #define KEY_NOTIFY (0x0010)
5521 #define KEY_CREATE_LINK (0x0020)
5522 #define KEY_WOW64_32KEY (0x0200)
5523 #define KEY_WOW64_64KEY (0x0100)
5524 #define KEY_WOW64_RES (0x0300)
5525
5526 #define KEY_READ ((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE))
5527 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE))
5528 #define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
5529 #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))
5530 #define REG_OPTION_RESERVED (0x00000000L)
5531
5532 #define REG_OPTION_NON_VOLATILE (0x00000000L)
5533 #define REG_OPTION_VOLATILE (0x00000001L)
5534 #define REG_OPTION_CREATE_LINK (0x00000002L)
5535 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
5536 #define REG_OPTION_OPEN_LINK (0x00000008L)
5537 #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)
5538 #define REG_CREATED_NEW_KEY (0x00000001L)
5539 #define REG_OPENED_EXISTING_KEY (0x00000002L)
5540 #define REG_STANDARD_FORMAT 1
5541 #define REG_LATEST_FORMAT 2
5542 #define REG_NO_COMPRESSION 4
5543 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
5544 #define REG_REFRESH_HIVE (0x00000002L)
5545 #define REG_NO_LAZY_FLUSH (0x00000004L)
5546 #define REG_FORCE_RESTORE (0x00000008L)
5547 #define REG_FORCE_UNLOAD 1
5548
5549 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
5550 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
5551 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
5552 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
5553
5554 #define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY)
5555
5556 #define REG_NONE (0)
5557 #define REG_SZ (1)
5558 #define REG_EXPAND_SZ (2)
5559
5560 #define REG_BINARY (3)
5561 #define REG_DWORD (4)
5562 #define REG_DWORD_LITTLE_ENDIAN (4)
5563 #define REG_DWORD_BIG_ENDIAN (5)
5564 #define REG_LINK (6)
5565 #define REG_MULTI_SZ (7)
5566 #define REG_RESOURCE_LIST (8)
5567 #define REG_FULL_RESOURCE_DESCRIPTOR (9)
5568 #define REG_RESOURCE_REQUIREMENTS_LIST (10)
5569 #define REG_QWORD (11)
5570 #define REG_QWORD_LITTLE_ENDIAN (11)
5571
5572 #define SERVICE_KERNEL_DRIVER 0x00000001
5573 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
5574 #define SERVICE_ADAPTER 0x00000004
5575 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
5576
5577 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER)
5578
5579 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
5580 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
5581 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
5582
5583 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
5584
5585 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
5586
5587 #define SERVICE_BOOT_START 0x00000000
5588 #define SERVICE_SYSTEM_START 0x00000001
5589 #define SERVICE_AUTO_START 0x00000002
5590 #define SERVICE_DEMAND_START 0x00000003
5591 #define SERVICE_DISABLED 0x00000004
5592
5593 #define SERVICE_ERROR_IGNORE 0x00000000
5594 #define SERVICE_ERROR_NORMAL 0x00000001
5595 #define SERVICE_ERROR_SEVERE 0x00000002
5596 #define SERVICE_ERROR_CRITICAL 0x00000003
5597
5598 typedef enum _CM_SERVICE_NODE_TYPE {
5599 DriverType = SERVICE_KERNEL_DRIVER,FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
5600 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,AdapterType = SERVICE_ADAPTER,RecognizerType = SERVICE_RECOGNIZER_DRIVER
5601 } SERVICE_NODE_TYPE;
5602
5603 typedef enum _CM_SERVICE_LOAD_TYPE {
5604 BootLoad = SERVICE_BOOT_START,SystemLoad = SERVICE_SYSTEM_START,AutoLoad = SERVICE_AUTO_START,DemandLoad = SERVICE_DEMAND_START,
5605 DisableLoad = SERVICE_DISABLED
5606 } SERVICE_LOAD_TYPE;
5607
5608 typedef enum _CM_ERROR_CONTROL_TYPE {
5609 IgnoreError = SERVICE_ERROR_IGNORE,NormalError = SERVICE_ERROR_NORMAL,SevereError = SERVICE_ERROR_SEVERE,CriticalError = SERVICE_ERROR_CRITICAL
5610 } SERVICE_ERROR_TYPE;
5611
5612 #define TAPE_ERASE_SHORT 0L
5613 #define TAPE_ERASE_LONG 1L
5614
5615 typedef struct _TAPE_ERASE {
5616 DWORD Type;
5617 BOOLEAN Immediate;
5618 } TAPE_ERASE,*PTAPE_ERASE;
5619
5620 #define TAPE_LOAD 0L
5621 #define TAPE_UNLOAD 1L
5622 #define TAPE_TENSION 2L
5623 #define TAPE_LOCK 3L
5624 #define TAPE_UNLOCK 4L
5625 #define TAPE_FORMAT 5L
5626
5627 typedef struct _TAPE_PREPARE {
5628 DWORD Operation;
5629 BOOLEAN Immediate;
5630 } TAPE_PREPARE,*PTAPE_PREPARE;
5631
5632 #define TAPE_SETMARKS 0L
5633 #define TAPE_FILEMARKS 1L
5634 #define TAPE_SHORT_FILEMARKS 2L
5635 #define TAPE_LONG_FILEMARKS 3L
5636
5637 typedef struct _TAPE_WRITE_MARKS {
5638 DWORD Type;
5639 DWORD Count;
5640 BOOLEAN Immediate;
5641 } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
5642
5643 #define TAPE_ABSOLUTE_POSITION 0L
5644 #define TAPE_LOGICAL_POSITION 1L
5645 #define TAPE_PSEUDO_LOGICAL_POSITION 2L
5646
5647 typedef struct _TAPE_GET_POSITION {
5648 DWORD Type;
5649 DWORD Partition;
5650 LARGE_INTEGER Offset;
5651 } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
5652
5653 #define TAPE_REWIND 0L
5654 #define TAPE_ABSOLUTE_BLOCK 1L
5655 #define TAPE_LOGICAL_BLOCK 2L
5656 #define TAPE_PSEUDO_LOGICAL_BLOCK 3L
5657 #define TAPE_SPACE_END_OF_DATA 4L
5658 #define TAPE_SPACE_RELATIVE_BLOCKS 5L
5659 #define TAPE_SPACE_FILEMARKS 6L
5660 #define TAPE_SPACE_SEQUENTIAL_FMKS 7L
5661 #define TAPE_SPACE_SETMARKS 8L
5662 #define TAPE_SPACE_SEQUENTIAL_SMKS 9L
5663
5664 typedef struct _TAPE_SET_POSITION {
5665 DWORD Method;
5666 DWORD Partition;
5667 LARGE_INTEGER Offset;
5668 BOOLEAN Immediate;
5669 } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
5670
5671 #define TAPE_DRIVE_FIXED 0x00000001
5672 #define TAPE_DRIVE_SELECT 0x00000002
5673 #define TAPE_DRIVE_INITIATOR 0x00000004
5674
5675 #define TAPE_DRIVE_ERASE_SHORT 0x00000010
5676 #define TAPE_DRIVE_ERASE_LONG 0x00000020
5677 #define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040
5678 #define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080
5679
5680 #define TAPE_DRIVE_TAPE_CAPACITY 0x00000100
5681 #define TAPE_DRIVE_TAPE_REMAINING 0x00000200
5682 #define TAPE_DRIVE_FIXED_BLOCK 0x00000400
5683 #define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800
5684
5685 #define TAPE_DRIVE_WRITE_PROTECT 0x00001000
5686 #define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000
5687
5688 #define TAPE_DRIVE_ECC 0x00010000
5689 #define TAPE_DRIVE_COMPRESSION 0x00020000
5690 #define TAPE_DRIVE_PADDING 0x00040000
5691 #define TAPE_DRIVE_REPORT_SMKS 0x00080000
5692
5693 #define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000
5694 #define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000
5695 #define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000
5696
5697 #define TAPE_DRIVE_EJECT_MEDIA 0x01000000
5698 #define TAPE_DRIVE_CLEAN_REQUESTS 0x02000000
5699 #define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x04000000
5700
5701 #define TAPE_DRIVE_RESERVED_BIT 0x80000000
5702
5703 #define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
5704 #define TAPE_DRIVE_TENSION 0x80000002
5705 #define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
5706 #define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
5707
5708 #define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
5709 #define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
5710 #define TAPE_DRIVE_TENSION_IMMED 0x80000040
5711 #define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
5712
5713 #define TAPE_DRIVE_SET_ECC 0x80000100
5714 #define TAPE_DRIVE_SET_COMPRESSION 0x80000200
5715 #define TAPE_DRIVE_SET_PADDING 0x80000400
5716 #define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
5717
5718 #define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
5719 #define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
5720 #define TAPE_DRIVE_LOGICAL_BLK 0x80004000
5721 #define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
5722
5723 #define TAPE_DRIVE_END_OF_DATA 0x80010000
5724 #define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
5725 #define TAPE_DRIVE_FILEMARKS 0x80040000
5726 #define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
5727
5728 #define TAPE_DRIVE_SETMARKS 0x80100000
5729 #define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
5730 #define TAPE_DRIVE_REVERSE_POSITION 0x80400000
5731 #define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
5732
5733 #define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
5734 #define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
5735 #define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
5736 #define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
5737
5738 #define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
5739 #define TAPE_DRIVE_FORMAT 0xA0000000
5740 #define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
5741 #define TAPE_DRIVE_HIGH_FEATURES 0x80000000
5742
5743 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
5744 BOOLEAN ECC;
5745 BOOLEAN Compression;
5746 BOOLEAN DataPadding;
5747 BOOLEAN ReportSetmarks;
5748 DWORD DefaultBlockSize;
5749 DWORD MaximumBlockSize;
5750 DWORD MinimumBlockSize;
5751 DWORD MaximumPartitionCount;
5752 DWORD FeaturesLow;
5753 DWORD FeaturesHigh;
5754 DWORD EOTWarningZoneSize;
5755 } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
5756
5757 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
5758 BOOLEAN ECC;
5759 BOOLEAN Compression;
5760 BOOLEAN DataPadding;
5761 BOOLEAN ReportSetmarks;
5762 DWORD EOTWarningZoneSize;
5763 } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
5764
5765 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
5766 LARGE_INTEGER Capacity;
5767 LARGE_INTEGER Remaining;
5768 DWORD BlockSize;
5769 DWORD PartitionCount;
5770 BOOLEAN WriteProtected;
5771 } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
5772
5773 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
5774 DWORD BlockSize;
5775 } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
5776
5777 #define TAPE_FIXED_PARTITIONS 0L
5778 #define TAPE_SELECT_PARTITIONS 1L
5779 #define TAPE_INITIATOR_PARTITIONS 2L
5780
5781 typedef struct _TAPE_CREATE_PARTITION {
5782 DWORD Method;
5783 DWORD Count;
5784 DWORD Size;
5785 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
5786
5787 #define TAPE_QUERY_DRIVE_PARAMETERS 0L
5788 #define TAPE_QUERY_MEDIA_CAPACITY 1L
5789 #define TAPE_CHECK_FOR_DRIVE_PROBLEM 2L
5790 #define TAPE_QUERY_IO_ERROR_DATA 3L
5791 #define TAPE_QUERY_DEVICE_ERROR_DATA 4L
5792
5793 typedef struct _TAPE_WMI_OPERATIONS {
5794 DWORD Method;
5795 DWORD DataBufferSize;
5796 PVOID DataBuffer;
5797 } TAPE_WMI_OPERATIONS,*PTAPE_WMI_OPERATIONS;
5798
5799 typedef enum _TAPE_DRIVE_PROBLEM_TYPE {
5800 TapeDriveProblemNone,TapeDriveReadWriteWarning,TapeDriveReadWriteError,TapeDriveReadWarning,TapeDriveWriteWarning,TapeDriveReadError,TapeDriveWriteError,TapeDriveHardwareError,TapeDriveUnsupportedMedia,TapeDriveScsiConnectionError,TapeDriveTimetoClean,TapeDriveCleanDriveNow,TapeDriveMediaLifeExpired,TapeDriveSnappedTape
5801 } TAPE_DRIVE_PROBLEM_TYPE;
5802
5803 #if defined(__x86_64)
5804 __CRT_INLINE struct _TEB *NtCurrentTeb(VOID) { return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB,Self)); }
5805 __CRT_INLINE PVOID GetCurrentFiber(VOID) { return(PVOID)__readgsqword(FIELD_OFFSET(NT_TIB,FiberData)); }
5806 __CRT_INLINE PVOID GetFiberData(VOID) {
5807 return *(PVOID *)GetCurrentFiber();
5808 }
5809 #endif
5810
5811 #if(defined(_X86_) && !defined(__x86_64))
5812 #define PcTeb 0x18
5813 __CRT_INLINE struct _TEB *NtCurrentTeb(void) {
5814 struct _TEB *ret;
5815 __asm__ volatile ("movl %%fs:0x18,%0"
5816 : "=r" (ret));
5817 return ret;
5818 }
5819 #endif
5820
5821 #define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION (1)
5822 #define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION (2)
5823 #define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION (3)
5824 #define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION (4)
5825 #define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION (5)
5826 #define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION (6)
5827 #define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION (7)
5828 #define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE (8)
5829 #define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES (9)
5830 #define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS (10)
5831
5832 #ifdef __cplusplus
5833 }
5834 #endif
5835 #endif