Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6429 siemargl 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 
14
#define ANYSIZE_ARRAY 1
15
 
16
#include 
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 
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 
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
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 
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 
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 
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)<
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 
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 
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 "!\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 
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