master
1/**
2 * This file is part of the mingw-w64 runtime package.
3 * No warranty is given; refer to the file DISCLAIMER within this package.
4 */
5
6#ifndef _WINNT_
7#define _WINNT_
8
9#include <_mingw_unicode.h>
10
11#ifdef __cplusplus
12extern "C" {
13#endif
14
15#include <_mingw.h>
16#include <ctype.h>
17#include <excpt.h>
18#include <winapifamily.h>
19#include <apiset.h>
20
21#define ANYSIZE_ARRAY 1
22
23#include <specstrings.h>
24
25#ifndef __WIDL__
26#define __INTRINSIC_GROUP_WINNT /* only define the intrinsics in this file */
27#include <psdk_inc/intrin-impl.h>
28#endif
29
30#if defined(__x86_64) && \
31 !(defined(_X86_) || defined(__i386__) || defined(_IA64_) || defined (__arm__) || defined(__aarch64__))
32#if !defined(_AMD64_)
33#define _AMD64_
34#endif
35#endif /* _AMD64_ */
36
37#if defined(__arm__) && \
38 !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__ia64__) || defined(__aarch64__))
39#if !defined(_ARM_)
40#define _ARM_
41#endif
42#endif /* _ARM_ */
43
44#if defined(__aarch64__) && \
45 !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__ia64__) || defined(__arm__))
46#if !defined(_ARM64_)
47#define _ARM64_
48#endif
49#endif /* _ARM64_ */
50
51#if defined(__arm64ec__) && \
52 !(defined(_X86_) || defined(__i386__) || defined(_IA64_) || defined (__arm__) || defined(__aarch64__))
53#if !defined(_ARM64EC_)
54#define _ARM64EC_
55#endif
56#endif /* _ARM64EC_ */
57
58#if defined(__ia64__) && \
59 !(defined(_X86_) || defined(__x86_64) || defined(_AMD64_) || defined (__arm__) || defined(__aarch64__))
60#if !defined(_IA64_)
61#define _IA64_
62#endif
63#endif /* _IA64_ */
64
65#include <sdkddkver.h>
66
67#ifndef DUMMYUNIONNAME
68#if defined (NONAMELESSUNION)
69#define DUMMYUNIONNAME u
70#define DUMMYUNIONNAME2 u2
71#define DUMMYUNIONNAME3 u3
72#define DUMMYUNIONNAME4 u4
73#define DUMMYUNIONNAME5 u5
74#define DUMMYUNIONNAME6 u6
75#define DUMMYUNIONNAME7 u7
76#define DUMMYUNIONNAME8 u8
77#define DUMMYUNIONNAME9 u9
78#else
79#define DUMMYUNIONNAME
80#define DUMMYUNIONNAME2
81#define DUMMYUNIONNAME3
82#define DUMMYUNIONNAME4
83#define DUMMYUNIONNAME5
84#define DUMMYUNIONNAME6
85#define DUMMYUNIONNAME7
86#define DUMMYUNIONNAME8
87#define DUMMYUNIONNAME9
88#endif
89#endif
90
91#ifndef DUMMYSTRUCTNAME
92#if defined (NONAMELESSUNION)
93#define DUMMYSTRUCTNAME s
94#define DUMMYSTRUCTNAME2 s2
95#define DUMMYSTRUCTNAME3 s3
96#define DUMMYSTRUCTNAME4 s4
97#define DUMMYSTRUCTNAME5 s5
98#else
99#define DUMMYSTRUCTNAME
100#define DUMMYSTRUCTNAME2
101#define DUMMYSTRUCTNAME3
102#define DUMMYSTRUCTNAME4
103#define DUMMYSTRUCTNAME5
104#endif
105#endif
106
107#define RESTRICTED_POINTER
108
109#undef UNALIGNED /* avoid redefinition warnings vs _mingw.h */
110#undef UNALIGNED64
111#if defined (__ia64__) || defined (__x86_64__) || defined (__arm__) || defined(__aarch64__)
112#define ALIGNMENT_MACHINE
113#define UNALIGNED __unaligned
114#if defined (_WIN64)
115#define UNALIGNED64 __unaligned
116#else
117#define UNALIGNED64
118#endif
119#else
120#undef ALIGNMENT_MACHINE
121#define UNALIGNED
122#define UNALIGNED64
123#endif
124
125#ifdef _WIN64
126#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
127#define MEMORY_ALLOCATION_ALIGNMENT 16
128#else
129#define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
130#define MEMORY_ALLOCATION_ALIGNMENT 8
131#endif
132
133#ifdef __cplusplus
134#define TYPE_ALIGNMENT(t) __alignof__ (t)
135#else
136#define TYPE_ALIGNMENT(t) FIELD_OFFSET(struct { char x; t test; }, test)
137#endif
138
139#if defined (__x86_64__) || defined (__i386__)
140#define PROBE_ALIGNMENT(_s) TYPE_ALIGNMENT (DWORD)
141#elif defined (__ia64__) || defined (__arm__) || defined(__aarch64__)
142#define PROBE_ALIGNMENT(_s) (TYPE_ALIGNMENT (_s) > TYPE_ALIGNMENT (DWORD) ? TYPE_ALIGNMENT (_s) : TYPE_ALIGNMENT (DWORD))
143#elif !defined (RC_INVOKED) && !defined (__WIDL__)
144#error No supported target architecture.
145#endif
146
147#ifdef _WIN64
148#define PROBE_ALIGNMENT32(_s) TYPE_ALIGNMENT (DWORD)
149#endif
150
151#if defined(_MSC_VER)
152# define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
153#else
154# define C_ASSERT(e) extern void __C_ASSERT__(int [(e)?1:-1])
155#endif
156
157#include <basetsd.h>
158
159#ifndef DECLSPEC_IMPORT
160#if (defined (__i386__) || defined (__ia64__) || defined (__x86_64__) || defined (__arm__) || defined(__aarch64__)) && !defined (__WIDL__)
161#define DECLSPEC_IMPORT __declspec (dllimport)
162#else
163#define DECLSPEC_IMPORT
164#endif
165#endif
166
167#ifndef DECLSPEC_NORETURN
168#ifndef __WIDL__
169#define DECLSPEC_NORETURN __declspec (noreturn)
170#else
171#define DECLSPEC_NORETURN
172#endif
173#endif
174
175#ifndef DECLSPEC_NOTHROW
176#ifndef __WIDL__
177#define DECLSPEC_NOTHROW __declspec (nothrow)
178#else
179#define DECLSPEC_NOTHROW
180#endif
181#endif
182
183#ifndef DECLSPEC_ALIGN
184#ifndef __WIDL__
185#if defined(_MSC_VER) && (_MSC_VER >= 1300) && !defined(MIDL_PASS)
186#define DECLSPEC_ALIGN(x) __declspec(align(x))
187#elif defined(__GNUC__)
188#define DECLSPEC_ALIGN(x) __attribute__ ((__aligned__ (x)))
189#else
190#define DECLSPEC_ALIGN(x) /*__declspec (align (x))*/
191#endif
192#else
193#define DECLSPEC_ALIGN(x)
194#endif
195#endif /* DECLSPEC_ALIGN */
196
197#ifndef X86_CACHE_ALIGNMENT_SIZE
198#define X86_CACHE_ALIGNMENT_SIZE 64
199#endif
200
201#ifndef ARM_CACHE_ALIGNMENT_SIZE
202#define ARM_CACHE_ALIGNMENT_SIZE 128
203#endif
204
205#ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
206#if defined(__x86_64__) || defined(__i386__)
207#define SYSTEM_CACHE_ALIGNMENT_SIZE X86_CACHE_ALIGNMENT_SIZE
208#elif defined(__aarch64__) || defined(__arm__)
209#define SYSTEM_CACHE_ALIGNMENT_SIZE ARM_CACHE_ALIGNMENT_SIZE
210#else
211#error Must define a target architecture.
212#endif
213#endif
214
215#ifndef DECLSPEC_CACHEALIGN
216#define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
217#endif
218
219#ifndef DECLSPEC_UUID
220#define DECLSPEC_UUID(x)
221#endif
222
223#ifndef DECLSPEC_NOVTABLE
224#define DECLSPEC_NOVTABLE
225#endif
226
227#ifndef DECLSPEC_SELECTANY
228#define DECLSPEC_SELECTANY __declspec(selectany)
229#endif
230
231#ifndef NOP_FUNCTION
232#if (_MSC_VER >= 1210)
233#define NOP_FUNCTION __noop
234#else
235#define NOP_FUNCTION (void)0
236#endif
237#endif
238
239#ifndef DECLSPEC_ADDRSAFE
240#define DECLSPEC_ADDRSAFE
241#endif
242
243#ifndef DECLSPEC_NOINLINE
244#if (_MSC_VER >= 1300)
245#define DECLSPEC_NOINLINE __declspec(noinline)
246#elif defined(__GNUC__)
247#define DECLSPEC_NOINLINE __attribute__((noinline))
248#else
249#define DECLSPEC_NOINLINE
250#endif
251#endif /* DECLSPEC_NOINLINE */
252
253#ifndef FORCEINLINE
254#if !defined(_MSC_VER) || (_MSC_VER >=1200)
255#define FORCEINLINE __forceinline
256#else
257#define FORCEINLINE __inline
258#endif
259#endif /* FORCEINLINE */
260
261#ifndef DECLSPEC_DEPRECATED
262#if !defined (__WIDL__)
263#define DECLSPEC_DEPRECATED __declspec(deprecated)
264#define DEPRECATE_SUPPORTED
265#else
266#define DECLSPEC_DEPRECATED
267#undef DEPRECATE_SUPPORTED
268#endif
269#endif
270
271#define DECLSPEC_DEPRECATED_DDK
272#define PRAGMA_DEPRECATED_DDK 0
273
274 typedef void *PVOID;
275 typedef void *PVOID64;
276
277#ifndef FASTCALL
278#if defined (__i386__) && !defined (__WIDL__)
279#define FASTCALL __fastcall
280#else
281#define FASTCALL
282#endif
283#endif /* FASTCALL */
284
285#if defined(_ARM_) || defined(_ARM64_)
286#define NTAPI
287#else
288#define NTAPI __stdcall
289#endif
290#define NTAPI_INLINE NTAPI
291
292#if !defined(_NTSYSTEM_)
293#define NTSYSAPI DECLSPEC_IMPORT
294#define NTSYSCALLAPI DECLSPEC_IMPORT
295#else
296#define NTSYSAPI
297#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
298#endif
299
300#ifndef VOID
301#define VOID void
302 typedef char CHAR;
303 typedef short SHORT;
304 typedef __LONG32 LONG;
305#if !defined (__WIDL__)
306 typedef int INT;
307#endif
308#endif
309
310#ifndef __WCHAR_DEFINED
311#define __WCHAR_DEFINED
312 typedef wchar_t WCHAR;
313#endif
314 typedef WCHAR *PWCHAR,*LPWCH,*PWCH;
315 typedef CONST WCHAR *LPCWCH,*PCWCH;
316 typedef WCHAR *NWPSTR,*LPWSTR,*PWSTR;
317 typedef PWSTR *PZPWSTR;
318 typedef CONST PWSTR *PCZPWSTR;
319 typedef WCHAR UNALIGNED *LPUWSTR,*PUWSTR;
320 typedef CONST WCHAR *LPCWSTR,*PCWSTR;
321 typedef PCWSTR *PZPCWSTR;
322 typedef CONST WCHAR UNALIGNED *LPCUWSTR,*PCUWSTR;
323 typedef WCHAR *PZZWSTR;
324 typedef CONST WCHAR *PCZZWSTR;
325 typedef WCHAR UNALIGNED *PUZZWSTR;
326 typedef CONST WCHAR UNALIGNED *PCUZZWSTR;
327 typedef WCHAR *PNZWCH;
328 typedef CONST WCHAR *PCNZWCH;
329 typedef WCHAR UNALIGNED *PUNZWCH;
330 typedef CONST WCHAR UNALIGNED *PCUNZWCH;
331
332#if _WIN32_WINNT >= 0x0600 || (defined (__cplusplus) && defined (WINDOWS_ENABLE_CPLUSPLUS))
333 typedef CONST WCHAR *LPCWCHAR,*PCWCHAR;
334 typedef CONST WCHAR UNALIGNED *LPCUWCHAR,*PCUWCHAR;
335 typedef unsigned long UCSCHAR;
336
337#define UCSCHAR_INVALID_CHARACTER (0xffffffff)
338#define MIN_UCSCHAR (0)
339#define MAX_UCSCHAR (0x0010ffff)
340
341 typedef UCSCHAR *PUCSCHAR;
342 typedef const UCSCHAR *PCUCSCHAR;
343 typedef UCSCHAR *PUCSSTR;
344 typedef UCSCHAR UNALIGNED *PUUCSSTR;
345 typedef const UCSCHAR *PCUCSSTR;
346 typedef const UCSCHAR UNALIGNED *PCUUCSSTR;
347 typedef UCSCHAR UNALIGNED *PUUCSCHAR;
348 typedef const UCSCHAR UNALIGNED *PCUUCSCHAR;
349#endif
350
351 typedef CHAR *PCHAR,*LPCH,*PCH;
352 typedef CONST CHAR *LPCCH,*PCCH;
353 typedef CHAR *NPSTR,*LPSTR,*PSTR;
354 typedef PSTR *PZPSTR;
355 typedef CONST PSTR *PCZPSTR;
356 typedef CONST CHAR *LPCSTR,*PCSTR;
357 typedef PCSTR *PZPCSTR;
358 typedef CHAR *PZZSTR;
359 typedef CONST CHAR *PCZZSTR;
360 typedef CHAR *PNZCH;
361 typedef CONST CHAR *PCNZCH;
362
363#ifdef UNICODE
364#ifndef _TCHAR_DEFINED
365#define _TCHAR_DEFINED
366 typedef WCHAR TCHAR, *PTCHAR;
367 typedef WCHAR TBYTE, *PTBYTE;
368#endif
369
370 typedef LPWSTR LPTCH,PTCH;
371 typedef LPWSTR PTSTR,LPTSTR;
372 typedef LPCWSTR PCTSTR,LPCTSTR;
373 typedef LPUWSTR PUTSTR,LPUTSTR;
374 typedef LPCUWSTR PCUTSTR,LPCUTSTR;
375 typedef LPWSTR LP;
376 typedef PZZWSTR PZZTSTR;
377 typedef PCZZWSTR PCZZTSTR;
378 typedef PUZZWSTR PUZZTSTR;
379 typedef PCUZZWSTR PCUZZTSTR;
380 typedef PZPWSTR PZPTSTR;
381 typedef PNZWCH PNZTCH;
382 typedef PCNZWCH PCNZTCH;
383 typedef PUNZWCH PUNZTCH;
384 typedef PCUNZWCH PCUNZTCH;
385
386#define __TEXT(quote) L##quote
387#else
388#ifndef _TCHAR_DEFINED
389#define _TCHAR_DEFINED
390 typedef char TCHAR, *PTCHAR;
391 typedef unsigned char TBYTE, *PTBYTE;
392#endif
393
394 typedef LPSTR LPTCH,PTCH;
395 typedef LPCCH LPCTCH,PCTCH;
396 typedef LPSTR PTSTR,LPTSTR,PUTSTR,LPUTSTR;
397 typedef LPCSTR PCTSTR,LPCTSTR,PCUTSTR,LPCUTSTR;
398 typedef PZZSTR PZZTSTR, PUZZTSTR;
399 typedef PCZZSTR PCZZTSTR, PCUZZTSTR;
400 typedef PZPSTR PZPTSTR;
401 typedef PNZCH PNZTCH, PUNZTCH;
402 typedef PCNZCH PCNZTCH, PCUNZTCH;
403
404#define __TEXT(quote) quote
405#endif
406
407#define TEXT(quote) __TEXT(quote)
408
409 typedef SHORT *PSHORT;
410 typedef LONG *PLONG;
411
412#ifndef ___GROUP_AFFINITY_DEFINED
413#define ___GROUP_AFFINITY_DEFINED
414typedef struct _GROUP_AFFINITY {
415 KAFFINITY Mask;
416 WORD Group;
417 WORD Reserved[3];
418} GROUP_AFFINITY, *PGROUP_AFFINITY;
419#endif /* !___GROUP_AFFINITY_DEFINED */
420
421typedef struct _GROUP_AFFINITY32 {
422 DWORD Mask;
423 WORD Group;
424 WORD Reserved[3];
425} GROUP_AFFINITY32, *PGROUP_AFFINITY32;
426
427typedef struct _GROUP_AFFINITY64 {
428 unsigned __int64 Mask;
429 WORD Group;
430 WORD Reserved[3];
431} GROUP_AFFINITY64, *PGROUP_AFFINITY64;
432
433#ifdef STRICT
434 typedef void *HANDLE;
435#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
436#else
437typedef PVOID HANDLE;
438#define DECLARE_HANDLE(name) typedef HANDLE name
439#endif
440
441 typedef HANDLE *PHANDLE;
442 typedef BYTE FCHAR;
443 typedef WORD FSHORT;
444 typedef DWORD FLONG;
445
446#ifndef _HRESULT_DEFINED
447#define _HRESULT_DEFINED
448 typedef LONG HRESULT;
449#endif
450
451#ifdef __cplusplus
452#define EXTERN_C extern "C"
453#else
454#define EXTERN_C extern
455#endif
456
457/* Keep in sync with basetyps.h header. */
458#ifndef STDMETHODCALLTYPE
459#define STDMETHODCALLTYPE WINAPI
460#define STDMETHODVCALLTYPE __cdecl
461#define STDAPICALLTYPE WINAPI
462#define STDAPIVCALLTYPE __cdecl
463
464#define STDAPI EXTERN_C HRESULT WINAPI
465#define STDAPI_(type) EXTERN_C type WINAPI
466
467#define STDMETHODIMP HRESULT WINAPI
468#define STDMETHODIMP_(type) type WINAPI
469
470#define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
471#define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
472
473#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
474#define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
475#endif
476
477#define IFACEMETHODIMP STDMETHODIMP
478#define IFACEMETHODIMP_(type) STDMETHODIMP_(type)
479#define IFACEMETHODIMPV STDMETHODIMPV
480#define IFACEMETHODIMPV_(type) STDMETHODIMPV_(type)
481
482 typedef char CCHAR;
483#ifndef _LCID_DEFINED
484#define _LCID_DEFINED
485typedef DWORD LCID;
486#endif
487 typedef PDWORD PLCID;
488#ifndef _LANGID_DEFINED
489#define _LANGID_DEFINED
490 typedef WORD LANGID;
491#endif
492
493#ifndef __COMPARTMENT_ID_DEFINED__
494#define __COMPARTMENT_ID_DEFINED__
495
496typedef enum {
497 UNSPECIFIED_COMPARTMENT_ID = 0,
498 DEFAULT_COMPARTMENT_ID
499} COMPARTMENT_ID,*PCOMPARTMENT_ID;
500#endif
501
502#define APPLICATION_ERROR_MASK 0x20000000
503#define ERROR_SEVERITY_SUCCESS 0x00000000
504#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
505#define ERROR_SEVERITY_WARNING 0x80000000
506#define ERROR_SEVERITY_ERROR 0xC0000000
507
508#if defined (__ia64__) && !defined (__WIDL__)
509 __declspec(align(16))
510#endif
511 typedef struct _FLOAT128 {
512 __MINGW_EXTENSION __int64 LowPart;
513 __MINGW_EXTENSION __int64 HighPart;
514 } FLOAT128;
515
516 typedef FLOAT128 *PFLOAT128;
517
518#define _ULONGLONG_
519 __MINGW_EXTENSION typedef __int64 LONGLONG;
520 __MINGW_EXTENSION typedef unsigned __int64 ULONGLONG;
521
522#define MAXLONGLONG (0x7fffffffffffffffll)
523
524 typedef LONGLONG *PLONGLONG;
525 typedef ULONGLONG *PULONGLONG;
526 typedef LONGLONG USN;
527
528#ifndef _LARGE_INTEGER_DEFINED
529#define _LARGE_INTEGER_DEFINED
530
531#if defined (__WIDL__)
532typedef struct _LARGE_INTEGER {
533#else
534 typedef union _LARGE_INTEGER {
535 __C89_NAMELESS struct {
536 DWORD LowPart;
537 LONG HighPart;
538 } DUMMYSTRUCTNAME;
539 struct {
540 DWORD LowPart;
541 LONG HighPart;
542 } u;
543#endif
544 LONGLONG QuadPart;
545 } LARGE_INTEGER;
546
547 typedef LARGE_INTEGER *PLARGE_INTEGER;
548
549#if defined (__WIDL__)
550 typedef struct _ULARGE_INTEGER {
551#else
552 typedef union _ULARGE_INTEGER {
553 __C89_NAMELESS struct {
554 DWORD LowPart;
555 DWORD HighPart;
556 } DUMMYSTRUCTNAME;
557 struct {
558 DWORD LowPart;
559 DWORD HighPart;
560 } u;
561#endif
562 ULONGLONG QuadPart;
563 } ULARGE_INTEGER;
564
565 typedef ULARGE_INTEGER *PULARGE_INTEGER;
566
567typedef LONG_PTR RTL_REFERENCE_COUNT, *PRTL_REFERENCE_COUNT;
568typedef LONG RTL_REFERENCE_COUNT32, *PRTL_REFERENCE_COUNT32;
569
570 typedef struct _LUID {
571 DWORD LowPart;
572 LONG HighPart;
573 } LUID,*PLUID;
574
575#endif /* _LARGE_INTEGER_DEFINED */
576
577#define _DWORDLONG_
578 typedef ULONGLONG DWORDLONG;
579 typedef DWORDLONG *PDWORDLONG;
580
581#define Int32x32To64(a, b) (((LONGLONG) ((LONG) (a))) * ((LONGLONG) ((LONG) (b))))
582#define UInt32x32To64(a, b) (((ULONGLONG) ((unsigned int) (a))) *((ULONGLONG) ((unsigned int) (b))))
583#define Int64ShllMod32(a, b) (((ULONGLONG) (a)) << (b))
584#define Int64ShraMod32(a, b) (((LONGLONG) (a)) >> (b))
585#define Int64ShrlMod32(a, b) (((ULONGLONG) (a)) >> (b))
586
587#ifdef __cplusplus
588 extern "C" {
589#endif
590
591#ifdef __x86_64
592
593#define RotateLeft8 _rotl8
594#define RotateLeft16 _rotl16
595#define RotateRight8 _rotr8
596#define RotateRight16 _rotr16
597
598 unsigned char __cdecl _rotl8(unsigned char Value,unsigned char Shift);
599 unsigned short __cdecl _rotl16(unsigned short Value,unsigned char Shift);
600 unsigned char __cdecl _rotr8(unsigned char Value,unsigned char Shift);
601 unsigned short __cdecl _rotr16(unsigned short Value,unsigned char Shift);
602#endif /* __x86_64 */
603
604#define RotateLeft32 _rotl
605#define RotateLeft64 _rotl64
606#define RotateRight32 _rotr
607#define RotateRight64 _rotr64
608
609#pragma push_macro ("_rotl")
610#pragma push_macro ("_rotr")
611#undef _rotl
612#undef _rotr
613 unsigned int __cdecl _rotl(unsigned int Value,int Shift);
614 unsigned int __cdecl _rotr(unsigned int Value,int Shift);
615#pragma pop_macro ("_rotr")
616#pragma pop_macro ("_rotl")
617#pragma push_macro ("_rotr64")
618#pragma push_macro ("_rotl64")
619#undef _rotl64
620#undef _rotr64
621 __MINGW_EXTENSION unsigned __int64 __cdecl _rotl64(unsigned __int64 Value,int Shift);
622 __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 Value,int Shift);
623#pragma pop_macro ("_rotl64")
624#pragma pop_macro ("_rotr64")
625
626#ifdef __cplusplus
627 }
628#endif
629
630#define ANSI_NULL ((CHAR)0)
631#define UNICODE_NULL ((WCHAR)0)
632#define UNICODE_STRING_MAX_BYTES ((WORD) 65534)
633#define UNICODE_STRING_MAX_CHARS (32767)
634
635#ifndef _BOOLEAN_
636#define _BOOLEAN_
637 typedef BYTE BOOLEAN;
638#endif
639 typedef BOOLEAN *PBOOLEAN;
640
641#ifndef _LIST_ENTRY_DEFINED
642#define _LIST_ENTRY_DEFINED
643
644 typedef struct _LIST_ENTRY {
645 struct _LIST_ENTRY *Flink;
646 struct _LIST_ENTRY *Blink;
647 } LIST_ENTRY,*PLIST_ENTRY,*RESTRICTED_POINTER PRLIST_ENTRY;
648
649 typedef struct _SINGLE_LIST_ENTRY {
650 struct _SINGLE_LIST_ENTRY *Next;
651 } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY;
652
653 typedef struct LIST_ENTRY32 {
654 DWORD Flink;
655 DWORD Blink;
656 } LIST_ENTRY32;
657 typedef LIST_ENTRY32 *PLIST_ENTRY32;
658
659 typedef struct LIST_ENTRY64 {
660 ULONGLONG Flink;
661 ULONGLONG Blink;
662 } LIST_ENTRY64;
663 typedef LIST_ENTRY64 *PLIST_ENTRY64;
664
665#endif /* _LIST_ENTRY_DEFINED */
666
667#include <guiddef.h>
668
669#ifndef __OBJECTID_DEFINED
670#define __OBJECTID_DEFINED
671 typedef struct _OBJECTID {
672 GUID Lineage;
673 DWORD Uniquifier;
674 } OBJECTID;
675#endif
676
677#define MINCHAR 0x80
678#define MAXCHAR 0x7f
679#define MINSHORT 0x8000
680#define MAXSHORT 0x7fff
681#define MINLONG 0x80000000
682#define MAXLONG 0x7fffffff
683#define MAXBYTE 0xff
684#define MAXWORD 0xffff
685#define MAXDWORD 0xffffffff
686
687#define FIELD_OFFSET(Type, Field) ((LONG) __builtin_offsetof(Type, Field))
688#define RTL_FIELD_SIZE(type,field) (sizeof(((type *)0)->field))
689#define RTL_SIZEOF_THROUGH_FIELD(type,field) (FIELD_OFFSET(type,field) + RTL_FIELD_SIZE(type,field))
690#define RTL_CONTAINS_FIELD(Struct,Size,Field) ((((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)))
691#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
692#define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
693
694#ifdef ENABLE_RTL_NUMBER_OF_V2
695#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
696#else
697#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
698#endif
699
700#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
701#define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
702
703#define RTL_FIELD_TYPE(type,field) (((type*)0)->field)
704#define RTL_NUMBER_OF_FIELD(type,field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type,field)))
705#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)))
706
707#ifdef __cplusplus
708#define RTL_CONST_CAST(type) const_cast<type>
709#else
710#define RTL_CONST_CAST(type) (type)
711#endif
712
713#ifdef __cplusplus
714#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
715extern "C++" { \
716__MINGW_CXX11_CONSTEXPR inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((int)a)); } \
717__MINGW_CXX11_CONSTEXPR inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) | ((int)b)); } \
718__MINGW_CXX11_CONSTEXPR inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) & ((int)b)); } \
719__MINGW_CXX11_CONSTEXPR inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((int)a) ^ ((int)b)); } \
720__MINGW_CXX14_CONSTEXPR inline ENUMTYPE& operator |= (ENUMTYPE& a, ENUMTYPE b) { return a = a | b; } \
721__MINGW_CXX14_CONSTEXPR inline ENUMTYPE& operator &= (ENUMTYPE& a, ENUMTYPE b) { return a = a & b; } \
722__MINGW_CXX14_CONSTEXPR inline ENUMTYPE& operator ^= (ENUMTYPE& a, ENUMTYPE b) { return a = a ^ b; } \
723}
724#else
725#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) /* */
726#endif
727
728#define COMPILETIME_OR_2FLAGS(a, b) ((UINT) (a) | (UINT) (b))
729#define COMPILETIME_OR_3FLAGS(a, b, c) ((UINT) (a) | (UINT) (b) | (UINT) (c))
730#define COMPILETIME_OR_4FLAGS(a, b, c, d) ((UINT) (a) | (UINT) (b) | (UINT) (c) | (UINT) (d))
731#define COMPILETIME_OR_5FLAGS(a, b, c, d, e) ((UINT) (a) | (UINT) (b) | (UINT) (c) | (UINT) (d) | (UINT) (e))
732
733
734#define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8)
735#define RTL_BITS_OF_FIELD(type,field) (RTL_BITS_OF(RTL_FIELD_TYPE(type,field)))
736#define CONTAINING_RECORD(address,type,field) ((type *)((PCHAR)(address) - (ULONG_PTR)(&((type *)0)->field)))
737
738 typedef EXCEPTION_DISPOSITION NTAPI EXCEPTION_ROUTINE (struct _EXCEPTION_RECORD *ExceptionRecord, PVOID EstablisherFrame, struct _CONTEXT *ContextRecord, PVOID DispatcherContext);
739#ifndef __PEXCEPTION_ROUTINE_DEFINED
740#define __PEXCEPTION_ROUTINE_DEFINED
741 typedef EXCEPTION_ROUTINE *PEXCEPTION_ROUTINE;
742#endif
743
744#define ENCLAVE_SHORT_ID_LENGTH 16
745#define ENCLAVE_LONG_ID_LENGTH 32
746
747#define VER_WORKSTATION_NT 0x40000000
748#define VER_SERVER_NT 0x80000000
749#define VER_SUITE_SMALLBUSINESS 0x00000001
750#define VER_SUITE_ENTERPRISE 0x00000002
751#define VER_SUITE_BACKOFFICE 0x00000004
752#define VER_SUITE_COMMUNICATIONS 0x00000008
753#define VER_SUITE_TERMINAL 0x00000010
754#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
755#define VER_SUITE_EMBEDDEDNT 0x00000040
756#define VER_SUITE_DATACENTER 0x00000080
757#define VER_SUITE_SINGLEUSERTS 0x00000100
758#define VER_SUITE_PERSONAL 0x00000200
759#define VER_SUITE_BLADE 0x00000400
760#define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
761#define VER_SUITE_SECURITY_APPLIANCE 0x00001000
762#define VER_SUITE_STORAGE_SERVER 0x00002000
763#define VER_SUITE_COMPUTE_SERVER 0x00004000
764#define VER_SUITE_WH_SERVER 0x00008000
765#define VER_SUITE_MULTIUSERTS 0x00020000
766
767#define PRODUCT_UNDEFINED 0x0
768
769#define PRODUCT_ULTIMATE 0x1
770#define PRODUCT_HOME_BASIC 0x2
771#define PRODUCT_HOME_PREMIUM 0x3
772#define PRODUCT_ENTERPRISE 0x4
773#define PRODUCT_HOME_BASIC_N 0x5
774#define PRODUCT_BUSINESS 0x6
775#define PRODUCT_STANDARD_SERVER 0x7
776#define PRODUCT_DATACENTER_SERVER 0x8
777#define PRODUCT_SMALLBUSINESS_SERVER 0x9
778#define PRODUCT_ENTERPRISE_SERVER 0xa
779#define PRODUCT_STARTER 0xb
780#define PRODUCT_DATACENTER_SERVER_CORE 0xc
781#define PRODUCT_STANDARD_SERVER_CORE 0xd
782#define PRODUCT_ENTERPRISE_SERVER_CORE 0xe
783#define PRODUCT_ENTERPRISE_SERVER_IA64 0xf
784#define PRODUCT_BUSINESS_N 0x10
785#define PRODUCT_WEB_SERVER 0x11
786#define PRODUCT_CLUSTER_SERVER 0x12
787#define PRODUCT_HOME_SERVER 0x13
788#define PRODUCT_STORAGE_EXPRESS_SERVER 0x14
789#define PRODUCT_STORAGE_STANDARD_SERVER 0x15
790#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x16
791#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x17
792#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x18
793#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x19
794#define PRODUCT_HOME_PREMIUM_N 0x1a
795#define PRODUCT_ENTERPRISE_N 0x1b
796#define PRODUCT_ULTIMATE_N 0x1c
797#define PRODUCT_WEB_SERVER_CORE 0x1d
798#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x1e
799#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x1f
800#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x20
801#define PRODUCT_SERVER_FOUNDATION 0x21
802#define PRODUCT_HOME_PREMIUM_SERVER 0x22
803#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x23
804#define PRODUCT_STANDARD_SERVER_V 0x24
805#define PRODUCT_DATACENTER_SERVER_V 0x25
806#define PRODUCT_SERVER_V 0x25
807#define PRODUCT_ENTERPRISE_SERVER_V 0x26
808#define PRODUCT_DATACENTER_SERVER_CORE_V 0x27
809#define PRODUCT_STANDARD_SERVER_CORE_V 0x28
810#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x29
811#define PRODUCT_HYPERV 0x2a
812#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x2b
813#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x2c
814#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x2d
815#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x2e
816#define PRODUCT_STARTER_N 0x2f
817#define PRODUCT_PROFESSIONAL 0x30
818#define PRODUCT_PROFESSIONAL_N 0x31
819#define PRODUCT_SB_SOLUTION_SERVER 0x32
820#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x33
821#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x34
822#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x35
823#define PRODUCT_SB_SOLUTION_SERVER_EM 0x36
824#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x37
825#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x38
826#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x39
827#define PRODUCT_PROFESSIONAL_EMBEDDED 0x3A
828#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x3B
829#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x3C
830#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x3D
831#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x3E
832#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x3f
833#define PRODUCT_CLUSTER_SERVER_V 0x40
834#define PRODUCT_EMBEDDED 0x41
835#define PRODUCT_STARTER_E 0x42
836#define PRODUCT_HOME_BASIC_E 0x43
837#define PRODUCT_HOME_PREMIUM_E 0x44
838#define PRODUCT_PROFESSIONAL_E 0x45
839#define PRODUCT_ENTERPRISE_E 0x46
840#define PRODUCT_ULTIMATE_E 0x47
841#define PRODUCT_ENTERPRISE_EVALUATION 0x48
842#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x4C
843#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x4D
844#define PRODUCT_STANDARD_EVALUATION_SERVER 0x4F
845#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x50
846#define PRODUCT_ENTERPRISE_N_EVALUATION 0x54
847#define PRODUCT_EMBEDDED_AUTOMOTIVE 0x55
848#define PRODUCT_EMBEDDED_INDUSTRY_A 0x56
849#define PRODUCT_THINPC 0x57
850#define PRODUCT_EMBEDDED_A 0x58
851#define PRODUCT_EMBEDDED_INDUSTRY 0x59
852#define PRODUCT_EMBEDDED_E 0x5A
853#define PRODUCT_EMBEDDED_INDUSTRY_E 0x5B
854#define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x5C
855#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x5F
856#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x60
857#define PRODUCT_CORE_ARM 0x61
858#define PRODUCT_CORE_N 0x62
859#define PRODUCT_CORE_COUNTRYSPECIFIC 0x63
860#define PRODUCT_CORE_SINGLELANGUAGE 0x64
861#define PRODUCT_CORE_LANGUAGESPECIFIC 0x64
862#define PRODUCT_CORE 0x65
863#define PRODUCT_PROFESSIONAL_WMC 0x67
864#define PRODUCT_MOBILE_CORE 0x68
865#define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x69
866#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x6A
867#define PRODUCT_EMBEDDED_EVAL 0x6B
868#define PRODUCT_EMBEDDED_E_EVAL 0x6C
869#define PRODUCT_NANO_SERVER 0x6D
870#define PRODUCT_CLOUD_STORAGE_SERVER 0x6E
871#define PRODUCT_CORE_CONNECTED 0x6F
872#define PRODUCT_PROFESSIONAL_STUDENT 0x70
873#define PRODUCT_CORE_CONNECTED_N 0x71
874#define PRODUCT_PROFESSIONAL_STUDENT_N 0x72
875#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x73
876#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x74
877#define PRODUCT_CONNECTED_CAR 0x75
878#define PRODUCT_INDUSTRY_HANDHELD 0x76
879#define PRODUCT_PPI_PRO 0x77
880#define PRODUCT_ARM64_SERVER 0x78
881#define PRODUCT_EDUCATION 0x79
882#define PRODUCT_EDUCATION_N 0x7a
883#define PRODUCT_IOTUAP 0x7B
884#define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x7C
885#define PRODUCT_ENTERPRISE_S 0x7D
886#define PRODUCT_ENTERPRISE_S_N 0x7E
887#define PRODUCT_PROFESSIONAL_S 0x7F
888#define PRODUCT_PROFESSIONAL_S_N 0x80
889#define PRODUCT_ENTERPRISE_S_EVALUATION 0x81
890#define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x82
891#define PRODUCT_MOBILE_ENTERPRISE 0x85
892#define PRODUCT_HOLOGRAPHIC 0x87
893#define PRODUCT_HOLOGRAPHIC_BUSINESS 0x88
894#define PRODUCT_PRO_SINGLE_LANGUAGE 0x8A
895#define PRODUCT_PRO_CHINA 0x8B
896#define PRODUCT_ENTERPRISE_SUBSCRIPTION 0x8C
897#define PRODUCT_ENTERPRISE_SUBSCRIPTION_N 0x8D
898#define PRODUCT_DATACENTER_NANO_SERVER 0x8F
899#define PRODUCT_STANDARD_NANO_SERVER 0x90
900#define PRODUCT_DATACENTER_A_SERVER_CORE 0x91
901#define PRODUCT_STANDARD_A_SERVER_CORE 0x92
902#define PRODUCT_DATACENTER_WS_SERVER_CORE 0x93
903#define PRODUCT_STANDARD_WS_SERVER_CORE 0x94
904#define PRODUCT_UTILITY_VM 0x95
905#define PRODUCT_DATACENTER_EVALUATION_SERVER_CORE 0x9F
906#define PRODUCT_STANDARD_EVALUATION_SERVER_CORE 0xA0
907#define PRODUCT_PRO_WORKSTATION 0xA1
908#define PRODUCT_PRO_WORKSTATION_N 0xA2
909#define PRODUCT_PRO_FOR_EDUCATION 0xA4
910#define PRODUCT_PRO_FOR_EDUCATION_N 0xA5
911#define PRODUCT_AZURE_SERVER_CORE 0xA8
912#define PRODUCT_AZURE_NANO_SERVER 0xA9
913#define PRODUCT_ENTERPRISEG 0xAB
914#define PRODUCT_ENTERPRISEGN 0xAC
915#define PRODUCT_SERVERRDSH 0xAF
916#define PRODUCT_CLOUD 0xB2
917#define PRODUCT_CLOUDN 0xB3
918#define PRODUCT_HUBOS 0xB4
919#define PRODUCT_ONECOREUPDATEOS 0xB6
920#define PRODUCT_CLOUDE 0xB7
921#define PRODUCT_IOTOS 0xB9
922#define PRODUCT_CLOUDEN 0xBA
923#define PRODUCT_IOTEDGEOS 0xBB
924#define PRODUCT_IOTENTERPRISE 0xBC
925#define PRODUCT_LITE 0xBD
926#define PRODUCT_IOTENTERPRISES 0xBF
927#define PRODUCT_XBOX_SYSTEMOS 0xC0
928#define PRODUCT_XBOX_NATIVEOS 0xC1
929#define PRODUCT_XBOX_GAMEOS 0xC2
930#define PRODUCT_XBOX_ERAOS 0xC3
931#define PRODUCT_XBOX_DURANGOHOSTOS 0xC4
932#define PRODUCT_XBOX_SCARLETTHOSTOS 0xC5
933#define PRODUCT_XBOX_KEYSTONE 0xC6
934#define PRODUCT_AZURE_SERVER_CLOUDHOST 0xC7
935#define PRODUCT_AZURE_SERVER_CLOUDMOS 0xC8
936#define PRODUCT_CLOUDEDITIONN 0xCA
937#define PRODUCT_CLOUDEDITION 0xCB
938#define PRODUCT_VALIDATION 0xCC
939#define PRODUCT_IOTENTERPRISESK 0xCD
940#define PRODUCT_IOTENTERPRISEK 0xCE
941#define PRODUCT_IOTENTERPRISESEVAL 0xCF
942#define PRODUCT_AZURE_SERVER_AGENTBRIDGE 0xD0
943#define PRODUCT_AZURE_SERVER_NANOHOST 0xD1
944#define PRODUCT_WNC 0xD2
945#define PRODUCT_AZURESTACKHCI_SERVER_CORE 0x196
946#define PRODUCT_DATACENTER_SERVER_AZURE_EDITION 0x197
947#define PRODUCT_DATACENTER_SERVER_CORE_AZURE_EDITION 0x198
948
949#define PRODUCT_UNLICENSED 0xabcdabcd
950
951#define LANG_NEUTRAL 0x00
952#define LANG_INVARIANT 0x7f
953
954#define LANG_AFRIKAANS 0x36
955#define LANG_ALBANIAN 0x1c
956#define LANG_ALSATIAN 0x84
957#define LANG_AMHARIC 0x5e
958#define LANG_ARABIC 0x01
959#define LANG_ARMENIAN 0x2b
960#define LANG_ASSAMESE 0x4d
961#define LANG_AZERI 0x2c
962#define LANG_AZERBAIJANI 0x2c
963#define LANG_BANGLA 0x45
964#define LANG_BASHKIR 0x6d
965#define LANG_BASQUE 0x2d
966#define LANG_BELARUSIAN 0x23
967#define LANG_BENGALI 0x45
968#define LANG_BRETON 0x7e
969#define LANG_BOSNIAN 0x1a
970#define LANG_BOSNIAN_NEUTRAL 0x781a
971#define LANG_BULGARIAN 0x02
972#define LANG_CATALAN 0x03
973#define LANG_CENTRAL_KURDISH 0x92
974#define LANG_CHEROKEE 0x5c
975#define LANG_CHINESE 0x04
976#define LANG_CHINESE_SIMPLIFIED 0x04
977#define LANG_CHINESE_TRADITIONAL 0x7c04
978#define LANG_CORSICAN 0x83
979#define LANG_CROATIAN 0x1a
980#define LANG_CZECH 0x05
981#define LANG_DANISH 0x06
982#define LANG_DARI 0x8c
983#define LANG_DIVEHI 0x65
984#define LANG_DUTCH 0x13
985#define LANG_ENGLISH 0x09
986#define LANG_ESTONIAN 0x25
987#define LANG_FAEROESE 0x38
988#define LANG_FARSI 0x29
989#define LANG_FILIPINO 0x64
990#define LANG_FINNISH 0x0b
991#define LANG_FRENCH 0x0c
992#define LANG_FRISIAN 0x62
993#define LANG_FULAH 0x67
994#define LANG_GALICIAN 0x56
995#define LANG_GEORGIAN 0x37
996#define LANG_GERMAN 0x07
997#define LANG_GREEK 0x08
998#define LANG_GREENLANDIC 0x6f
999#define LANG_GUJARATI 0x47
1000#define LANG_HAUSA 0x68
1001#define LANG_HAWAIIAN 0x75
1002#define LANG_HEBREW 0x0d
1003#define LANG_HINDI 0x39
1004#define LANG_HUNGARIAN 0x0e
1005#define LANG_ICELANDIC 0x0f
1006#define LANG_IGBO 0x70
1007#define LANG_INDONESIAN 0x21
1008#define LANG_INUKTITUT 0x5d
1009#define LANG_IRISH 0x3c
1010#define LANG_ITALIAN 0x10
1011#define LANG_JAPANESE 0x11
1012#define LANG_KANNADA 0x4b
1013#define LANG_KASHMIRI 0x60
1014#define LANG_KAZAK 0x3f
1015#define LANG_KHMER 0x53
1016#define LANG_KICHE 0x86
1017#define LANG_KINYARWANDA 0x87
1018#define LANG_KONKANI 0x57
1019#define LANG_KOREAN 0x12
1020#define LANG_KYRGYZ 0x40
1021#define LANG_LAO 0x54
1022#define LANG_LATVIAN 0x26
1023#define LANG_LITHUANIAN 0x27
1024#define LANG_LOWER_SORBIAN 0x2e
1025#define LANG_LUXEMBOURGISH 0x6e
1026#define LANG_MACEDONIAN 0x2f
1027#define LANG_MALAY 0x3e
1028#define LANG_MALAYALAM 0x4c
1029#define LANG_MALTESE 0x3a
1030#define LANG_MANIPURI 0x58
1031#define LANG_MAORI 0x81
1032#define LANG_MAPUDUNGUN 0x7a
1033#define LANG_MARATHI 0x4e
1034#define LANG_MOHAWK 0x7c
1035#define LANG_MONGOLIAN 0x50
1036#define LANG_NEPALI 0x61
1037#define LANG_NORWEGIAN 0x14
1038#define LANG_OCCITAN 0x82
1039#define LANG_ODIA 0x48
1040#define LANG_ORIYA 0x48
1041#define LANG_PASHTO 0x63
1042#define LANG_PERSIAN 0x29
1043#define LANG_POLISH 0x15
1044#define LANG_PORTUGUESE 0x16
1045#define LANG_PULAR 0x67
1046#define LANG_PUNJABI 0x46
1047#define LANG_QUECHUA 0x6b
1048#define LANG_ROMANIAN 0x18
1049#define LANG_ROMANSH 0x17
1050#define LANG_RUSSIAN 0x19
1051#define LANG_SAKHA 0x85
1052#define LANG_SAMI 0x3b
1053#define LANG_SANSKRIT 0x4f
1054#define LANG_SCOTTISH_GAELIC 0x91
1055#define LANG_SERBIAN 0x1a
1056#define LANG_SERBIAN_NEUTRAL 0x7c1a
1057#define LANG_SINDHI 0x59
1058#define LANG_SINHALESE 0x5b
1059#define LANG_SLOVAK 0x1b
1060#define LANG_SLOVENIAN 0x24
1061#define LANG_SOTHO 0x6c
1062#define LANG_SPANISH 0x0a
1063#define LANG_SWAHILI 0x41
1064#define LANG_SWEDISH 0x1d
1065#define LANG_SYRIAC 0x5a
1066#define LANG_TAJIK 0x28
1067#define LANG_TAMAZIGHT 0x5f
1068#define LANG_TAMIL 0x49
1069#define LANG_TATAR 0x44
1070#define LANG_TELUGU 0x4a
1071#define LANG_THAI 0x1e
1072#define LANG_TIBETAN 0x51
1073#define LANG_TIGRIGNA 0x73
1074#define LANG_TIGRINYA 0x73
1075#define LANG_TSWANA 0x32
1076#define LANG_TURKISH 0x1f
1077#define LANG_TURKMEN 0x42
1078#define LANG_UIGHUR 0x80
1079#define LANG_UKRAINIAN 0x22
1080#define LANG_UPPER_SORBIAN 0x2e
1081#define LANG_URDU 0x20
1082#define LANG_UZBEK 0x43
1083#define LANG_VALENCIAN 0x03
1084#define LANG_VIETNAMESE 0x2a
1085#define LANG_WELSH 0x52
1086#define LANG_WOLOF 0x88
1087#define LANG_XHOSA 0x34
1088#define LANG_YAKUT 0x85
1089#define LANG_YI 0x78
1090#define LANG_YORUBA 0x6a
1091#define LANG_ZULU 0x35
1092
1093#define SUBLANG_NEUTRAL 0x00
1094#define SUBLANG_DEFAULT 0x01
1095#define SUBLANG_SYS_DEFAULT 0x02
1096#define SUBLANG_CUSTOM_DEFAULT 0x03
1097#define SUBLANG_CUSTOM_UNSPECIFIED 0x04
1098#define SUBLANG_UI_CUSTOM_DEFAULT 0x05
1099
1100#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
1101#define SUBLANG_ALBANIAN_ALBANIA 0x01
1102#define SUBLANG_ALSATIAN_FRANCE 0x01
1103#define SUBLANG_AMHARIC_ETHIOPIA 0x01
1104#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
1105#define SUBLANG_ARABIC_IRAQ 0x02
1106#define SUBLANG_ARABIC_EGYPT 0x03
1107#define SUBLANG_ARABIC_LIBYA 0x04
1108#define SUBLANG_ARABIC_ALGERIA 0x05
1109#define SUBLANG_ARABIC_MOROCCO 0x06
1110#define SUBLANG_ARABIC_TUNISIA 0x07
1111#define SUBLANG_ARABIC_OMAN 0x08
1112#define SUBLANG_ARABIC_YEMEN 0x09
1113#define SUBLANG_ARABIC_SYRIA 0x0a
1114#define SUBLANG_ARABIC_JORDAN 0x0b
1115#define SUBLANG_ARABIC_LEBANON 0x0c
1116#define SUBLANG_ARABIC_KUWAIT 0x0d
1117#define SUBLANG_ARABIC_UAE 0x0e
1118#define SUBLANG_ARABIC_BAHRAIN 0x0f
1119#define SUBLANG_ARABIC_QATAR 0x10
1120#define SUBLANG_ARMENIAN_ARMENIA 0x01
1121#define SUBLANG_ASSAMESE_INDIA 0x01
1122#define SUBLANG_AZERI_LATIN 0x01
1123#define SUBLANG_AZERI_CYRILLIC 0x02
1124#define SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN 0x01
1125#define SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC 0x02
1126#define SUBLANG_BANGLA_INDIA 0x01
1127#define SUBLANG_BANGLA_BANGLADESH 0x02
1128#define SUBLANG_BASHKIR_RUSSIA 0x01
1129#define SUBLANG_BASQUE_BASQUE 0x01
1130#define SUBLANG_BELARUSIAN_BELARUS 0x01
1131#define SUBLANG_BENGALI_INDIA 0x01
1132#define SUBLANG_BENGALI_BANGLADESH 0x02
1133#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
1134#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
1135#define SUBLANG_BRETON_FRANCE 0x01
1136#define SUBLANG_BULGARIAN_BULGARIA 0x01
1137#define SUBLANG_CATALAN_CATALAN 0x01
1138#define SUBLANG_CENTRAL_KURDISH_IRAQ 0x01
1139#define SUBLANG_CHEROKEE_CHEROKEE 0x01
1140#define SUBLANG_CHINESE_TRADITIONAL 0x01
1141#define SUBLANG_CHINESE_SIMPLIFIED 0x02
1142#define SUBLANG_CHINESE_HONGKONG 0x03
1143#define SUBLANG_CHINESE_SINGAPORE 0x04
1144#define SUBLANG_CHINESE_MACAU 0x05
1145#define SUBLANG_CORSICAN_FRANCE 0x01
1146#define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
1147#define SUBLANG_CROATIAN_CROATIA 0x01
1148#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
1149#define SUBLANG_DANISH_DENMARK 0x01
1150#define SUBLANG_DARI_AFGHANISTAN 0x01
1151#define SUBLANG_DIVEHI_MALDIVES 0x01
1152#define SUBLANG_DUTCH 0x01
1153#define SUBLANG_DUTCH_BELGIAN 0x02
1154#define SUBLANG_ENGLISH_US 0x01
1155#define SUBLANG_ENGLISH_UK 0x02
1156#define SUBLANG_ENGLISH_AUS 0x03
1157#define SUBLANG_ENGLISH_CAN 0x04
1158#define SUBLANG_ENGLISH_NZ 0x05
1159#define SUBLANG_ENGLISH_IRELAND 0x06
1160#define SUBLANG_ENGLISH_EIRE 0x06
1161#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
1162#define SUBLANG_ENGLISH_JAMAICA 0x08
1163#define SUBLANG_ENGLISH_CARIBBEAN 0x09
1164#define SUBLANG_ENGLISH_BELIZE 0x0a
1165#define SUBLANG_ENGLISH_TRINIDAD 0x0b
1166#define SUBLANG_ENGLISH_ZIMBABWE 0x0c
1167#define SUBLANG_ENGLISH_PHILIPPINES 0x0d
1168#define SUBLANG_ENGLISH_INDIA 0x10
1169#define SUBLANG_ENGLISH_MALAYSIA 0x11
1170#define SUBLANG_ENGLISH_SINGAPORE 0x12
1171#define SUBLANG_ESTONIAN_ESTONIA 0x01
1172#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
1173#define SUBLANG_FILIPINO_PHILIPPINES 0x01
1174#define SUBLANG_FINNISH_FINLAND 0x01
1175#define SUBLANG_FRENCH 0x01
1176#define SUBLANG_FRENCH_BELGIAN 0x02
1177#define SUBLANG_FRENCH_CANADIAN 0x03
1178#define SUBLANG_FRENCH_SWISS 0x04
1179#define SUBLANG_FRENCH_LUXEMBOURG 0x05
1180#define SUBLANG_FRENCH_MONACO 0x06
1181#define SUBLANG_FRISIAN_NETHERLANDS 0x01
1182#define SUBLANG_FULAH_SENEGAL 0x02
1183#define SUBLANG_GALICIAN_GALICIAN 0x01
1184#define SUBLANG_GEORGIAN_GEORGIA 0x01
1185#define SUBLANG_GERMAN 0x01
1186#define SUBLANG_GERMAN_SWISS 0x02
1187#define SUBLANG_GERMAN_AUSTRIAN 0x03
1188#define SUBLANG_GERMAN_LUXEMBOURG 0x04
1189#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
1190#define SUBLANG_GREEK_GREECE 0x01
1191#define SUBLANG_GREENLANDIC_GREENLAND 0x01
1192#define SUBLANG_GUJARATI_INDIA 0x01
1193#define SUBLANG_HAUSA_NIGERIA_LATIN 0x01
1194#define SUBLANG_HAUSA_NIGERIA SUBLANG_HAUSA_NIGERIA_LATIN /* SUBLANG_HAUSA_NIGERIA_LATIN is what MS defines */
1195#define SUBLANG_HAWAIIAN_US 0x01
1196#define SUBLANG_HEBREW_ISRAEL 0x01
1197#define SUBLANG_HINDI_INDIA 0x01
1198#define SUBLANG_HUNGARIAN_HUNGARY 0x01
1199#define SUBLANG_ICELANDIC_ICELAND 0x01
1200#define SUBLANG_IGBO_NIGERIA 0x01
1201#define SUBLANG_INDONESIAN_INDONESIA 0x01
1202#define SUBLANG_INUKTITUT_CANADA 0x01
1203#define SUBLANG_INUKTITUT_CANADA_LATIN 0x02
1204#define SUBLANG_IRISH_IRELAND 0x02
1205#define SUBLANG_ITALIAN 0x01
1206#define SUBLANG_ITALIAN_SWISS 0x02
1207#define SUBLANG_JAPANESE_JAPAN 0x01
1208#define SUBLANG_KANNADA_INDIA 0x01
1209#define SUBLANG_KASHMIRI_INDIA 0x02
1210#define SUBLANG_KASHMIRI_SASIA 0x02
1211#define SUBLANG_KAZAK_KAZAKHSTAN 0x01
1212#define SUBLANG_KHMER_CAMBODIA 0x01
1213#define SUBLANG_KICHE_GUATEMALA 0x01
1214#define SUBLANG_KINYARWANDA_RWANDA 0x01
1215#define SUBLANG_KONKANI_INDIA 0x01
1216#define SUBLANG_KOREAN 0x01
1217#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
1218#define SUBLANG_LAO_LAO 0x01
1219#define SUBLANG_LAO_LAO_PDR SUBLANG_LAO_LAO /* SUBLANG_LAO_LAO is what MS defines */
1220#define SUBLANG_LATVIAN_LATVIA 0x01
1221#if (WINVER >= 0x0600)
1222#define SUBLANG_LITHUANIAN_LITHUANIA 0x01
1223#endif /* WINVER >= 0x0600 */
1224#define SUBLANG_LITHUANIAN 0x01
1225#define SUBLANG_LOWER_SORBIAN_GERMANY 0x02
1226#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
1227#define SUBLANG_MACEDONIAN_MACEDONIA 0x01
1228#define SUBLANG_MALAY_MALAYSIA 0x01
1229#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
1230#define SUBLANG_MALAYALAM_INDIA 0x01
1231#define SUBLANG_MALTESE_MALTA 0x01
1232#define SUBLANG_MAORI_NEW_ZEALAND 0x01
1233#define SUBLANG_MAPUDUNGUN_CHILE 0x01
1234#define SUBLANG_MARATHI_INDIA 0x01
1235#define SUBLANG_MOHAWK_MOHAWK 0x01
1236#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
1237#define SUBLANG_MONGOLIAN_PRC 0x02
1238#define SUBLANG_NEPALI_NEPAL 0x01
1239#define SUBLANG_NEPALI_INDIA 0x02
1240#define SUBLANG_NORWEGIAN_BOKMAL 0x01
1241#define SUBLANG_NORWEGIAN_NYNORSK 0x02
1242#define SUBLANG_OCCITAN_FRANCE 0x01
1243#define SUBLANG_ODIA_INDIA 0x01
1244#define SUBLANG_ORIYA_INDIA 0x01
1245#define SUBLANG_PASHTO_AFGHANISTAN 0x01
1246#define SUBLANG_PERSIAN_IRAN 0x01
1247#define SUBLANG_POLISH_POLAND 0x01
1248#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01
1249#if (WINVER >= 0x0600)
1250#define SUBLANG_PORTUGUESE_PORTUGAL 0x02
1251#endif /* WINVER >= 0x0600 */
1252#define SUBLANG_PORTUGUESE 0x02
1253#define SUBLANG_PULAR_SENEGAL 0x02
1254#define SUBLANG_PUNJABI_INDIA 0x01
1255#define SUBLANG_PUNJABI_PAKISTAN 0x02
1256#define SUBLANG_QUECHUA_BOLIVIA 0x01
1257#define SUBLANG_QUECHUA_ECUADOR 0x02
1258#define SUBLANG_QUECHUA_PERU 0x03
1259#define SUBLANG_ROMANIAN_ROMANIA 0x01
1260/* ??? #define SUBLANG_ROMANIAN_MOLDOVA 0x01 ??? */
1261#define SUBLANG_ROMANSH_SWITZERLAND 0x01
1262#define SUBLANG_RUSSIAN_RUSSIA 0x01
1263#define SUBLANG_SAKHA_RUSSIA 0x01
1264#define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
1265#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
1266#define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
1267#define SUBLANG_SAMI_LULE_NORWAY 0x04
1268#define SUBLANG_SAMI_LULE_SWEDEN 0x05
1269#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
1270#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
1271#define SUBLANG_SAMI_SKOLT_FINLAND 0x08
1272#define SUBLANG_SAMI_INARI_FINLAND 0x09
1273#define SUBLANG_SANSKRIT_INDIA 0x01
1274#define SUBLANG_SCOTTISH_GAELIC 0x01
1275#define SUBLANG_SERBIAN_LATIN 0x02
1276#define SUBLANG_SERBIAN_CYRILLIC 0x03
1277#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06
1278#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07
1279#define SUBLANG_SERBIAN_MONTENEGRO_LATIN 0x0b
1280#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c
1281#define SUBLANG_SERBIAN_SERBIA_LATIN 0x09
1282#define SUBLANG_SERBIAN_SERBIA_CYRILLIC 0x0a
1283#define SUBLANG_SERBIAN_CROATIA 0x01
1284#define SUBLANG_SINDHI_INDIA 0x01
1285#define SUBLANG_SINDHI_AFGHANISTAN 0x02
1286#define SUBLANG_SINDHI_PAKISTAN 0x02
1287#define SUBLANG_SINHALESE_SRI_LANKA 0x01
1288#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01
1289#define SUBLANG_SLOVAK_SLOVAKIA 0x01
1290#define SUBLANG_SLOVENIAN_SLOVENIA 0x01
1291#define SUBLANG_SPANISH 0x01
1292#define SUBLANG_SPANISH_MEXICAN 0x02
1293#define SUBLANG_SPANISH_MODERN 0x03
1294#define SUBLANG_SPANISH_GUATEMALA 0x04
1295#define SUBLANG_SPANISH_COSTA_RICA 0x05
1296#define SUBLANG_SPANISH_PANAMA 0x06
1297#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
1298#define SUBLANG_SPANISH_VENEZUELA 0x08
1299#define SUBLANG_SPANISH_COLOMBIA 0x09
1300#define SUBLANG_SPANISH_PERU 0x0a
1301#define SUBLANG_SPANISH_ARGENTINA 0x0b
1302#define SUBLANG_SPANISH_ECUADOR 0x0c
1303#define SUBLANG_SPANISH_CHILE 0x0d
1304#define SUBLANG_SPANISH_URUGUAY 0x0e
1305#define SUBLANG_SPANISH_PARAGUAY 0x0f
1306#define SUBLANG_SPANISH_BOLIVIA 0x10
1307#define SUBLANG_SPANISH_EL_SALVADOR 0x11
1308#define SUBLANG_SPANISH_HONDURAS 0x12
1309#define SUBLANG_SPANISH_NICARAGUA 0x13
1310#define SUBLANG_SPANISH_PUERTO_RICO 0x14
1311#define SUBLANG_SPANISH_US 0x15
1312#define SUBLANG_SWAHILI_KENYA 0x01
1313#if (WINVER >= 0x0600)
1314#define SUBLANG_SWEDISH_SWEDEN 0x01
1315#endif /* WINVER >= 0x0600 */
1316#define SUBLANG_SWEDISH 0x01
1317#define SUBLANG_SWEDISH_FINLAND 0x02
1318#define SUBLANG_SYRIAC 0x01
1319#define SUBLANG_SYRIAC_SYRIA SUBLANG_SYRIAC /* SUBLANG_SYRIAC_SYRIA is what MSDN mentions */
1320#define SUBLANG_TAJIK_TAJIKISTAN 0x01
1321#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
1322#define SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH 0x04
1323#define SUBLANG_TAMIL_INDIA 0x01
1324#define SUBLANG_TAMIL_SRI_LANKA 0x02
1325#define SUBLANG_TATAR_RUSSIA 0x01
1326#define SUBLANG_TELUGU_INDIA 0x01
1327#define SUBLANG_THAI_THAILAND 0x01
1328#define SUBLANG_TIBETAN_PRC 0x01
1329#define SUBLANG_TIBETAN_BHUTAN 0x02
1330#define SUBLANG_TIGRIGNA_ERITREA 0x02
1331#define SUBLANG_TIGRINYA_ERITREA 0x02
1332#define SUBLANG_TIGRINYA_ETHIOPIA 0x01
1333#define SUBLANG_TSWANA_BOTSWANA 0x02
1334#define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
1335#define SUBLANG_TURKISH_TURKEY 0x01
1336#define SUBLANG_TURKMEN_TURKMENISTAN 0x01
1337#define SUBLANG_UIGHUR_PRC 0x01
1338#define SUBLANG_UKRAINIAN_UKRAINE 0x01
1339#define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
1340#define SUBLANG_URDU_PAKISTAN 0x01
1341#define SUBLANG_URDU_INDIA 0x02
1342#define SUBLANG_UZBEK_LATIN 0x01
1343#define SUBLANG_UZBEK_CYRILLIC 0x02
1344#define SUBLANG_VALENCIAN_VALENCIA 0x02
1345#define SUBLANG_VIETNAMESE_VIETNAM 0x01
1346#define SUBLANG_WELSH_UNITED_KINGDOM 0x01
1347#define SUBLANG_WOLOF_SENEGAL 0x01
1348#define SUBLANG_YORUBA_NIGERIA 0x01
1349#define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
1350#define SUBLANG_YAKUT_RUSSIA 0x01
1351#define SUBLANG_YI_PRC 0x01
1352#define SUBLANG_ZULU_SOUTH_AFRICA 0x01
1353
1354#define SORT_DEFAULT 0x0
1355#define SORT_INVARIANT_MATH 0x1
1356
1357#define SORT_JAPANESE_XJIS 0x0
1358#define SORT_JAPANESE_UNICODE 0x1
1359#define SORT_JAPANESE_RADICALSTROKE 0x4
1360
1361#define SORT_CHINESE_BIG5 0x0
1362#define SORT_CHINESE_PRCP 0x0
1363#define SORT_CHINESE_UNICODE 0x1
1364#define SORT_CHINESE_PRC 0x2
1365#define SORT_CHINESE_BOPOMOFO 0x3
1366#define SORT_CHINESE_RADICALSTROKE 0x4
1367
1368#define SORT_KOREAN_KSC 0x0
1369#define SORT_KOREAN_UNICODE 0x1
1370
1371#define SORT_GERMAN_PHONE_BOOK 0x1
1372
1373#define SORT_HUNGARIAN_DEFAULT 0x0
1374#define SORT_HUNGARIAN_TECHNICAL 0x1
1375
1376#define SORT_GEORGIAN_TRADITIONAL 0x0
1377#define SORT_GEORGIAN_MODERN 0x1
1378
1379#define MAKELANGID(p,s) ((((WORD)(s)) << 10) | (WORD)(p))
1380#define PRIMARYLANGID(lgid) ((WORD)(lgid) & 0x3ff)
1381#define SUBLANGID(lgid) ((WORD)(lgid) >> 10)
1382
1383#define NLS_VALID_LOCALE_MASK 0x000fffff
1384
1385#define MAKELCID(lgid,srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid)))))
1386#define MAKESORTLCID(lgid,srtid,ver) ((DWORD)((MAKELCID(lgid,srtid)) | (((DWORD)((WORD)(ver))) << 20)))
1387#define LANGIDFROMLCID(lcid) ((WORD)(lcid))
1388#define SORTIDFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 16) & 0xf))
1389#define SORTVERSIONFROMLCID(lcid) ((WORD)((((DWORD)(lcid)) >> 20) & 0xf))
1390
1391#define LOCALE_NAME_MAX_LENGTH 85
1392#define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_SYS_DEFAULT))
1393#define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT))
1394
1395#define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT,SORT_DEFAULT))
1396#define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT,SORT_DEFAULT))
1397
1398#define LOCALE_NEUTRAL (MAKELCID(MAKELANGID(LANG_NEUTRAL,SUBLANG_NEUTRAL),SORT_DEFAULT))
1399
1400#define LOCALE_CUSTOM_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
1401#define LOCALE_CUSTOM_UNSPECIFIED (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
1402#define LOCALE_CUSTOM_UI_DEFAULT (MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
1403
1404#define LOCALE_INVARIANT (MAKELCID(MAKELANGID(LANG_INVARIANT,SUBLANG_NEUTRAL),SORT_DEFAULT))
1405
1406#define LOCALE_TRANSIENT_KEYBOARD1 0x2000
1407#define LOCALE_TRANSIENT_KEYBOARD2 0x2400
1408#define LOCALE_TRANSIENT_KEYBOARD3 0x2800
1409#define LOCALE_TRANSIENT_KEYBOARD4 0x2c00
1410
1411#define LOCALE_UNASSIGNED_LCID LOCALE_CUSTOM_UNSPECIFIED
1412
1413#define UNREFERENCED_PARAMETER(P) {(P) = (P);}
1414#define UNREFERENCED_LOCAL_VARIABLE(V) {(V) = (V);}
1415#define DBG_UNREFERENCED_PARAMETER(P) (P)
1416#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
1417
1418#define DEFAULT_UNREACHABLE
1419
1420#ifndef UMDF_USING_NTSTATUS
1421#ifndef WIN32_NO_STATUS
1422#define STATUS_WAIT_0 ((DWORD)0x00000000)
1423#define STATUS_ABANDONED_WAIT_0 ((DWORD)0x00000080)
1424#define STATUS_USER_APC ((DWORD)0x000000C0)
1425#define STATUS_TIMEOUT ((DWORD)0x00000102)
1426#define STATUS_PENDING ((DWORD)0x00000103)
1427#define DBG_EXCEPTION_HANDLED ((DWORD)0x00010001)
1428#define DBG_CONTINUE ((DWORD)0x00010002)
1429#define STATUS_SEGMENT_NOTIFICATION ((DWORD)0x40000005)
1430#define STATUS_FATAL_APP_EXIT ((DWORD)0x40000015)
1431#define DBG_REPLY_LATER ((DWORD)0x40010001)
1432#define DBG_TERMINATE_THREAD ((DWORD)0x40010003)
1433#define DBG_TERMINATE_PROCESS ((DWORD)0x40010004)
1434#define DBG_CONTROL_C ((DWORD)0x40010005)
1435#define DBG_PRINTEXCEPTION_C ((DWORD)0x40010006)
1436#define DBG_RIPEXCEPTION ((DWORD)0x40010007)
1437#define DBG_CONTROL_BREAK ((DWORD)0x40010008)
1438#define DBG_COMMAND_EXCEPTION ((DWORD)0x40010009)
1439#define DBG_PRINTEXCEPTION_WIDE_C ((DWORD)0x4001000A)
1440#define STATUS_GUARD_PAGE_VIOLATION ((DWORD)0x80000001)
1441#define STATUS_DATATYPE_MISALIGNMENT ((DWORD)0x80000002)
1442#define STATUS_BREAKPOINT ((DWORD)0x80000003)
1443#define STATUS_SINGLE_STEP ((DWORD)0x80000004)
1444#define STATUS_LONGJUMP ((DWORD)0x80000026)
1445#define STATUS_UNWIND_CONSOLIDATE ((DWORD)0x80000029)
1446#define DBG_EXCEPTION_NOT_HANDLED ((DWORD)0x80010001)
1447#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005)
1448#define STATUS_IN_PAGE_ERROR ((DWORD)0xC0000006)
1449#define STATUS_INVALID_HANDLE ((DWORD)0xC0000008)
1450#define STATUS_INVALID_PARAMETER ((DWORD)0xC000000D)
1451#define STATUS_NO_MEMORY ((DWORD)0xC0000017)
1452#define STATUS_ILLEGAL_INSTRUCTION ((DWORD)0xC000001D)
1453#define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD)0xC0000025)
1454#define STATUS_INVALID_DISPOSITION ((DWORD)0xC0000026)
1455#define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD)0xC000008C)
1456#define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD)0xC000008D)
1457#define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD)0xC000008E)
1458#define STATUS_FLOAT_INEXACT_RESULT ((DWORD)0xC000008F)
1459#define STATUS_FLOAT_INVALID_OPERATION ((DWORD)0xC0000090)
1460#define STATUS_FLOAT_OVERFLOW ((DWORD)0xC0000091)
1461#define STATUS_FLOAT_STACK_CHECK ((DWORD)0xC0000092)
1462#define STATUS_FLOAT_UNDERFLOW ((DWORD)0xC0000093)
1463#define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD)0xC0000094)
1464#define STATUS_INTEGER_OVERFLOW ((DWORD)0xC0000095)
1465#define STATUS_PRIVILEGED_INSTRUCTION ((DWORD)0xC0000096)
1466#define STATUS_STACK_OVERFLOW ((DWORD)0xC00000FD)
1467#define STATUS_DLL_NOT_FOUND ((DWORD)0xC0000135)
1468#define STATUS_ORDINAL_NOT_FOUND ((DWORD)0xC0000138)
1469#define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD)0xC0000139)
1470#define STATUS_CONTROL_C_EXIT ((DWORD)0xC000013A)
1471#define STATUS_DLL_INIT_FAILED ((DWORD)0xC0000142)
1472#define STATUS_CONTROL_STACK_VIOLATION ((DWORD)0xC00001B2)
1473#define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD)0xC00002B4)
1474#define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD)0xC00002B5)
1475#define STATUS_REG_NAT_CONSUMPTION ((DWORD)0xC00002C9)
1476#define STATUS_HEAP_CORRUPTION ((DWORD)0xC0000374)
1477#define STATUS_STACK_BUFFER_OVERRUN ((DWORD)0xC0000409)
1478#define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD)0xC0000417)
1479#define STATUS_ASSERTION_FAILURE ((DWORD)0xC0000420)
1480#define STATUS_ENCLAVE_VIOLATION ((DWORD)0xC00004A2)
1481#define STATUS_INTERRUPTED ((DWORD)0xC0000515)
1482#define STATUS_THREAD_NOT_RUNNING ((DWORD)0xC0000516)
1483#define STATUS_ALREADY_REGISTERED ((DWORD)0xC0000718)
1484
1485#define STATUS_SXS_EARLY_DEACTIVATION ((DWORD)0xC015000F)
1486#define STATUS_SXS_INVALID_DEACTIVATION ((DWORD)0xC0150010)
1487#endif
1488#endif
1489
1490#define MAXIMUM_WAIT_OBJECTS 64
1491#define MAXIMUM_SUSPEND_COUNT MAXCHAR
1492
1493 typedef ULONG_PTR KSPIN_LOCK;
1494 typedef KSPIN_LOCK *PKSPIN_LOCK;
1495
1496 typedef struct DECLSPEC_ALIGN (16) _M128A {
1497 ULONGLONG Low;
1498 LONGLONG High;
1499 } M128A,*PM128A;
1500
1501 typedef struct DECLSPEC_ALIGN (16) _XSAVE_FORMAT {
1502 WORD ControlWord;
1503 WORD StatusWord;
1504 BYTE TagWord;
1505 BYTE Reserved1;
1506 WORD ErrorOpcode;
1507 DWORD ErrorOffset;
1508 WORD ErrorSelector;
1509 WORD Reserved2;
1510 DWORD DataOffset;
1511 WORD DataSelector;
1512 WORD Reserved3;
1513 DWORD MxCsr;
1514 DWORD MxCsr_Mask;
1515 M128A FloatRegisters[8];
1516#ifdef _WIN64
1517 M128A XmmRegisters[16];
1518 BYTE Reserved4[96];
1519#else
1520 M128A XmmRegisters[8];
1521 BYTE Reserved4[220];
1522 DWORD Cr0NpxState;
1523#endif
1524 } XSAVE_FORMAT,*PXSAVE_FORMAT;
1525
1526 typedef struct _XSAVE_CET_U_FORMAT {
1527 DWORD64 Ia32CetUMsr;
1528 DWORD64 Ia32Pl3SspMsr;
1529 } XSAVE_CET_U_FORMAT, *PXSAVE_CET_U_FORMAT;
1530
1531 typedef struct _XSAVE_ARM64_SVE_HEADER {
1532 DWORD VectorLength;
1533 DWORD VectorRegisterOffset;
1534 DWORD PredicateRegisterOffset;
1535 DWORD Reserved[5];
1536 } XSAVE_ARM64_SVE_HEADER, *PXSAVE_ARM64_SVE_HEADER;
1537
1538 typedef struct DECLSPEC_ALIGN (8) _XSAVE_AREA_HEADER {
1539 DWORD64 Mask;
1540 DWORD64 Reserved[7];
1541 } XSAVE_AREA_HEADER,*PXSAVE_AREA_HEADER;
1542
1543 typedef struct DECLSPEC_ALIGN (16) _XSAVE_AREA {
1544 XSAVE_FORMAT LegacyState;
1545 XSAVE_AREA_HEADER Header;
1546 } XSAVE_AREA,*PXSAVE_AREA;
1547
1548#define XSTATE_CONTEXT_FLAG_LOOKASIDE 0x1
1549
1550 typedef struct _XSTATE_CONTEXT {
1551 DWORD64 Mask;
1552 DWORD Length;
1553 BYTE Flags;
1554 BYTE Reserved0[3];
1555 PXSAVE_AREA Area;
1556#if defined (__i386__)
1557 DWORD Reserved2;
1558#endif
1559 PVOID Buffer;
1560#if defined (__i386__)
1561 DWORD Reserved3;
1562#endif
1563 } XSTATE_CONTEXT,*PXSTATE_CONTEXT;
1564
1565 typedef struct _KERNEL_CET_CONTEXT {
1566 DWORD64 Ssp;
1567 DWORD64 Rip;
1568 WORD SegCs;
1569 __C89_NAMELESS union {
1570 WORD AllFlags;
1571 __C89_NAMELESS struct {
1572 WORD UseWrss : 1;
1573 WORD PopShadowStackOne : 1;
1574 WORD Unused : 14;
1575 };
1576 };
1577 WORD Fill[2];
1578 } KERNEL_CET_CONTEXT, *PKERNEL_CET_CONTEXT;
1579
1580 typedef struct _SCOPE_TABLE_AMD64 {
1581 DWORD Count;
1582 struct {
1583 DWORD BeginAddress;
1584 DWORD EndAddress;
1585 DWORD HandlerAddress;
1586 DWORD JumpTarget;
1587 } ScopeRecord[1];
1588 } SCOPE_TABLE_AMD64,*PSCOPE_TABLE_AMD64;
1589
1590#ifdef _AMD64_
1591
1592#if defined(__x86_64) && !defined(__arm64ec__) && !defined(RC_INVOKED)
1593
1594#ifdef __cplusplus
1595 extern "C" {
1596#endif
1597
1598#define BitTest _bittest
1599#define BitTestAndComplement _bittestandcomplement
1600#define BitTestAndSet _bittestandset
1601#define BitTestAndReset _bittestandreset
1602#define BitTest64 _bittest64
1603#define BitTestAndComplement64 _bittestandcomplement64
1604#define BitTestAndSet64 _bittestandset64
1605#define BitTestAndReset64 _bittestandreset64
1606
1607 /* BOOLEAN _bittest(LONG const *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1608 /* BOOLEAN _bittestandcomplement(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1609 /* BOOLEAN _bittestandset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1610 /* BOOLEAN _bittestandreset(LONG *Base,LONG Offset); moved to psdk_inc/intrin-impl.h */
1611 /* BOOLEAN _bittest64(LONG64 const *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1612 /* BOOLEAN _bittestandcomplement64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1613 /* BOOLEAN _bittestandset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1614 /* BOOLEAN _bittestandreset64(LONG64 *Base,LONG64 Offset); moved to psdk_inc/intrin-impl.h */
1615
1616#define BitScanForward _BitScanForward
1617#define BitScanReverse _BitScanReverse
1618#define BitScanForward64 _BitScanForward64
1619#define BitScanReverse64 _BitScanReverse64
1620
1621 /* BOOLEAN _BitScanForward(DWORD *Index,DWORD Mask); moved to psdk_inc/intrin-impl.h */
1622 /* BOOLEAN _BitScanReverse(DWORD *Index,DWORD Mask); moved to psdk_inc/intrin-impl.h */
1623 /* BOOLEAN _BitScanForward64(DWORD *Index,DWORD64 Mask); moved to psdk_inc/intrin-impl.h */
1624 /* BOOLEAN _BitScanReverse64(DWORD *Index,DWORD64 Mask); moved to psdk_inc/intrin-impl.h */
1625
1626#define InterlockedIncrement16 _InterlockedIncrement16
1627#define InterlockedDecrement16 _InterlockedDecrement16
1628#define InterlockedCompareExchange16 _InterlockedCompareExchange16
1629
1630#define InterlockedAnd _InterlockedAnd
1631#define InterlockedOr _InterlockedOr
1632#define InterlockedXor _InterlockedXor
1633#define InterlockedIncrement _InterlockedIncrement
1634#define InterlockedIncrementAcquire InterlockedIncrement
1635#define InterlockedIncrementRelease InterlockedIncrement
1636#define InterlockedDecrement _InterlockedDecrement
1637#define InterlockedDecrementAcquire InterlockedDecrement
1638#define InterlockedDecrementRelease InterlockedDecrement
1639#define InterlockedAdd _InterlockedAdd
1640#define InterlockedExchange _InterlockedExchange
1641#define InterlockedExchangeAdd _InterlockedExchangeAdd
1642#define InterlockedCompareExchange _InterlockedCompareExchange
1643#define InterlockedCompareExchangeAcquire InterlockedCompareExchange
1644#define InterlockedCompareExchangeRelease InterlockedCompareExchange
1645
1646#define InterlockedAnd64 _InterlockedAnd64
1647#define InterlockedAndAffinity InterlockedAnd64
1648#define InterlockedOr64 _InterlockedOr64
1649#define InterlockedOrAffinity InterlockedOr64
1650#define InterlockedXor64 _InterlockedXor64
1651#define InterlockedIncrement64 _InterlockedIncrement64
1652#define InterlockedDecrement64 _InterlockedDecrement64
1653#define InterlockedAdd64 _InterlockedAdd64
1654#define InterlockedExchange64 _InterlockedExchange64
1655#define InterlockedExchangeAcquire64 InterlockedExchange64
1656#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
1657#define InterlockedCompareExchange64 _InterlockedCompareExchange64
1658#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
1659#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
1660
1661#define InterlockedExchangePointer _InterlockedExchangePointer
1662#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1663#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1664#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1665
1666#define InterlockedExchangeAddSizeT(a,b) InterlockedExchangeAdd64((LONG64 *)a,b)
1667#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
1668#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
1669
1670 /* SHORT InterlockedIncrement16(SHORT volatile *Addend); moved to psdk_inc/intrin-impl.h */
1671 /* SHORT InterlockedDecrement16(SHORT volatile *Addend); moved to psdk_inc/intrin-impl.h */
1672 /* SHORT InterlockedCompareExchange16(SHORT volatile *Destination,SHORT ExChange,SHORT Comperand); moved to psdk_inc/intrin-impl.h */
1673 /* LONG InterlockedIncrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
1674 /* LONG InterlockedDecrement(LONG volatile *Addend); moved to psdk_inc/intrin-impl.h */
1675 /* LONG InterlockedExchange(LONG volatile *Target,LONG Value); moved to psdk_inc/intrin-impl.h */
1676
1677 /* LONG InterlockedExchangeAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
1678 /* LONG InterlockedCompareExchange(LONG volatile *Destination,LONG ExChange,LONG Comperand); moved to psdk_inc/intrin-impl.h */
1679 /* LONG InterlockedAdd(LONG volatile *Addend,LONG Value); moved to psdk_inc/intrin-impl.h */
1680 /* LONG64 InterlockedIncrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
1681 /* LONG64 InterlockedDecrement64(LONG64 volatile *Addend); moved to psdk_inc/intrin-impl.h */
1682 /* LONG64 InterlockedExchange64(LONG64 volatile *Target,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1683 /* LONG64 InterlockedExchangeAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1684 /* LONG64 InterlockedAdd64(LONG64 volatile *Addend,LONG64 Value); moved to psdk_inc/intrin-impl.h */
1685 /* LONG64 InterlockedCompareExchange64(LONG64 volatile *Destination,LONG64 ExChange,LONG64 Comperand); moved to psdk_inc/intrin-impl.h */
1686 /* PVOID InterlockedCompareExchangePointer(PVOID volatile *Destination,PVOID ExChange,PVOID Comperand); moved to psdk_inc/intrin-impl.h */
1687 /* PVOID InterlockedExchangePointer(PVOID volatile *Target,PVOID Value); moved to psdk_inc/intrin-impl.h */
1688
1689#define CacheLineFlush(Address) _mm_clflush(Address)
1690
1691#if !defined(RC_INVOKED)
1692# if defined(__cplusplus)
1693extern "C" {
1694# endif
1695# include <x86intrin.h>
1696# if defined(__cplusplus)
1697}
1698# endif
1699#include <emmintrin.h>
1700#endif /* !defined(RC_INVOKED) */
1701
1702#define FastFence __faststorefence
1703#define LoadFence _mm_lfence
1704#define MemoryFence _mm_mfence
1705#define StoreFence _mm_sfence
1706
1707#define YieldProcessor _mm_pause
1708#define MemoryBarrier _mm_mfence
1709#define PreFetchCacheLine(l,a) _mm_prefetch((CHAR CONST *) a,l)
1710#define PrefetchForWrite(p) _m_prefetchw(p)
1711#define ReadForWriteAccess(p) (_m_prefetchw(p),*(p))
1712
1713#define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
1714#define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
1715#define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
1716#define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
1717
1718#define ReadMxCsr _mm_getcsr
1719#define WriteMxCsr _mm_setcsr
1720
1721#define DbgRaiseAssertionFailure __int2c
1722#define GetCallersEflags() __getcallerseflags()
1723
1724 unsigned __int32 __getcallerseflags(VOID);
1725
1726#define GetSegmentLimit __segmentlimit
1727
1728 DWORD __segmentlimit(DWORD Selector);
1729
1730#define ReadTimeStampCounter() __rdtsc()
1731
1732 /* VOID __movsb(PBYTE Destination,BYTE const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1733 /* VOID __movsw(PWORD Destination,WORD const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1734 /* VOID __movsd(PDWORD Destination,DWORD const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1735 /* VOID __movsq(PDWORD64 Destination,DWORD64 const *Source,SIZE_T Count); moved to psdk_inc/intrin-impl.h */
1736
1737#define MultiplyHigh __mulh
1738#define UnsignedMultiplyHigh __umulh
1739
1740 LONGLONG MultiplyHigh(LONGLONG Multiplier,LONGLONG Multiplicand);
1741 ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
1742
1743#define ShiftLeft128 __shiftleft128
1744#define ShiftRight128 __shiftright128
1745
1746 DWORD64 ShiftLeft128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1747 DWORD64 ShiftRight128(DWORD64 LowPart,DWORD64 HighPart,BYTE Shift);
1748
1749#define Multiply128 _mul128
1750
1751 LONG64 Multiply128(LONG64 Multiplier,LONG64 Multiplicand,LONG64 *HighProduct);
1752
1753#define UnsignedMultiply128 _umul128
1754
1755 DWORD64 UnsignedMultiply128(DWORD64 Multiplier,DWORD64 Multiplicand,DWORD64 *HighProduct);
1756
1757 LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift);
1758 DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift);
1759
1760#ifndef __CRT__NO_INLINE
1761 __CRT_INLINE LONG64 MultiplyExtract128(LONG64 Multiplier,LONG64 Multiplicand,BYTE Shift) {
1762 LONG64 extractedProduct;
1763 LONG64 highProduct;
1764 LONG64 lowProduct;
1765 lowProduct = Multiply128(Multiplier,Multiplicand,&highProduct);
1766 extractedProduct = (LONG64)ShiftRight128((LONG64)lowProduct,(LONG64)highProduct,Shift);
1767 return extractedProduct;
1768 }
1769
1770 __CRT_INLINE DWORD64 UnsignedMultiplyExtract128(DWORD64 Multiplier,DWORD64 Multiplicand,BYTE Shift) {
1771 DWORD64 extractedProduct;
1772 DWORD64 highProduct;
1773 DWORD64 lowProduct;
1774 lowProduct = UnsignedMultiply128(Multiplier,Multiplicand,&highProduct);
1775 extractedProduct = ShiftRight128(lowProduct,highProduct,Shift);
1776 return extractedProduct;
1777 }
1778#endif
1779
1780 /* unsigned char __readgsbyte(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1781 /* unsigned short __readgsword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1782 /* unsigned __LONG32 __readgsdword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1783 /* __MINGW_EXTENSION unsigned __int64 __readgsqword(unsigned __LONG32 Offset); moved to psdk_inc/intrin-impl.h */
1784
1785 /* void __writegsbyte(unsigned __LONG32 Offset,unsigned char Data); moved to psdk_inc/intrin-impl.h */
1786 /* void __writegsword(unsigned __LONG32 Offset,unsigned short Data); moved to psdk_inc/intrin-impl.h */
1787 /* void __writegsdword(unsigned __LONG32 Offset,unsigned __LONG32 Data); moved to psdk_inc/intrin-impl.h */
1788
1789#ifdef __cplusplus
1790 }
1791#endif
1792#endif /* defined(__x86_64) && !defined(__arm64ec__) && !defined(RC_INVOKED) */
1793
1794#define EXCEPTION_READ_FAULT 0
1795#define EXCEPTION_WRITE_FAULT 1
1796#define EXCEPTION_EXECUTE_FAULT 8
1797
1798#if !defined(RC_INVOKED)
1799
1800#define CONTEXT_AMD64 0x100000
1801
1802#define CONTEXT_CONTROL (CONTEXT_AMD64 | __MSABI_LONG(0x1))
1803#define CONTEXT_INTEGER (CONTEXT_AMD64 | __MSABI_LONG(0x2))
1804#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | __MSABI_LONG(0x4))
1805#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | __MSABI_LONG(0x8))
1806#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | __MSABI_LONG(0x10))
1807
1808#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
1809#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
1810
1811#define CONTEXT_XSTATE (CONTEXT_AMD64 | __MSABI_LONG(0x40))
1812#define CONTEXT_KERNEL_CET (CONTEXT_AMD64 | __MSABI_LONG(0x80))
1813
1814#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
1815#define CONTEXT_SERVICE_ACTIVE 0x10000000
1816#define CONTEXT_EXCEPTION_REQUEST 0x40000000
1817#define CONTEXT_EXCEPTION_REPORTING 0x80000000
1818#define CONTEXT_UNWOUND_TO_CALL 0x20000000
1819
1820#endif /* !defined(RC_INVOKED) */
1821
1822#define INITIAL_MXCSR 0x1f80
1823#define INITIAL_FPCSR 0x027f
1824
1825 typedef struct _XMM_SAVE_AREA32 {
1826 WORD ControlWord;
1827 WORD StatusWord;
1828 BYTE TagWord;
1829 BYTE Reserved1;
1830 WORD ErrorOpcode;
1831 DWORD ErrorOffset;
1832 WORD ErrorSelector;
1833 WORD Reserved2;
1834 DWORD DataOffset;
1835 WORD DataSelector;
1836 WORD Reserved3;
1837 DWORD MxCsr;
1838 DWORD MxCsr_Mask;
1839 M128A FloatRegisters[8];
1840 M128A XmmRegisters[16];
1841 BYTE Reserved4[96];
1842 } XMM_SAVE_AREA32,*PXMM_SAVE_AREA32;
1843
1844#define LEGACY_SAVE_AREA_LENGTH sizeof(XMM_SAVE_AREA32)
1845
1846 typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
1847 DWORD64 P1Home;
1848 DWORD64 P2Home;
1849 DWORD64 P3Home;
1850 DWORD64 P4Home;
1851 DWORD64 P5Home;
1852 DWORD64 P6Home;
1853 DWORD ContextFlags;
1854 DWORD MxCsr;
1855 WORD SegCs;
1856 WORD SegDs;
1857 WORD SegEs;
1858 WORD SegFs;
1859 WORD SegGs;
1860 WORD SegSs;
1861 DWORD EFlags;
1862 DWORD64 Dr0;
1863 DWORD64 Dr1;
1864 DWORD64 Dr2;
1865 DWORD64 Dr3;
1866 DWORD64 Dr6;
1867 DWORD64 Dr7;
1868 DWORD64 Rax;
1869 DWORD64 Rcx;
1870 DWORD64 Rdx;
1871 DWORD64 Rbx;
1872 DWORD64 Rsp;
1873 DWORD64 Rbp;
1874 DWORD64 Rsi;
1875 DWORD64 Rdi;
1876 DWORD64 R8;
1877 DWORD64 R9;
1878 DWORD64 R10;
1879 DWORD64 R11;
1880 DWORD64 R12;
1881 DWORD64 R13;
1882 DWORD64 R14;
1883 DWORD64 R15;
1884 DWORD64 Rip;
1885 __C89_NAMELESS union {
1886 XMM_SAVE_AREA32 FltSave;
1887 XMM_SAVE_AREA32 FloatSave;
1888 __C89_NAMELESS struct {
1889 M128A Header[2];
1890 M128A Legacy[8];
1891 M128A Xmm0;
1892 M128A Xmm1;
1893 M128A Xmm2;
1894 M128A Xmm3;
1895 M128A Xmm4;
1896 M128A Xmm5;
1897 M128A Xmm6;
1898 M128A Xmm7;
1899 M128A Xmm8;
1900 M128A Xmm9;
1901 M128A Xmm10;
1902 M128A Xmm11;
1903 M128A Xmm12;
1904 M128A Xmm13;
1905 M128A Xmm14;
1906 M128A Xmm15;
1907 };
1908 };
1909 M128A VectorRegister[26];
1910 DWORD64 VectorControl;
1911 DWORD64 DebugControl;
1912 DWORD64 LastBranchToRip;
1913 DWORD64 LastBranchFromRip;
1914 DWORD64 LastExceptionToRip;
1915 DWORD64 LastExceptionFromRip;
1916 } CONTEXT,*PCONTEXT;
1917
1918#define RUNTIME_FUNCTION_INDIRECT 0x1
1919
1920 typedef struct _RUNTIME_FUNCTION {
1921 DWORD BeginAddress;
1922 DWORD EndAddress;
1923 DWORD UnwindData;
1924 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
1925
1926 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
1927 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
1928
1929#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
1930
1931#define UNW_FLAG_NHANDLER 0x0
1932#define UNW_FLAG_EHANDLER 0x1
1933#define UNW_FLAG_UHANDLER 0x2
1934#define UNW_FLAG_CHAININFO 0x4
1935
1936#endif /* end of _AMD64_ */
1937
1938
1939#ifdef _ARM_
1940
1941#if defined(__arm__) && !defined(RC_INVOKED)
1942
1943#ifdef __cplusplus
1944 extern "C" {
1945#endif
1946
1947#define BitTest _bittest
1948#define BitTestAndComplement _bittestandcomplement
1949#define BitTestAndSet _bittestandset
1950#define BitTestAndReset _bittestandreset
1951
1952#define BitScanForward _BitScanForward
1953#define BitScanReverse _BitScanReverse
1954
1955#define InterlockedIncrement16 _InterlockedIncrement16
1956#define InterlockedDecrement16 _InterlockedDecrement16
1957#define InterlockedCompareExchange16 _InterlockedCompareExchange16
1958
1959#define InterlockedAnd _InterlockedAnd
1960#define InterlockedOr _InterlockedOr
1961#define InterlockedXor _InterlockedXor
1962#define InterlockedIncrement _InterlockedIncrement
1963#define InterlockedIncrementAcquire InterlockedIncrement
1964#define InterlockedIncrementRelease InterlockedIncrement
1965#define InterlockedDecrement _InterlockedDecrement
1966#define InterlockedDecrementAcquire InterlockedDecrement
1967#define InterlockedDecrementRelease InterlockedDecrement
1968#define InterlockedAdd _InterlockedAdd
1969#define InterlockedExchange _InterlockedExchange
1970#define InterlockedExchangeAdd _InterlockedExchangeAdd
1971#define InterlockedCompareExchange _InterlockedCompareExchange
1972#define InterlockedCompareExchangeAcquire InterlockedCompareExchange
1973#define InterlockedCompareExchangeRelease InterlockedCompareExchange
1974
1975#define InterlockedAnd64 _InterlockedAnd64
1976#define InterlockedAndAffinity InterlockedAnd64
1977#define InterlockedOr64 _InterlockedOr64
1978#define InterlockedOrAffinity InterlockedOr64
1979#define InterlockedXor64 _InterlockedXor64
1980#define InterlockedIncrement64 _InterlockedIncrement64
1981#define InterlockedDecrement64 _InterlockedDecrement64
1982#define InterlockedAdd64 _InterlockedAdd64
1983#define InterlockedExchange64 _InterlockedExchange64
1984#define InterlockedExchangeAcquire64 InterlockedExchange64
1985#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
1986#define InterlockedCompareExchange64 _InterlockedCompareExchange64
1987#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
1988#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
1989
1990#define InterlockedExchangePointer _InterlockedExchangePointer
1991#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
1992#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
1993#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
1994
1995#define YieldProcessor() __asm__ __volatile__("dmb ishst\n\tyield":::"memory")
1996#define MemoryBarrier() __asm__ __volatile__("dmb":::"memory")
1997#define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
1998#define PrefetchForWrite(p) __prefetch((const void *) (p))
1999#define ReadForWriteAccess(p) (*(p))
2000
2001#define PF_TEMPORAL_LEVEL_1 0
2002#define PF_TEMPORAL_LEVEL_2 1
2003#define PF_TEMPORAL_LEVEL_3 2
2004#define PF_NON_TEMPORAL_LEVEL_ALL 3
2005
2006#ifdef __cplusplus
2007 }
2008#endif
2009#endif /* defined(__arm__) && !defined(RC_INVOKED) */
2010
2011#define EXCEPTION_READ_FAULT 0
2012#define EXCEPTION_WRITE_FAULT 1
2013#define EXCEPTION_EXECUTE_FAULT 8
2014
2015#if !defined(RC_INVOKED)
2016
2017#define CONTEXT_ARM 0x0200000
2018
2019#define CONTEXT_CONTROL (CONTEXT_ARM | 0x00000001)
2020#define CONTEXT_INTEGER (CONTEXT_ARM | 0x00000002)
2021#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x00000004)
2022#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x00000008)
2023
2024#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
2025
2026#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
2027
2028#define CONTEXT_EXCEPTION_ACTIVE 0x08000000
2029#define CONTEXT_SERVICE_ACTIVE 0x10000000
2030#define CONTEXT_EXCEPTION_REQUEST 0x40000000
2031#define CONTEXT_EXCEPTION_REPORTING 0x80000000
2032
2033#define CONTEXT_UNWOUND_TO_CALL 0x20000000
2034
2035#endif /* !defined(RC_INVOKED) */
2036
2037#define INITIAL_CPSR 0x10
2038#define INITIAL_FPSCR 0x00
2039
2040#define ARM_MAX_BREAKPOINTS 8
2041#define ARM_MAX_WATCHPOINTS 1
2042
2043
2044 typedef struct _NEON128 {
2045 ULONGLONG Low;
2046 LONGLONG High;
2047 } NEON128, *PNEON128;
2048
2049 typedef struct DECLSPEC_ALIGN(8) _CONTEXT {
2050 DWORD ContextFlags;
2051
2052 DWORD R0;
2053 DWORD R1;
2054 DWORD R2;
2055 DWORD R3;
2056 DWORD R4;
2057 DWORD R5;
2058 DWORD R6;
2059 DWORD R7;
2060 DWORD R8;
2061 DWORD R9;
2062 DWORD R10;
2063 DWORD R11;
2064 DWORD R12;
2065
2066 DWORD Sp;
2067 DWORD Lr;
2068 DWORD Pc;
2069 DWORD Cpsr;
2070
2071 DWORD Fpscr;
2072 DWORD Padding;
2073 union {
2074 NEON128 Q[16];
2075 ULONGLONG D[32];
2076 DWORD S[32];
2077 } DUMMYUNIONNAME;
2078
2079 DWORD Bvr[ARM_MAX_BREAKPOINTS];
2080 DWORD Bcr[ARM_MAX_BREAKPOINTS];
2081 DWORD Wvr[ARM_MAX_WATCHPOINTS];
2082 DWORD Wcr[ARM_MAX_WATCHPOINTS];
2083
2084 DWORD Padding2[2];
2085 } CONTEXT, *PCONTEXT;
2086
2087 typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
2088 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD ControlPc,PVOID Context);
2089
2090#define UNW_FLAG_NHANDLER 0x0
2091#define UNW_FLAG_EHANDLER 0x1
2092#define UNW_FLAG_UHANDLER 0x2
2093
2094 struct _DISPATCHER_CONTEXT;
2095 typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
2096 typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
2097
2098 struct _DISPATCHER_CONTEXT {
2099 ULONG ControlPc;
2100 ULONG ImageBase;
2101 PRUNTIME_FUNCTION FunctionEntry;
2102 ULONG EstablisherFrame;
2103 ULONG TargetPc;
2104 PCONTEXT ContextRecord;
2105 PEXCEPTION_ROUTINE LanguageHandler;
2106 PVOID HandlerData;
2107 struct _UNWIND_HISTORY_TABLE *HistoryTable;
2108 ULONG ScopeIndex;
2109 BOOLEAN ControlPcIsUnwound;
2110 PBYTE NonVolatileRegisters;
2111 ULONG VirtualVfpHead;
2112 };
2113
2114 typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
2115 PDWORD R4;
2116 PDWORD R5;
2117 PDWORD R6;
2118 PDWORD R7;
2119 PDWORD R8;
2120 PDWORD R9;
2121 PDWORD R10;
2122 PDWORD R11;
2123 PDWORD Lr;
2124 PULONGLONG D8;
2125 PULONGLONG D9;
2126 PULONGLONG D10;
2127 PULONGLONG D11;
2128 PULONGLONG D12;
2129 PULONGLONG D13;
2130 PULONGLONG D14;
2131 PULONGLONG D15;
2132 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2133
2134#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
2135
2136#endif /* _ARM_ */
2137
2138
2139#if defined(_ARM64_) || defined(_ARM64EC_)
2140
2141#if (defined(__aarch64__) || defined(__arm64ec__)) && !defined(RC_INVOKED)
2142
2143#ifdef __cplusplus
2144 extern "C" {
2145#endif
2146
2147#define BitTest _bittest
2148#define BitTestAndComplement _bittestandcomplement
2149#define BitTestAndSet _bittestandset
2150#define BitTestAndReset _bittestandreset
2151
2152#define BitScanForward _BitScanForward
2153#define BitScanReverse _BitScanReverse
2154#define BitScanForward64 _BitScanForward64
2155#define BitScanReverse64 _BitScanReverse64
2156
2157#define InterlockedIncrement16 _InterlockedIncrement16
2158#define InterlockedDecrement16 _InterlockedDecrement16
2159#define InterlockedCompareExchange16 _InterlockedCompareExchange16
2160
2161#define InterlockedAnd _InterlockedAnd
2162#define InterlockedOr _InterlockedOr
2163#define InterlockedXor _InterlockedXor
2164#define InterlockedIncrement _InterlockedIncrement
2165#define InterlockedIncrementAcquire InterlockedIncrement
2166#define InterlockedIncrementRelease InterlockedIncrement
2167#define InterlockedDecrement _InterlockedDecrement
2168#define InterlockedDecrementAcquire InterlockedDecrement
2169#define InterlockedDecrementRelease InterlockedDecrement
2170#define InterlockedAdd _InterlockedAdd
2171#define InterlockedExchange _InterlockedExchange
2172#define InterlockedExchangeAdd _InterlockedExchangeAdd
2173#define InterlockedCompareExchange _InterlockedCompareExchange
2174#define InterlockedCompareExchangeAcquire InterlockedCompareExchange
2175#define InterlockedCompareExchangeRelease InterlockedCompareExchange
2176
2177#define InterlockedAnd64 _InterlockedAnd64
2178#define InterlockedAndAffinity InterlockedAnd64
2179#define InterlockedOr64 _InterlockedOr64
2180#define InterlockedOrAffinity InterlockedOr64
2181#define InterlockedXor64 _InterlockedXor64
2182#define InterlockedIncrement64 _InterlockedIncrement64
2183#define InterlockedDecrement64 _InterlockedDecrement64
2184#define InterlockedAdd64 _InterlockedAdd64
2185#define InterlockedExchange64 _InterlockedExchange64
2186#define InterlockedExchangeAcquire64 InterlockedExchange64
2187#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
2188#define InterlockedCompareExchange64 _InterlockedCompareExchange64
2189#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
2190#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
2191
2192#define InterlockedExchangePointer _InterlockedExchangePointer
2193#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
2194#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
2195#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
2196
2197#define YieldProcessor() __asm__ __volatile__("dmb ishst\n\tyield":::"memory")
2198#define MemoryBarrier() __asm__ __volatile__("dmb sy":::"memory")
2199#define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
2200#define PrefetchForWrite(p) __prefetch((const void *) (p))
2201#define ReadForWriteAccess(p) (*(p))
2202
2203#define PF_TEMPORAL_LEVEL_1 0
2204#define PF_TEMPORAL_LEVEL_2 1
2205#define PF_TEMPORAL_LEVEL_3 2
2206#define PF_NON_TEMPORAL_LEVEL_ALL 3
2207
2208#ifdef __cplusplus
2209 }
2210#endif
2211#endif /* (defined(__aarch64__) || defined(__arm64ec__)) && !defined(RC_INVOKED) */
2212
2213#define EXCEPTION_READ_FAULT 0
2214#define EXCEPTION_WRITE_FAULT 1
2215#define EXCEPTION_EXECUTE_FAULT 8
2216#endif /* defined(_ARM64_) || defined(_ARM64EC_) */
2217
2218#if !defined(RC_INVOKED)
2219
2220#define CONTEXT_ARM64 0x400000
2221#define CONTEXT_ARM64_CONTROL (CONTEXT_ARM64 | 0x00000001)
2222#define CONTEXT_ARM64_INTEGER (CONTEXT_ARM64 | 0x00000002)
2223#define CONTEXT_ARM64_FLOATING_POINT (CONTEXT_ARM64 | 0x00000004)
2224#define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x00000008)
2225#define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x00000010)
2226
2227
2228#define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT)
2229#define CONTEXT_ARM64_ALL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT | CONTEXT_ARM64_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
2230
2231#define CONTEXT_ARM64_UNWOUND_TO_CALL 0x20000000
2232
2233#ifdef _ARM64_
2234
2235#define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
2236#define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
2237#define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
2238#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
2239#define CONTEXT_FULL CONTEXT_ARM64_FULL
2240#define CONTEXT_ALL CONTEXT_ARM64_ALL
2241#define CONTEXT_UNWOUND_TO_CALL CONTEXT_ARM64_UNWOUND_TO_CALL
2242
2243#define CONTEXT_EXCEPTION_ACTIVE 0x08000000
2244#define CONTEXT_SERVICE_ACTIVE 0x10000000
2245#define CONTEXT_EXCEPTION_REQUEST 0x40000000
2246#define CONTEXT_EXCEPTION_REPORTING 0x80000000
2247
2248#endif /* _ARM64_ */
2249
2250#endif /* !defined(RC_INVOKED) */
2251
2252#define ARM64_MAX_BREAKPOINTS 8
2253#define ARM64_MAX_WATCHPOINTS 2
2254
2255 typedef union _ARM64_NT_NEON128 {
2256 struct
2257 {
2258 ULONGLONG Low;
2259 LONGLONG High;
2260 } DUMMYSTRUCTNAME;
2261 double D[2];
2262 float S[4];
2263 WORD H[8];
2264 BYTE B[16];
2265 } ARM64_NT_NEON128, *PARM64_NT_NEON128;
2266
2267#ifdef _ARM64_
2268 typedef ARM64_NT_NEON128 NEON128, *PNEON128;
2269#endif
2270
2271 typedef struct DECLSPEC_ALIGN(16)
2272#ifdef _ARM64_
2273 _CONTEXT
2274#else
2275 _ARM64_NT_CONTEXT
2276#endif
2277 {
2278 ULONG ContextFlags; /* 000 */
2279 /* CONTEXT_INTEGER */
2280 ULONG Cpsr; /* 004 */
2281 union
2282 {
2283 struct
2284 {
2285 DWORD64 X0; /* 008 */
2286 DWORD64 X1; /* 010 */
2287 DWORD64 X2; /* 018 */
2288 DWORD64 X3; /* 020 */
2289 DWORD64 X4; /* 028 */
2290 DWORD64 X5; /* 030 */
2291 DWORD64 X6; /* 038 */
2292 DWORD64 X7; /* 040 */
2293 DWORD64 X8; /* 048 */
2294 DWORD64 X9; /* 050 */
2295 DWORD64 X10; /* 058 */
2296 DWORD64 X11; /* 060 */
2297 DWORD64 X12; /* 068 */
2298 DWORD64 X13; /* 070 */
2299 DWORD64 X14; /* 078 */
2300 DWORD64 X15; /* 080 */
2301 DWORD64 X16; /* 088 */
2302 DWORD64 X17; /* 090 */
2303 DWORD64 X18; /* 098 */
2304 DWORD64 X19; /* 0a0 */
2305 DWORD64 X20; /* 0a8 */
2306 DWORD64 X21; /* 0b0 */
2307 DWORD64 X22; /* 0b8 */
2308 DWORD64 X23; /* 0c0 */
2309 DWORD64 X24; /* 0c8 */
2310 DWORD64 X25; /* 0d0 */
2311 DWORD64 X26; /* 0d8 */
2312 DWORD64 X27; /* 0e0 */
2313 DWORD64 X28; /* 0e8 */
2314 DWORD64 Fp; /* 0f0 */
2315 DWORD64 Lr; /* 0f8 */
2316 } DUMMYSTRUCTNAME;
2317 DWORD64 X[31]; /* 008 */
2318 } DUMMYUNIONNAME;
2319 /* CONTEXT_CONTROL */
2320 DWORD64 Sp; /* 100 */
2321 DWORD64 Pc; /* 108 */
2322 /* CONTEXT_FLOATING_POINT */
2323 ARM64_NT_NEON128 V[32]; /* 110 */
2324 DWORD Fpcr; /* 310 */
2325 DWORD Fpsr; /* 314 */
2326 /* CONTEXT_DEBUG_REGISTERS */
2327 DWORD Bcr[ARM64_MAX_BREAKPOINTS]; /* 318 */
2328 DWORD64 Bvr[ARM64_MAX_BREAKPOINTS]; /* 338 */
2329 DWORD Wcr[ARM64_MAX_WATCHPOINTS]; /* 378 */
2330 DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */
2331 } ARM64_NT_CONTEXT, *PARM64_NT_CONTEXT;
2332
2333#ifdef _ARM64_
2334 typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
2335#endif
2336
2337
2338 typedef struct DECLSPEC_ALIGN(16) _ARM64EC_NT_CONTEXT
2339 {
2340 union
2341 {
2342 struct
2343 {
2344 DWORD64 AMD64_P1Home; /* 000 */
2345 DWORD64 AMD64_P2Home; /* 008 */
2346 DWORD64 AMD64_P3Home; /* 010 */
2347 DWORD64 AMD64_P4Home; /* 018 */
2348 DWORD64 AMD64_P5Home; /* 020 */
2349 DWORD64 AMD64_P6Home; /* 028 */
2350 DWORD ContextFlags; /* 030 */
2351 DWORD AMD64_MxCsr_copy; /* 034 */
2352 WORD AMD64_SegCs; /* 038 */
2353 WORD AMD64_SegDs; /* 03a */
2354 WORD AMD64_SegEs; /* 03c */
2355 WORD AMD64_SegFs; /* 03e */
2356 WORD AMD64_SegGs; /* 040 */
2357 WORD AMD64_SegSs; /* 042 */
2358 DWORD AMD64_EFlags; /* 044 */
2359 DWORD64 AMD64_Dr0; /* 048 */
2360 DWORD64 AMD64_Dr1; /* 050 */
2361 DWORD64 AMD64_Dr2; /* 058 */
2362 DWORD64 AMD64_Dr3; /* 060 */
2363 DWORD64 AMD64_Dr6; /* 068 */
2364 DWORD64 AMD64_Dr7; /* 070 */
2365 DWORD64 X8; /* 078 (Rax) */
2366 DWORD64 X0; /* 080 (Rcx) */
2367 DWORD64 X1; /* 088 (Rdx) */
2368 DWORD64 X27; /* 090 (Rbx) */
2369 DWORD64 Sp; /* 098 (Rsp) */
2370 DWORD64 Fp; /* 0a0 (Rbp) */
2371 DWORD64 X25; /* 0a8 (Rsi) */
2372 DWORD64 X26; /* 0b0 (Rdi) */
2373 DWORD64 X2; /* 0b8 (R8) */
2374 DWORD64 X3; /* 0c0 (R9) */
2375 DWORD64 X4; /* 0c8 (R10) */
2376 DWORD64 X5; /* 0d0 (R11) */
2377 DWORD64 X19; /* 0d8 (R12) */
2378 DWORD64 X20; /* 0e0 (R13) */
2379 DWORD64 X21; /* 0e8 (R14) */
2380 DWORD64 X22; /* 0f0 (R15) */
2381 DWORD64 Pc; /* 0f8 (Rip) */
2382 struct
2383 {
2384 WORD AMD64_ControlWord; /* 100 */
2385 WORD AMD64_StatusWord; /* 102 */
2386 BYTE AMD64_TagWord; /* 104 */
2387 BYTE AMD64_Reserved1; /* 105 */
2388 WORD AMD64_ErrorOpcode; /* 106 */
2389 DWORD AMD64_ErrorOffset; /* 108 */
2390 WORD AMD64_ErrorSelector; /* 10c */
2391 WORD AMD64_Reserved2; /* 10e */
2392 DWORD AMD64_DataOffset; /* 110 */
2393 WORD AMD64_DataSelector; /* 114 */
2394 WORD AMD64_Reserved3; /* 116 */
2395 DWORD AMD64_MxCsr; /* 118 */
2396 DWORD AMD64_MxCsr_Mask; /* 11c */
2397 DWORD64 Lr; /* 120 (FloatRegisters[0]) */
2398 WORD X16_0; /* 128 */
2399 WORD AMD64_St0_Reserved1; /* 12a */
2400 DWORD AMD64_St0_Reserved2; /* 12c */
2401 DWORD64 X6; /* 130 (FloatRegisters[1]) */
2402 WORD X16_1; /* 138 */
2403 WORD AMD64_St1_Reserved1; /* 13a */
2404 DWORD AMD64_St1_Reserved2; /* 13c */
2405 DWORD64 X7; /* 140 (FloatRegisters[2]) */
2406 WORD X16_2; /* 148 */
2407 WORD AMD64_St2_Reserved1; /* 14a */
2408 DWORD AMD64_St2_Reserved2; /* 14c */
2409 DWORD64 X9; /* 150 (FloatRegisters[3]) */
2410 WORD X16_3; /* 158 */
2411 WORD AMD64_St3_Reserved1; /* 15a */
2412 DWORD AMD64_St3_Reserved2; /* 15c */
2413 DWORD64 X10; /* 160 (FloatRegisters[4]) */
2414 WORD X17_0; /* 168 */
2415 WORD AMD64_St4_Reserved1; /* 16a */
2416 DWORD AMD64_St4_Reserved2; /* 16c */
2417 DWORD64 X11; /* 170 (FloatRegisters[5]) */
2418 WORD X17_1; /* 178 */
2419 WORD AMD64_St5_Reserved1; /* 17a */
2420 DWORD AMD64_St5_Reserved2; /* 17c */
2421 DWORD64 X12; /* 180 (FloatRegisters[6]) */
2422 WORD X17_2; /* 188 */
2423 WORD AMD64_St6_Reserved1; /* 18a */
2424 DWORD AMD64_St6_Reserved2; /* 18c */
2425 DWORD64 X15; /* 190 (FloatRegisters[7]) */
2426 WORD X17_3; /* 198 */
2427 WORD AMD64_St7_Reserved1; /* 19a */
2428 DWORD AMD64_St7_Reserved2; /* 19c */
2429 ARM64_NT_NEON128 V[16]; /* 1a0 (XmmRegisters) */
2430 BYTE AMD64_XSAVE_FORMAT_Reserved4[96]; /* 2a0 */
2431 } DUMMYSTRUCTNAME;
2432 ARM64_NT_NEON128 AMD64_VectorRegister[26]; /* 300 */
2433 DWORD64 AMD64_VectorControl; /* 4a0 */
2434 DWORD64 AMD64_DebugControl; /* 4a8 */
2435 DWORD64 AMD64_LastBranchToRip; /* 4b0 */
2436 DWORD64 AMD64_LastBranchFromRip; /* 4b8 */
2437 DWORD64 AMD64_LastExceptionToRip; /* 4c0 */
2438 DWORD64 AMD64_LastExceptionFromRip; /* 4c8 */
2439 } DUMMYSTRUCTNAME;
2440#ifdef _ARM64EC_
2441 CONTEXT AMD64_Context;
2442#endif
2443 } DUMMYUNIONNAME;
2444 } ARM64EC_NT_CONTEXT, *PARM64EC_NT_CONTEXT;
2445
2446 typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION, *PARM64_RUNTIME_FUNCTION;
2447
2448#ifdef _ARM64_
2449 typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
2450 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
2451#endif
2452
2453#define UNW_FLAG_NHANDLER 0x0
2454#define UNW_FLAG_EHANDLER 0x1
2455#define UNW_FLAG_UHANDLER 0x2
2456
2457#define NONVOL_INT_NUMREG_ARM64 (11)
2458#define NONVOL_FP_NUMREG_ARM64 (8)
2459
2460#define NONVOL_INT_SIZE_ARM64 (NONVOL_INT_NUMREG_ARM64 * sizeof(DWORD64))
2461#define NONVOL_FP_SIZE_ARM64 (NONVOL_FP_NUMREG_ARM64 * sizeof(double))
2462
2463 typedef union _DISPATCHER_CONTEXT_NONVOLREG_ARM64 {
2464 BYTE Buffer[NONVOL_INT_SIZE_ARM64 + NONVOL_FP_SIZE_ARM64];
2465
2466 __C89_NAMELESS struct {
2467 DWORD64 GpNvRegs[NONVOL_INT_NUMREG_ARM64];
2468 double FpNvRegs[NONVOL_FP_NUMREG_ARM64];
2469 } DUMMYSTRUCTNAME;
2470 } DISPATCHER_CONTEXT_NONVOLREG_ARM64;
2471
2472 typedef struct _DISPATCHER_CONTEXT_ARM64 {
2473 ULONG_PTR ControlPc;
2474 ULONG_PTR ImageBase;
2475 PARM64_RUNTIME_FUNCTION FunctionEntry;
2476 ULONG_PTR EstablisherFrame;
2477 ULONG_PTR TargetPc;
2478 PARM64_NT_CONTEXT ContextRecord;
2479 PEXCEPTION_ROUTINE LanguageHandler;
2480 PVOID HandlerData;
2481 struct _UNWIND_HISTORY_TABLE *HistoryTable;
2482 ULONG ScopeIndex;
2483 BOOLEAN ControlPcIsUnwound;
2484 PBYTE NonVolatileRegisters;
2485 } DISPATCHER_CONTEXT_ARM64, *PDISPATCHER_CONTEXT_ARM64;
2486
2487#if defined(_ARM64_)
2488 typedef DISPATCHER_CONTEXT_ARM64 DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
2489#endif
2490
2491 typedef struct _KNONVOLATILE_CONTEXT_POINTERS_ARM64 {
2492 PDWORD64 X19;
2493 PDWORD64 X20;
2494 PDWORD64 X21;
2495 PDWORD64 X22;
2496 PDWORD64 X23;
2497 PDWORD64 X24;
2498 PDWORD64 X25;
2499 PDWORD64 X26;
2500 PDWORD64 X27;
2501 PDWORD64 X28;
2502 PDWORD64 Fp;
2503 PDWORD64 Lr;
2504
2505 PDWORD64 D8;
2506 PDWORD64 D9;
2507 PDWORD64 D10;
2508 PDWORD64 D11;
2509 PDWORD64 D12;
2510 PDWORD64 D13;
2511 PDWORD64 D14;
2512 PDWORD64 D15;
2513 } KNONVOLATILE_CONTEXT_POINTERS_ARM64, *PKNONVOLATILE_CONTEXT_POINTERS_ARM64;
2514
2515#ifdef _ARM64_
2516 typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
2517#endif
2518
2519#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
2520
2521#ifdef _X86_
2522
2523#if defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED)
2524#ifdef __cplusplus
2525 extern "C" {
2526#endif
2527
2528#define BitTest _bittest
2529#define BitTestAndComplement _bittestandcomplement
2530#define BitTestAndSet _bittestandset
2531#define BitTestAndReset _bittestandreset
2532
2533#define BitScanForward _BitScanForward
2534#define BitScanReverse _BitScanReverse
2535
2536#define InterlockedIncrement16 _InterlockedIncrement16
2537#define InterlockedDecrement16 _InterlockedDecrement16
2538#define InterlockedCompareExchange16 _InterlockedCompareExchange16
2539
2540#define InterlockedAnd _InterlockedAnd
2541#define InterlockedOr _InterlockedOr
2542#define InterlockedXor _InterlockedXor
2543#define InterlockedIncrement _InterlockedIncrement
2544#define InterlockedIncrementAcquire InterlockedIncrement
2545#define InterlockedIncrementRelease InterlockedIncrement
2546#define InterlockedDecrement _InterlockedDecrement
2547#define InterlockedDecrementAcquire InterlockedDecrement
2548#define InterlockedDecrementRelease InterlockedDecrement
2549#define InterlockedAdd _InterlockedAdd
2550#define InterlockedExchange _InterlockedExchange
2551#define InterlockedExchangeAdd _InterlockedExchangeAdd
2552#define InterlockedCompareExchange _InterlockedCompareExchange
2553#define InterlockedCompareExchangeAcquire InterlockedCompareExchange
2554#define InterlockedCompareExchangeRelease InterlockedCompareExchange
2555
2556#define InterlockedAnd64 _InterlockedAnd64
2557#define InterlockedAndAffinity InterlockedAnd64
2558#define InterlockedOr64 _InterlockedOr64
2559#define InterlockedOrAffinity InterlockedOr64
2560#define InterlockedXor64 _InterlockedXor64
2561#define InterlockedIncrement64 _InterlockedIncrement64
2562#define InterlockedDecrement64 _InterlockedDecrement64
2563#define InterlockedAdd64 _InterlockedAdd64
2564#define InterlockedExchange64 _InterlockedExchange64
2565#define InterlockedExchangeAcquire64 InterlockedExchange64
2566#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
2567#define InterlockedCompareExchange64 _InterlockedCompareExchange64
2568#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
2569#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
2570
2571#define InterlockedExchangePointer _InterlockedExchangePointer
2572#define InterlockedCompareExchangePointer(Destination, ExChange, Comperand) (PVOID) (LONG_PTR)InterlockedCompareExchange ((LONG volatile *) (Destination),(LONG) (LONG_PTR) (ExChange),(LONG) (LONG_PTR) (Comperand))
2573#define InterlockedCompareExchangePointerAcquire InterlockedCompareExchangePointer
2574#define InterlockedCompareExchangePointerRelease InterlockedCompareExchangePointer
2575
2576#ifdef _PREFIX_
2577 /* BYTE __readfsbyte(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2578 /* WORD __readfsword(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2579 /* DWORD __readfsdword(DWORD Offset); moved to psdk_inc/intrin-impl.h */
2580 /* VOID __writefsbyte(DWORD Offset,BYTE Data); moved to psdk_inc/intrin-impl.h */
2581 /* VOID __writefsword(DWORD Offset,WORD Data); moved to psdk_inc/intrin-impl.h */
2582 /* VOID __writefsdword(DWORD Offset,DWORD Data); moved to psdk_inc/intrin-impl.h */
2583#endif
2584
2585#ifdef __cplusplus
2586 }
2587#endif
2588#endif /* defined(__i386__) && !defined(__x86_64) && !defined(RC_INVOKED) */
2589
2590#if defined(__i386__) && !defined(__x86_64)
2591
2592#if defined(__SSE2__) && !defined(RC_INVOKED)
2593#include <emmintrin.h>
2594#define YieldProcessor _mm_pause
2595#define MemoryBarrier _mm_mfence
2596#else /* defined(__SSE2__) && !defined(RC_INVOKED) */
2597#define YieldProcessor __buildpause
2598VOID MemoryBarrier(VOID);
2599FORCEINLINE VOID MemoryBarrier(VOID)
2600__buildmemorybarrier()
2601#endif /* defined(__SSE2__) && !defined(RC_INVOKED) */
2602
2603#define PreFetchCacheLine(l,a)
2604#define ReadForWriteAccess(p) (*(p))
2605
2606#define PF_TEMPORAL_LEVEL_1
2607#define PF_NON_TEMPORAL_LEVEL_ALL
2608
2609#define DbgRaiseAssertionFailure __int2c
2610
2611#endif /* defined(__i386__) && !defined(__x86_64) */
2612
2613#define EXCEPTION_READ_FAULT 0
2614#define EXCEPTION_WRITE_FAULT 1
2615#define EXCEPTION_EXECUTE_FAULT 8
2616
2617#define SIZE_OF_80387_REGISTERS 80
2618
2619#if !defined(RC_INVOKED)
2620
2621#define CONTEXT_i386 0x00010000
2622#define CONTEXT_i486 0x00010000
2623
2624#define CONTEXT_CONTROL (CONTEXT_i386 | __MSABI_LONG(0x00000001))
2625#define CONTEXT_INTEGER (CONTEXT_i386 | __MSABI_LONG(0x00000002))
2626#define CONTEXT_SEGMENTS (CONTEXT_i386 | __MSABI_LONG(0x00000004))
2627#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | __MSABI_LONG(0x00000008))
2628#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000010))
2629#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | __MSABI_LONG(0x00000020))
2630
2631#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
2632
2633#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | CONTEXT_EXTENDED_REGISTERS)
2634#endif /* !defined(RC_INVOKED) */
2635
2636#define MAXIMUM_SUPPORTED_EXTENSION 512
2637
2638 typedef struct _FLOATING_SAVE_AREA {
2639 DWORD ControlWord;
2640 DWORD StatusWord;
2641 DWORD TagWord;
2642 DWORD ErrorOffset;
2643 DWORD ErrorSelector;
2644 DWORD DataOffset;
2645 DWORD DataSelector;
2646 BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
2647 DWORD Cr0NpxState;
2648 } FLOATING_SAVE_AREA;
2649
2650 typedef FLOATING_SAVE_AREA *PFLOATING_SAVE_AREA;
2651
2652 typedef struct _CONTEXT {
2653 DWORD ContextFlags;
2654 DWORD Dr0;
2655 DWORD Dr1;
2656 DWORD Dr2;
2657 DWORD Dr3;
2658 DWORD Dr6;
2659 DWORD Dr7;
2660 FLOATING_SAVE_AREA FloatSave;
2661 DWORD SegGs;
2662 DWORD SegFs;
2663 DWORD SegEs;
2664 DWORD SegDs;
2665
2666 DWORD Edi;
2667 DWORD Esi;
2668 DWORD Ebx;
2669 DWORD Edx;
2670 DWORD Ecx;
2671 DWORD Eax;
2672 DWORD Ebp;
2673 DWORD Eip;
2674 DWORD SegCs;
2675 DWORD EFlags;
2676 DWORD Esp;
2677 DWORD SegSs;
2678 BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
2679 } CONTEXT;
2680
2681 typedef CONTEXT *PCONTEXT;
2682
2683#endif /* end of _X86_ */
2684
2685 /* LONG WINAPI InterlockedIncrement(LONG volatile *); moved to psdk_inc/intrin-impl.h */
2686 /* LONG WINAPI InterlockedDecrement(LONG volatile *); moved to psdk_inc/intrin-impl.h */
2687 /* LONG WINAPI InterlockedExchange(LONG volatile *, LONG); moved to psdk_inc/intrin-impl.h */
2688
2689#ifndef _LDT_ENTRY_DEFINED
2690#define _LDT_ENTRY_DEFINED
2691
2692 typedef struct _LDT_ENTRY {
2693 WORD LimitLow;
2694 WORD BaseLow;
2695 union {
2696 struct {
2697 BYTE BaseMid;
2698 BYTE Flags1;
2699 BYTE Flags2;
2700 BYTE BaseHi;
2701 } Bytes;
2702 struct {
2703 DWORD BaseMid : 8;
2704 DWORD Type : 5;
2705 DWORD Dpl : 2;
2706 DWORD Pres : 1;
2707 DWORD LimitHi : 4;
2708 DWORD Sys : 1;
2709 DWORD Reserved_0 : 1;
2710 DWORD Default_Big : 1;
2711 DWORD Granularity : 1;
2712 DWORD BaseHi : 8;
2713 } Bits;
2714 } HighWord;
2715 } LDT_ENTRY,*PLDT_ENTRY;
2716#endif /* _LDT_ENTRY_DEFINED */
2717
2718#if defined(__ia64__) && !defined(RC_INVOKED)
2719
2720#ifdef __cplusplus
2721 extern "C" {
2722#endif
2723
2724 BOOLEAN BitScanForward64(DWORD *Index,DWORD64 Mask);
2725 BOOLEAN BitScanReverse64(DWORD *Index,DWORD64 Mask);
2726
2727#ifdef __cplusplus
2728 }
2729#endif
2730#endif /* defined(__ia64__) && !defined(RC_INVOKED) */
2731
2732#if !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_)
2733
2734 void *_cdecl _rdteb(void);
2735
2736#ifdef __ia64__
2737#define NtCurrentTeb() ((struct _TEB *)_rdteb())
2738#define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
2739#define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
2740
2741#ifdef __cplusplus
2742 extern "C" {
2743#endif
2744
2745 void __break(int);
2746 void __yield(void);
2747 void __mf(void);
2748 void __lfetch(int Level,VOID CONST *Address);
2749 void __lfetchfault(int Level,VOID CONST *Address);
2750 void __lfetch_excl(int Level,VOID CONST *Address);
2751 void __lfetchfault_excl(int Level,VOID CONST *Address);
2752
2753#define MD_LFHINT_NONE 0x00
2754#define MD_LFHINT_NT1 0x01
2755#define MD_LFHINT_NT2 0x02
2756#define MD_LFHINT_NTA 0x03
2757
2758#ifdef __cplusplus
2759 }
2760#endif
2761
2762#define YieldProcessor __yield
2763#define MemoryBarrier __mf
2764#define PreFetchCacheLine __lfetch
2765#define ReadForWriteAccess(p) (*(p))
2766#define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
2767
2768#define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
2769#define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
2770
2771#define UnsignedMultiplyHigh __UMULH
2772
2773 ULONGLONG UnsignedMultiplyHigh(ULONGLONG Multiplier,ULONGLONG Multiplicand);
2774#endif /* __ia64__ */
2775#endif /* !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA64_) */
2776
2777#ifdef _IA64_
2778
2779#define EXCEPTION_READ_FAULT 0
2780#define EXCEPTION_WRITE_FAULT 1
2781#define EXCEPTION_EXECUTE_FAULT 2
2782
2783#if !defined(RC_INVOKED)
2784
2785#define CONTEXT_IA64 0x00080000
2786
2787#define CONTEXT_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000001))
2788#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000002))
2789#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | __MSABI_LONG(0x00000004))
2790#define CONTEXT_INTEGER (CONTEXT_IA64 | __MSABI_LONG(0x00000008))
2791#define CONTEXT_DEBUG (CONTEXT_IA64 | __MSABI_LONG(0x00000010))
2792#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | __MSABI_LONG(0x00000020))
2793
2794#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT)
2795#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
2796#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
2797
2798#define CONTEXT_EXCEPTION_ACTIVE 0x8000000
2799#define CONTEXT_SERVICE_ACTIVE 0x10000000
2800#define CONTEXT_EXCEPTION_REQUEST 0x40000000
2801#define CONTEXT_EXCEPTION_REPORTING 0x80000000
2802#endif /* !defined(RC_INVOKED) */
2803
2804 typedef struct _CONTEXT {
2805 DWORD ContextFlags;
2806 DWORD Fill1[3];
2807 ULONGLONG DbI0;
2808 ULONGLONG DbI1;
2809 ULONGLONG DbI2;
2810 ULONGLONG DbI3;
2811 ULONGLONG DbI4;
2812 ULONGLONG DbI5;
2813 ULONGLONG DbI6;
2814 ULONGLONG DbI7;
2815 ULONGLONG DbD0;
2816 ULONGLONG DbD1;
2817 ULONGLONG DbD2;
2818 ULONGLONG DbD3;
2819 ULONGLONG DbD4;
2820 ULONGLONG DbD5;
2821 ULONGLONG DbD6;
2822 ULONGLONG DbD7;
2823 FLOAT128 FltS0;
2824 FLOAT128 FltS1;
2825 FLOAT128 FltS2;
2826 FLOAT128 FltS3;
2827 FLOAT128 FltT0;
2828 FLOAT128 FltT1;
2829 FLOAT128 FltT2;
2830 FLOAT128 FltT3;
2831 FLOAT128 FltT4;
2832 FLOAT128 FltT5;
2833 FLOAT128 FltT6;
2834 FLOAT128 FltT7;
2835 FLOAT128 FltT8;
2836 FLOAT128 FltT9;
2837 FLOAT128 FltS4;
2838 FLOAT128 FltS5;
2839 FLOAT128 FltS6;
2840 FLOAT128 FltS7;
2841 FLOAT128 FltS8;
2842 FLOAT128 FltS9;
2843 FLOAT128 FltS10;
2844 FLOAT128 FltS11;
2845 FLOAT128 FltS12;
2846 FLOAT128 FltS13;
2847 FLOAT128 FltS14;
2848 FLOAT128 FltS15;
2849 FLOAT128 FltS16;
2850 FLOAT128 FltS17;
2851 FLOAT128 FltS18;
2852 FLOAT128 FltS19;
2853 FLOAT128 FltF32;
2854 FLOAT128 FltF33;
2855 FLOAT128 FltF34;
2856 FLOAT128 FltF35;
2857 FLOAT128 FltF36;
2858 FLOAT128 FltF37;
2859 FLOAT128 FltF38;
2860 FLOAT128 FltF39;
2861 FLOAT128 FltF40;
2862 FLOAT128 FltF41;
2863 FLOAT128 FltF42;
2864 FLOAT128 FltF43;
2865 FLOAT128 FltF44;
2866 FLOAT128 FltF45;
2867 FLOAT128 FltF46;
2868 FLOAT128 FltF47;
2869 FLOAT128 FltF48;
2870 FLOAT128 FltF49;
2871 FLOAT128 FltF50;
2872 FLOAT128 FltF51;
2873 FLOAT128 FltF52;
2874 FLOAT128 FltF53;
2875 FLOAT128 FltF54;
2876 FLOAT128 FltF55;
2877 FLOAT128 FltF56;
2878 FLOAT128 FltF57;
2879 FLOAT128 FltF58;
2880 FLOAT128 FltF59;
2881 FLOAT128 FltF60;
2882 FLOAT128 FltF61;
2883 FLOAT128 FltF62;
2884 FLOAT128 FltF63;
2885 FLOAT128 FltF64;
2886 FLOAT128 FltF65;
2887 FLOAT128 FltF66;
2888 FLOAT128 FltF67;
2889 FLOAT128 FltF68;
2890 FLOAT128 FltF69;
2891 FLOAT128 FltF70;
2892 FLOAT128 FltF71;
2893 FLOAT128 FltF72;
2894 FLOAT128 FltF73;
2895 FLOAT128 FltF74;
2896 FLOAT128 FltF75;
2897 FLOAT128 FltF76;
2898 FLOAT128 FltF77;
2899 FLOAT128 FltF78;
2900 FLOAT128 FltF79;
2901 FLOAT128 FltF80;
2902 FLOAT128 FltF81;
2903 FLOAT128 FltF82;
2904 FLOAT128 FltF83;
2905 FLOAT128 FltF84;
2906 FLOAT128 FltF85;
2907 FLOAT128 FltF86;
2908 FLOAT128 FltF87;
2909 FLOAT128 FltF88;
2910 FLOAT128 FltF89;
2911 FLOAT128 FltF90;
2912 FLOAT128 FltF91;
2913 FLOAT128 FltF92;
2914 FLOAT128 FltF93;
2915 FLOAT128 FltF94;
2916 FLOAT128 FltF95;
2917 FLOAT128 FltF96;
2918 FLOAT128 FltF97;
2919 FLOAT128 FltF98;
2920 FLOAT128 FltF99;
2921 FLOAT128 FltF100;
2922 FLOAT128 FltF101;
2923 FLOAT128 FltF102;
2924 FLOAT128 FltF103;
2925 FLOAT128 FltF104;
2926 FLOAT128 FltF105;
2927 FLOAT128 FltF106;
2928 FLOAT128 FltF107;
2929 FLOAT128 FltF108;
2930 FLOAT128 FltF109;
2931 FLOAT128 FltF110;
2932 FLOAT128 FltF111;
2933 FLOAT128 FltF112;
2934 FLOAT128 FltF113;
2935 FLOAT128 FltF114;
2936 FLOAT128 FltF115;
2937 FLOAT128 FltF116;
2938 FLOAT128 FltF117;
2939 FLOAT128 FltF118;
2940 FLOAT128 FltF119;
2941 FLOAT128 FltF120;
2942 FLOAT128 FltF121;
2943 FLOAT128 FltF122;
2944 FLOAT128 FltF123;
2945 FLOAT128 FltF124;
2946 FLOAT128 FltF125;
2947 FLOAT128 FltF126;
2948 FLOAT128 FltF127;
2949 ULONGLONG StFPSR;
2950 ULONGLONG IntGp;
2951 ULONGLONG IntT0;
2952 ULONGLONG IntT1;
2953 ULONGLONG IntS0;
2954 ULONGLONG IntS1;
2955 ULONGLONG IntS2;
2956 ULONGLONG IntS3;
2957 ULONGLONG IntV0;
2958 ULONGLONG IntT2;
2959 ULONGLONG IntT3;
2960 ULONGLONG IntT4;
2961 ULONGLONG IntSp;
2962 ULONGLONG IntTeb;
2963 ULONGLONG IntT5;
2964 ULONGLONG IntT6;
2965 ULONGLONG IntT7;
2966 ULONGLONG IntT8;
2967 ULONGLONG IntT9;
2968 ULONGLONG IntT10;
2969 ULONGLONG IntT11;
2970 ULONGLONG IntT12;
2971 ULONGLONG IntT13;
2972 ULONGLONG IntT14;
2973 ULONGLONG IntT15;
2974 ULONGLONG IntT16;
2975 ULONGLONG IntT17;
2976 ULONGLONG IntT18;
2977 ULONGLONG IntT19;
2978 ULONGLONG IntT20;
2979 ULONGLONG IntT21;
2980 ULONGLONG IntT22;
2981 ULONGLONG IntNats;
2982 ULONGLONG Preds;
2983 ULONGLONG BrRp;
2984 ULONGLONG BrS0;
2985 ULONGLONG BrS1;
2986 ULONGLONG BrS2;
2987 ULONGLONG BrS3;
2988 ULONGLONG BrS4;
2989 ULONGLONG BrT0;
2990 ULONGLONG BrT1;
2991 ULONGLONG ApUNAT;
2992 ULONGLONG ApLC;
2993 ULONGLONG ApEC;
2994 ULONGLONG ApCCV;
2995 ULONGLONG ApDCR;
2996 ULONGLONG RsPFS;
2997 ULONGLONG RsBSP;
2998 ULONGLONG RsBSPSTORE;
2999 ULONGLONG RsRSC;
3000 ULONGLONG RsRNAT;
3001 ULONGLONG StIPSR;
3002 ULONGLONG StIIP;
3003 ULONGLONG StIFS;
3004 ULONGLONG StFCR;
3005 ULONGLONG Eflag;
3006 ULONGLONG SegCSD;
3007 ULONGLONG SegSSD;
3008 ULONGLONG Cflag;
3009 ULONGLONG StFSR;
3010 ULONGLONG StFIR;
3011 ULONGLONG StFDR;
3012 ULONGLONG UNUSEDPACK;
3013 } CONTEXT,*PCONTEXT;
3014
3015 typedef struct _PLABEL_DESCRIPTOR {
3016 ULONGLONG EntryPoint;
3017 ULONGLONG GlobalPointer;
3018 } PLABEL_DESCRIPTOR,*PPLABEL_DESCRIPTOR;
3019
3020 typedef struct _RUNTIME_FUNCTION {
3021 DWORD BeginAddress;
3022 DWORD EndAddress;
3023 DWORD UnwindInfoAddress;
3024 } RUNTIME_FUNCTION,*PRUNTIME_FUNCTION;
3025
3026 typedef PRUNTIME_FUNCTION (*PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64 ControlPc,PVOID Context);
3027 typedef DWORD (*POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)(HANDLE Process,PVOID TableAddress,PDWORD Entries,PRUNTIME_FUNCTION *Functions);
3028
3029#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME "OutOfProcessFunctionTableCallback"
3030
3031 VOID __jump_unwind(ULONGLONG TargetMsFrame,ULONGLONG TargetBsFrame,ULONGLONG TargetPc);
3032#endif /* end of _IA64_ */
3033
3034/* http://www.nynaeve.net/?p=99 */
3035
3036#define EXCEPTION_NONCONTINUABLE 0x1
3037#define EXCEPTION_UNWINDING 0x2
3038#define EXCEPTION_EXIT_UNWIND 0x4
3039#define EXCEPTION_STACK_INVALID 0x8
3040#define EXCEPTION_NESTED_CALL 0x10
3041#define EXCEPTION_TARGET_UNWIND 0x20
3042#define EXCEPTION_COLLIDED_UNWIND 0x40
3043#define EXCEPTION_UNWIND 0x66
3044
3045#define IS_UNWINDING(f) ((f & EXCEPTION_UNWIND) != 0)
3046#define IS_DISPATCHING(f) ((f & EXCEPTION_UNWIND) == 0)
3047#define IS_TARGET_UNWIND(f) ((f & EXCEPTION_TARGET_UNWIND) != 0)
3048
3049#define EXCEPTION_MAXIMUM_PARAMETERS 15
3050
3051 typedef struct _EXCEPTION_RECORD {
3052 DWORD ExceptionCode;
3053 DWORD ExceptionFlags;
3054 struct _EXCEPTION_RECORD *ExceptionRecord;
3055 PVOID ExceptionAddress;
3056 DWORD NumberParameters;
3057 ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
3058 } EXCEPTION_RECORD;
3059
3060 typedef EXCEPTION_RECORD *PEXCEPTION_RECORD;
3061
3062 typedef struct _EXCEPTION_RECORD32 {
3063 DWORD ExceptionCode;
3064 DWORD ExceptionFlags;
3065 DWORD ExceptionRecord;
3066 DWORD ExceptionAddress;
3067 DWORD NumberParameters;
3068 DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
3069 } EXCEPTION_RECORD32,*PEXCEPTION_RECORD32;
3070
3071 typedef struct _EXCEPTION_RECORD64 {
3072 DWORD ExceptionCode;
3073 DWORD ExceptionFlags;
3074 DWORD64 ExceptionRecord;
3075 DWORD64 ExceptionAddress;
3076 DWORD NumberParameters;
3077 DWORD __unusedAlignment;
3078 DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
3079 } EXCEPTION_RECORD64,*PEXCEPTION_RECORD64;
3080
3081 typedef struct _EXCEPTION_POINTERS {
3082 PEXCEPTION_RECORD ExceptionRecord;
3083 PCONTEXT ContextRecord;
3084 } EXCEPTION_POINTERS,*PEXCEPTION_POINTERS;
3085
3086#ifdef __ia64__
3087 NTSYSAPI VOID NTAPI RtlUnwind2 (FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord);
3088#endif
3089
3090#ifdef __x86_64__
3091
3092#define UNWIND_HISTORY_TABLE_NONE 0
3093#define UNWIND_HISTORY_TABLE_GLOBAL 1
3094#define UNWIND_HISTORY_TABLE_LOCAL 2
3095
3096 /* http://msdn.microsoft.com/en-us/library/b6sf5kbd(VS.80).aspx */
3097
3098 struct _DISPATCHER_CONTEXT;
3099 typedef struct _DISPATCHER_CONTEXT DISPATCHER_CONTEXT;
3100 typedef struct _DISPATCHER_CONTEXT *PDISPATCHER_CONTEXT;
3101
3102 struct _DISPATCHER_CONTEXT {
3103 ULONG64 ControlPc;
3104 ULONG64 ImageBase;
3105 PRUNTIME_FUNCTION FunctionEntry;
3106 ULONG64 EstablisherFrame;
3107 ULONG64 TargetIp;
3108 PCONTEXT ContextRecord;
3109 PEXCEPTION_ROUTINE LanguageHandler;
3110 PVOID HandlerData;
3111 /* http://www.nynaeve.net/?p=99 */
3112 struct _UNWIND_HISTORY_TABLE *HistoryTable;
3113 ULONG ScopeIndex;
3114 ULONG Fill0;
3115 };
3116
3117#ifdef _ARM64EC_
3118 typedef struct _DISPATCHER_CONTEXT_ARM64EC {
3119 DWORD64 ControlPc;
3120 DWORD64 ImageBase;
3121 PRUNTIME_FUNCTION FunctionEntry;
3122 DWORD64 EstablisherFrame;
3123 union {
3124 DWORD64 TargetIp;
3125 DWORD64 TargetPc;
3126 } DUMMYUNIONNAME;
3127 PCONTEXT ContextRecord;
3128 PEXCEPTION_ROUTINE LanguageHandler;
3129 PVOID HandlerData;
3130 struct _UNWIND_HISTORY_TABLE *HistoryTable;
3131 DWORD ScopeIndex;
3132 BOOLEAN ControlPcIsUnwound;
3133 PBYTE NonVolatileRegisters;
3134 } DISPATCHER_CONTEXT_ARM64EC, *PDISPATCHER_CONTEXT_ARM64EC;
3135#endif /* _ARM64EC_ */
3136
3137 /* http://msdn.microsoft.com/en-us/library/ms680617(VS.85).aspx */
3138
3139 typedef struct _KNONVOLATILE_CONTEXT_POINTERS
3140 {
3141 PM128A FloatingContext[16];
3142 PULONG64 IntegerContext[16];
3143 } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
3144#endif /* defined(__x86_64__) */
3145
3146 typedef PVOID PACCESS_TOKEN;
3147 typedef PVOID PSECURITY_DESCRIPTOR;
3148 typedef PVOID PSID;
3149 typedef PVOID PCLAIMS_BLOB;
3150 typedef DWORD ACCESS_MASK;
3151 typedef ACCESS_MASK *PACCESS_MASK;
3152
3153#define DELETE (__MSABI_LONG(0x00010000))
3154#define READ_CONTROL (__MSABI_LONG(0x00020000))
3155#define WRITE_DAC (__MSABI_LONG(0x00040000))
3156#define WRITE_OWNER (__MSABI_LONG(0x00080000))
3157#define SYNCHRONIZE (__MSABI_LONG(0x00100000))
3158
3159#define STANDARD_RIGHTS_REQUIRED (__MSABI_LONG(0x000F0000))
3160
3161#define STANDARD_RIGHTS_READ (READ_CONTROL)
3162#define STANDARD_RIGHTS_WRITE (READ_CONTROL)
3163#define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
3164
3165#define STANDARD_RIGHTS_ALL (__MSABI_LONG(0x001F0000))
3166
3167#define SPECIFIC_RIGHTS_ALL (__MSABI_LONG(0x0000FFFF))
3168
3169#define ACCESS_SYSTEM_SECURITY (__MSABI_LONG(0x01000000))
3170#define MAXIMUM_ALLOWED (__MSABI_LONG(0x02000000))
3171
3172#define GENERIC_READ (__MSABI_LONG(0x80000000))
3173#define GENERIC_WRITE (__MSABI_LONG(0x40000000))
3174#define GENERIC_EXECUTE (__MSABI_LONG(0x20000000))
3175#define GENERIC_ALL (__MSABI_LONG(0x10000000))
3176
3177 typedef struct _GENERIC_MAPPING {
3178 ACCESS_MASK GenericRead;
3179 ACCESS_MASK GenericWrite;
3180 ACCESS_MASK GenericExecute;
3181 ACCESS_MASK GenericAll;
3182 } GENERIC_MAPPING;
3183 typedef GENERIC_MAPPING *PGENERIC_MAPPING;
3184
3185#include <pshpack4.h>
3186 typedef struct _LUID_AND_ATTRIBUTES {
3187 LUID Luid;
3188 DWORD Attributes;
3189 } LUID_AND_ATTRIBUTES,*PLUID_AND_ATTRIBUTES;
3190 typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
3191 typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
3192#include <poppack.h>
3193
3194#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
3195#define SID_IDENTIFIER_AUTHORITY_DEFINED
3196 typedef struct _SID_IDENTIFIER_AUTHORITY {
3197 BYTE Value[6];
3198 } SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
3199#endif /* SID_IDENTIFIER_AUTHORITY_DEFINED */
3200
3201#ifndef SID_DEFINED
3202#define SID_DEFINED
3203 typedef struct _SID {
3204 BYTE Revision;
3205 BYTE SubAuthorityCount;
3206 SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
3207 DWORD SubAuthority[ANYSIZE_ARRAY];
3208 } SID,*PISID;
3209#endif /* SID_DEFINED */
3210
3211#define SID_REVISION (1)
3212#define SID_MAX_SUB_AUTHORITIES (15)
3213#define SID_RECOMMENDED_SUB_AUTHORITIES (1)
3214#ifndef __WIDL__
3215#define SECURITY_MAX_SID_SIZE (sizeof (SID) - sizeof (DWORD) + (SID_MAX_SUB_AUTHORITIES *sizeof (DWORD)))
3216#endif
3217
3218#define SID_HASH_SIZE 32
3219
3220 typedef enum _SID_NAME_USE {
3221 SidTypeUser = 1,SidTypeGroup,SidTypeDomain,SidTypeAlias,SidTypeWellKnownGroup,SidTypeDeletedAccount,SidTypeInvalid,SidTypeUnknown,SidTypeComputer,SidTypeLabel,SidTypeLogonSession
3222 } SID_NAME_USE,*PSID_NAME_USE;
3223
3224 typedef struct _SID_AND_ATTRIBUTES {
3225#ifdef __WIDL__
3226 PISID Sid;
3227#else
3228 PSID Sid;
3229#endif
3230 DWORD Attributes;
3231 } SID_AND_ATTRIBUTES,*PSID_AND_ATTRIBUTES;
3232
3233 typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
3234 typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
3235
3236 typedef ULONG_PTR SID_HASH_ENTRY, *PSID_HASH_ENTRY;
3237
3238 typedef struct _SID_AND_ATTRIBUTES_HASH {
3239 DWORD SidCount;
3240 PSID_AND_ATTRIBUTES SidAttr;
3241 SID_HASH_ENTRY Hash[SID_HASH_SIZE];
3242 } SID_AND_ATTRIBUTES_HASH, *PSID_AND_ATTRIBUTES_HASH;
3243
3244 typedef struct _ATTRIBUTES_AND_SID {
3245 UINT32 Attributes;
3246 DWORD SidStart;
3247 } ATTRIBUTES_AND_SID, *PATTRIBUTES_AND_SID;
3248
3249#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
3250#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
3251#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
3252#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
3253#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
3254#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
3255
3256#define SECURITY_NULL_RID (__MSABI_LONG(0x00000000))
3257#define SECURITY_WORLD_RID (__MSABI_LONG(0x00000000))
3258#define SECURITY_LOCAL_RID (__MSABI_LONG(0x00000000))
3259#define SECURITY_LOCAL_LOGON_RID (__MSABI_LONG(0x00000001))
3260
3261#define SECURITY_CREATOR_OWNER_RID (__MSABI_LONG(0x00000000))
3262#define SECURITY_CREATOR_GROUP_RID (__MSABI_LONG(0x00000001))
3263#define SECURITY_CREATOR_OWNER_SERVER_RID (__MSABI_LONG(0x00000002))
3264#define SECURITY_CREATOR_GROUP_SERVER_RID (__MSABI_LONG(0x00000003))
3265#define SECURITY_CREATOR_OWNER_RIGHTS_RID (__MSABI_LONG(0x00000004))
3266
3267#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}
3268
3269#define SECURITY_DIALUP_RID (__MSABI_LONG(0x00000001))
3270#define SECURITY_NETWORK_RID (__MSABI_LONG(0x00000002))
3271#define SECURITY_BATCH_RID (__MSABI_LONG(0x00000003))
3272#define SECURITY_INTERACTIVE_RID (__MSABI_LONG(0x00000004))
3273#define SECURITY_LOGON_IDS_RID (__MSABI_LONG(0x00000005))
3274#define SECURITY_LOGON_IDS_RID_COUNT (__MSABI_LONG(3))
3275#define SECURITY_SERVICE_RID (__MSABI_LONG(0x00000006))
3276#define SECURITY_ANONYMOUS_LOGON_RID (__MSABI_LONG(0x00000007))
3277#define SECURITY_PROXY_RID (__MSABI_LONG(0x00000008))
3278#define SECURITY_ENTERPRISE_CONTROLLERS_RID (__MSABI_LONG(0x00000009))
3279#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
3280#define SECURITY_PRINCIPAL_SELF_RID (__MSABI_LONG(0x0000000A))
3281#define SECURITY_AUTHENTICATED_USER_RID (__MSABI_LONG(0x0000000B))
3282#define SECURITY_RESTRICTED_CODE_RID (__MSABI_LONG(0x0000000C))
3283#define SECURITY_TERMINAL_SERVER_RID (__MSABI_LONG(0x0000000D))
3284#define SECURITY_REMOTE_LOGON_RID (__MSABI_LONG(0x0000000E))
3285#define SECURITY_THIS_ORGANIZATION_RID (__MSABI_LONG(0x0000000F))
3286#define SECURITY_IUSER_RID (__MSABI_LONG(0x00000011))
3287#define SECURITY_LOCAL_SYSTEM_RID (__MSABI_LONG(0x00000012))
3288#define SECURITY_LOCAL_SERVICE_RID (__MSABI_LONG(0x00000013))
3289#define SECURITY_NETWORK_SERVICE_RID (__MSABI_LONG(0x00000014))
3290
3291#define SECURITY_NT_NON_UNIQUE (__MSABI_LONG(0x00000015))
3292#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (__MSABI_LONG(3))
3293
3294#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (__MSABI_LONG(0x00000016))
3295
3296#define SECURITY_BUILTIN_DOMAIN_RID (__MSABI_LONG(0x00000020))
3297#define SECURITY_WRITE_RESTRICTED_CODE_RID (__MSABI_LONG(0x00000021))
3298
3299#define SECURITY_PACKAGE_BASE_RID (__MSABI_LONG(0x00000040))
3300#define SECURITY_PACKAGE_RID_COUNT (__MSABI_LONG(2))
3301#define SECURITY_PACKAGE_NTLM_RID (__MSABI_LONG(0x0000000A))
3302#define SECURITY_PACKAGE_SCHANNEL_RID (__MSABI_LONG(0x0000000E))
3303#define SECURITY_PACKAGE_DIGEST_RID (__MSABI_LONG(0x00000015))
3304
3305#define SECURITY_CRED_TYPE_BASE_RID (__MSABI_LONG(0x00000041))
3306#define SECURITY_CRED_TYPE_RID_COUNT (__MSABI_LONG(2))
3307#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (__MSABI_LONG(0x00000001))
3308
3309#define SECURITY_MIN_BASE_RID (__MSABI_LONG(0x00000050))
3310
3311#define SECURITY_SERVICE_ID_BASE_RID (__MSABI_LONG(0x00000050))
3312#define SECURITY_SERVICE_ID_RID_COUNT (__MSABI_LONG(6))
3313
3314#define SECURITY_RESERVED_ID_BASE_RID (__MSABI_LONG(0x00000051))
3315
3316#define SECURITY_APPPOOL_ID_BASE_RID (__MSABI_LONG(0x00000052))
3317#define SECURITY_APPPOOL_ID_RID_COUNT (__MSABI_LONG(6))
3318
3319#define SECURITY_VIRTUALSERVER_ID_BASE_RID (__MSABI_LONG(0x00000053))
3320#define SECURITY_VIRTUALSERVER_ID_RID_COUNT (__MSABI_LONG(6))
3321
3322#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (__MSABI_LONG(0x00000054))
3323#define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (__MSABI_LONG(6))
3324
3325#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (__MSABI_LONG(0x00000055))
3326#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (__MSABI_LONG(6))
3327
3328#define SECURITY_WMIHOST_ID_BASE_RID (__MSABI_LONG(0x00000056))
3329#define SECURITY_WMIHOST_ID_RID_COUNT (__MSABI_LONG(6))
3330
3331#define SECURITY_TASK_ID_BASE_RID (__MSABI_LONG(0x00000057))
3332
3333#define SECURITY_NFS_ID_BASE_RID (__MSABI_LONG(0x00000058))
3334
3335#define SECURITY_COM_ID_BASE_RID (__MSABI_LONG(0x00000059))
3336
3337#define SECURITY_WINDOW_MANAGER_BASE_RID (__MSABI_LONG(0x0000005a))
3338
3339#define SECURITY_RDV_GFX_BASE_RID (__MSABI_LONG(0x0000005b))
3340
3341#define SECURITY_DASHOST_ID_BASE_RID (__MSABI_LONG(0x0000005c))
3342#define SECURITY_DASHOST_ID_RID_COUNT (__MSABI_LONG(6))
3343
3344#define SECURITY_USERMANAGER_ID_BASE_RID (__MSABI_LONG(0x0000005d))
3345#define SECURITY_USERMANAGER_ID_RID_COUNT (__MSABI_LONG(6))
3346
3347#define SECURITY_WINRM_ID_BASE_RID (__MSABI_LONG(0x0000005e))
3348#define SECURITY_WINRM_ID_RID_COUNT (__MSABI_LONG(6))
3349
3350#define SECURITY_CCG_ID_BASE_RID (__MSABI_LONG(0x0000005f))
3351#define SECURITY_UMFD_BASE_RID (__MSABI_LONG(0x00000060))
3352#define SECURITY_UNIQUIFIED_SERVICE_BASE_RID (__MSABI_LONG(0x00000061))
3353
3354#define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (__MSABI_LONG(6))
3355
3356#define SECURITY_EDGE_CLOUD_INFRASTRUCTURE_SERVICE_ID_BASE_RID (__MSABI_LONG(0x00000062))
3357
3358#define SECURITY_RESTRICTED_SERVICES_BASE_RID (__MSABI_LONG(0x00000063))
3359#define SECURITY_RESTRICTED_SERVICES_RID_COUNT (__MSABI_LONG(6))
3360
3361#define SECURITY_MAX_BASE_RID (__MSABI_LONG(0x0000006f))
3362
3363#define SECURITY_MAX_ALWAYS_FILTERED (__MSABI_LONG(0x000003E7))
3364#define SECURITY_MIN_NEVER_FILTERED (__MSABI_LONG(0x000003E8))
3365
3366#define SECURITY_OTHER_ORGANIZATION_RID (__MSABI_LONG(0x000003E8))
3367
3368#define SECURITY_WINDOWSMOBILE_ID_BASE_RID (__MSABI_LONG(0x00000070))
3369
3370#define SECURITY_INSTALLER_GROUP_CAPABILITY_BASE (0x20)
3371#define SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT (9)
3372
3373#define SECURITY_INSTALLER_CAPABILITY_RID_COUNT (10)
3374
3375#define SECURITY_LOCAL_ACCOUNT_RID (__MSABI_LONG(0x00000071))
3376#define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID (__MSABI_LONG(0x00000072))
3377
3378#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED (__MSABI_LONG(0x000001f0))
3379#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS (__MSABI_LONG(0x000001f1))
3380#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (__MSABI_LONG(0x000001f2))
3381
3382#define FOREST_USER_RID_MAX (__MSABI_LONG(0x000001F3))
3383
3384#define DOMAIN_USER_RID_ADMIN (__MSABI_LONG(0x000001F4))
3385#define DOMAIN_USER_RID_GUEST (__MSABI_LONG(0x000001F5))
3386#define DOMAIN_USER_RID_KRBTGT (__MSABI_LONG(0x000001F6))
3387#define DOMAIN_USER_RID_DEFAULT_ACCOUNT (__MSABI_LONG(0x000001F7))
3388#define DOMAIN_USER_RID_WDAG_ACCOUNT (__MSABI_LONG(0x000001F8))
3389
3390#define DOMAIN_USER_RID_MAX (__MSABI_LONG(0x000003E7))
3391
3392#define DOMAIN_GROUP_RID_ADMINS (__MSABI_LONG(0x00000200))
3393#define DOMAIN_GROUP_RID_USERS (__MSABI_LONG(0x00000201))
3394#define DOMAIN_GROUP_RID_GUESTS (__MSABI_LONG(0x00000202))
3395#define DOMAIN_GROUP_RID_COMPUTERS (__MSABI_LONG(0x00000203))
3396#define DOMAIN_GROUP_RID_CONTROLLERS (__MSABI_LONG(0x00000204))
3397#define DOMAIN_GROUP_RID_CERT_ADMINS (__MSABI_LONG(0x00000205))
3398#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (__MSABI_LONG(0x00000206))
3399#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (__MSABI_LONG(0x00000207))
3400#define DOMAIN_GROUP_RID_POLICY_ADMINS (__MSABI_LONG(0x00000208))
3401#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (__MSABI_LONG(0x00000209))
3402#define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS (__MSABI_LONG(0x0000020a))
3403#define DOMAIN_GROUP_RID_CDC_RESERVED (__MSABI_LONG(0x0000020c))
3404#define DOMAIN_GROUP_RID_PROTECTED_USERS (__MSABI_LONG(0x0000020d))
3405#define DOMAIN_GROUP_RID_KEY_ADMINS (__MSABI_LONG(0x0000020e))
3406#define DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS (__MSABI_LONG(0x0000020f))
3407#define DOMAIN_GROUP_RID_FOREST_TRUSTS (__MSABI_LONG(0x00000210))
3408#define DOMAIN_GROUP_RID_EXTERNAL_TRUSTS (__MSABI_LONG(0x00000211))
3409
3410#define DOMAIN_ALIAS_RID_ADMINS (__MSABI_LONG(0x00000220))
3411#define DOMAIN_ALIAS_RID_USERS (__MSABI_LONG(0x00000221))
3412#define DOMAIN_ALIAS_RID_GUESTS (__MSABI_LONG(0x00000222))
3413#define DOMAIN_ALIAS_RID_POWER_USERS (__MSABI_LONG(0x00000223))
3414
3415#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (__MSABI_LONG(0x00000224))
3416#define DOMAIN_ALIAS_RID_SYSTEM_OPS (__MSABI_LONG(0x00000225))
3417#define DOMAIN_ALIAS_RID_PRINT_OPS (__MSABI_LONG(0x00000226))
3418#define DOMAIN_ALIAS_RID_BACKUP_OPS (__MSABI_LONG(0x00000227))
3419
3420#define DOMAIN_ALIAS_RID_REPLICATOR (__MSABI_LONG(0x00000228))
3421#define DOMAIN_ALIAS_RID_RAS_SERVERS (__MSABI_LONG(0x00000229))
3422#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (__MSABI_LONG(0x0000022A))
3423#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (__MSABI_LONG(0x0000022B))
3424#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (__MSABI_LONG(0x0000022C))
3425#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (__MSABI_LONG(0x0000022D))
3426
3427#define DOMAIN_ALIAS_RID_MONITORING_USERS (__MSABI_LONG(0x0000022E))
3428#define DOMAIN_ALIAS_RID_LOGGING_USERS (__MSABI_LONG(0x0000022F))
3429#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (__MSABI_LONG(0x00000230))
3430#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (__MSABI_LONG(0x00000231))
3431#define DOMAIN_ALIAS_RID_DCOM_USERS (__MSABI_LONG(0x00000232))
3432
3433#define DOMAIN_ALIAS_RID_IUSERS (__MSABI_LONG(0x00000238))
3434#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (__MSABI_LONG(0x00000239))
3435#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023B))
3436#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (__MSABI_LONG(0x0000023C))
3437#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (__MSABI_LONG(0x0000023D))
3438#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (__MSABI_LONG(0x0000023e))
3439#define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS (__MSABI_LONG(0x0000023f))
3440#define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS (__MSABI_LONG(0x00000240))
3441#define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS (__MSABI_LONG(0x00000241))
3442#define DOMAIN_ALIAS_RID_HYPER_V_ADMINS (__MSABI_LONG(0x00000242))
3443#define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS (__MSABI_LONG(0x00000243))
3444#define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS (__MSABI_LONG(0x00000244))
3445#define DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT (__MSABI_LONG(0x00000245))
3446#define DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS (__MSABI_LONG(0x00000246))
3447#define DOMAIN_ALIAS_RID_DEVICE_OWNERS (__MSABI_LONG(0x00000247))
3448#define DOMAIN_ALIAS_RID_USER_MODE_HARDWARE_OPERATORS (__MSABI_LONG(0x00000248))
3449#define DOMAIN_ALIAS_RID_OPENSSH_USERS (__MSABI_LONG(0x00000249))
3450
3451#define SECURITY_APP_PACKAGE_AUTHORITY {0, 0, 0, 0, 0, 15}
3452
3453#define SECURITY_APP_PACKAGE_BASE_RID (__MSABI_LONG(0x00000002))
3454#define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT (__MSABI_LONG(2))
3455#define SECURITY_APP_PACKAGE_RID_COUNT (__MSABI_LONG(8))
3456#define SECURITY_CAPABILITY_BASE_RID (__MSABI_LONG(0x00000003))
3457#define SECURITY_CAPABILITY_APP_RID (__MSABI_LONG(0x000000400))
3458#define SECURITY_CAPABILITY_APP_SILO_RID (__MSABI_LONG(0x00010000))
3459#define SECURITY_BUILTIN_CAPABILITY_RID_COUNT (__MSABI_LONG(2))
3460#define SECURITY_CAPABILITY_RID_COUNT (__MSABI_LONG(5))
3461#define SECURITY_PARENT_PACKAGE_RID_COUNT (SECURITY_APP_PACKAGE_RID_COUNT)
3462#define SECURITY_CHILD_PACKAGE_RID_COUNT (__MSABI_LONG(12))
3463
3464#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE (__MSABI_LONG(0x00000001))
3465#define SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE (__MSABI_LONG(0x00000002))
3466
3467#define SECURITY_CAPABILITY_INTERNET_CLIENT (__MSABI_LONG(0x00000001))
3468#define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER (__MSABI_LONG(0x00000002))
3469#define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER (__MSABI_LONG(0x00000003))
3470#define SECURITY_CAPABILITY_PICTURES_LIBRARY (__MSABI_LONG(0x00000004))
3471#define SECURITY_CAPABILITY_VIDEOS_LIBRARY (__MSABI_LONG(0x00000005))
3472#define SECURITY_CAPABILITY_MUSIC_LIBRARY (__MSABI_LONG(0x00000006))
3473#define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY (__MSABI_LONG(0x00000007))
3474#define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION (__MSABI_LONG(0x00000008))
3475#define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES (__MSABI_LONG(0x00000009))
3476#define SECURITY_CAPABILITY_REMOVABLE_STORAGE (__MSABI_LONG(0x0000000a))
3477#define SECURITY_CAPABILITY_APPOINTMENTS (__MSABI_LONG(0x0000000b))
3478#define SECURITY_CAPABILITY_CONTACTS (__MSABI_LONG(0x0000000c))
3479#define SECURITY_CAPABILITY_INTERNET_EXPLORER (__MSABI_LONG(0x00001000))
3480
3481
3482
3483#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
3484#define SECURITY_MANDATORY_UNTRUSTED_RID (__MSABI_LONG(0x00000000))
3485#define SECURITY_MANDATORY_LOW_RID (__MSABI_LONG(0x00001000))
3486#define SECURITY_MANDATORY_MEDIUM_RID (__MSABI_LONG(0x00002000))
3487#define SECURITY_MANDATORY_MEDIUM_PLUS_RID (SECURITY_MANDATORY_MEDIUM_RID + 0x100)
3488#define SECURITY_MANDATORY_HIGH_RID (__MSABI_LONG(0x00003000))
3489#define SECURITY_MANDATORY_SYSTEM_RID (__MSABI_LONG(0x00004000))
3490#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (__MSABI_LONG(0x00005000))
3491
3492#define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
3493
3494#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
3495
3496#define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0, 0, 0, 0, 0, 17}
3497
3498#define SECURITY_AUTHENTICATION_AUTHORITY {0, 0, 0, 0, 0, 18}
3499#define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT (__MSABI_LONG(1))
3500#define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (__MSABI_LONG(0x00000001))
3501#define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID (__MSABI_LONG(0x00000002))
3502#define SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID (__MSABI_LONG(0x00000003))
3503#define SECURITY_AUTHENTICATION_KEY_TRUST_RID (__MSABI_LONG(0x00000004))
3504#define SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID (__MSABI_LONG(0x00000005))
3505#define SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID (__MSABI_LONG(0x00000006))
3506
3507#define SECURITY_PROCESS_TRUST_AUTHORITY {0,0,0,0,0,19}
3508#define SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT (__MSABI_LONG(2))
3509
3510#define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID (__MSABI_LONG(0x00000400))
3511#define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID (__MSABI_LONG(0x00000200))
3512#define SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID (__MSABI_LONG(0x00000000))
3513
3514#define SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID (__MSABI_LONG(0x00002000))
3515#define SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID (__MSABI_LONG(0x00001000))
3516#define SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID (__MSABI_LONG(0x00000800))
3517#define SECURITY_PROCESS_PROTECTION_LEVEL_ANTIMALWARE_RID (__MSABI_LONG(0x00000600))
3518#define SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID (__MSABI_LONG(0x00000400))
3519#define SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID (__MSABI_LONG(0x00000000))
3520
3521#define SECURITY_TRUSTED_INSTALLER_RID1 956008885
3522#define SECURITY_TRUSTED_INSTALLER_RID2 3418522649
3523#define SECURITY_TRUSTED_INSTALLER_RID3 1831038044
3524#define SECURITY_TRUSTED_INSTALLER_RID4 1853292631
3525#define SECURITY_TRUSTED_INSTALLER_RID5 2271478464
3526
3527 typedef enum {
3528 WinNullSid = 0,WinWorldSid = 1,WinLocalSid = 2,WinCreatorOwnerSid = 3,
3529 WinCreatorGroupSid = 4,WinCreatorOwnerServerSid = 5,
3530 WinCreatorGroupServerSid = 6,WinNtAuthoritySid = 7,WinDialupSid = 8,
3531 WinNetworkSid = 9,WinBatchSid = 10,WinInteractiveSid = 11,
3532 WinServiceSid = 12,WinAnonymousSid = 13,WinProxySid = 14,
3533 WinEnterpriseControllersSid = 15,WinSelfSid = 16,
3534 WinAuthenticatedUserSid = 17,WinRestrictedCodeSid = 18,
3535 WinTerminalServerSid = 19,WinRemoteLogonIdSid = 20,WinLogonIdsSid = 21,
3536 WinLocalSystemSid = 22,WinLocalServiceSid = 23,WinNetworkServiceSid = 24,
3537 WinBuiltinDomainSid = 25,WinBuiltinAdministratorsSid = 26,
3538 WinBuiltinUsersSid = 27,WinBuiltinGuestsSid = 28,
3539 WinBuiltinPowerUsersSid = 29,WinBuiltinAccountOperatorsSid = 30,
3540 WinBuiltinSystemOperatorsSid = 31,WinBuiltinPrintOperatorsSid = 32,
3541 WinBuiltinBackupOperatorsSid = 33,WinBuiltinReplicatorSid = 34,
3542 WinBuiltinPreWindows2000CompatibleAccessSid = 35,
3543 WinBuiltinRemoteDesktopUsersSid = 36,
3544 WinBuiltinNetworkConfigurationOperatorsSid = 37,
3545 WinAccountAdministratorSid = 38,WinAccountGuestSid = 39,
3546 WinAccountKrbtgtSid = 40,WinAccountDomainAdminsSid = 41,
3547 WinAccountDomainUsersSid = 42,WinAccountDomainGuestsSid = 43,
3548 WinAccountComputersSid = 44,WinAccountControllersSid = 45,
3549 WinAccountCertAdminsSid = 46,WinAccountSchemaAdminsSid = 47,
3550 WinAccountEnterpriseAdminsSid = 48,WinAccountPolicyAdminsSid = 49,
3551 WinAccountRasAndIasServersSid = 50,WinNTLMAuthenticationSid = 51,
3552 WinDigestAuthenticationSid = 52,WinSChannelAuthenticationSid = 53,
3553 WinThisOrganizationSid = 54,WinOtherOrganizationSid = 55,
3554 WinBuiltinIncomingForestTrustBuildersSid = 56,
3555 WinBuiltinPerfMonitoringUsersSid = 57,WinBuiltinPerfLoggingUsersSid = 58,
3556 WinBuiltinAuthorizationAccessSid = 59,
3557 WinBuiltinTerminalServerLicenseServersSid = 60,
3558 WinBuiltinDCOMUsersSid = 61,WinBuiltinIUsersSid = 62,
3559 WinIUserSid = 63, WinBuiltinCryptoOperatorsSid = 64,
3560 WinUntrustedLabelSid = 65, WinLowLabelSid = 66, WinMediumLabelSid = 67,
3561 WinHighLabelSid = 68, WinSystemLabelSid = 69, WinWriteRestrictedCodeSid = 70,
3562 WinCreatorOwnerRightsSid = 71, WinCacheablePrincipalsGroupSid = 72,
3563 WinNonCacheablePrincipalsGroupSid = 73, WinEnterpriseReadonlyControllersSid = 74,
3564 WinAccountReadonlyControllersSid = 75, WinBuiltinEventLogReadersGroup = 76,
3565 WinNewEnterpriseReadonlyControllersSid = 77, WinBuiltinCertSvcDComAccessGroup = 78,
3566 WinMediumPlusLabelSid = 79, WinLocalLogonSid = 80, WinConsoleLogonSid = 81,
3567 WinThisOrganizationCertificateSid = 82, WinApplicationPackageAuthoritySid = 83,
3568 WinBuiltinAnyPackageSid = 84, WinCapabilityInternetClientSid = 85,
3569 WinCapabilityInternetClientServerSid = 86,
3570 WinCapabilityPrivateNetworkClientServerSid = 87,
3571 WinCapabilityPicturesLibrarySid = 88, WinCapabilityVideosLibrarySid = 89,
3572 WinCapabilityMusicLibrarySid = 90, WinCapabilityDocumentsLibrarySid = 91,
3573 WinCapabilitySharedUserCertificatesSid = 92, WinCapabilityEnterpriseAuthenticationSid = 93,
3574 WinCapabilityRemovableStorageSid = 94, WinBuiltinRDSRemoteAccessServersSid = 95,
3575 WinBuiltinRDSEndpointServersSid = 96, WinBuiltinRDSManagementServersSid = 97,
3576 WinUserModeDriversSid = 98, WinBuiltinHyperVAdminsSid = 99,
3577 WinAccountCloneableControllersSid = 100,
3578 WinBuiltinAccessControlAssistanceOperatorsSid = 101,
3579 WinBuiltinRemoteManagementUsersSid = 102, WinAuthenticationAuthorityAssertedSid = 103,
3580 WinAuthenticationServiceAssertedSid = 104,
3581 WinLocalAccountSid = 105,
3582 WinLocalAccountAndAdministratorSid = 106,
3583 WinAccountProtectedUsersSid = 107,
3584 WinCapabilityAppointmentsSid = 108,
3585 WinCapabilityContactsSid = 109,
3586 WinAccountDefaultSystemManagedSid = 110,
3587 WinBuiltinDefaultSystemManagedGroupSid = 111,
3588 WinBuiltinStorageReplicaAdminsSid = 112,
3589 WinAccountKeyAdminsSid = 113,
3590 WinAccountEnterpriseKeyAdminsSid = 114,
3591 WinAuthenticationKeyTrustSid = 115,
3592 WinAuthenticationKeyPropertyMFASid = 116,
3593 WinAuthenticationKeyPropertyAttestationSid = 117,
3594 WinAuthenticationFreshKeyAuthSid = 118,
3595 WinBuiltinDeviceOwnersSid = 119,
3596 WinBuiltinUserModeHardwareOperatorsSid = 120,
3597 WinBuiltinOpenSSHUsersSid = 121
3598} WELL_KNOWN_SID_TYPE;
3599
3600#define SYSTEM_LUID { 0x3e7, 0x0 }
3601#define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
3602#define LOCALSERVICE_LUID { 0x3e5, 0x0 }
3603#define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
3604#define IUSER_LUID { 0x3e3, 0x0 }
3605#define PROTECTED_TO_SYSTEM_LUID { 0x3e2, 0x0 }
3606
3607#define SE_GROUP_MANDATORY (__MSABI_LONG(0x00000001))
3608#define SE_GROUP_ENABLED_BY_DEFAULT (__MSABI_LONG(0x00000002))
3609#define SE_GROUP_ENABLED (__MSABI_LONG(0x00000004))
3610#define SE_GROUP_OWNER (__MSABI_LONG(0x00000008))
3611#define SE_GROUP_USE_FOR_DENY_ONLY (__MSABI_LONG(0x00000010))
3612#define SE_GROUP_INTEGRITY (__MSABI_LONG(0x00000020))
3613#define SE_GROUP_INTEGRITY_ENABLED (__MSABI_LONG(0x00000040))
3614#define SE_GROUP_LOGON_ID (__MSABI_LONG(0xC0000000))
3615#define SE_GROUP_RESOURCE (__MSABI_LONG(0x20000000))
3616
3617#define SE_GROUP_VALID_ATTRIBUTES (SE_GROUP_MANDATORY | SE_GROUP_ENABLED_BY_DEFAULT | SE_GROUP_ENABLED | SE_GROUP_OWNER | SE_GROUP_USE_FOR_DENY_ONLY | SE_GROUP_LOGON_ID | SE_GROUP_RESOURCE | SE_GROUP_INTEGRITY | SE_GROUP_INTEGRITY_ENABLED)
3618
3619#define ACL_REVISION (2)
3620#define ACL_REVISION_DS (4)
3621
3622#define ACL_REVISION1 (1)
3623#define MIN_ACL_REVISION ACL_REVISION2
3624#define ACL_REVISION2 (2)
3625#define ACL_REVISION3 (3)
3626#define ACL_REVISION4 (4)
3627#define MAX_ACL_REVISION ACL_REVISION4
3628
3629 typedef struct _ACL {
3630 BYTE AclRevision;
3631 BYTE Sbz1;
3632 WORD AclSize;
3633 WORD AceCount;
3634 WORD Sbz2;
3635 } ACL;
3636 typedef ACL *PACL;
3637
3638 typedef struct _ACE_HEADER {
3639 BYTE AceType;
3640 BYTE AceFlags;
3641 WORD AceSize;
3642 } ACE_HEADER;
3643 typedef ACE_HEADER *PACE_HEADER;
3644
3645#define ACCESS_MIN_MS_ACE_TYPE (0x0)
3646#define ACCESS_ALLOWED_ACE_TYPE (0x0)
3647#define ACCESS_DENIED_ACE_TYPE (0x1)
3648#define SYSTEM_AUDIT_ACE_TYPE (0x2)
3649#define SYSTEM_ALARM_ACE_TYPE (0x3)
3650#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
3651
3652#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
3653#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
3654
3655#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
3656#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
3657#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
3658#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
3659#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
3660#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
3661
3662#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
3663#define ACCESS_MAX_MS_ACE_TYPE (0x8)
3664
3665#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
3666#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
3667#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
3668#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
3669#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
3670#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
3671#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
3672#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
3673
3674#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
3675#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE (0x12)
3676#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE (0x13)
3677#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE (0x14)
3678#define SYSTEM_ACCESS_FILTER_ACE_TYPE (0x15)
3679#define ACCESS_MAX_MS_V5_ACE_TYPE (0x15)
3680
3681#define OBJECT_INHERIT_ACE (0x1)
3682#define CONTAINER_INHERIT_ACE (0x2)
3683#define NO_PROPAGATE_INHERIT_ACE (0x4)
3684#define INHERIT_ONLY_ACE (0x8)
3685#define INHERITED_ACE (0x10)
3686#define VALID_INHERIT_FLAGS (0x1F)
3687#define CRITICAL_ACE_FLAG (0x20)
3688
3689#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
3690#define FAILED_ACCESS_ACE_FLAG (0x80)
3691#define TRUST_PROTECTED_FILTER_ACE_FLAG (0x40)
3692
3693 typedef struct _ACCESS_ALLOWED_ACE {
3694 ACE_HEADER Header;
3695 ACCESS_MASK Mask;
3696 DWORD SidStart;
3697 } ACCESS_ALLOWED_ACE;
3698
3699 typedef ACCESS_ALLOWED_ACE *PACCESS_ALLOWED_ACE;
3700
3701 typedef struct _ACCESS_DENIED_ACE {
3702 ACE_HEADER Header;
3703 ACCESS_MASK Mask;
3704 DWORD SidStart;
3705 } ACCESS_DENIED_ACE;
3706 typedef ACCESS_DENIED_ACE *PACCESS_DENIED_ACE;
3707
3708 typedef struct _SYSTEM_AUDIT_ACE {
3709 ACE_HEADER Header;
3710 ACCESS_MASK Mask;
3711 DWORD SidStart;
3712 } SYSTEM_AUDIT_ACE;
3713 typedef SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE;
3714
3715 typedef struct _SYSTEM_ALARM_ACE {
3716 ACE_HEADER Header;
3717 ACCESS_MASK Mask;
3718 DWORD SidStart;
3719 } SYSTEM_ALARM_ACE;
3720 typedef SYSTEM_ALARM_ACE *PSYSTEM_ALARM_ACE;
3721
3722 typedef struct _SYSTEM_RESOURCE_ATTRIBUTE_ACE {
3723 ACE_HEADER Header;
3724 ACCESS_MASK Mask;
3725 DWORD SidStart;
3726 } SYSTEM_RESOURCE_ATTRIBUTE_ACE,*PSYSTEM_RESOURCE_ATTRIBUTE_ACE;
3727
3728 typedef struct _SYSTEM_SCOPED_POLICY_ID_ACE {
3729 ACE_HEADER Header;
3730 ACCESS_MASK Mask;
3731 DWORD SidStart;
3732 } SYSTEM_SCOPED_POLICY_ID_ACE,*PSYSTEM_SCOPED_POLICY_ID_ACE;
3733
3734 typedef struct _SYSTEM_MANDATORY_LABEL_ACE {
3735 ACE_HEADER Header;
3736 ACCESS_MASK Mask;
3737 DWORD SidStart;
3738 } SYSTEM_MANDATORY_LABEL_ACE, *PSYSTEM_MANDATORY_LABEL_ACE;
3739
3740 typedef struct _SYSTEM_PROCESS_TRUST_LABEL_ACE {
3741 ACE_HEADER Header;
3742 ACCESS_MASK Mask;
3743 DWORD SidStart;
3744 } SYSTEM_PROCESS_TRUST_LABEL_ACE, *PSYSTEM_PROCESS_TRUST_LABEL_ACE;
3745
3746 typedef struct _SYSTEM_ACCESS_FILTER_ACE {
3747 ACE_HEADER Header;
3748 ACCESS_MASK Mask;
3749 DWORD SidStart;
3750 } SYSTEM_ACCESS_FILTER_ACE, *PSYSTEM_ACCESS_FILTER_ACE;
3751
3752#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
3753#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
3754#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
3755
3756#define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | SYSTEM_MANDATORY_LABEL_NO_READ_UP | SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
3757
3758#define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0x00ffffff
3759#define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff
3760#define SYSTEM_ACCESS_FILTER_VALID_MASK 0x00ffffff
3761#define SYSTEM_ACCESS_FILTER_NOCONSTRAINT_MASK 0xffffffff
3762
3763 typedef struct _ACCESS_ALLOWED_OBJECT_ACE {
3764 ACE_HEADER Header;
3765 ACCESS_MASK Mask;
3766 DWORD Flags;
3767 GUID ObjectType;
3768 GUID InheritedObjectType;
3769 DWORD SidStart;
3770 } ACCESS_ALLOWED_OBJECT_ACE,*PACCESS_ALLOWED_OBJECT_ACE;
3771
3772 typedef struct _ACCESS_DENIED_OBJECT_ACE {
3773 ACE_HEADER Header;
3774 ACCESS_MASK Mask;
3775 DWORD Flags;
3776 GUID ObjectType;
3777 GUID InheritedObjectType;
3778 DWORD SidStart;
3779 } ACCESS_DENIED_OBJECT_ACE,*PACCESS_DENIED_OBJECT_ACE;
3780
3781 typedef struct _SYSTEM_AUDIT_OBJECT_ACE {
3782 ACE_HEADER Header;
3783 ACCESS_MASK Mask;
3784 DWORD Flags;
3785 GUID ObjectType;
3786 GUID InheritedObjectType;
3787 DWORD SidStart;
3788 } SYSTEM_AUDIT_OBJECT_ACE,*PSYSTEM_AUDIT_OBJECT_ACE;
3789
3790 typedef struct _SYSTEM_ALARM_OBJECT_ACE {
3791 ACE_HEADER Header;
3792 ACCESS_MASK Mask;
3793 DWORD Flags;
3794 GUID ObjectType;
3795 GUID InheritedObjectType;
3796 DWORD SidStart;
3797 } SYSTEM_ALARM_OBJECT_ACE,*PSYSTEM_ALARM_OBJECT_ACE;
3798
3799 typedef struct _ACCESS_ALLOWED_CALLBACK_ACE {
3800 ACE_HEADER Header;
3801 ACCESS_MASK Mask;
3802 DWORD SidStart;
3803 } ACCESS_ALLOWED_CALLBACK_ACE,*PACCESS_ALLOWED_CALLBACK_ACE;
3804
3805 typedef struct _ACCESS_DENIED_CALLBACK_ACE {
3806 ACE_HEADER Header;
3807 ACCESS_MASK Mask;
3808 DWORD SidStart;
3809 } ACCESS_DENIED_CALLBACK_ACE,*PACCESS_DENIED_CALLBACK_ACE;
3810
3811 typedef struct _SYSTEM_AUDIT_CALLBACK_ACE {
3812 ACE_HEADER Header;
3813 ACCESS_MASK Mask;
3814 DWORD SidStart;
3815 } SYSTEM_AUDIT_CALLBACK_ACE,*PSYSTEM_AUDIT_CALLBACK_ACE;
3816
3817 typedef struct _SYSTEM_ALARM_CALLBACK_ACE {
3818 ACE_HEADER Header;
3819 ACCESS_MASK Mask;
3820 DWORD SidStart;
3821 } SYSTEM_ALARM_CALLBACK_ACE,*PSYSTEM_ALARM_CALLBACK_ACE;
3822
3823 typedef struct _ACCESS_ALLOWED_CALLBACK_OBJECT_ACE {
3824 ACE_HEADER Header;
3825 ACCESS_MASK Mask;
3826 DWORD Flags;
3827 GUID ObjectType;
3828 GUID InheritedObjectType;
3829 DWORD SidStart;
3830
3831 } ACCESS_ALLOWED_CALLBACK_OBJECT_ACE,*PACCESS_ALLOWED_CALLBACK_OBJECT_ACE;
3832
3833 typedef struct _ACCESS_DENIED_CALLBACK_OBJECT_ACE {
3834 ACE_HEADER Header;
3835 ACCESS_MASK Mask;
3836 DWORD Flags;
3837 GUID ObjectType;
3838 GUID InheritedObjectType;
3839 DWORD SidStart;
3840 } ACCESS_DENIED_CALLBACK_OBJECT_ACE,*PACCESS_DENIED_CALLBACK_OBJECT_ACE;
3841
3842 typedef struct _SYSTEM_AUDIT_CALLBACK_OBJECT_ACE {
3843 ACE_HEADER Header;
3844 ACCESS_MASK Mask;
3845 DWORD Flags;
3846 GUID ObjectType;
3847 GUID InheritedObjectType;
3848 DWORD SidStart;
3849 } SYSTEM_AUDIT_CALLBACK_OBJECT_ACE,*PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE;
3850
3851 typedef struct _SYSTEM_ALARM_CALLBACK_OBJECT_ACE {
3852 ACE_HEADER Header;
3853 ACCESS_MASK Mask;
3854 DWORD Flags;
3855 GUID ObjectType;
3856 GUID InheritedObjectType;
3857 DWORD SidStart;
3858
3859 } SYSTEM_ALARM_CALLBACK_OBJECT_ACE,*PSYSTEM_ALARM_CALLBACK_OBJECT_ACE;
3860
3861#define ACE_OBJECT_TYPE_PRESENT 0x1
3862#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
3863
3864 typedef enum _ACL_INFORMATION_CLASS {
3865 AclRevisionInformation = 1,AclSizeInformation
3866 } ACL_INFORMATION_CLASS;
3867
3868 typedef struct _ACL_REVISION_INFORMATION {
3869 DWORD AclRevision;
3870 } ACL_REVISION_INFORMATION;
3871 typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
3872
3873 typedef struct _ACL_SIZE_INFORMATION {
3874 DWORD AceCount;
3875 DWORD AclBytesInUse;
3876 DWORD AclBytesFree;
3877 } ACL_SIZE_INFORMATION;
3878 typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
3879
3880#define SECURITY_DESCRIPTOR_REVISION (1)
3881#define SECURITY_DESCRIPTOR_REVISION1 (1)
3882
3883#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
3884
3885 typedef WORD SECURITY_DESCRIPTOR_CONTROL,*PSECURITY_DESCRIPTOR_CONTROL;
3886
3887#define SE_OWNER_DEFAULTED (0x0001)
3888#define SE_GROUP_DEFAULTED (0x0002)
3889#define SE_DACL_PRESENT (0x0004)
3890#define SE_DACL_DEFAULTED (0x0008)
3891#define SE_SACL_PRESENT (0x0010)
3892#define SE_SACL_DEFAULTED (0x0020)
3893#define SE_DACL_AUTO_INHERIT_REQ (0x0100)
3894#define SE_SACL_AUTO_INHERIT_REQ (0x0200)
3895#define SE_DACL_AUTO_INHERITED (0x0400)
3896#define SE_SACL_AUTO_INHERITED (0x0800)
3897#define SE_DACL_PROTECTED (0x1000)
3898#define SE_SACL_PROTECTED (0x2000)
3899#define SE_RM_CONTROL_VALID (0x4000)
3900#define SE_SELF_RELATIVE (0x8000)
3901
3902 typedef struct _SECURITY_DESCRIPTOR_RELATIVE {
3903 BYTE Revision;
3904 BYTE Sbz1;
3905 SECURITY_DESCRIPTOR_CONTROL Control;
3906 DWORD Owner;
3907 DWORD Group;
3908 DWORD Sacl;
3909 DWORD Dacl;
3910 } SECURITY_DESCRIPTOR_RELATIVE,*PISECURITY_DESCRIPTOR_RELATIVE;
3911
3912 typedef struct _SECURITY_DESCRIPTOR {
3913 BYTE Revision;
3914 BYTE Sbz1;
3915 SECURITY_DESCRIPTOR_CONTROL Control;
3916 PSID Owner;
3917 PSID Group;
3918 PACL Sacl;
3919 PACL Dacl;
3920 } SECURITY_DESCRIPTOR,*PISECURITY_DESCRIPTOR;
3921
3922 typedef struct _SECURITY_OBJECT_AI_PARAMS {
3923 DWORD Size;
3924 DWORD ConstraintMask;
3925 } SECURITY_OBJECT_AI_PARAMS, *PSECURITY_OBJECT_AI_PARAMS;
3926
3927 typedef struct _OBJECT_TYPE_LIST {
3928 WORD Level;
3929 WORD Sbz;
3930 GUID *ObjectType;
3931 } OBJECT_TYPE_LIST,*POBJECT_TYPE_LIST;
3932
3933#define ACCESS_OBJECT_GUID 0
3934#define ACCESS_PROPERTY_SET_GUID 1
3935#define ACCESS_PROPERTY_GUID 2
3936
3937#define ACCESS_MAX_LEVEL 4
3938
3939 typedef enum _AUDIT_EVENT_TYPE {
3940 AuditEventObjectAccess,AuditEventDirectoryServiceAccess
3941 } AUDIT_EVENT_TYPE,*PAUDIT_EVENT_TYPE;
3942
3943#define AUDIT_ALLOW_NO_PRIVILEGE 0x1
3944
3945#define ACCESS_DS_SOURCE_A "DS"
3946#define ACCESS_DS_SOURCE_W L"DS"
3947#define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
3948#define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
3949
3950#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (__MSABI_LONG(0x00000001))
3951#define SE_PRIVILEGE_ENABLED (__MSABI_LONG(0x00000002))
3952#define SE_PRIVILEGE_REMOVED (0X00000004L)
3953#define SE_PRIVILEGE_USED_FOR_ACCESS (__MSABI_LONG(0x80000000))
3954
3955#define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_REMOVED | SE_PRIVILEGE_USED_FOR_ACCESS)
3956
3957#define PRIVILEGE_SET_ALL_NECESSARY (1)
3958
3959 typedef struct _PRIVILEGE_SET {
3960 DWORD PrivilegeCount;
3961 DWORD Control;
3962 LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
3963 } PRIVILEGE_SET,*PPRIVILEGE_SET;
3964
3965#define ACCESS_REASON_TYPE_MASK 0x00ff0000
3966#define ACCESS_REASON_DATA_MASK 0x0000ffff
3967
3968#define ACCESS_REASON_STAGING_MASK 0x80000000
3969#define ACCESS_REASON_EXDATA_MASK 0x7f000000
3970
3971 typedef enum _ACCESS_REASON_TYPE {
3972 AccessReasonNone = 0x00000000,
3973 AccessReasonAllowedAce = 0x00010000,
3974 AccessReasonDeniedAce = 0x00020000,
3975 AccessReasonAllowedParentAce = 0x00030000,
3976 AccessReasonDeniedParentAce = 0x00040000,
3977 AccessReasonNotGrantedByCape = 0x00050000,
3978 AccessReasonNotGrantedByParentCape = 0x00060000,
3979 AccessReasonNotGrantedToAppContainer = 0x00070000,
3980 AccessReasonMissingPrivilege = 0x00100000,
3981 AccessReasonFromPrivilege = 0x00200000,
3982 AccessReasonIntegrityLevel = 0x00300000,
3983 AccessReasonOwnership = 0x00400000,
3984 AccessReasonNullDacl = 0x00500000,
3985 AccessReasonEmptyDacl = 0x00600000,
3986 AccessReasonNoSD = 0x00700000,
3987 AccessReasonNoGrant = 0x00800000,
3988 AccessReasonTrustLabel = 0x00900000,
3989 AccessReasonFilterAce = 0x00a00000
3990 } ACCESS_REASON_TYPE;
3991 typedef DWORD ACCESS_REASON;
3992
3993 typedef struct _ACCESS_REASONS {
3994 ACCESS_REASON Data[32];
3995 } ACCESS_REASONS,*PACCESS_REASONS;
3996
3997#define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
3998#define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
3999#define SE_SECURITY_DESCRIPTOR_FLAG_NO_ACCESS_FILTER_ACE 0x00000004
4000#define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000007
4001
4002#define SE_ACCESS_CHECK_FLAG_NO_LEARNING_MODE_LOGGING 0x00000008
4003#define SE_ACCESS_CHECK_VALID_FLAGS 0x00000008
4004
4005 typedef struct _SE_SECURITY_DESCRIPTOR {
4006 DWORD Size;
4007 DWORD Flags;
4008 PSECURITY_DESCRIPTOR SecurityDescriptor;
4009 } SE_SECURITY_DESCRIPTOR,*PSE_SECURITY_DESCRIPTOR;
4010
4011 typedef struct _SE_ACCESS_REQUEST {
4012 DWORD Size;
4013 PSE_SECURITY_DESCRIPTOR SeSecurityDescriptor;
4014 ACCESS_MASK DesiredAccess;
4015 ACCESS_MASK PreviouslyGrantedAccess;
4016 PSID PrincipalSelfSid;
4017 PGENERIC_MAPPING GenericMapping;
4018 DWORD ObjectTypeListCount;
4019 POBJECT_TYPE_LIST ObjectTypeList;
4020 } SE_ACCESS_REQUEST,*PSE_ACCESS_REQUEST;
4021
4022 typedef struct _SE_ACCESS_REPLY {
4023 DWORD Size;
4024 DWORD ResultListCount;
4025 PACCESS_MASK GrantedAccess;
4026 PDWORD AccessStatus;
4027 PACCESS_REASONS AccessReason;
4028 PPRIVILEGE_SET *Privileges;
4029 } SE_ACCESS_REPLY,*PSE_ACCESS_REPLY;
4030
4031#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
4032#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
4033#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
4034#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
4035#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
4036#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
4037#define SE_TCB_NAME TEXT("SeTcbPrivilege")
4038#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
4039#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
4040#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
4041#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
4042#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
4043#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
4044#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
4045#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
4046#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
4047#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
4048#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
4049#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
4050#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
4051#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
4052#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
4053#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
4054#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
4055#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
4056#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
4057#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
4058#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
4059#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
4060#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
4061#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
4062#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
4063#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
4064#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
4065#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
4066#define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME TEXT("SeDelegateSessionUserImpersonatePrivilege")
4067
4068#define SE_ACTIVATE_AS_USER_CAPABILITY L"activateAsUser"
4069#define SE_CONSTRAINED_IMPERSONATION_CAPABILITY L"constrainedImpersonation"
4070#define SE_SESSION_IMPERSONATION_CAPABILITY L"sessionImpersonation"
4071#define SE_MUMA_CAPABILITY L"muma"
4072#define SE_DEVELOPMENT_MODE_NETWORK_CAPABILITY L"developmentModeNetwork"
4073#define SE_LEARNING_MODE_LOGGING_CAPABILITY L"learningModeLogging"
4074#define SE_PERMISSIVE_LEARNING_MODE_CAPABILITY L"permissiveLearningMode"
4075#define SE_APP_SILO_VOLUME_ROOT_MINIMAL_CAPABILITY L"isolatedWin32-volumeRootMinimal"
4076#define SE_APP_SILO_PROFILES_ROOT_MINIMAL_CAPABILITY L"isolatedWin32-profilesRootMinimal"
4077#define SE_APP_SILO_USER_PROFILE_MINIMAL_CAPABILITY L"isolatedWin32-userProfileMinimal"
4078#define SE_APP_SILO_PRINT_CAPABILITY L"isolatedWin32-print"
4079
4080 typedef enum _SECURITY_IMPERSONATION_LEVEL {
4081 SecurityAnonymous,SecurityIdentification,SecurityImpersonation,SecurityDelegation
4082 } SECURITY_IMPERSONATION_LEVEL,*PSECURITY_IMPERSONATION_LEVEL;
4083
4084#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
4085#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
4086#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
4087#define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
4088
4089#define TOKEN_ASSIGN_PRIMARY (0x0001)
4090#define TOKEN_DUPLICATE (0x0002)
4091#define TOKEN_IMPERSONATE (0x0004)
4092#define TOKEN_QUERY (0x0008)
4093#define TOKEN_QUERY_SOURCE (0x0010)
4094#define TOKEN_ADJUST_PRIVILEGES (0x0020)
4095#define TOKEN_ADJUST_GROUPS (0x0040)
4096#define TOKEN_ADJUST_DEFAULT (0x0080)
4097#define TOKEN_ADJUST_SESSIONID (0x0100)
4098
4099#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)
4100#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P | TOKEN_ADJUST_SESSIONID)
4101#define TOKEN_READ (STANDARD_RIGHTS_READ | TOKEN_QUERY)
4102
4103#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE | TOKEN_ADJUST_PRIVILEGES | TOKEN_ADJUST_GROUPS | TOKEN_ADJUST_DEFAULT)
4104
4105#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
4106
4107#define TOKEN_TRUST_CONSTRAINT_MASK (STANDARD_RIGHTS_READ | TOKEN_QUERY | TOKEN_QUERY_SOURCE)
4108
4109#if NTDDI_VERSION >= NTDDI_WIN8
4110#define TOKEN_ACCESS_PSEUDO_HANDLE_WIN8 (TOKEN_QUERY | TOKEN_QUERY_SOURCE)
4111#define TOKEN_ACCESS_PSEUDO_HANDLE TOKEN_ACCESS_PSEUDO_HANDLE_WIN8
4112#endif
4113 typedef enum _TOKEN_TYPE {
4114 TokenPrimary = 1,TokenImpersonation
4115 } TOKEN_TYPE;
4116 typedef TOKEN_TYPE *PTOKEN_TYPE;
4117
4118 typedef enum _TOKEN_ELEVATION_TYPE {
4119 TokenElevationTypeDefault = 1,
4120 TokenElevationTypeFull,
4121 TokenElevationTypeLimited
4122 } TOKEN_ELEVATION_TYPE, *PTOKEN_ELEVATION_TYPE;
4123
4124 typedef enum _TOKEN_INFORMATION_CLASS {
4125 TokenUser = 1,
4126 TokenGroups,
4127 TokenPrivileges,
4128 TokenOwner,
4129 TokenPrimaryGroup,
4130 TokenDefaultDacl,
4131 TokenSource,
4132 TokenType,
4133 TokenImpersonationLevel,
4134 TokenStatistics,
4135 TokenRestrictedSids,
4136 TokenSessionId,
4137 TokenGroupsAndPrivileges,
4138 TokenSessionReference,
4139 TokenSandBoxInert,
4140 TokenAuditPolicy,
4141 TokenOrigin,
4142 TokenElevationType,
4143 TokenLinkedToken,
4144 TokenElevation,
4145 TokenHasRestrictions,
4146 TokenAccessInformation,
4147 TokenVirtualizationAllowed,
4148 TokenVirtualizationEnabled,
4149 TokenIntegrityLevel,
4150 TokenUIAccess,
4151 TokenMandatoryPolicy,
4152 TokenLogonSid,
4153 TokenIsAppContainer,
4154 TokenCapabilities,
4155 TokenAppContainerSid,
4156 TokenAppContainerNumber,
4157 TokenUserClaimAttributes,
4158 TokenDeviceClaimAttributes,
4159 TokenRestrictedUserClaimAttributes,
4160 TokenRestrictedDeviceClaimAttributes,
4161 TokenDeviceGroups,
4162 TokenRestrictedDeviceGroups,
4163 TokenSecurityAttributes,
4164 TokenIsRestricted,
4165 TokenProcessTrustLevel,
4166 TokenPrivateNameSpace,
4167 TokenSingletonAttributes,
4168 TokenBnoIsolation,
4169 TokenChildProcessFlags,
4170 TokenIsLessPrivilegedAppContainer,
4171 TokenIsSandboxed,
4172 TokenIsAppSilo,
4173 MaxTokenInfoClass
4174 } TOKEN_INFORMATION_CLASS,*PTOKEN_INFORMATION_CLASS;
4175
4176 typedef struct _TOKEN_USER {
4177 SID_AND_ATTRIBUTES User;
4178 } TOKEN_USER,*PTOKEN_USER;
4179
4180#ifndef __WIDL__
4181
4182 typedef struct _SE_TOKEN_USER {
4183 __C89_NAMELESS union {
4184 TOKEN_USER TokenUser;
4185 SID_AND_ATTRIBUTES User;
4186 };
4187 __C89_NAMELESS union {
4188 SID Sid;
4189 BYTE Buffer[SECURITY_MAX_SID_SIZE];
4190 };
4191 } SE_TOKEN_USER,*PSE_TOKEN_USER;
4192
4193#define TOKEN_USER_MAX_SIZE (sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE)
4194
4195#endif
4196
4197 typedef struct _TOKEN_GROUPS {
4198 DWORD GroupCount;
4199#ifdef __WIDL__
4200 [size_is (GroupCount)] SID_AND_ATTRIBUTES Groups[*];
4201#else
4202 SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
4203#endif
4204 } TOKEN_GROUPS,*PTOKEN_GROUPS;
4205
4206 typedef struct _TOKEN_PRIVILEGES {
4207 DWORD PrivilegeCount;
4208 LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
4209 } TOKEN_PRIVILEGES,*PTOKEN_PRIVILEGES;
4210
4211 typedef struct _TOKEN_OWNER {
4212 PSID Owner;
4213 } TOKEN_OWNER,*PTOKEN_OWNER;
4214
4215#ifndef __WIDL__
4216#define TOKEN_OWNER_MAX_SIZE (sizeof(TOKEN_OWNER) + SECURITY_MAX_SID_SIZE)
4217#endif
4218
4219 typedef struct _TOKEN_PRIMARY_GROUP {
4220 PSID PrimaryGroup;
4221 } TOKEN_PRIMARY_GROUP,*PTOKEN_PRIMARY_GROUP;
4222
4223 typedef struct _TOKEN_DEFAULT_DACL {
4224 PACL DefaultDacl;
4225 } TOKEN_DEFAULT_DACL,*PTOKEN_DEFAULT_DACL;
4226
4227 typedef struct _TOKEN_USER_CLAIMS {
4228 PCLAIMS_BLOB UserClaims;
4229 } TOKEN_USER_CLAIMS,*PTOKEN_USER_CLAIMS;
4230
4231 typedef struct _TOKEN_DEVICE_CLAIMS {
4232 PCLAIMS_BLOB DeviceClaims;
4233 } TOKEN_DEVICE_CLAIMS,*PTOKEN_DEVICE_CLAIMS;
4234
4235 typedef struct _TOKEN_GROUPS_AND_PRIVILEGES {
4236 DWORD SidCount;
4237 DWORD SidLength;
4238 PSID_AND_ATTRIBUTES Sids;
4239 DWORD RestrictedSidCount;
4240 DWORD RestrictedSidLength;
4241 PSID_AND_ATTRIBUTES RestrictedSids;
4242 DWORD PrivilegeCount;
4243 DWORD PrivilegeLength;
4244 PLUID_AND_ATTRIBUTES Privileges;
4245 LUID AuthenticationId;
4246 } TOKEN_GROUPS_AND_PRIVILEGES,*PTOKEN_GROUPS_AND_PRIVILEGES;
4247
4248 typedef struct _TOKEN_LINKED_TOKEN {
4249 HANDLE LinkedToken;
4250 } TOKEN_LINKED_TOKEN,*PTOKEN_LINKED_TOKEN;
4251
4252 typedef struct _TOKEN_ELEVATION {
4253 DWORD TokenIsElevated;
4254 } TOKEN_ELEVATION,*PTOKEN_ELEVATION;
4255
4256 typedef struct _TOKEN_MANDATORY_LABEL {
4257 SID_AND_ATTRIBUTES Label;
4258 } TOKEN_MANDATORY_LABEL,*PTOKEN_MANDATORY_LABEL;
4259
4260#define TOKEN_MANDATORY_POLICY_OFF 0x0
4261#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
4262#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
4263
4264#define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
4265
4266#ifndef __WIDL__
4267#define TOKEN_INTEGRITY_LEVEL_MAX_SIZE ((((DWORD)(sizeof(TOKEN_MANDATORY_LABEL)) + sizeof(PVOID) - 1) & ~(sizeof(PVOID)-1)) + SECURITY_MAX_SID_SIZE)
4268#endif
4269
4270 typedef struct _TOKEN_MANDATORY_POLICY {
4271 DWORD Policy;
4272 } TOKEN_MANDATORY_POLICY,*PTOKEN_MANDATORY_POLICY;
4273
4274 typedef PVOID PSECURITY_ATTRIBUTES_OPAQUE;
4275
4276 typedef struct _TOKEN_ACCESS_INFORMATION {
4277 PSID_AND_ATTRIBUTES_HASH SidHash;
4278 PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
4279 PTOKEN_PRIVILEGES Privileges;
4280 LUID AuthenticationId;
4281 TOKEN_TYPE TokenType;
4282 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
4283 TOKEN_MANDATORY_POLICY MandatoryPolicy;
4284 DWORD Flags;
4285 DWORD AppContainerNumber;
4286 PSID PackageSid;
4287 PSID_AND_ATTRIBUTES_HASH CapabilitiesHash;
4288 } TOKEN_ACCESS_INFORMATION,*PTOKEN_ACCESS_INFORMATION;
4289
4290#define POLICY_AUDIT_SUBCATEGORY_COUNT (56)
4291
4292 typedef struct _TOKEN_AUDIT_POLICY {
4293 UCHAR PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
4294 } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
4295
4296#define TOKEN_SOURCE_LENGTH 8
4297
4298 typedef struct _TOKEN_SOURCE {
4299 CHAR SourceName[TOKEN_SOURCE_LENGTH];
4300 LUID SourceIdentifier;
4301 } TOKEN_SOURCE,*PTOKEN_SOURCE;
4302
4303 typedef struct _TOKEN_STATISTICS {
4304 LUID TokenId;
4305 LUID AuthenticationId;
4306 LARGE_INTEGER ExpirationTime;
4307 TOKEN_TYPE TokenType;
4308 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
4309 DWORD DynamicCharged;
4310 DWORD DynamicAvailable;
4311 DWORD GroupCount;
4312 DWORD PrivilegeCount;
4313 LUID ModifiedId;
4314 } TOKEN_STATISTICS,*PTOKEN_STATISTICS;
4315
4316 typedef struct _TOKEN_CONTROL {
4317 LUID TokenId;
4318 LUID AuthenticationId;
4319 LUID ModifiedId;
4320 TOKEN_SOURCE TokenSource;
4321 } TOKEN_CONTROL,*PTOKEN_CONTROL;
4322
4323 typedef struct _TOKEN_ORIGIN {
4324 LUID OriginatingLogonSession;
4325 } TOKEN_ORIGIN,*PTOKEN_ORIGIN;
4326
4327 typedef enum _MANDATORY_LEVEL {
4328 MandatoryLevelUntrusted = 0,
4329 MandatoryLevelLow,
4330 MandatoryLevelMedium,
4331 MandatoryLevelHigh,
4332 MandatoryLevelSystem,
4333 MandatoryLevelSecureProcess,
4334 MandatoryLevelCount
4335 } MANDATORY_LEVEL,*PMANDATORY_LEVEL;
4336
4337 typedef struct _TOKEN_APPCONTAINER_INFORMATION {
4338 PSID TokenAppContainer;
4339 } TOKEN_APPCONTAINER_INFORMATION,*PTOKEN_APPCONTAINER_INFORMATION;
4340
4341#ifndef __WIDL__
4342#define TOKEN_APPCONTAINER_SID_MAX_SIZE (sizeof(TOKEN_APPCONTAINER_INFORMATION) + SECURITY_MAX_SID_SIZE)
4343#endif
4344
4345 typedef struct _TOKEN_SID_INFORMATION {
4346 PSID Sid;
4347 } TOKEN_SID_INFORMATION,*PTOKEN_SID_INFORMATION;
4348
4349 typedef struct _TOKEN_BNO_ISOLATION_INFORMATION {
4350 PWSTR IsolationPrefix;
4351 BOOLEAN IsolationEnabled;
4352 } TOKEN_BNO_ISOLATION_INFORMATION,*PTOKEN_BNO_ISOLATION_INFORMATION;
4353
4354#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00
4355#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 0x01
4356#define CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02
4357#define CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING 0x03
4358#define CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04
4359#define CLAIM_SECURITY_ATTRIBUTE_TYPE_SID 0x05
4360#define CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06
4361
4362 typedef struct _CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE {
4363 DWORD64 Version;
4364 PWSTR Name;
4365 } CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE,*PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE;
4366
4367 typedef struct _CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE {
4368 PVOID pValue;
4369 DWORD ValueLength;
4370 } CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE, *PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE;
4371
4372#define CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10
4373#define CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x0001
4374#define CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x0002
4375#define CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY 0x0004
4376#define CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT 0x0008
4377#define CLAIM_SECURITY_ATTRIBUTE_DISABLED 0x0010
4378#define CLAIM_SECURITY_ATTRIBUTE_MANDATORY 0x0020
4379
4380#define CLAIM_SECURITY_ATTRIBUTE_VALID_FLAGS (CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE | CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE | CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY | CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT | CLAIM_SECURITY_ATTRIBUTE_DISABLED | CLAIM_SECURITY_ATTRIBUTE_MANDATORY)
4381#define CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS 0xffff0000
4382
4383 typedef struct _CLAIM_SECURITY_ATTRIBUTE_V1 {
4384 PWSTR Name;
4385 WORD ValueType;
4386 WORD Reserved;
4387 DWORD Flags;
4388 DWORD ValueCount;
4389 union {
4390 PLONG64 pInt64;
4391 PDWORD64 pUint64;
4392 PWSTR *ppString;
4393 PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE pFqbn;
4394 PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE pOctetString;
4395 } Values;
4396 } CLAIM_SECURITY_ATTRIBUTE_V1,*PCLAIM_SECURITY_ATTRIBUTE_V1;
4397
4398 typedef struct _CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1 {
4399 DWORD Name;
4400 WORD ValueType;
4401 WORD Reserved;
4402 DWORD Flags;
4403 DWORD ValueCount;
4404 union {
4405 DWORD pInt64[ANYSIZE_ARRAY];
4406 DWORD pUint64[ANYSIZE_ARRAY];
4407 DWORD ppString[ANYSIZE_ARRAY];
4408 DWORD pFqbn[ANYSIZE_ARRAY];
4409 DWORD pOctetString[ANYSIZE_ARRAY];
4410 } Values;
4411 } CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1,*PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1;
4412
4413#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1 1
4414
4415#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1
4416
4417 typedef struct _CLAIM_SECURITY_ATTRIBUTES_INFORMATION {
4418 WORD Version;
4419 WORD Reserved;
4420 DWORD AttributeCount;
4421 union {
4422 PCLAIM_SECURITY_ATTRIBUTE_V1 pAttributeV1;
4423 } Attribute;
4424 } CLAIM_SECURITY_ATTRIBUTES_INFORMATION,*PCLAIM_SECURITY_ATTRIBUTES_INFORMATION;
4425
4426#define SECURITY_DYNAMIC_TRACKING (TRUE)
4427#define SECURITY_STATIC_TRACKING (FALSE)
4428
4429 typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE,*PSECURITY_CONTEXT_TRACKING_MODE;
4430
4431 typedef struct _SECURITY_QUALITY_OF_SERVICE {
4432 DWORD Length;
4433 SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
4434 SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
4435 BOOLEAN EffectiveOnly;
4436 } SECURITY_QUALITY_OF_SERVICE,*PSECURITY_QUALITY_OF_SERVICE;
4437
4438 typedef struct _SE_IMPERSONATION_STATE {
4439 PACCESS_TOKEN Token;
4440 BOOLEAN CopyOnOpen;
4441 BOOLEAN EffectiveOnly;
4442 SECURITY_IMPERSONATION_LEVEL Level;
4443 } SE_IMPERSONATION_STATE,*PSE_IMPERSONATION_STATE;
4444
4445#define DISABLE_MAX_PRIVILEGE 0x1
4446#define SANDBOX_INERT 0x2
4447#define LUA_TOKEN 0x4
4448#define WRITE_RESTRICTED 0x8
4449
4450 typedef DWORD SECURITY_INFORMATION,*PSECURITY_INFORMATION;
4451
4452#define OWNER_SECURITY_INFORMATION (__MSABI_LONG(0x00000001))
4453#define GROUP_SECURITY_INFORMATION (__MSABI_LONG(0x00000002))
4454#define DACL_SECURITY_INFORMATION (__MSABI_LONG(0x00000004))
4455#define SACL_SECURITY_INFORMATION (__MSABI_LONG(0x00000008))
4456#define LABEL_SECURITY_INFORMATION (__MSABI_LONG(0x00000010))
4457#define ATTRIBUTE_SECURITY_INFORMATION (__MSABI_LONG(0x00000020))
4458#define SCOPE_SECURITY_INFORMATION (__MSABI_LONG(0x00000040))
4459#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION (__MSABI_LONG(0x00000080))
4460#define ACCESS_FILTER_SECURITY_INFORMATION (__MSABI_LONG(0x00000100))
4461#define BACKUP_SECURITY_INFORMATION (__MSABI_LONG(0x00010000))
4462
4463#define PROTECTED_DACL_SECURITY_INFORMATION (__MSABI_LONG(0x80000000))
4464#define PROTECTED_SACL_SECURITY_INFORMATION (__MSABI_LONG(0x40000000))
4465#define UNPROTECTED_DACL_SECURITY_INFORMATION (__MSABI_LONG(0x20000000))
4466#define UNPROTECTED_SACL_SECURITY_INFORMATION (__MSABI_LONG(0x10000000))
4467
4468typedef BYTE SE_SIGNING_LEVEL, *PSE_SIGNING_LEVEL;
4469
4470#define SE_SIGNING_LEVEL_UNCHECKED 0x00000000
4471#define SE_SIGNING_LEVEL_UNSIGNED 0x00000001
4472#define SE_SIGNING_LEVEL_ENTERPRISE 0x00000002
4473#define SE_SIGNING_LEVEL_CUSTOM_1 0x00000003
4474#define SE_SIGNING_LEVEL_DEVELOPER SE_SIGNING_LEVEL_CUSTOM_1
4475#define SE_SIGNING_LEVEL_AUTHENTICODE 0x00000004
4476#define SE_SIGNING_LEVEL_CUSTOM_2 0x00000005
4477#define SE_SIGNING_LEVEL_STORE 0x00000006
4478#define SE_SIGNING_LEVEL_CUSTOM_3 0x00000007
4479#define SE_SIGNING_LEVEL_ANTIMALWARE SE_SIGNING_LEVEL_CUSTOM_3
4480#define SE_SIGNING_LEVEL_MICROSOFT 0x00000008
4481#define SE_SIGNING_LEVEL_CUSTOM_4 0x00000009
4482#define SE_SIGNING_LEVEL_CUSTOM_5 0x0000000A
4483#define SE_SIGNING_LEVEL_DYNAMIC_CODEGEN 0x0000000B
4484#define SE_SIGNING_LEVEL_WINDOWS 0x0000000C
4485#define SE_SIGNING_LEVEL_CUSTOM_7 0x0000000D
4486#define SE_SIGNING_LEVEL_WINDOWS_TCB 0x0000000E
4487#define SE_SIGNING_LEVEL_CUSTOM_6 0x0000000F
4488
4489 typedef enum _SE_IMAGE_SIGNATURE_TYPE {
4490 SeImageSignatureNone = 0,
4491 SeImageSignatureEmbedded,
4492 SeImageSignatureCache,
4493 SeImageSignatureCatalogCached,
4494 SeImageSignatureCatalogNotCached,
4495 SeImageSignatureCatalogHint,
4496 SeImageSignaturePackageCatalog,
4497 SeImageSignaturePplMitigated
4498 } SE_IMAGE_SIGNATURE_TYPE, *PSE_IMAGE_SIGNATURE_TYPE;
4499
4500 typedef enum _SE_LEARNING_MODE_DATA_TYPE {
4501 SeLearningModeInvalidType = 0,
4502 SeLearningModeSettings,
4503 SeLearningModeMax
4504 } SE_LEARNING_MODE_DATA_TYPE;
4505
4506#define SE_LEARNING_MODE_FLAG_PERMISSIVE 0x00000001
4507
4508 typedef struct _SECURITY_CAPABILITIES {
4509 PSID AppContainerSid;
4510 PSID_AND_ATTRIBUTES Capabilities;
4511 DWORD CapabilityCount;
4512 DWORD Reserved;
4513 } SECURITY_CAPABILITIES,*PSECURITY_CAPABILITIES,*LPSECURITY_CAPABILITIES;
4514
4515#define PROCESS_TERMINATE (0x0001)
4516#define PROCESS_CREATE_THREAD (0x0002)
4517#define PROCESS_SET_SESSIONID (0x0004)
4518#define PROCESS_VM_OPERATION (0x0008)
4519#define PROCESS_VM_READ (0x0010)
4520#define PROCESS_VM_WRITE (0x0020)
4521#define PROCESS_DUP_HANDLE (0x0040)
4522#define PROCESS_CREATE_PROCESS (0x0080)
4523#define PROCESS_SET_QUOTA (0x0100)
4524#define PROCESS_SET_INFORMATION (0x0200)
4525#define PROCESS_QUERY_INFORMATION (0x0400)
4526#define PROCESS_SUSPEND_RESUME (0x0800)
4527#define PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
4528#define PROCESS_SET_LIMITED_INFORMATION (0x2000)
4529
4530#if NTDDI_VERSION >= 0x06000000
4531#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff)
4532#else
4533#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xfff)
4534#endif
4535
4536#ifdef _WIN64
4537#define MAXIMUM_PROC_PER_GROUP 64
4538#else
4539#define MAXIMUM_PROC_PER_GROUP 32
4540#endif
4541
4542#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
4543
4544#define THREAD_TERMINATE (0x0001)
4545#define THREAD_SUSPEND_RESUME (0x0002)
4546#define THREAD_GET_CONTEXT (0x0008)
4547#define THREAD_SET_CONTEXT (0x0010)
4548#define THREAD_SET_INFORMATION (0x0020)
4549#define THREAD_QUERY_INFORMATION (0x0040)
4550#define THREAD_SET_THREAD_TOKEN (0x0080)
4551#define THREAD_IMPERSONATE (0x0100)
4552#define THREAD_DIRECT_IMPERSONATION (0x0200)
4553#define THREAD_SET_LIMITED_INFORMATION (0x0400)
4554#define THREAD_QUERY_LIMITED_INFORMATION (0x0800)
4555#define THREAD_RESUME (0x1000)
4556
4557#if NTDDI_VERSION >= 0x06000000
4558#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0xffff)
4559#else
4560#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3ff)
4561#endif
4562
4563#define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
4564#define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
4565#define JOB_OBJECT_QUERY (0x0004)
4566#define JOB_OBJECT_TERMINATE (0x0008)
4567#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
4568#define JOB_OBJECT_IMPERSONATE (0x0020)
4569#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x3F)
4570
4571 typedef struct _JOB_SET_ARRAY {
4572 HANDLE JobHandle;
4573 DWORD MemberLevel;
4574 DWORD Flags;
4575 } JOB_SET_ARRAY,*PJOB_SET_ARRAY;
4576
4577#if NTDDI_VERSION >= NTDDI_WIN10_19H1
4578#define FLS_MAXIMUM_AVAILABLE 4080
4579#else
4580#define FLS_MAXIMUM_AVAILABLE 128
4581#endif
4582#define TLS_MINIMUM_AVAILABLE 64
4583
4584#ifndef __MINGW_EXCPT_DEFINE_PSDK
4585 typedef struct _EXCEPTION_REGISTRATION_RECORD {
4586 __C89_NAMELESS union {
4587 struct _EXCEPTION_REGISTRATION_RECORD *Next;
4588 struct _EXCEPTION_REGISTRATION_RECORD *prev;
4589 };
4590 __C89_NAMELESS union {
4591 PEXCEPTION_ROUTINE Handler;
4592 PEXCEPTION_ROUTINE handler;
4593 };
4594 } EXCEPTION_REGISTRATION_RECORD;
4595
4596 typedef EXCEPTION_REGISTRATION_RECORD *PEXCEPTION_REGISTRATION_RECORD;
4597
4598 typedef EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION;
4599 typedef PEXCEPTION_REGISTRATION_RECORD PEXCEPTION_REGISTRATION;
4600#endif
4601
4602#ifndef _NT_TIB_DEFINED
4603#define _NT_TIB_DEFINED
4604 __C89_NAMELESS typedef struct _NT_TIB {
4605 struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
4606 PVOID StackBase;
4607 PVOID StackLimit;
4608 PVOID SubSystemTib;
4609 __C89_NAMELESS union {
4610 PVOID FiberData;
4611 DWORD Version;
4612 };
4613 PVOID ArbitraryUserPointer;
4614 struct _NT_TIB *Self;
4615 } NT_TIB;
4616 typedef NT_TIB *PNT_TIB;
4617#endif /* _NT_TIB_DEFINED */
4618
4619 __C89_NAMELESS typedef struct _NT_TIB32 {
4620 DWORD ExceptionList;
4621 DWORD StackBase;
4622 DWORD StackLimit;
4623 DWORD SubSystemTib;
4624 __C89_NAMELESS union {
4625 DWORD FiberData;
4626 DWORD Version;
4627 };
4628 DWORD ArbitraryUserPointer;
4629 DWORD Self;
4630 } NT_TIB32,*PNT_TIB32;
4631
4632 __C89_NAMELESS typedef struct _NT_TIB64 {
4633 DWORD64 ExceptionList;
4634 DWORD64 StackBase;
4635 DWORD64 StackLimit;
4636 DWORD64 SubSystemTib;
4637 __C89_NAMELESS union {
4638 DWORD64 FiberData;
4639 DWORD Version;
4640 };
4641 DWORD64 ArbitraryUserPointer;
4642 DWORD64 Self;
4643 } NT_TIB64,*PNT_TIB64;
4644
4645#if !defined(_X86_) && !defined(_IA64_) && !defined(_AMD64_)
4646#define WX86
4647#endif
4648
4649#define THREAD_DYNAMIC_CODE_ALLOW 1
4650
4651#define THREAD_BASE_PRIORITY_LOWRT 15
4652#define THREAD_BASE_PRIORITY_MAX 2
4653#define THREAD_BASE_PRIORITY_MIN (-2)
4654#define THREAD_BASE_PRIORITY_IDLE (-15)
4655
4656 typedef struct _UMS_CREATE_THREAD_ATTRIBUTES {
4657 DWORD UmsVersion;
4658 PVOID UmsContext;
4659 PVOID UmsCompletionList;
4660 } UMS_CREATE_THREAD_ATTRIBUTES,*PUMS_CREATE_THREAD_ATTRIBUTES;
4661
4662#define COMPONENT_KTM 0x01
4663#define COMPONENT_VALID_FLAGS COMPONENT_KTM
4664
4665 typedef struct _COMPONENT_FILTER {
4666 DWORD ComponentFlags;
4667 } COMPONENT_FILTER,*PCOMPONENT_FILTER;
4668
4669#define DYNAMIC_EH_CONTINUATION_TARGET_ADD 0x00000001
4670#define DYNAMIC_EH_CONTINUATION_TARGET_PROCESSED 0x00000002
4671
4672 typedef struct _PROCESS_DYNAMIC_EH_CONTINUATION_TARGET {
4673 ULONG_PTR TargetAddress;
4674 ULONG_PTR Flags;
4675 } PROCESS_DYNAMIC_EH_CONTINUATION_TARGET,*PPROCESS_DYNAMIC_EH_CONTINUATION_TARGET;
4676
4677 typedef struct _PROCESS_DYNAMIC_EH_CONTINUATION_TARGETS_INFORMATION {
4678 WORD NumberOfTargets;
4679 WORD Reserved;
4680 DWORD Reserved2;
4681 PPROCESS_DYNAMIC_EH_CONTINUATION_TARGET Targets;
4682 } PROCESS_DYNAMIC_EH_CONTINUATION_TARGETS_INFORMATION,*PPROCESS_DYNAMIC_EH_CONTINUATION_TARGETS_INFORMATION;
4683
4684#define DYNAMIC_ENFORCED_ADDRESS_RANGE_ADD 0x00000001
4685#define DYNAMIC_ENFORCED_ADDRESS_RANGE_PROCESSED 0x00000002
4686
4687 typedef struct _PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE {
4688 ULONG_PTR BaseAddress;
4689 SIZE_T Size;
4690 DWORD Flags;
4691 } PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE,*PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE;
4692
4693 typedef struct _PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGES_INFORMATION {
4694 WORD NumberOfRanges;
4695 WORD Reserved;
4696 DWORD Reserved2;
4697 PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGE Ranges;
4698 } PROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGES_INFORMATION,*PPROCESS_DYNAMIC_ENFORCED_ADDRESS_RANGES_INFORMATION;
4699
4700 typedef struct _QUOTA_LIMITS {
4701 SIZE_T PagedPoolLimit;
4702 SIZE_T NonPagedPoolLimit;
4703 SIZE_T MinimumWorkingSetSize;
4704 SIZE_T MaximumWorkingSetSize;
4705 SIZE_T PagefileLimit;
4706 LARGE_INTEGER TimeLimit;
4707 } QUOTA_LIMITS,*PQUOTA_LIMITS;
4708
4709#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
4710#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
4711#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
4712#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
4713#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
4714
4715 typedef union _RATE_QUOTA_LIMIT {
4716 DWORD RateData;
4717 __C89_NAMELESS struct {
4718 DWORD RatePercent : 7;
4719 DWORD Reserved0 : 25;
4720 } DUMMYSTRUCTNAME;
4721 } RATE_QUOTA_LIMIT, *PRATE_QUOTA_LIMIT;
4722
4723 typedef struct _QUOTA_LIMITS_EX {
4724 SIZE_T PagedPoolLimit;
4725 SIZE_T NonPagedPoolLimit;
4726 SIZE_T MinimumWorkingSetSize;
4727 SIZE_T MaximumWorkingSetSize;
4728 SIZE_T PagefileLimit;
4729 LARGE_INTEGER TimeLimit;
4730 SIZE_T WorkingSetLimit;
4731 SIZE_T Reserved2;
4732 SIZE_T Reserved3;
4733 SIZE_T Reserved4;
4734 DWORD Flags;
4735 RATE_QUOTA_LIMIT CpuRateLimit;
4736 } QUOTA_LIMITS_EX,*PQUOTA_LIMITS_EX;
4737
4738 typedef struct _IO_COUNTERS {
4739 ULONGLONG ReadOperationCount;
4740 ULONGLONG WriteOperationCount;
4741 ULONGLONG OtherOperationCount;
4742 ULONGLONG ReadTransferCount;
4743 ULONGLONG WriteTransferCount;
4744 ULONGLONG OtherTransferCount;
4745 } IO_COUNTERS;
4746 typedef IO_COUNTERS *PIO_COUNTERS;
4747
4748#define MAX_HW_COUNTERS 16
4749#define THREAD_PROFILING_FLAG_DISPATCH 0x1
4750
4751 typedef enum _HARDWARE_COUNTER_TYPE {
4752 PMCCounter,
4753 MaxHardwareCounterType
4754 } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
4755
4756 typedef enum _PROCESS_MITIGATION_POLICY {
4757 ProcessDEPPolicy,
4758 ProcessASLRPolicy,
4759 ProcessDynamicCodePolicy,
4760 ProcessStrictHandleCheckPolicy,
4761 ProcessSystemCallDisablePolicy,
4762 ProcessMitigationOptionsMask,
4763 ProcessExtensionPointDisablePolicy,
4764 ProcessControlFlowGuardPolicy,
4765 ProcessSignaturePolicy,
4766 ProcessFontDisablePolicy,
4767 ProcessImageLoadPolicy,
4768 ProcessSystemCallFilterPolicy,
4769 ProcessPayloadRestrictionPolicy,
4770 ProcessChildProcessPolicy,
4771 ProcessSideChannelIsolationPolicy,
4772 ProcessUserShadowStackPolicy,
4773 ProcessRedirectionTrustPolicy,
4774 ProcessUserPointerAuthPolicy,
4775 ProcessSEHOPPolicy,
4776 MaxProcessMitigationPolicy
4777 } PROCESS_MITIGATION_POLICY,*PPROCESS_MITIGATION_POLICY;
4778
4779 typedef struct _PROCESS_MITIGATION_ASLR_POLICY {
4780 __C89_NAMELESS union {
4781 DWORD Flags;
4782 __C89_NAMELESS struct {
4783 DWORD EnableBottomUpRandomization : 1;
4784 DWORD EnableForceRelocateImages : 1;
4785 DWORD EnableHighEntropy : 1;
4786 DWORD DisallowStrippedImages : 1;
4787 DWORD ReservedFlags : 28;
4788 };
4789 };
4790 } PROCESS_MITIGATION_ASLR_POLICY,*PPROCESS_MITIGATION_ASLR_POLICY;
4791
4792 typedef struct _PROCESS_MITIGATION_DEP_POLICY {
4793 __C89_NAMELESS union {
4794 DWORD Flags;
4795 __C89_NAMELESS struct {
4796 DWORD Enable : 1;
4797 DWORD DisableAtlThunkEmulation : 1;
4798 DWORD ReservedFlags : 30;
4799 };
4800 };
4801 BOOLEAN Permanent;
4802 } PROCESS_MITIGATION_DEP_POLICY,*PPROCESS_MITIGATION_DEP_POLICY;
4803
4804 typedef struct _PROCESS_MITIGATION_SEHOP_POLICY {
4805 __C89_NAMELESS union {
4806 DWORD Flags;
4807 __C89_NAMELESS struct {
4808 DWORD EnableSehop : 1;
4809 DWORD ReservedFlags : 31;
4810 };
4811 };
4812 } PROCESS_MITIGATION_SEHOP_POLICY,*PPROCESS_MITIGATION_SEHOP_POLICY;
4813
4814 typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
4815 __C89_NAMELESS union {
4816 DWORD Flags;
4817 __C89_NAMELESS struct {
4818 DWORD RaiseExceptionOnInvalidHandleReference : 1;
4819 DWORD HandleExceptionsPermanentlyEnabled : 1;
4820 DWORD ReservedFlags : 30;
4821 };
4822 };
4823 } PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY,*PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY;
4824
4825 typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
4826 __C89_NAMELESS union {
4827 DWORD Flags;
4828 __C89_NAMELESS struct {
4829 DWORD DisallowWin32kSystemCalls : 1;
4830 DWORD ReservedFlags : 31;
4831 };
4832 };
4833 } PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY,*PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY;
4834
4835 typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
4836 __C89_NAMELESS union {
4837 DWORD Flags;
4838 __C89_NAMELESS struct {
4839 DWORD DisableExtensionPoints : 1;
4840 DWORD ReservedFlags : 31;
4841 };
4842 };
4843 } PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY,*PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY;
4844
4845 typedef struct _PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
4846 __C89_NAMELESS union {
4847 DWORD Flags;
4848 __C89_NAMELESS struct {
4849 DWORD EnableControlFlowGuard :1;
4850 DWORD EnableExportSuppression :1;
4851 DWORD StrictMode :1;
4852 DWORD ReservedFlags :29;
4853 };
4854 };
4855 } PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY, *PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY;
4856
4857 typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
4858 __C89_NAMELESS union {
4859 DWORD Flags;
4860 __C89_NAMELESS struct {
4861 DWORD MicrosoftSignedOnly :1;
4862 DWORD StoreSignedOnly :1;
4863 DWORD MitigationOptIn :1;
4864 DWORD ReservedFlags :29;
4865 };
4866 };
4867 } PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY, *PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY;
4868
4869 typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
4870 __C89_NAMELESS union {
4871 DWORD Flags;
4872 __C89_NAMELESS struct {
4873 DWORD ProhibitDynamicCode :1;
4874 DWORD AllowThreadOptOut :1;
4875 DWORD AllowRemoteDowngrade :1;
4876 DWORD ReservedFlags :29;
4877 };
4878 };
4879 } PROCESS_MITIGATION_DYNAMIC_CODE_POLICY, *PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY;
4880
4881 typedef struct _PROCESS_MITIGATION_FONT_DISABLE_POLICY {
4882 __C89_NAMELESS union {
4883 DWORD Flags;
4884 __C89_NAMELESS struct {
4885 DWORD DisableNonSystemFonts :1;
4886 DWORD AuditNonSystemFontLoading :1;
4887 DWORD ReservedFlags :30;
4888 };
4889 };
4890 } PROCESS_MITIGATION_FONT_DISABLE_POLICY, *PPROCESS_MITIGATION_FONT_DISABLE_POLICY;
4891
4892 typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
4893 __C89_NAMELESS union {
4894 DWORD Flags;
4895 __C89_NAMELESS struct {
4896 DWORD NoRemoteImages :1;
4897 DWORD NoLowMandatoryLabelImages :1;
4898 DWORD PreferSystem32Images :1;
4899 DWORD ReservedFlags :29;
4900 };
4901 };
4902 } PROCESS_MITIGATION_IMAGE_LOAD_POLICY, *PPROCESS_MITIGATION_IMAGE_LOAD_POLICY;
4903
4904 typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY {
4905 __C89_NAMELESS union {
4906 DWORD Flags;
4907 __C89_NAMELESS struct {
4908 DWORD FilterId :4;
4909 DWORD ReservedFlags :28;
4910 };
4911 };
4912 } PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY, *PPROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY;
4913
4914 typedef struct _PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY {
4915 __C89_NAMELESS union {
4916 DWORD Flags;
4917 __C89_NAMELESS struct {
4918 DWORD EnableExportAddressFilter :1;
4919 DWORD AuditExportAddressFilter :1;
4920 DWORD EnableExportAddressFilterPlus :1;
4921 DWORD AuditExportAddressFilterPlus :1;
4922 DWORD EnableImportAddressFilter :1;
4923 DWORD AuditImportAddressFilter :1;
4924 DWORD EnableRopStackPivot :1;
4925 DWORD AuditRopStackPivot :1;
4926 DWORD EnableRopCallerCheck :1;
4927 DWORD AuditRopCallerCheck :1;
4928 DWORD EnableRopSimExec :1;
4929 DWORD AuditRopSimExec :1;
4930 DWORD ReservedFlags :20;
4931 };
4932 };
4933 } PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY, *PPROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY;
4934
4935 typedef struct _PROCESS_MITIGATION_CHILD_PROCESS_POLICY {
4936 __C89_NAMELESS union {
4937 DWORD Flags;
4938 __C89_NAMELESS struct {
4939 DWORD NoChildProcessCreation :1;
4940 DWORD AuditNoChildProcessCreation :1;
4941 DWORD AllowSecureProcessCreation :1;
4942 DWORD ReservedFlags :29;
4943 };
4944 };
4945 } PROCESS_MITIGATION_CHILD_PROCESS_POLICY, *PPROCESS_MITIGATION_CHILD_PROCESS_POLICY;
4946
4947 typedef struct _PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY {
4948 __C89_NAMELESS union {
4949 DWORD Flags;
4950 __C89_NAMELESS struct {
4951 DWORD SmtBranchTargetIsolation :1;
4952 DWORD IsolateSecurityDomain :1;
4953 DWORD DisablePageCombine :1;
4954 DWORD SpeculativeStoreBypassDisable :1;
4955 DWORD RestrictCoreSharing : 1;
4956 DWORD ReservedFlags : 27;
4957 };
4958 };
4959 } PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY, *PPROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY;
4960
4961 typedef struct _PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY {
4962 __C89_NAMELESS union {
4963 DWORD Flags;
4964 __C89_NAMELESS struct {
4965 DWORD EnableUserShadowStack : 1;
4966 DWORD AuditUserShadowStack : 1;
4967 DWORD SetContextIpValidation : 1;
4968 DWORD AuditSetContextIpValidation : 1;
4969 DWORD EnableUserShadowStackStrictMode : 1;
4970 DWORD BlockNonCetBinaries : 1;
4971 DWORD BlockNonCetBinariesNonEhcont : 1;
4972 DWORD AuditBlockNonCetBinaries : 1;
4973 DWORD CetDynamicApisOutOfProcOnly : 1;
4974 DWORD SetContextIpValidationRelaxedMode : 1;
4975 DWORD ReservedFlags : 22;
4976 };
4977 };
4978 } PROCESS_MITIGATION_USER_SHADOW_STACK_POLICY, *PPROCESS_MITIGATION_USER_SHADOW_STACK_POLICY;
4979
4980 typedef struct _PROCESS_MITIGATION_USER_POINTER_AUTH_POLICY {
4981 __C89_NAMELESS union {
4982 DWORD Flags;
4983 __C89_NAMELESS struct {
4984 DWORD EnablePointerAuthUserIp : 1;
4985 DWORD ReservedFlags : 31;
4986 };
4987 };
4988 } PROCESS_MITIGATION_USER_POINTER_AUTH_POLICY, *PPROCESS_MITIGATION_USER_POINTER_AUTH_POLICY;
4989
4990 typedef struct _PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY {
4991 __C89_NAMELESS union {
4992 DWORD Flags;
4993 __C89_NAMELESS struct {
4994 DWORD EnforceRedirectionTrust : 1;
4995 DWORD AuditRedirectionTrust : 1;
4996 DWORD ReservedFlags : 30;
4997 };
4998 };
4999 } PROCESS_MITIGATION_REDIRECTION_TRUST_POLICY, *PPROCESS_MITIGATION_REDIRECTION_TRUST_POLICY;
5000
5001 typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
5002 LARGE_INTEGER TotalUserTime;
5003 LARGE_INTEGER TotalKernelTime;
5004 LARGE_INTEGER ThisPeriodTotalUserTime;
5005 LARGE_INTEGER ThisPeriodTotalKernelTime;
5006 DWORD TotalPageFaultCount;
5007 DWORD TotalProcesses;
5008 DWORD ActiveProcesses;
5009 DWORD TotalTerminatedProcesses;
5010 } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION;
5011
5012 typedef struct _JOBOBJECT_BASIC_LIMIT_INFORMATION {
5013 LARGE_INTEGER PerProcessUserTimeLimit;
5014 LARGE_INTEGER PerJobUserTimeLimit;
5015 DWORD LimitFlags;
5016 SIZE_T MinimumWorkingSetSize;
5017 SIZE_T MaximumWorkingSetSize;
5018 DWORD ActiveProcessLimit;
5019 ULONG_PTR Affinity;
5020 DWORD PriorityClass;
5021 DWORD SchedulingClass;
5022 } JOBOBJECT_BASIC_LIMIT_INFORMATION,*PJOBOBJECT_BASIC_LIMIT_INFORMATION;
5023
5024 typedef struct _JOBOBJECT_EXTENDED_LIMIT_INFORMATION {
5025 JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation;
5026 IO_COUNTERS IoInfo;
5027 SIZE_T ProcessMemoryLimit;
5028 SIZE_T JobMemoryLimit;
5029 SIZE_T PeakProcessMemoryUsed;
5030 SIZE_T PeakJobMemoryUsed;
5031 } JOBOBJECT_EXTENDED_LIMIT_INFORMATION,*PJOBOBJECT_EXTENDED_LIMIT_INFORMATION;
5032
5033 typedef struct _JOBOBJECT_BASIC_PROCESS_ID_LIST {
5034 DWORD NumberOfAssignedProcesses;
5035 DWORD NumberOfProcessIdsInList;
5036 ULONG_PTR ProcessIdList[1];
5037 } JOBOBJECT_BASIC_PROCESS_ID_LIST,*PJOBOBJECT_BASIC_PROCESS_ID_LIST;
5038
5039 typedef struct _JOBOBJECT_BASIC_UI_RESTRICTIONS {
5040 DWORD UIRestrictionsClass;
5041 } JOBOBJECT_BASIC_UI_RESTRICTIONS,*PJOBOBJECT_BASIC_UI_RESTRICTIONS;
5042
5043 typedef struct _JOBOBJECT_SECURITY_LIMIT_INFORMATION {
5044 DWORD SecurityLimitFlags;
5045 HANDLE JobToken;
5046 PTOKEN_GROUPS SidsToDisable;
5047 PTOKEN_PRIVILEGES PrivilegesToDelete;
5048 PTOKEN_GROUPS RestrictedSids;
5049 } JOBOBJECT_SECURITY_LIMIT_INFORMATION,*PJOBOBJECT_SECURITY_LIMIT_INFORMATION;
5050
5051 typedef struct _JOBOBJECT_END_OF_JOB_TIME_INFORMATION {
5052 DWORD EndOfJobTimeAction;
5053 } JOBOBJECT_END_OF_JOB_TIME_INFORMATION,*PJOBOBJECT_END_OF_JOB_TIME_INFORMATION;
5054
5055 typedef struct _JOBOBJECT_ASSOCIATE_COMPLETION_PORT {
5056 PVOID CompletionKey;
5057 HANDLE CompletionPort;
5058 } JOBOBJECT_ASSOCIATE_COMPLETION_PORT,*PJOBOBJECT_ASSOCIATE_COMPLETION_PORT;
5059
5060 typedef struct _JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION {
5061 JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo;
5062 IO_COUNTERS IoInfo;
5063 } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION,*PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION;
5064
5065 typedef struct _JOBOBJECT_JOBSET_INFORMATION {
5066 DWORD MemberLevel;
5067 } JOBOBJECT_JOBSET_INFORMATION,*PJOBOBJECT_JOBSET_INFORMATION;
5068
5069 typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE {
5070 ToleranceLow = 1,
5071 ToleranceMedium,
5072 ToleranceHigh
5073 } JOBOBJECT_RATE_CONTROL_TOLERANCE;
5074
5075 typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL {
5076 ToleranceIntervalShort = 1,
5077 ToleranceIntervalMedium,
5078 ToleranceIntervalLong
5079 } JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL;
5080
5081 typedef struct _JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
5082 DWORD64 IoReadBytesLimit;
5083 DWORD64 IoWriteBytesLimit;
5084 LARGE_INTEGER PerJobUserTimeLimit;
5085 DWORD64 JobMemoryLimit;
5086 JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
5087 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
5088 DWORD LimitFlags;
5089 } JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION,*PJOBOBJECT_NOTIFICATION_LIMIT_INFORMATION;
5090
5091 typedef struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2 {
5092 DWORD64 IoReadBytesLimit;
5093 DWORD64 IoWriteBytesLimit;
5094 LARGE_INTEGER PerJobUserTimeLimit;
5095 __C89_NAMELESS union {
5096 DWORD64 JobHighMemoryLimit;
5097 DWORD64 JobMemoryLimit;
5098 };
5099 __C89_NAMELESS union {
5100 JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
5101 JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlTolerance;
5102 };
5103 __C89_NAMELESS union {
5104 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
5105 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL CpuRateControlToleranceInterval;
5106 };
5107 DWORD LimitFlags;
5108 JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlTolerance;
5109 DWORD64 JobLowMemoryLimit;
5110 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL IoRateControlToleranceInterval;
5111 JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlTolerance;
5112 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL NetRateControlToleranceInterval;
5113 } JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2;
5114
5115 typedef struct _JOBOBJECT_LIMIT_VIOLATION_INFORMATION {
5116 DWORD LimitFlags;
5117 DWORD ViolationLimitFlags;
5118 DWORD64 IoReadBytes;
5119 DWORD64 IoReadBytesLimit;
5120 DWORD64 IoWriteBytes;
5121 DWORD64 IoWriteBytesLimit;
5122 LARGE_INTEGER PerJobUserTime;
5123 LARGE_INTEGER PerJobUserTimeLimit;
5124 DWORD64 JobMemory;
5125 DWORD64 JobMemoryLimit;
5126 JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
5127 JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceLimit;
5128 } JOBOBJECT_LIMIT_VIOLATION_INFORMATION,*PJOBOBJECT_LIMIT_VIOLATION_INFORMATION;
5129
5130 typedef struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2 {
5131 DWORD LimitFlags;
5132 DWORD ViolationLimitFlags;
5133 DWORD64 IoReadBytes;
5134 DWORD64 IoReadBytesLimit;
5135 DWORD64 IoWriteBytes;
5136 DWORD64 IoWriteBytesLimit;
5137 LARGE_INTEGER PerJobUserTime;
5138 LARGE_INTEGER PerJobUserTimeLimit;
5139 DWORD64 JobMemory;
5140 __C89_NAMELESS union {
5141 DWORD64 JobHighMemoryLimit;
5142 DWORD64 JobMemoryLimit;
5143 };
5144 __C89_NAMELESS union {
5145 JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
5146 JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlTolerance;
5147 };
5148 __C89_NAMELESS union {
5149 JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlToleranceLimit;
5150 JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlToleranceLimit;
5151 };
5152 DWORD64 JobLowMemoryLimit;
5153 JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlTolerance;
5154 JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlToleranceLimit;
5155 JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlTolerance;
5156 JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlToleranceLimit;
5157 } JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2;
5158
5159 typedef struct _JOBOBJECT_CPU_RATE_CONTROL_INFORMATION {
5160 DWORD ControlFlags;
5161 __C89_NAMELESS union {
5162 DWORD CpuRate;
5163 DWORD Weight;
5164 };
5165 } JOBOBJECT_CPU_RATE_CONTROL_INFORMATION,*PJOBOBJECT_CPU_RATE_CONTROL_INFORMATION;
5166
5167 typedef enum JOB_OBJECT_NET_RATE_CONTROL_FLAGS {
5168 JOB_OBJECT_NET_RATE_CONTROL_ENABLE = 0x1,
5169 JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH = 0x2,
5170 JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG = 0x4,
5171 JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS = 0x7
5172 } JOB_OBJECT_NET_RATE_CONTROL_FLAGS;
5173
5174#if !defined(SORTPP_PASS) && !defined(__WIDL__) && !defined(RC_INVOKED)
5175DEFINE_ENUM_FLAG_OPERATORS(JOB_OBJECT_NET_RATE_CONTROL_FLAGS)
5176C_ASSERT(JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS == (JOB_OBJECT_NET_RATE_CONTROL_ENABLE + JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH + JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG));
5177#endif
5178
5179#define JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG 64
5180
5181 typedef struct JOBOBJECT_NET_RATE_CONTROL_INFORMATION {
5182 DWORD64 MaxBandwidth;
5183 JOB_OBJECT_NET_RATE_CONTROL_FLAGS ControlFlags;
5184 BYTE DscpTag;
5185 } JOBOBJECT_NET_RATE_CONTROL_INFORMATION;
5186
5187 typedef enum JOB_OBJECT_IO_RATE_CONTROL_FLAGS {
5188 JOB_OBJECT_IO_RATE_CONTROL_ENABLE = 0x1,
5189 JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME = 0x2,
5190 JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ALL = 0x4,
5191 JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ON_SOFT_CAP = 0x8,
5192 JOB_OBJECT_IO_RATE_CONTROL_VALID_FLAGS = JOB_OBJECT_IO_RATE_CONTROL_ENABLE | JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME | JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ALL | JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ON_SOFT_CAP
5193 } JOB_OBJECT_IO_RATE_CONTROL_FLAGS;
5194
5195#if !defined(SORTPP_PASS) && !defined(__WIDL__) && !defined(RC_INVOKED)
5196DEFINE_ENUM_FLAG_OPERATORS(JOB_OBJECT_IO_RATE_CONTROL_FLAGS)
5197#endif
5198
5199 typedef struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE {
5200 LONG64 MaxIops;
5201 LONG64 MaxBandwidth;
5202 LONG64 ReservationIops;
5203 PWSTR VolumeName;
5204 DWORD BaseIoSize;
5205 JOB_OBJECT_IO_RATE_CONTROL_FLAGS ControlFlags;
5206 WORD VolumeNameLength;
5207 } JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE;
5208
5209 typedef JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V1;
5210
5211 typedef struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2 {
5212 LONG64 MaxIops;
5213 LONG64 MaxBandwidth;
5214 LONG64 ReservationIops;
5215 PWSTR VolumeName;
5216 DWORD BaseIoSize;
5217 JOB_OBJECT_IO_RATE_CONTROL_FLAGS ControlFlags;
5218 WORD VolumeNameLength;
5219 LONG64 CriticalReservationIops;
5220 LONG64 ReservationBandwidth;
5221 LONG64 CriticalReservationBandwidth;
5222 LONG64 MaxTimePercent;
5223 LONG64 ReservationTimePercent;
5224 LONG64 CriticalReservationTimePercent;
5225 } JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2;
5226
5227 typedef struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V3 {
5228 LONG64 MaxIops;
5229 LONG64 MaxBandwidth;
5230 LONG64 ReservationIops;
5231 PWSTR VolumeName;
5232 DWORD BaseIoSize;
5233 JOB_OBJECT_IO_RATE_CONTROL_FLAGS ControlFlags;
5234 WORD VolumeNameLength;
5235 LONG64 CriticalReservationIops;
5236 LONG64 ReservationBandwidth;
5237 LONG64 CriticalReservationBandwidth;
5238 LONG64 MaxTimePercent;
5239 LONG64 ReservationTimePercent;
5240 LONG64 CriticalReservationTimePercent;
5241 LONG64 SoftMaxIops;
5242 LONG64 SoftMaxBandwidth;
5243 LONG64 SoftMaxTimePercent;
5244 LONG64 LimitExcessNotifyIops;
5245 LONG64 LimitExcessNotifyBandwidth;
5246 LONG64 LimitExcessNotifyTimePercent;
5247 } JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V3;
5248
5249 typedef enum JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS {
5250 JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE = 0x1,
5251 JOBOBJECT_IO_ATTRIBUTION_CONTROL_DISABLE = 0x2,
5252 JOBOBJECT_IO_ATTRIBUTION_CONTROL_VALID_FLAGS = 0x3
5253 } JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS;
5254
5255 typedef struct _JOBOBJECT_IO_ATTRIBUTION_STATS {
5256 ULONG_PTR IoCount;
5257 ULONGLONG TotalNonOverlappedQueueTime;
5258 ULONGLONG TotalNonOverlappedServiceTime;
5259 ULONGLONG TotalSize;
5260 } JOBOBJECT_IO_ATTRIBUTION_STATS, *PJOBOBJECT_IO_ATTRIBUTION_STATS;
5261
5262 typedef struct _JOBOBJECT_IO_ATTRIBUTION_INFORMATION {
5263 DWORD ControlFlags;
5264 JOBOBJECT_IO_ATTRIBUTION_STATS ReadStats;
5265 JOBOBJECT_IO_ATTRIBUTION_STATS WriteStats;
5266 } JOBOBJECT_IO_ATTRIBUTION_INFORMATION, *PJOBOBJECT_IO_ATTRIBUTION_INFORMATION;
5267
5268#define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
5269#define JOB_OBJECT_POST_AT_END_OF_JOB 1
5270
5271#define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
5272#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
5273#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
5274#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
5275#define JOB_OBJECT_MSG_NEW_PROCESS 6
5276#define JOB_OBJECT_MSG_EXIT_PROCESS 7
5277#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
5278#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
5279#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
5280#define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 11
5281#define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 12
5282#define JOB_OBJECT_MSG_SILO_TERMINATED 13
5283
5284#define JOB_OBJECT_MSG_MINIMUM 1
5285#define JOB_OBJECT_MSG_MAXIMUM 12
5286#define JOB_OBJECT_VALID_COMPLETION_FILTER (((__MSABI_LONG(1U) << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1) - ((__MSABI_LONG(1U) << JOB_OBJECT_MSG_MINIMUM) - 1))
5287
5288#define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
5289#define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
5290#define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
5291#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
5292#define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
5293#define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
5294#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
5295#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
5296
5297#define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
5298#define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
5299#define JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH JOB_OBJECT_LIMIT_JOB_MEMORY
5300#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
5301#define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
5302#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
5303#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
5304#define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
5305#define JOB_OBJECT_LIMIT_JOB_MEMORY_LOW 0x00008000
5306
5307#define JOB_OBJECT_LIMIT_JOB_READ_BYTES 0x00010000
5308#define JOB_OBJECT_LIMIT_JOB_WRITE_BYTES 0x00020000
5309#define JOB_OBJECT_LIMIT_RATE_CONTROL 0x00040000
5310#define JOB_OBJECT_LIMIT_CPU_RATE_CONTROL JOB_OBJECT_LIMIT_RATE_CONTROL
5311#define JOB_OBJECT_LIMIT_IO_RATE_CONTROL 0x00080000
5312#define JOB_OBJECT_LIMIT_NET_RATE_CONTROL 0x00100000
5313
5314#define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
5315#define JOB_OBJECT_LIMIT_RESERVED4 0x00010000
5316#define JOB_OBJECT_LIMIT_RESERVED5 0x00020000
5317#define JOB_OBJECT_LIMIT_RESERVED6 0x00040000
5318
5319#define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
5320
5321#define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
5322#define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
5323#define JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS 0x0007ffff
5324#define JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS 0x00070204
5325
5326#define JOB_OBJECT_UILIMIT_NONE 0x00000000
5327
5328#define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
5329#define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
5330#define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
5331#define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
5332#define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
5333#define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
5334#define JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
5335#define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
5336
5337#define JOB_OBJECT_UILIMIT_ALL 0x000000FF
5338
5339#define JOB_OBJECT_UI_VALID_FLAGS 0x000000FF
5340
5341#define JOB_OBJECT_SECURITY_NO_ADMIN 0x00000001
5342#define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x00000002
5343#define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x00000004
5344#define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x00000008
5345
5346#define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
5347
5348#define JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x1
5349#define JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x2
5350#define JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x4
5351#define JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x8
5352#define JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE 0x10
5353#define JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS 0x1f
5354
5355 typedef enum _JOBOBJECTINFOCLASS {
5356 JobObjectBasicAccountingInformation = 1,
5357 JobObjectBasicLimitInformation,
5358 JobObjectBasicProcessIdList,
5359 JobObjectBasicUIRestrictions,
5360 JobObjectSecurityLimitInformation,
5361 JobObjectEndOfJobTimeInformation,
5362 JobObjectAssociateCompletionPortInformation,
5363 JobObjectBasicAndIoAccountingInformation,
5364 JobObjectExtendedLimitInformation,
5365 JobObjectJobSetInformation,
5366 JobObjectGroupInformation,
5367 JobObjectNotificationLimitInformation,
5368 JobObjectLimitViolationInformation,
5369 JobObjectGroupInformationEx,
5370 JobObjectCpuRateControlInformation,
5371 JobObjectCompletionFilter,
5372 JobObjectCompletionCounter,
5373 JobObjectReserved1Information = 18,
5374 JobObjectReserved2Information,
5375 JobObjectReserved3Information,
5376 JobObjectReserved4Information,
5377 JobObjectReserved5Information,
5378 JobObjectReserved6Information,
5379 JobObjectReserved7Information,
5380 JobObjectReserved8Information,
5381 JobObjectReserved9Information,
5382 JobObjectReserved10Information,
5383 JobObjectReserved11Information,
5384 JobObjectReserved12Information,
5385 JobObjectReserved13Information,
5386 JobObjectReserved14Information = 31,
5387 JobObjectNetRateControlInformation,
5388 JobObjectNotificationLimitInformation2,
5389 JobObjectLimitViolationInformation2,
5390 JobObjectCreateSilo,
5391 JobObjectSiloBasicInformation,
5392 JobObjectReserved15Information = 37,
5393 JobObjectReserved16Information = 38,
5394 JobObjectReserved17Information = 39,
5395 JobObjectReserved18Information = 40,
5396 JobObjectReserved19Information = 41,
5397 JobObjectReserved20Information = 42,
5398 JobObjectReserved21Information = 43,
5399 JobObjectReserved22Information = 44,
5400 JobObjectReserved23Information = 45,
5401 JobObjectReserved24Information = 46,
5402 JobObjectReserved25Information = 47,
5403 MaxJobObjectInfoClass
5404 } JOBOBJECTINFOCLASS;
5405
5406 typedef struct _SILOOBJECT_BASIC_INFORMATION {
5407 DWORD SiloId;
5408 DWORD SiloParentId;
5409 DWORD NumberOfProcesses;
5410 BOOLEAN IsInServerSilo;
5411 BYTE Reserved[3];
5412 } SILOOBJECT_BASIC_INFORMATION, *PSILOOBJECT_BASIC_INFORMATION;
5413
5414 typedef enum _SERVERSILO_STATE {
5415 SERVERSILO_INITING = 0,
5416 SERVERSILO_STARTED,
5417 SERVERSILO_SHUTTING_DOWN,
5418 SERVERSILO_TERMINATING,
5419 SERVERSILO_TERMINATED
5420 } SERVERSILO_STATE, *PSERVERSILO_STATE;
5421
5422 typedef struct _SERVERSILO_BASIC_INFORMATION {
5423 DWORD ServiceSessionId;
5424 SERVERSILO_STATE State;
5425 DWORD ExitStatus;
5426 BOOLEAN IsDownlevelContainer;
5427 PVOID ApiSetSchema;
5428 PVOID HostApiSetSchema;
5429 } SERVERSILO_BASIC_INFORMATION, *PSERVERSILO_BASIC_INFORMATION;
5430
5431#define MEMORY_PARTITION_QUERY_ACCESS 0x0001
5432#define MEMORY_PARTITION_MODIFY_ACCESS 0x0002
5433#define MEMORY_PARTITION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MEMORY_PARTITION_QUERY_ACCESS | MEMORY_PARTITION_MODIFY_ACCESS)
5434
5435 typedef enum _FIRMWARE_TYPE {
5436 FirmwareTypeUnknown,
5437 FirmwareTypeBios,
5438 FirmwareTypeUefi,
5439 FirmwareTypeMax
5440 } FIRMWARE_TYPE,*PFIRMWARE_TYPE;
5441
5442#define EVENT_MODIFY_STATE 0x0002
5443#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5444
5445#define MUTANT_QUERY_STATE 0x0001
5446
5447#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| MUTANT_QUERY_STATE)
5448#define SEMAPHORE_MODIFY_STATE 0x0002
5449#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
5450
5451#define TIMER_QUERY_STATE 0x0001
5452#define TIMER_MODIFY_STATE 0x0002
5453
5454#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE| TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
5455
5456#define TIME_ZONE_ID_UNKNOWN 0
5457#define TIME_ZONE_ID_STANDARD 1
5458#define TIME_ZONE_ID_DAYLIGHT 2
5459
5460 typedef enum _LOGICAL_PROCESSOR_RELATIONSHIP {
5461 RelationProcessorCore,
5462 RelationNumaNode,
5463 RelationCache,
5464 RelationProcessorPackage,
5465 RelationGroup,
5466 RelationProcessorDie,
5467 RelationNumaNodeEx,
5468 RelationProcessorModule,
5469 RelationAll = 0xffff
5470 } LOGICAL_PROCESSOR_RELATIONSHIP;
5471
5472#define LTP_PC_SMT 0x1
5473
5474 typedef enum _PROCESSOR_CACHE_TYPE {
5475 CacheUnified,CacheInstruction,CacheData,CacheTrace,CacheUnknown
5476 } PROCESSOR_CACHE_TYPE;
5477
5478#define CACHE_FULLY_ASSOCIATIVE 0xFF
5479
5480 typedef struct _CACHE_DESCRIPTOR {
5481 BYTE Level;
5482 BYTE Associativity;
5483 WORD LineSize;
5484 DWORD Size;
5485 PROCESSOR_CACHE_TYPE Type;
5486 } CACHE_DESCRIPTOR,*PCACHE_DESCRIPTOR;
5487
5488 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION {
5489 ULONG_PTR ProcessorMask;
5490 LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
5491 __C89_NAMELESS union {
5492 struct {
5493 BYTE Flags;
5494 } ProcessorCore;
5495 struct {
5496 DWORD NodeNumber;
5497 } NumaNode;
5498 CACHE_DESCRIPTOR Cache;
5499 ULONGLONG Reserved[2];
5500 } DUMMYUNIONNAME;
5501 } SYSTEM_LOGICAL_PROCESSOR_INFORMATION,*PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
5502
5503 typedef struct _PROCESSOR_RELATIONSHIP {
5504 BYTE Flags;
5505 BYTE EfficiencyClass;
5506 BYTE Reserved[20];
5507 WORD GroupCount;
5508 GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
5509 } PROCESSOR_RELATIONSHIP,*PPROCESSOR_RELATIONSHIP;
5510
5511 typedef struct _NUMA_NODE_RELATIONSHIP {
5512 DWORD NodeNumber;
5513 BYTE Reserved[18];
5514 WORD GroupCount;
5515 __C89_NAMELESS union {
5516 GROUP_AFFINITY GroupMask;
5517 GROUP_AFFINITY GroupMasks[ANYSIZE_ARRAY];
5518 };
5519 } NUMA_NODE_RELATIONSHIP,*PNUMA_NODE_RELATIONSHIP;
5520
5521 typedef struct _CACHE_RELATIONSHIP {
5522 BYTE Level;
5523 BYTE Associativity;
5524 WORD LineSize;
5525 DWORD CacheSize;
5526 PROCESSOR_CACHE_TYPE Type;
5527 BYTE Reserved[18];
5528 WORD GroupCount;
5529 __C89_NAMELESS union {
5530 GROUP_AFFINITY GroupMask;
5531 GROUP_AFFINITY GroupMasks[ANYSIZE_ARRAY];
5532 };
5533 } CACHE_RELATIONSHIP,*PCACHE_RELATIONSHIP;
5534
5535 typedef struct _PROCESSOR_GROUP_INFO {
5536 BYTE MaximumProcessorCount;
5537 BYTE ActiveProcessorCount;
5538 BYTE Reserved[38];
5539 KAFFINITY ActiveProcessorMask;
5540 } PROCESSOR_GROUP_INFO,*PPROCESSOR_GROUP_INFO;
5541
5542 typedef struct _GROUP_RELATIONSHIP {
5543 WORD MaximumGroupCount;
5544 WORD ActiveGroupCount;
5545 BYTE Reserved[20];
5546 PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
5547 } GROUP_RELATIONSHIP,*PGROUP_RELATIONSHIP;
5548
5549 struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
5550 LOGICAL_PROCESSOR_RELATIONSHIP Relationship;
5551 DWORD Size;
5552 __C89_NAMELESS union {
5553 PROCESSOR_RELATIONSHIP Processor;
5554 NUMA_NODE_RELATIONSHIP NumaNode;
5555 CACHE_RELATIONSHIP Cache;
5556 GROUP_RELATIONSHIP Group;
5557 };
5558 };
5559
5560 typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
5561
5562 typedef enum _CPU_SET_INFORMATION_TYPE {
5563 CpuSetInformation
5564 } CPU_SET_INFORMATION_TYPE, *PCPU_SET_INFORMATION_TYPE;
5565
5566#define SYSTEM_CPU_SET_INFORMATION_PARKED 0x1
5567#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED 0x2
5568#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS 0x4
5569#define SYSTEM_CPU_SET_INFORMATION_REALTIME 0x8
5570
5571 struct _SYSTEM_CPU_SET_INFORMATION {
5572 DWORD Size;
5573 CPU_SET_INFORMATION_TYPE Type;
5574 __C89_NAMELESS union {
5575 struct {
5576 DWORD Id;
5577 WORD Group;
5578 BYTE LogicalProcessorIndex;
5579 BYTE CoreIndex;
5580 BYTE LastLevelCacheIndex;
5581 BYTE NumaNodeIndex;
5582 BYTE EfficiencyClass;
5583 __C89_NAMELESS union {
5584 BYTE AllFlags;
5585 __C89_NAMELESS struct {
5586 BYTE Parked : 1;
5587 BYTE Allocated : 1;
5588 BYTE AllocatedToTargetProcess : 1;
5589 BYTE RealTime : 1;
5590 BYTE ReservedFlags : 4;
5591 };
5592 };
5593 __C89_NAMELESS union {
5594 DWORD Reserved;
5595 BYTE SchedulingClass;
5596 };
5597 DWORD64 AllocationTag;
5598 } CpuSet;
5599 };
5600 };
5601
5602 typedef struct _SYSTEM_CPU_SET_INFORMATION SYSTEM_CPU_SET_INFORMATION, *PSYSTEM_CPU_SET_INFORMATION;
5603
5604 typedef struct _SYSTEM_POOL_ZEROING_INFORMATION {
5605 BOOLEAN PoolZeroingSupportPresent;
5606 } SYSTEM_POOL_ZEROING_INFORMATION, *PSYSTEM_POOL_ZEROING_INFORMATION;
5607
5608 typedef struct _SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION {
5609 DWORD64 CycleTime;
5610 } SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION,*PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION;
5611
5612 typedef struct _SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION {
5613 DWORD Machine : 16;
5614 DWORD KernelMode : 1;
5615 DWORD UserMode : 1;
5616 DWORD Native : 1;
5617 DWORD Process : 1;
5618 DWORD WoW64Container : 1;
5619 DWORD ReservedZero0 : 11;
5620 } SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION,*PSYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION;
5621
5622#define PROCESSOR_INTEL_386 386
5623#define PROCESSOR_INTEL_486 486
5624#define PROCESSOR_INTEL_PENTIUM 586
5625#define PROCESSOR_INTEL_IA64 2200
5626#define PROCESSOR_AMD_X8664 8664
5627#define PROCESSOR_MIPS_R4000 4000
5628#define PROCESSOR_ALPHA_21064 21064
5629#define PROCESSOR_PPC_601 601
5630#define PROCESSOR_PPC_603 603
5631#define PROCESSOR_PPC_604 604
5632#define PROCESSOR_PPC_620 620
5633#define PROCESSOR_HITACHI_SH3 10003
5634#define PROCESSOR_HITACHI_SH3E 10004
5635#define PROCESSOR_HITACHI_SH4 10005
5636#define PROCESSOR_MOTOROLA_821 821
5637#define PROCESSOR_SHx_SH3 103
5638#define PROCESSOR_SHx_SH4 104
5639#define PROCESSOR_STRONGARM 2577
5640#define PROCESSOR_ARM720 1824
5641#define PROCESSOR_ARM820 2080
5642#define PROCESSOR_ARM920 2336
5643#define PROCESSOR_ARM_7TDMI 70001
5644#define PROCESSOR_OPTIL 0x494f
5645
5646#define PROCESSOR_ARCHITECTURE_INTEL 0
5647#define PROCESSOR_ARCHITECTURE_MIPS 1
5648#define PROCESSOR_ARCHITECTURE_ALPHA 2
5649#define PROCESSOR_ARCHITECTURE_PPC 3
5650#define PROCESSOR_ARCHITECTURE_SHX 4
5651#define PROCESSOR_ARCHITECTURE_ARM 5
5652#define PROCESSOR_ARCHITECTURE_IA64 6
5653#define PROCESSOR_ARCHITECTURE_ALPHA64 7
5654#define PROCESSOR_ARCHITECTURE_MSIL 8
5655#define PROCESSOR_ARCHITECTURE_AMD64 9
5656#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
5657#define PROCESSOR_ARCHITECTURE_NEUTRAL 11
5658#define PROCESSOR_ARCHITECTURE_ARM64 12
5659#define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
5660#define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
5661
5662#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xffff
5663
5664#define PF_FLOATING_POINT_PRECISION_ERRATA 0
5665#define PF_FLOATING_POINT_EMULATED 1
5666#define PF_COMPARE_EXCHANGE_DOUBLE 2
5667#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
5668#define PF_PPC_MOVEMEM_64BIT_OK 4
5669#define PF_ALPHA_BYTE_INSTRUCTIONS 5
5670#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
5671#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
5672#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
5673#define PF_PAE_ENABLED 9
5674#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
5675#define PF_SSE_DAZ_MODE_AVAILABLE 11
5676#define PF_NX_ENABLED 12
5677#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
5678#define PF_COMPARE_EXCHANGE128 14
5679#define PF_COMPARE64_EXCHANGE128 15
5680#define PF_CHANNELS_ENABLED 16
5681#define PF_XSAVE_ENABLED 17
5682#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
5683#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
5684#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
5685#define PF_VIRT_FIRMWARE_ENABLED 21
5686#define PF_RDWRFSGSBASE_AVAILABLE 22
5687#define PF_FASTFAIL_AVAILABLE 23
5688#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
5689#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
5690#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
5691#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
5692#define PF_RDRAND_INSTRUCTION_AVAILABLE 28
5693#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
5694#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
5695#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
5696#define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
5697#define PF_RDPID_INSTRUCTION_AVAILABLE 33
5698#define PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE 34
5699#define PF_MONITORX_INSTRUCTION_AVAILABLE 35
5700#define PF_SSSE3_INSTRUCTIONS_AVAILABLE 36
5701#define PF_SSE4_1_INSTRUCTIONS_AVAILABLE 37
5702#define PF_SSE4_2_INSTRUCTIONS_AVAILABLE 38
5703#define PF_AVX_INSTRUCTIONS_AVAILABLE 39
5704#define PF_AVX2_INSTRUCTIONS_AVAILABLE 40
5705#define PF_AVX512F_INSTRUCTIONS_AVAILABLE 41
5706#define PF_ERMS_AVAILABLE 42
5707#define PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE 43
5708#define PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE 44
5709#define PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE 45
5710#define PF_ARM_SVE_INSTRUCTIONS_AVAILABLE 46
5711#define PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE 47
5712#define PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE 48
5713#define PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE 49
5714#define PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE 50
5715#define PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE 51
5716#define PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE 52
5717#define PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE 53
5718#define PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE 54
5719#define PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE 55
5720#define PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE 56
5721#define PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE 57
5722#define PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE 58
5723#define PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE 59
5724#define PF_BMI2_INSTRUCTIONS_AVAILABLE 60
5725
5726#define XSTATE_LEGACY_FLOATING_POINT (0)
5727#define XSTATE_LEGACY_SSE (1)
5728#define XSTATE_GSSE (2)
5729#define XSTATE_AVX (XSTATE_GSSE)
5730#define XSTATE_MPX_BNDREGS (3)
5731#define XSTATE_MPX_BNDCSR (4)
5732#define XSTATE_AVX512_KMASK (5)
5733#define XSTATE_AVX512_ZMM_H (6)
5734#define XSTATE_AVX512_ZMM (7)
5735#define XSTATE_IPT (8)
5736#define XSTATE_PASID (10)
5737#define XSTATE_CET_U (11)
5738#define XSTATE_CET_S (12)
5739#define XSTATE_AMX_TILE_CONFIG (17)
5740#define XSTATE_AMX_TILE_DATA (18)
5741#define XSTATE_LWP (62)
5742#define MAXIMUM_XSTATE_FEATURES (64)
5743
5744#define XSTATE_MASK_LEGACY_FLOATING_POINT (1ULL << (XSTATE_LEGACY_FLOATING_POINT))
5745#define XSTATE_MASK_LEGACY_SSE (1ULL << (XSTATE_LEGACY_SSE))
5746#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | XSTATE_MASK_LEGACY_SSE)
5747#define XSTATE_MASK_GSSE (1LLU << (XSTATE_GSSE))
5748#define XSTATE_MASK_AVX (XSTATE_MASK_GSSE)
5749#define XSTATE_MASK_MPX ((1LLU << (XSTATE_MPX_BNDREGS)) | (1LLU << (XSTATE_MPX_BNDCSR)))
5750#define XSTATE_MASK_AVX512 ((1LLU << (XSTATE_AVX512_KMASK)) | (1LLU << (XSTATE_AVX512_ZMM_H)) | (1LLU << (XSTATE_AVX512_ZMM)))
5751#define XSTATE_MASK_IPT (1LLU << (XSTATE_IPT))
5752#define XSTATE_MASK_PASID (1LLU << (XSTATE_PASID))
5753#define XSTATE_MASK_CET_U (1LLU << (XSTATE_CET_U))
5754#define XSTATE_MASK_CET_S (1LLU << (XSTATE_CET_S))
5755#define XSTATE_MASK_AMX_TILE_CONFIG (1LLU << (XSTATE_AMX_TILE_CONFIG))
5756#define XSTATE_MASK_AMX_TILE_DATA (1LLU << (XSTATE_AMX_TILE_DATA))
5757#define XSTATE_MASK_LWP (1LLU << (XSTATE_LWP))
5758#if defined(_AMD64_) || defined(__x86_64__)
5759#define XSTATE_MASK_ALLOWED (XSTATE_MASK_LEGACY | XSTATE_MASK_AVX | XSTATE_MASK_MPX | XSTATE_MASK_AVX512 | XSTATE_MASK_IPT | XSTATE_MASK_PASID | XSTATE_MASK_CET_U | XSTATE_MASK_AMX_TILE_CONFIG | XSTATE_MASK_AMX_TILE_DATA | XSTATE_MASK_LWP)
5760#elif defined(_X86_) || defined(__i386__)
5761#define XSTATE_MASK_ALLOWED (XSTATE_MASK_LEGACY | XSTATE_MASK_AVX | XSTATE_MASK_MPX | XSTATE_MASK_AVX512 | XSTATE_MASK_IPT | XSTATE_MASK_CET_U | XSTATE_MASK_LWP)
5762#endif
5763#define XSTATE_MASK_PERSISTENT ((1LLU << (XSTATE_MPX_BNDCSR)) | XSTATE_MASK_LWP)
5764#define XSTATE_MASK_USER_VISIBLE_SUPERVISOR (XSTATE_MASK_CET_U)
5765#define XSTATE_MASK_LARGE_FEATURES (XSTATE_MASK_AMX_TILE_DATA)
5766
5767#define XSTATE_COMPACTION_ENABLE (63)
5768#define XSTATE_COMPACTION_ENABLE_MASK (1ULL << (XSTATE_COMPACTION_ENABLE))
5769
5770#define XSTATE_ALIGN_BIT (1)
5771#define XSTATE_ALIGN_MASK (1ULL << (XSTATE_ALIGN_BIT))
5772
5773#define XSTATE_XFD_BIT (2)
5774#define XSTATE_XFD_MASK (1ULL << (XSTATE_XFD_BIT))
5775
5776#define XSTATE_CONTROLFLAG_XSAVEOPT_MASK (1)
5777#define XSTATE_CONTROLFLAG_XSAVEC_MASK (2)
5778#define XSTATE_CONTROLFLAG_XFD_MASK (4)
5779#define XSTATE_CONTROLFLAG_VALID_MASK (XSTATE_CONTROLFLAG_XSAVEOPT_MASK | XSTATE_CONTROLFLAG_XSAVEC_MASK | XSTATE_CONTROLFLAG_XFD_MASK)
5780
5781 typedef struct _XSTATE_FEATURE {
5782 DWORD Offset;
5783 DWORD Size;
5784 } XSTATE_FEATURE,*PXSTATE_FEATURE;
5785
5786 typedef struct _XSTATE_CONFIGURATION {
5787 DWORD64 EnabledFeatures;
5788 DWORD64 EnabledVolatileFeatures;
5789 DWORD Size;
5790 __C89_NAMELESS union {
5791 DWORD ControlFlags;
5792 __C89_NAMELESS struct {
5793 DWORD OptimizedSave : 1;
5794 DWORD CompactionEnabled : 1;
5795 DWORD ExtendedFeatureDisable : 1;
5796 };
5797 };
5798 XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
5799 DWORD64 EnabledSupervisorFeatures;
5800 DWORD64 AlignedFeatures;
5801 DWORD AllFeatureSize;
5802 DWORD AllFeatures[MAXIMUM_XSTATE_FEATURES];
5803 DWORD64 EnabledUserVisibleSupervisorFeatures;
5804 DWORD64 ExtendedFeatureDisableFeatures;
5805 DWORD AllNonLargeFeatureSize;
5806 DWORD Spare;
5807 } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
5808
5809 typedef struct _MEMORY_BASIC_INFORMATION {
5810 PVOID BaseAddress;
5811 PVOID AllocationBase;
5812 DWORD AllocationProtect;
5813#if defined (_WIN64)
5814 WORD PartitionId;
5815#endif
5816 SIZE_T RegionSize;
5817 DWORD State;
5818 DWORD Protect;
5819 DWORD Type;
5820 } MEMORY_BASIC_INFORMATION,*PMEMORY_BASIC_INFORMATION;
5821
5822 typedef struct _MEMORY_BASIC_INFORMATION32 {
5823 DWORD BaseAddress;
5824 DWORD AllocationBase;
5825 DWORD AllocationProtect;
5826 DWORD RegionSize;
5827 DWORD State;
5828 DWORD Protect;
5829 DWORD Type;
5830 } MEMORY_BASIC_INFORMATION32,*PMEMORY_BASIC_INFORMATION32;
5831
5832 typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 {
5833 ULONGLONG BaseAddress;
5834 ULONGLONG AllocationBase;
5835 DWORD AllocationProtect;
5836 DWORD __alignment1;
5837 ULONGLONG RegionSize;
5838 DWORD State;
5839 DWORD Protect;
5840 DWORD Type;
5841 DWORD __alignment2;
5842 } MEMORY_BASIC_INFORMATION64,*PMEMORY_BASIC_INFORMATION64;
5843
5844#define CFG_CALL_TARGET_VALID 0x01
5845#define CFG_CALL_TARGET_PROCESSED 0x02
5846#define CFG_CALL_TARGET_CONVERT_EXPORT_SUPPRESSED_TO_VALID 0x04
5847#define CFG_CALL_TARGET_VALID_XFG (0x08)
5848#define CFG_CALL_TARGET_CONVERT_XFG_TO_CFG (0x10)
5849
5850 typedef struct _CFG_CALL_TARGET_INFO {
5851 ULONG_PTR Offset;
5852 ULONG_PTR Flags;
5853 } CFG_CALL_TARGET_INFO, *PCFG_CALL_TARGET_INFO;
5854
5855#define SECTION_QUERY 0x0001
5856#define SECTION_MAP_WRITE 0x0002
5857#define SECTION_MAP_READ 0x0004
5858#define SECTION_MAP_EXECUTE 0x0008
5859#define SECTION_EXTEND_SIZE 0x0010
5860#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020
5861
5862#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY| SECTION_MAP_WRITE | SECTION_MAP_READ | SECTION_MAP_EXECUTE | SECTION_EXTEND_SIZE)
5863
5864#define SESSION_QUERY_ACCESS 0x1
5865#define SESSION_MODIFY_ACCESS 0x2
5866
5867#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SESSION_QUERY_ACCESS | SESSION_MODIFY_ACCESS)
5868
5869#define PAGE_NOACCESS 0x01
5870#define PAGE_READONLY 0x02
5871#define PAGE_READWRITE 0x04
5872#define PAGE_WRITECOPY 0x08
5873#define PAGE_EXECUTE 0x10
5874#define PAGE_EXECUTE_READ 0x20
5875#define PAGE_EXECUTE_READWRITE 0x40
5876#define PAGE_EXECUTE_WRITECOPY 0x80
5877#define PAGE_GUARD 0x100
5878#define PAGE_NOCACHE 0x200
5879#define PAGE_WRITECOMBINE 0x400
5880#define PAGE_GRAPHICS_NOACCESS 0x0800
5881#define PAGE_GRAPHICS_READONLY 0x1000
5882#define PAGE_GRAPHICS_READWRITE 0x2000
5883#define PAGE_GRAPHICS_EXECUTE 0x4000
5884#define PAGE_GRAPHICS_EXECUTE_READ 0x8000
5885#define PAGE_GRAPHICS_EXECUTE_READWRITE 0x10000
5886#define PAGE_GRAPHICS_COHERENT 0x20000
5887#define PAGE_GRAPHICS_NOCACHE 0x40000
5888#define PAGE_ENCLAVE_THREAD_CONTROL 0x80000000
5889#define PAGE_REVERT_TO_FILE_MAP 0x80000000
5890#define PAGE_TARGETS_NO_UPDATE 0x40000000
5891#define PAGE_TARGETS_INVALID 0x40000000
5892#define PAGE_ENCLAVE_UNVALIDATED 0x20000000
5893#define PAGE_ENCLAVE_MASK 0x10000000
5894#define PAGE_ENCLAVE_DECOMMIT (PAGE_ENCLAVE_MASK | 0)
5895#define PAGE_ENCLAVE_SS_FIRST (PAGE_ENCLAVE_MASK | 1)
5896#define PAGE_ENCLAVE_SS_REST (PAGE_ENCLAVE_MASK | 2)
5897
5898#define MEM_COMMIT 0x1000
5899#define MEM_RESERVE 0x2000
5900#define MEM_REPLACE_PLACEHOLDER 0x4000
5901#define MEM_DECOMMIT 0x4000
5902#define MEM_RELEASE 0x8000
5903#define MEM_FREE 0x10000
5904#define MEM_PRIVATE 0x20000
5905#define MEM_RESERVE_PLACEHOLDER 0x40000
5906#define MEM_MAPPED 0x40000
5907#define MEM_RESET 0x80000
5908#define MEM_TOP_DOWN 0x100000
5909#define MEM_WRITE_WATCH 0x200000
5910#define MEM_PHYSICAL 0x400000
5911#define MEM_ROTATE 0x800000
5912#define MEM_DIFFERENT_IMAGE_BASE_OK 0x800000
5913#define MEM_RESET_UNDO 0x1000000
5914#define MEM_LARGE_PAGES 0x20000000
5915#define MEM_4MB_PAGES 0x80000000
5916#define MEM_64K_PAGES (MEM_LARGE_PAGES | MEM_PHYSICAL)
5917#define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x00000001
5918#define MEM_COALESCE_PLACEHOLDERS 0x00000001
5919#define MEM_PRESERVE_PLACEHOLDER 0x00000002
5920
5921 typedef struct _MEM_ADDRESS_REQUIREMENTS {
5922 PVOID LowestStartingAddress;
5923 PVOID HighestEndingAddress;
5924 SIZE_T Alignment;
5925 } MEM_ADDRESS_REQUIREMENTS, *PMEM_ADDRESS_REQUIREMENTS;
5926
5927#define MEM_EXTENDED_PARAMETER_GRAPHICS 0x01
5928#define MEM_EXTENDED_PARAMETER_NONPAGED 0x02
5929#define MEM_EXTENDED_PARAMETER_ZERO_PAGES_OPTIONAL 0x04
5930#define MEM_EXTENDED_PARAMETER_NONPAGED_LARGE 0x08
5931#define MEM_EXTENDED_PARAMETER_NONPAGED_HUGE 0x10
5932#define MEM_EXTENDED_PARAMETER_SOFT_FAULT_PAGES 0x20
5933#define MEM_EXTENDED_PARAMETER_EC_CODE 0x40
5934#define MEM_EXTENDED_PARAMETER_IMAGE_NO_HPAT 0x80
5935
5936#define MEM_EXTENDED_PARAMETER_NUMA_NODE_MANDATORY MINLONG64
5937
5938 typedef enum MEM_EXTENDED_PARAMETER_TYPE {
5939 MemExtendedParameterInvalidType = 0,
5940 MemExtendedParameterAddressRequirements,
5941 MemExtendedParameterNumaNode,
5942 MemExtendedParameterPartitionHandle,
5943 MemExtendedParameterUserPhysicalHandle,
5944 MemExtendedParameterAttributeFlags,
5945 MemExtendedParameterImageMachine,
5946 MemExtendedParameterMax
5947 } MEM_EXTENDED_PARAMETER_TYPE, *PMEM_EXTENDED_PARAMETER_TYPE;
5948
5949#define MEM_EXTENDED_PARAMETER_TYPE_BITS 8
5950
5951 typedef struct DECLSPEC_ALIGN(8) MEM_EXTENDED_PARAMETER {
5952 __C89_NAMELESS struct {
5953 DWORD64 Type : MEM_EXTENDED_PARAMETER_TYPE_BITS;
5954 DWORD64 Reserved : 64 - MEM_EXTENDED_PARAMETER_TYPE_BITS;
5955 };
5956 __C89_NAMELESS union {
5957 DWORD64 ULong64;
5958 PVOID Pointer;
5959 SIZE_T Size;
5960 HANDLE Handle;
5961 DWORD ULong;
5962 };
5963 } MEM_EXTENDED_PARAMETER, *PMEM_EXTENDED_PARAMETER;
5964
5965#define MEMORY_CURRENT_PARTITION_HANDLE ((HANDLE)(LONG_PTR)(-1))
5966#define MEMORY_SYSTEM_PARTITION_HANDLE ((HANDLE)(LONG_PTR)(-2))
5967#define MEMORY_EXISTING_VAD_PARTITION_HANDLE ((HANDLE)(LONG_PTR)(-3))
5968#define MEM_DEDICATED_ATTRIBUTE_NOT_SPECIFIED ((DWORD64)(-1))
5969
5970 typedef enum _MEM_DEDICATED_ATTRIBUTE_TYPE {
5971 MemDedicatedAttributeReadBandwidth = 0,
5972 MemDedicatedAttributeReadLatency,
5973 MemDedicatedAttributeWriteBandwidth,
5974 MemDedicatedAttributeWriteLatency,
5975 MemDedicatedAttributeMax
5976 } MEM_DEDICATED_ATTRIBUTE_TYPE, *PMEM_DEDICATED_ATTRIBUTE_TYPE;
5977
5978#define SEC_HUGE_PAGES 0x20000
5979#define SEC_PARTITION_OWNER_HANDLE 0x40000
5980#define SEC_64K_PAGES 0x80000
5981#define SEC_FILE 0x800000
5982#define SEC_IMAGE 0x1000000
5983#define SEC_PROTECTED_IMAGE 0x2000000
5984#define SEC_RESERVE 0x4000000
5985#define SEC_COMMIT 0x8000000
5986#define SEC_NOCACHE 0x10000000
5987#define SEC_WRITECOMBINE 0x40000000
5988#define SEC_LARGE_PAGES 0x80000000
5989#define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
5990
5991 typedef enum MEM_SECTION_EXTENDED_PARAMETER_TYPE {
5992 MemSectionExtendedParameterInvalidType = 0,
5993 MemSectionExtendedParameterUserPhysicalFlags,
5994 MemSectionExtendedParameterNumaNode,
5995 MemSectionExtendedParameterSigningLevel,
5996 MemSectionExtendedParameterMax
5997 } MEM_SECTION_EXTENDED_PARAMETER_TYPE, *PMEM_SECTION_EXTENDED_PARAMETER_TYPE;
5998
5999#define MEM_IMAGE SEC_IMAGE
6000#define WRITE_WATCH_FLAG_RESET 0x01
6001
6002#define ENCLAVE_TYPE_SGX 0x00000001
6003#define ENCLAVE_TYPE_SGX2 0x00000002
6004
6005 typedef struct _ENCLAVE_CREATE_INFO_SGX {
6006 BYTE Secs[4096];
6007 } ENCLAVE_CREATE_INFO_SGX, *PENCLAVE_CREATE_INFO_SGX;
6008
6009 typedef struct _ENCLAVE_INIT_INFO_SGX {
6010 BYTE SigStruct[1808];
6011 BYTE Reserved1[240];
6012 BYTE EInitToken[304];
6013 BYTE Reserved2[1744];
6014 } ENCLAVE_INIT_INFO_SGX, *PENCLAVE_INIT_INFO_SGX;
6015
6016#define ENCLAVE_TYPE_VBS 0x00000010
6017
6018 typedef struct _ENCLAVE_CREATE_INFO_VBS {
6019 DWORD Flags;
6020 BYTE OwnerID[32];
6021 } ENCLAVE_CREATE_INFO_VBS, *PENCLAVE_CREATE_INFO_VBS;
6022
6023#define ENCLAVE_VBS_FLAG_DEBUG 0x00000001
6024
6025#define ENCLAVE_TYPE_VBS_BASIC 0x00000011
6026
6027 typedef struct _ENCLAVE_CREATE_INFO_VBS_BASIC {
6028 DWORD Flags;
6029 BYTE OwnerID[32];
6030 } ENCLAVE_CREATE_INFO_VBS_BASIC, *PENCLAVE_CREATE_INFO_VBS_BASIC;
6031
6032 typedef struct _ENCLAVE_LOAD_DATA_VBS_BASIC {
6033 DWORD PageType;
6034 } ENCLAVE_LOAD_DATA_VBS_BASIC, *PENCLAVE_LOAD_DATA_VBS_BASIC;
6035
6036#define VBS_BASIC_PAGE_MEASURED_DATA 0x00000001
6037#define VBS_BASIC_PAGE_UNMEASURED_DATA 0x00000002
6038#define VBS_BASIC_PAGE_ZERO_FILL 0x00000003
6039#define VBS_BASIC_PAGE_THREAD_DESCRIPTOR 0x00000004
6040#define VBS_BASIC_PAGE_SYSTEM_CALL 0x00000005
6041
6042 typedef struct _ENCLAVE_INIT_INFO_VBS_BASIC {
6043 BYTE FamilyId[ENCLAVE_SHORT_ID_LENGTH];
6044 BYTE ImageId[ENCLAVE_SHORT_ID_LENGTH];
6045 ULONGLONG EnclaveSize;
6046 DWORD EnclaveSvn;
6047 DWORD Reserved;
6048 __C89_NAMELESS union {
6049 HANDLE SignatureInfoHandle;
6050 ULONGLONG Unused;
6051 };
6052 } ENCLAVE_INIT_INFO_VBS_BASIC, *PENCLAVE_INIT_INFO_VBS_BASIC;
6053
6054 typedef struct _ENCLAVE_INIT_INFO_VBS {
6055 DWORD Length;
6056 DWORD ThreadCount;
6057 } ENCLAVE_INIT_INFO_VBS, *PENCLAVE_INIT_INFO_VBS;
6058
6059#if !defined(SORTPP_PASS) && !defined(__WIDL__) && !defined(RC_INVOKED)
6060 typedef PVOID (ENCLAVE_TARGET_FUNCTION)(PVOID);
6061 typedef ENCLAVE_TARGET_FUNCTION (*PENCLAVE_TARGET_FUNCTION);
6062 typedef PENCLAVE_TARGET_FUNCTION LPENCLAVE_TARGET_FUNCTION;
6063#endif
6064
6065#define DEDICATED_MEMORY_CACHE_ELIGIBLE 0x1
6066
6067 typedef struct DECLSPEC_ALIGN(8) _MEMORY_PARTITION_DEDICATED_MEMORY_ATTRIBUTE {
6068 MEM_DEDICATED_ATTRIBUTE_TYPE Type;
6069 DWORD Reserved;
6070 DWORD64 Value;
6071 } MEMORY_PARTITION_DEDICATED_MEMORY_ATTRIBUTE, *PMEMORY_PARTITION_DEDICATED_MEMORY_ATTRIBUTE;
6072
6073 typedef struct DECLSPEC_ALIGN(8) _MEMORY_PARTITION_DEDICATED_MEMORY_INFORMATION {
6074 DWORD NextEntryOffset;
6075 DWORD SizeOfInformation;
6076 DWORD Flags;
6077 DWORD AttributesOffset;
6078 DWORD AttributeCount;
6079 DWORD Reserved;
6080 DWORD64 TypeId;
6081 } MEMORY_PARTITION_DEDICATED_MEMORY_INFORMATION, *PMEMORY_PARTITION_DEDICATED_MEMORY_INFORMATION;
6082
6083#define FILE_READ_DATA (0x0001)
6084#define FILE_LIST_DIRECTORY (0x0001)
6085
6086#define FILE_WRITE_DATA (0x0002)
6087#define FILE_ADD_FILE (0x0002)
6088
6089#define FILE_APPEND_DATA (0x0004)
6090#define FILE_ADD_SUBDIRECTORY (0x0004)
6091#define FILE_CREATE_PIPE_INSTANCE (0x0004)
6092
6093#define FILE_READ_EA (0x0008)
6094#define FILE_WRITE_EA (0x0010)
6095#define FILE_EXECUTE (0x0020)
6096#define FILE_TRAVERSE (0x0020)
6097#define FILE_DELETE_CHILD (0x0040)
6098#define FILE_READ_ATTRIBUTES (0x0080)
6099#define FILE_WRITE_ATTRIBUTES (0x0100)
6100
6101#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
6102#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ | FILE_READ_DATA | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE)
6103#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA | SYNCHRONIZE)
6104#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES | FILE_EXECUTE | SYNCHRONIZE)
6105
6106#define FILE_SUPERSEDE 0x00000000
6107#define FILE_OPEN 0x00000001
6108#define FILE_CREATE 0x00000002
6109#define FILE_OPEN_IF 0x00000003
6110#define FILE_OVERWRITE 0x00000004
6111#define FILE_OVERWRITE_IF 0x00000005
6112#define FILE_MAXIMUM_DISPOSITION 0x00000005
6113
6114#define FILE_DIRECTORY_FILE 0x00000001
6115#define FILE_WRITE_THROUGH 0x00000002
6116#define FILE_SEQUENTIAL_ONLY 0x00000004
6117#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
6118#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
6119#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
6120#define FILE_NON_DIRECTORY_FILE 0x00000040
6121#define FILE_CREATE_TREE_CONNECTION 0x00000080
6122#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
6123#define FILE_NO_EA_KNOWLEDGE 0x00000200
6124#define FILE_OPEN_REMOTE_INSTANCE 0x00000400
6125#define FILE_RANDOM_ACCESS 0x00000800
6126#define FILE_DELETE_ON_CLOSE 0x00001000
6127#define FILE_OPEN_BY_FILE_ID 0x00002000
6128#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
6129#define FILE_NO_COMPRESSION 0x00008000
6130#if (NTDDI_VERSION >= NTDDI_WIN7)
6131#define FILE_OPEN_REQUIRING_OPLOCK 0x00010000
6132#define FILE_DISALLOW_EXCLUSIVE 0x00020000
6133#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
6134#define FILE_RESERVE_OPFILTER 0x00100000
6135#define FILE_OPEN_REPARSE_POINT 0x00200000
6136#define FILE_OPEN_NO_RECALL 0x00400000
6137#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
6138
6139#define FILE_SHARE_READ 0x00000001
6140#define FILE_SHARE_WRITE 0x00000002
6141#define FILE_SHARE_DELETE 0x00000004
6142#define FILE_SHARE_VALID_FLAGS 0x00000007
6143#define FILE_ATTRIBUTE_READONLY 0x00000001
6144#define FILE_ATTRIBUTE_HIDDEN 0x00000002
6145#define FILE_ATTRIBUTE_SYSTEM 0x00000004
6146#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
6147#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
6148#define FILE_ATTRIBUTE_DEVICE 0x00000040
6149#define FILE_ATTRIBUTE_NORMAL 0x00000080
6150#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
6151#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
6152#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
6153#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
6154#define FILE_ATTRIBUTE_OFFLINE 0x00001000
6155#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
6156#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
6157#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
6158#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
6159#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
6160#define FILE_ATTRIBUTE_EA 0x00040000
6161#define FILE_ATTRIBUTE_PINNED 0x00080000
6162#define FILE_ATTRIBUTE_UNPINNED 0x00100000
6163#define FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000
6164#define FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000
6165#define TREE_CONNECT_ATTRIBUTE_PRIVACY 0x00004000
6166#define TREE_CONNECT_ATTRIBUTE_INTEGRITY 0x00008000
6167#define TREE_CONNECT_ATTRIBUTE_GLOBAL 0x00000004
6168#define TREE_CONNECT_ATTRIBUTE_PINNED 0x00000002
6169#define FILE_ATTRIBUTE_STRICTLY_SEQUENTIAL 0x20000000
6170#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
6171#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
6172#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
6173#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
6174#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
6175#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
6176#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
6177#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
6178#define FILE_ACTION_ADDED 0x00000001
6179#define FILE_ACTION_REMOVED 0x00000002
6180#define FILE_ACTION_MODIFIED 0x00000003
6181#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
6182#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
6183#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
6184#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
6185#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
6186#define FILE_CASE_PRESERVED_NAMES 0x00000002
6187#define FILE_UNICODE_ON_DISK 0x00000004
6188#define FILE_PERSISTENT_ACLS 0x00000008
6189#define FILE_FILE_COMPRESSION 0x00000010
6190#define FILE_VOLUME_QUOTAS 0x00000020
6191#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
6192#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
6193#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
6194#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200
6195#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400
6196#define FILE_SUPPORTS_BYPASS_IO 0x00000800
6197#define FILE_SUPPORTS_STREAM_SNAPSHOTS 0x00001000
6198#define FILE_SUPPORTS_CASE_SENSITIVE_DIRS 0x00002000
6199
6200#define FILE_VOLUME_IS_COMPRESSED 0x00008000
6201#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
6202#define FILE_SUPPORTS_ENCRYPTION 0x00020000
6203#define FILE_NAMED_STREAMS 0x00040000
6204#define FILE_READ_ONLY_VOLUME 0x00080000
6205#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
6206#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
6207#define FILE_SUPPORTS_HARD_LINKS 0x00400000
6208#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
6209#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
6210#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
6211#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
6212#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
6213#define FILE_SUPPORTS_SPARSE_VDL 0x10000000
6214#define FILE_DAX_VOLUME 0x20000000
6215#define FILE_SUPPORTS_GHOSTING 0x40000000
6216#define FILE_INVALID_FILE_ID ((LONGLONG)(-1LL))
6217
6218 typedef struct _FILE_ID_128 {
6219 BYTE Identifier[16];
6220 } FILE_ID_128, *PFILE_ID_128;
6221
6222 typedef struct _FILE_NOTIFY_INFORMATION {
6223 DWORD NextEntryOffset;
6224 DWORD Action;
6225 DWORD FileNameLength;
6226 WCHAR FileName[1];
6227 } FILE_NOTIFY_INFORMATION,*PFILE_NOTIFY_INFORMATION;
6228
6229#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_RS3
6230 typedef struct _FILE_NOTIFY_EXTENDED_INFORMATION {
6231 DWORD NextEntryOffset;
6232 DWORD Action;
6233 LARGE_INTEGER CreationTime;
6234 LARGE_INTEGER LastModificationTime;
6235 LARGE_INTEGER LastChangeTime;
6236 LARGE_INTEGER LastAccessTime;
6237 LARGE_INTEGER AllocatedLength;
6238 LARGE_INTEGER FileSize;
6239 DWORD FileAttributes;
6240 __C89_NAMELESS union {
6241 DWORD ReparsePointTag;
6242 DWORD EaSize;
6243 };
6244 LARGE_INTEGER FileId;
6245 LARGE_INTEGER ParentFileId;
6246 DWORD FileNameLength;
6247 WCHAR FileName[1];
6248 } FILE_NOTIFY_EXTENDED_INFORMATION,*PFILE_NOTIFY_EXTENDED_INFORMATION;
6249#endif
6250
6251#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_NI
6252#define FILE_NAME_FLAG_HARDLINK 0
6253#define FILE_NAME_FLAG_NTFS 0x01
6254#define FILE_NAME_FLAG_DOS 0x02
6255#define FILE_NAME_FLAG_BOTH 0x03
6256#define FILE_NAME_FLAGS_UNSPECIFIED 0x80
6257
6258 typedef struct _FILE_NOTIFY_FULL_INFORMATION {
6259 DWORD NextEntryOffset;
6260 DWORD Action;
6261 LARGE_INTEGER CreationTime;
6262 LARGE_INTEGER LastModificationTime;
6263 LARGE_INTEGER LastChangeTime;
6264 LARGE_INTEGER LastAccessTime;
6265 LARGE_INTEGER AllocatedLength;
6266 LARGE_INTEGER FileSize;
6267 DWORD FileAttributes;
6268 __C89_NAMELESS union {
6269 DWORD ReparsePointTag;
6270 DWORD EaSize;
6271 };
6272 LARGE_INTEGER FileId;
6273 LARGE_INTEGER ParentFileId;
6274 WORD FileNameLength;
6275 BYTE FileNameFlags;
6276 BYTE Reserved;
6277 WCHAR FileName[1];
6278 } FILE_NOTIFY_FULL_INFORMATION,*PFILE_NOTIFY_FULL_INFORMATION;
6279#endif
6280
6281 typedef struct _FILE_STAT_INFORMATION {
6282 LARGE_INTEGER FileId;
6283 LARGE_INTEGER CreationTime;
6284 LARGE_INTEGER LastAccessTime;
6285 LARGE_INTEGER LastWriteTime;
6286 LARGE_INTEGER ChangeTime;
6287 LARGE_INTEGER AllocationSize;
6288 LARGE_INTEGER EndOfFile;
6289 DWORD FileAttributes;
6290 DWORD ReparseTag;
6291 DWORD NumberOfLinks;
6292 ACCESS_MASK EffectiveAccess;
6293 } FILE_STAT_INFORMATION, *PFILE_STAT_INFORMATION;
6294
6295#define LX_FILE_METADATA_HAS_UID 0x1
6296#define LX_FILE_METADATA_HAS_GID 0x2
6297#define LX_FILE_METADATA_HAS_MODE 0x4
6298#define LX_FILE_METADATA_HAS_DEVICE_ID 0x8
6299#define LX_FILE_CASE_SENSITIVE_DIR 0x10
6300
6301 typedef struct _FILE_STAT_LX_INFORMATION {
6302 LARGE_INTEGER FileId;
6303 LARGE_INTEGER CreationTime;
6304 LARGE_INTEGER LastAccessTime;
6305 LARGE_INTEGER LastWriteTime;
6306 LARGE_INTEGER ChangeTime;
6307 LARGE_INTEGER AllocationSize;
6308 LARGE_INTEGER EndOfFile;
6309 DWORD FileAttributes;
6310 DWORD ReparseTag;
6311 DWORD NumberOfLinks;
6312 ACCESS_MASK EffectiveAccess;
6313 DWORD LxFlags;
6314 DWORD LxUid;
6315 DWORD LxGid;
6316 DWORD LxMode;
6317 DWORD LxDeviceIdMajor;
6318 DWORD LxDeviceIdMinor;
6319 } FILE_STAT_LX_INFORMATION, *PFILE_STAT_LX_INFORMATION;
6320
6321#if NTDDI_VERSION >= NTDDI_WIN11_ZN
6322 typedef struct _FILE_STAT_BASIC_INFORMATION {
6323 LARGE_INTEGER FileId;
6324 LARGE_INTEGER CreationTime;
6325 LARGE_INTEGER LastAccessTime;
6326 LARGE_INTEGER LastWriteTime;
6327 LARGE_INTEGER ChangeTime;
6328 LARGE_INTEGER AllocationSize;
6329 LARGE_INTEGER EndOfFile;
6330 DWORD FileAttributes;
6331 DWORD ReparseTag;
6332 DWORD NumberOfLinks;
6333 DWORD DeviceType;
6334 DWORD DeviceCharacteristics;
6335 DWORD Reserved;
6336 LARGE_INTEGER VolumeSerialNumber;
6337 FILE_ID_128 FileId128;
6338 } FILE_STAT_BASIC_INFORMATION, *PFILE_STAT_BASIC_INFORMATION;
6339#endif
6340
6341#define FILE_CS_FLAG_CASE_SENSITIVE_DIR 0x00000001
6342
6343 typedef struct _FILE_CASE_SENSITIVE_INFORMATION {
6344 DWORD Flags;
6345 } FILE_CASE_SENSITIVE_INFORMATION, *PFILE_CASE_SENSITIVE_INFORMATION;
6346
6347 typedef union _FILE_SEGMENT_ELEMENT {
6348 PVOID64 Buffer;
6349 ULONGLONG Alignment;
6350 } FILE_SEGMENT_ELEMENT,*PFILE_SEGMENT_ELEMENT;
6351
6352#if NTDDI_VERSION >= NTDDI_WIN8
6353#define FLUSH_FLAGS_FILE_DATA_ONLY 0x00000001
6354#define FLUSH_FLAGS_NO_SYNC 0x00000002
6355#endif
6356#if NTDDI_VERSION >= NTDDI_WIN10_RS1
6357#define FLUSH_FLAGS_FILE_DATA_SYNC_ONLY 0x00000004
6358#endif
6359
6360 typedef struct _REPARSE_GUID_DATA_BUFFER {
6361 DWORD ReparseTag;
6362 WORD ReparseDataLength;
6363 WORD Reserved;
6364 GUID ReparseGuid;
6365 struct {
6366 BYTE DataBuffer[1];
6367 } GenericReparseBuffer;
6368 } REPARSE_GUID_DATA_BUFFER,*PREPARSE_GUID_DATA_BUFFER;
6369
6370#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE FIELD_OFFSET(REPARSE_GUID_DATA_BUFFER,GenericReparseBuffer)
6371
6372#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE (16 *1024)
6373
6374#define SYMLINK_FLAG_RELATIVE 1
6375
6376#define IO_REPARSE_TAG_RESERVED_ZERO (0)
6377#define IO_REPARSE_TAG_RESERVED_ONE (1)
6378#define IO_REPARSE_TAG_RESERVED_TWO (2)
6379
6380#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
6381
6382#define IsReparseTagMicrosoft(_tag) (((_tag) & 0x80000000))
6383#define IsReparseTagNameSurrogate(_tag) (((_tag) & 0x20000000))
6384#define IsReparseTagDirectory(_tag) (((_tag) & 0x10000000))
6385
6386#define IO_REPARSE_TAG_MOUNT_POINT (__MSABI_LONG(0xA0000003))
6387#define IO_REPARSE_TAG_HSM (__MSABI_LONG(0xC0000004))
6388#define IO_REPARSE_TAG_DRIVE_EXTENDER (__MSABI_LONG(0x80000005))
6389#define IO_REPARSE_TAG_HSM2 (__MSABI_LONG(0x80000006))
6390#define IO_REPARSE_TAG_SIS (__MSABI_LONG(0x80000007))
6391#define IO_REPARSE_TAG_WIM (__MSABI_LONG(0x80000008))
6392#define IO_REPARSE_TAG_CSV (__MSABI_LONG(0x80000009))
6393#define IO_REPARSE_TAG_DFS (__MSABI_LONG(0x8000000A))
6394#define IO_REPARSE_TAG_FILTER_MANAGER (__MSABI_LONG(0x8000000B))
6395#define IO_REPARSE_TAG_SYMLINK (__MSABI_LONG(0xA000000C))
6396#define IO_REPARSE_TAG_IIS_CACHE (__MSABI_LONG(0xA0000010))
6397#define IO_REPARSE_TAG_DFSR (__MSABI_LONG(0x80000012))
6398#define IO_REPARSE_TAG_DEDUP (__MSABI_LONG(0x80000013))
6399#define IO_REPARSE_TAG_NFS (__MSABI_LONG(0x80000014))
6400#define IO_REPARSE_TAG_FILE_PLACEHOLDER (__MSABI_LONG(0x80000015))
6401#define IO_REPARSE_TAG_WOF (__MSABI_LONG(0x80000017))
6402#define IO_REPARSE_TAG_WCI (__MSABI_LONG(0x80000018))
6403#define IO_REPARSE_TAG_WCI_1 (__MSABI_LONG(0x90001018))
6404#define IO_REPARSE_TAG_GLOBAL_REPARSE (__MSABI_LONG(0xA0000019))
6405#define IO_REPARSE_TAG_CLOUD (__MSABI_LONG(0x9000001A))
6406#define IO_REPARSE_TAG_CLOUD_1 (__MSABI_LONG(0x9000101A))
6407#define IO_REPARSE_TAG_CLOUD_2 (__MSABI_LONG(0x9000201A))
6408#define IO_REPARSE_TAG_CLOUD_3 (__MSABI_LONG(0x9000301A))
6409#define IO_REPARSE_TAG_CLOUD_4 (__MSABI_LONG(0x9000401A))
6410#define IO_REPARSE_TAG_CLOUD_5 (__MSABI_LONG(0x9000501A))
6411#define IO_REPARSE_TAG_CLOUD_6 (__MSABI_LONG(0x9000601A))
6412#define IO_REPARSE_TAG_CLOUD_7 (__MSABI_LONG(0x9000701A))
6413#define IO_REPARSE_TAG_CLOUD_8 (__MSABI_LONG(0x9000801A))
6414#define IO_REPARSE_TAG_CLOUD_9 (__MSABI_LONG(0x9000901A))
6415#define IO_REPARSE_TAG_CLOUD_A (__MSABI_LONG(0x9000A01A))
6416#define IO_REPARSE_TAG_CLOUD_B (__MSABI_LONG(0x9000B01A))
6417#define IO_REPARSE_TAG_CLOUD_C (__MSABI_LONG(0x9000C01A))
6418#define IO_REPARSE_TAG_CLOUD_D (__MSABI_LONG(0x9000D01A))
6419#define IO_REPARSE_TAG_CLOUD_E (__MSABI_LONG(0x9000E01A))
6420#define IO_REPARSE_TAG_CLOUD_F (__MSABI_LONG(0x9000F01A))
6421#define IO_REPARSE_TAG_CLOUD_MASK (__MSABI_LONG(0x0000F000))
6422#define IO_REPARSE_TAG_APPEXECLINK (__MSABI_LONG(0x8000001B))
6423#define IO_REPARSE_TAG_PROJFS (__MSABI_LONG(0x9000001C))
6424#define IO_REPARSE_TAG_STORAGE_SYNC (__MSABI_LONG(0x8000001E))
6425#define IO_REPARSE_TAG_WCI_TOMBSTONE (__MSABI_LONG(0xA000001F))
6426#define IO_REPARSE_TAG_UNHANDLED (__MSABI_LONG(0x80000020))
6427#define IO_REPARSE_TAG_ONEDRIVE (__MSABI_LONG(0x80000021))
6428#define IO_REPARSE_TAG_PROJFS_TOMBSTONE (__MSABI_LONG(0xA0000022))
6429#define IO_REPARSE_TAG_AF_UNIX (__MSABI_LONG(0x80000023))
6430#define IO_REPARSE_TAG_WCI_LINK (__MSABI_LONG(0xA0000027))
6431#define IO_REPARSE_TAG_WCI_LINK_1 (__MSABI_LONG(0xA0001027))
6432#define IO_REPARSE_TAG_DATALESS_CIM (__MSABI_LONG(0xA0000028))
6433
6434#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
6435#define SCRUB_DATA_INPUT_FLAG_RESUME 0x00000001
6436#define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x00000002
6437#define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x00000004
6438#define SCRUB_DATA_INPUT_FLAG_IGNORE_REDUNDANCY 0x00000008
6439#define SCRUB_DATA_INPUT_FLAG_SKIP_DATA 0x00000010
6440#define SCRUB_DATA_INPUT_FLAG_SCRUB_BY_OBJECT_ID 0x00000020
6441#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_19H2
6442#define SCRUB_DATA_INPUT_FLAG_OPLOCK_NOT_ACQUIRED 0x00000040
6443#endif
6444#define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x00000001
6445#define SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE 0x00010000
6446#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
6447#define SCRUB_DATA_OUTPUT_FLAG_PARITY_EXTENT_DATA_RETURNED 0x00020000
6448#define SCRUB_DATA_OUTPUT_FLAG_RESUME_CONTEXT_LENGTH_SPECIFIED 0x00040000
6449#endif
6450
6451 typedef struct _SCRUB_DATA_INPUT {
6452 DWORD Size;
6453 DWORD Flags;
6454 DWORD MaximumIos;
6455 DWORD ObjectId[4];
6456 DWORD Reserved[41];
6457 BYTE ResumeContext[1040];
6458 } SCRUB_DATA_INPUT,*PSCRUB_DATA_INPUT;
6459
6460#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
6461
6462 typedef struct _SCRUB_PARITY_EXTENT {
6463 LONGLONG Offset;
6464 ULONGLONG Length;
6465 } SCRUB_PARITY_EXTENT, *PSCRUB_PARITY_EXTENT;
6466
6467 typedef struct _SCRUB_PARITY_EXTENT_DATA {
6468 WORD Size;
6469 WORD Flags;
6470 WORD NumberOfParityExtents;
6471 WORD MaximumNumberOfParityExtents;
6472 SCRUB_PARITY_EXTENT ParityExtents[ANYSIZE_ARRAY];
6473 } SCRUB_PARITY_EXTENT_DATA, *PSCRUB_PARITY_EXTENT_DATA;
6474
6475#endif /* _WIN32_WINNT >= _WIN32_WINNT_WINBLUE */
6476
6477 typedef struct _SCRUB_DATA_OUTPUT {
6478 DWORD Size;
6479 DWORD Flags;
6480 DWORD Status;
6481 ULONGLONG ErrorFileOffset;
6482 ULONGLONG ErrorLength;
6483 ULONGLONG NumberOfBytesRepaired;
6484 ULONGLONG NumberOfBytesFailed;
6485 ULONGLONG InternalFileReference;
6486#if _WIN32_WINNT >= _WIN32_WINNT_WINBLUE
6487 WORD ResumeContextLength;
6488 WORD ParityExtentDataOffset;
6489 DWORD Reserved[9];
6490#else
6491 DWORD Reserved[10];
6492#endif
6493#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5
6494 ULONGLONG NumberOfMetadataBytesProcessed;
6495 ULONGLONG NumberOfDataBytesProcessed;
6496 ULONGLONG TotalNumberOfMetadataBytesInUse;
6497 ULONGLONG TotalNumberOfDataBytesInUse;
6498#else
6499 ULONGLONG Reserved2[4];
6500#endif
6501#if _WIN32_WINNT >= _WIN32_WINNT_WIN10_FE
6502 ULONGLONG DataBytesSkippedDueToNoAllocation;
6503 ULONGLONG DataBytesSkippedDueToInvalidRun;
6504 ULONGLONG DataBytesSkippedDueToIntegrityStream;
6505 ULONGLONG DataBytesSkippedDueToRegionBeingClean;
6506 ULONGLONG DataBytesSkippedDueToLockConflict;
6507 ULONGLONG DataBytesSkippedDueToNoScrubDataFlag;
6508 ULONGLONG DataBytesSkippedDueToNoScrubNonIntegrityStreamFlag;
6509 ULONGLONG DataBytesScrubbed;
6510#else
6511 ULONGLONG Reserved3[8];
6512#endif
6513 BYTE ResumeContext[1040];
6514 } SCRUB_DATA_OUTPUT, *PSCRUB_DATA_OUTPUT;
6515#endif
6516
6517#define IO_COMPLETION_MODIFY_STATE 0x0002
6518#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
6519#define DUPLICATE_CLOSE_SOURCE 0x00000001
6520#define DUPLICATE_SAME_ACCESS 0x00000002
6521
6522#define POWERBUTTON_ACTION_INDEX_NOTHING 0
6523#define POWERBUTTON_ACTION_INDEX_SLEEP 1
6524#define POWERBUTTON_ACTION_INDEX_HIBERNATE 2
6525#define POWERBUTTON_ACTION_INDEX_SHUTDOWN 3
6526
6527#define POWERBUTTON_ACTION_VALUE_NOTHING 0
6528#define POWERBUTTON_ACTION_VALUE_SLEEP 2
6529#define POWERBUTTON_ACTION_VALUE_HIBERNATE 3
6530#define POWERBUTTON_ACTION_VALUE_SHUTDOWN 6
6531
6532#define PERFSTATE_POLICY_CHANGE_IDEAL 0
6533#define PERFSTATE_POLICY_CHANGE_SINGLE 1
6534#define PERFSTATE_POLICY_CHANGE_ROCKET 2
6535#define PERFSTATE_POLICY_CHANGE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
6536
6537#define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
6538#define PROCESSOR_PERF_BOOST_POLICY_MAX 100
6539
6540#define PROCESSOR_PERF_BOOST_MODE_DISABLED 0
6541#define PROCESSOR_PERF_BOOST_MODE_ENABLED 1
6542#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 2
6543#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 3
6544#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 4
6545#define PROCESSOR_PERF_BOOST_MODE_MAX PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE
6546
6547#define CORE_PARKING_POLICY_CHANGE_IDEAL 0
6548#define CORE_PARKING_POLICY_CHANGE_SINGLE 1
6549#define CORE_PARKING_POLICY_CHANGE_ROCKET 2
6550#define CORE_PARKING_POLICY_CHANGE_MULTISTEP 3
6551#define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_MULTISTEP
6552
6553#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
6554#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
6555
6556 DEFINE_GUID (GUID_MAX_POWER_SAVINGS, 0xa1841308, 0x3541, 0x4fab, 0xbc, 0x81, 0xf7, 0x15, 0x56, 0xf2, 0x0b, 0x4a);
6557 DEFINE_GUID (GUID_MIN_POWER_SAVINGS, 0x8c5e7fda, 0xe8bf, 0x4a96, 0x9a, 0x85, 0xa6, 0xe2, 0x3a, 0x8c, 0x63, 0x5c);
6558 DEFINE_GUID (GUID_TYPICAL_POWER_SAVINGS, 0x381b4222, 0xf694, 0x41f0, 0x96, 0x85, 0xff, 0x5b, 0xb2, 0x60, 0xdf, 0x2e);
6559 DEFINE_GUID (NO_SUBGROUP_GUID, 0xfea3413e, 0x7e05, 0x4911, 0x9a, 0x71, 0x70, 0x03, 0x31, 0xf1, 0xc2, 0x94);
6560 DEFINE_GUID (ALL_POWERSCHEMES_GUID, 0x68a1e95e, 0x13ea, 0x41e1, 0x80, 0x11, 0x0c, 0x49, 0x6c, 0xa4, 0x90, 0xb0);
6561 DEFINE_GUID (GUID_POWERSCHEME_PERSONALITY, 0x245d8541, 0x3943, 0x4422, 0xb0, 0x25, 0x13, 0xa7, 0x84, 0xf6, 0x79, 0xb7);
6562 DEFINE_GUID (GUID_ACTIVE_POWERSCHEME, 0x31f9f286, 0x5084, 0x42fe, 0xb7, 0x20, 0x2b, 0x02, 0x64, 0x99, 0x37, 0x63);
6563 DEFINE_GUID (GUID_IDLE_RESILIENCY_SUBGROUP, 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4, 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54);
6564 DEFINE_GUID (GUID_IDLE_RESILIENCY_PERIOD, 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28);
6565 DEFINE_GUID (GUID_DISK_COALESCING_POWERDOWN_TIMEOUT, 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33);
6566 DEFINE_GUID (GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT, 0x3166bc41, 0x7e98, 0x4e03, 0xb3, 0x4e, 0xec, 0xf, 0x5f, 0x2b, 0x21, 0x8e);
6567 DEFINE_GUID (GUID_VIDEO_SUBGROUP, 0x7516b95f, 0xf776, 0x4464, 0x8c, 0x53, 0x06, 0x16, 0x7f, 0x40, 0xcc, 0x99);
6568 DEFINE_GUID (GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3c0bc021, 0xc8a8, 0x4e07, 0xa9, 0x73, 0x6b, 0x14, 0xcb, 0xcb, 0x2b, 0x7e);
6569 DEFINE_GUID (GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82dbcf2d, 0xcd67, 0x40c5, 0xbf, 0xdc, 0x9f, 0x1a, 0x5c, 0xcd, 0x46, 0x63);
6570 DEFINE_GUID (GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xeed904df, 0xb142, 0x4183, 0xb1, 0x0b, 0x5a, 0x11, 0x97, 0xa3, 0x78, 0x64);
6571 DEFINE_GUID (GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
6572 DEFINE_GUID (GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959d22, 0xd6a1, 0x49b9, 0xaf, 0x93, 0xbc, 0xe8, 0x85, 0xad, 0x33, 0x5b);
6573 DEFINE_GUID (GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xe6, 0xe5, 0xa1, 0x7e, 0xbd, 0x1a, 0xea);
6574 DEFINE_GUID (GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, __MSABI_LONG(0xaded5e82), 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
6575 DEFINE_GUID (GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
6576 DEFINE_GUID (GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
6577 DEFINE_GUID (GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xfbd9aa66, 0x9553, 0x4097, 0xba, 0x44, 0xed, 0x6e, 0x9d, 0x65, 0xea, 0xb8);
6578 DEFINE_GUID (GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
6579 DEFINE_GUID (GUID_ALLOW_DISPLAY_REQUIRED, 0xa9ceb8da, 0xcd46, 0x44fb, 0xa9, 0x8b, 0x02, 0xaf, 0x69, 0xde, 0x46, 0x23);
6580 DEFINE_GUID (GUID_VIDEO_CONSOLE_LOCK_TIMEOUT, 0x8ec4b3a5, 0x6868, 0x48c2, 0xbe, 0x75, 0x4f, 0x30, 0x44, 0xbe, 0x88, 0xa7);
6581 DEFINE_GUID (GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP, 0x8619b916, 0xe004, 0x4dd8, 0x9b, 0x66, 0xda, 0xe8, 0x6f, 0x80, 0x66, 0x98);
6582 DEFINE_GUID (GUID_NON_ADAPTIVE_INPUT_TIMEOUT, 0x5adbbfbc, 0x74e, 0x4da1, 0xba, 0x38, 0xdb, 0x8b, 0x36, 0xb2, 0xc8, 0xf3);
6583 DEFINE_GUID (GUID_DISK_SUBGROUP, 0x0012ee47, 0x9041, 0x4b5d, 0x9b, 0x77, 0x53, 0x5f, 0xba, 0x8b, 0x14, 0x42);
6584 DEFINE_GUID (GUID_DISK_POWERDOWN_TIMEOUT, 0x6738e2c4, 0xe8a5, 0x4a42, 0xb1, 0x6a, 0xe0, 0x40, 0xe7, 0x69, 0x75, 0x6e);
6585 DEFINE_GUID (GUID_DISK_IDLE_TIMEOUT, 0x58e39ba8, 0xb8e6, 0x4ef6, 0x90, 0xd0, 0x89, 0xae, 0x32, 0xb2, 0x58, 0xd6);
6586 DEFINE_GUID (GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63);
6587 DEFINE_GUID (GUID_DISK_ADAPTIVE_POWERDOWN, 0x396a32e1, 0x499a, 0x40b2, 0x91, 0x24, 0xa9, 0x6a, 0xfe, 0x70, 0x76, 0x67);
6588 DEFINE_GUID (GUID_SLEEP_SUBGROUP, 0x238c9fa8, 0x0aad, 0x41ed, 0x83, 0xf4, 0x97, 0xbe, 0x24, 0x2c, 0x8f, 0x20);
6589 DEFINE_GUID (GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70);
6590 DEFINE_GUID (GUID_STANDBY_TIMEOUT, 0x29f6c1db, 0x86da, 0x48c5, 0x9f, 0xdb, 0xf2, 0xb6, 0x7b, 0x1f, 0x44, 0xda);
6591 DEFINE_GUID (GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0);
6592 DEFINE_GUID (GUID_HIBERNATE_TIMEOUT, 0x9d7815a6, 0x7ee4, 0x497e, 0x88, 0x88, 0x51, 0x5a, 0x05, 0xf0, 0x23, 0x64);
6593 DEFINE_GUID (GUID_HIBERNATE_FASTS4_POLICY, 0x94ac6d29, 0x73ce, 0x41a6, 0x80, 0x9f, 0x63, 0x63, 0xba, 0x21, 0xb4, 0x7e);
6594 DEFINE_GUID (GUID_CRITICAL_POWER_TRANSITION, 0xb7a27025, 0xe569, 0x46c2, 0xa5, 0x04, 0x2b, 0x96, 0xca, 0xd2, 0x25, 0xa1);
6595 DEFINE_GUID (GUID_SYSTEM_AWAYMODE, 0x98a7f580, 0x01f7, 0x48aa, 0x9c, 0x0f, 0x44, 0x35, 0x2c, 0x29, 0xe5, 0xc0);
6596 DEFINE_GUID (GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87);
6597 DEFINE_GUID (GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab);
6598 DEFINE_GUID (GUID_ALLOW_RTC_WAKE, 0xbd3b718a, 0x0680, 0x4d9d, 0x8a, 0xb2, 0xe1, 0xd2, 0xb4, 0xac, 0x80, 0x6d);
6599 DEFINE_GUID (GUID_ALLOW_SYSTEM_REQUIRED, 0xa4b195f5, 0x8225, 0x47d8, 0x80, 0x12, 0x9d, 0x41, 0x36, 0x97, 0x86, 0xe2);
6600 DEFINE_GUID (GUID_SYSTEM_BUTTON_SUBGROUP, 0x4f971e89, 0xeebd, 0x4455, 0xa8, 0xde, 0x9e, 0x59, 0x04, 0x0e, 0x73, 0x47);
6601 DEFINE_GUID (GUID_POWERBUTTON_ACTION, 0x7648efa3, 0xdd9c, 0x4e3e, 0xb5, 0x66, 0x50, 0xf9, 0x29, 0x38, 0x62, 0x80);
6602 DEFINE_GUID (GUID_SLEEPBUTTON_ACTION, 0x96996bc0, 0xad50, 0x47ec, 0x92, 0x3b, 0x6f, 0x41, 0x87, 0x4d, 0xd9, 0xeb);
6603 DEFINE_GUID (GUID_USERINTERFACEBUTTON_ACTION, 0xa7066653, 0x8d6c, 0x40a8, 0x91, 0x0e, 0xa1, 0xf5, 0x4b, 0x84, 0xc7, 0xe5);
6604 DEFINE_GUID (GUID_LIDCLOSE_ACTION, 0x5ca83367, 0x6e45, 0x459f, 0xa2, 0x7b, 0x47, 0x6b, 0x1d, 0x01, 0xc9, 0x36);
6605 DEFINE_GUID (GUID_LIDOPEN_POWERSTATE, 0x99ff10e7, 0x23b1, 0x4c07, 0xa9, 0xd1, 0x5c, 0x32, 0x06, 0xd7, 0x41, 0xb4);
6606 DEFINE_GUID (GUID_BATTERY_SUBGROUP, 0xe73a048d, 0xbf27, 0x4f12, 0x97, 0x31, 0x8b, 0x20, 0x76, 0xe8, 0x89, 0x1f);
6607 DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_0, 0x637ea02f, 0xbbcb, 0x4015, 0x8e, 0x2c, 0xa1, 0xc7, 0xb9, 0xc0, 0xb5, 0x46);
6608 DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9a66d8d7, 0x4ff7, 0x4ef9, 0xb5, 0xa2, 0x5a, 0x32, 0x6c, 0xa2, 0xa4, 0x69);
6609 DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f);
6610 DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_1, 0xd8742dcb, 0x3e6a, 0x4b3c, 0xb3, 0xfe, 0x37, 0x46, 0x23, 0xcd, 0xcf, 0x06);
6611 DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183ba9a, 0xe910, 0x48da, 0x87, 0x69, 0x14, 0xae, 0x6d, 0xc1, 0x17, 0x0a);
6612 DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58);
6613 DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_2, 0x421cba38, 0x1a8e, 0x4881, 0xac, 0x89, 0xe3, 0x3a, 0x8b, 0x04, 0xec, 0xe4);
6614 DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07a07ca2, 0xadaf, 0x40d7, 0xb0, 0x77, 0x53, 0x3a, 0xad, 0xed, 0x1b, 0xfa);
6615 DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82);
6616 DEFINE_GUID (GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455e, 0xb3, 0x08, 0x72, 0xd3, 0x00, 0x3c, 0xf2, 0xf8);
6617 DEFINE_GUID (GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58afd5a6, 0xc2dd, 0x47d2, 0x9f, 0xbf, 0xef, 0x70, 0xcc, 0x5c, 0x59, 0x65);
6618 DEFINE_GUID (GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3);
6619 DEFINE_GUID (GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82be, 0x4824, 0x96, 0xc1, 0x47, 0xb6, 0x0b, 0x74, 0x0d, 0x00);
6620 DEFINE_GUID (GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4af6, 0x4104, 0x92, 0x60, 0xe3, 0xd9, 0x52, 0x48, 0xfc, 0x36);
6621 DEFINE_GUID (GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xbc5038f7, 0x23e0, 0x4960, 0x96, 0xda, 0x33, 0xab, 0xaf, 0x59, 0x35, 0xec);
6622 DEFINE_GUID (GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893dee8e, 0x2bef, 0x41e0, 0x89, 0xc6, 0xb5, 0x5d, 0x09, 0x29, 0x96, 0x4c);
6623 DEFINE_GUID (GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb);
6624 DEFINE_GUID (GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
6625 DEFINE_GUID (GUID_PROCESSOR_PERFSTATE_POLICY, 0xbbdc3814, 0x18e9, 0x4463, 0x8a, 0x55, 0xd1, 0x97, 0x32, 0x7c, 0x45, 0xc0);
6626 DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d);
6627 DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6);
6628 DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
6629 DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
6630 DEFINE_GUID (GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
6631 DEFINE_GUID (GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
6632 DEFINE_GUID (GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
6633 DEFINE_GUID (GUID_PROCESSOR_PERF_BOOST_POLICY, 0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
6634 DEFINE_GUID (GUID_PROCESSOR_PERF_BOOST_MODE, 0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7);
6635 DEFINE_GUID (GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
6636 DEFINE_GUID (GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
6637 DEFINE_GUID (GUID_PROCESSOR_IDLE_STATE_MAXIMUM, 0x9943e905, 0x9a30, 0x4ec1, 0x9b, 0x99, 0x44, 0xdd, 0x3b, 0x76, 0xf7, 0xa2);
6638 DEFINE_GUID (GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
6639 DEFINE_GUID (GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
6640 DEFINE_GUID (GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
6641 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1);
6642 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
6643 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
6644 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
6645 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
6646 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
6647 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
6648 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
6649 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
6650 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
6651 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
6652 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
6653 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
6654 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
6655 DEFINE_GUID (GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
6656 DEFINE_GUID (GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
6657 DEFINE_GUID (GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
6658 DEFINE_GUID (GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD, 0x2430ab6f, 0xa520, 0x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1);
6659 DEFINE_GUID (GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD, 0xf735a673, 0x2066, 0x4f80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d);
6660 DEFINE_GUID (GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
6661 DEFINE_GUID (GUID_PROCESSOR_PERF_LATENCY_HINT, 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b);
6662 DEFINE_GUID (GUID_PROCESSOR_DISTRIBUTE_UTILITY, 0xe0007330, 0xf589, 0x42ed, 0xa4, 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3);
6663 DEFINE_GUID (GUID_SYSTEM_COOLING_POLICY, 0x94d3a615, 0xa899, 0x4ac5, 0xae, 0x2b, 0xe4, 0xd8, 0xf6, 0x34, 0x36, 0x7f);
6664 DEFINE_GUID (GUID_LOCK_CONSOLE_ON_WAKE, 0x0e796bdb, 0x100d, 0x47d6, 0xa2, 0xd5, 0xf7, 0xd2, 0xda, 0xa5, 0x1f, 0x51);
6665 DEFINE_GUID (GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19);
6666 DEFINE_GUID (GUID_ACDC_POWER_SOURCE, 0x5d3e9a59, 0xe9d5, 0x4b00, 0xa6, 0xbd, 0xff, 0x34, 0xff, 0x51, 0x65, 0x48);
6667 DEFINE_GUID (GUID_LIDSWITCH_STATE_CHANGE, 0xba3e0f4d, 0xb817, 0x4094, 0xa2, 0xd1, 0xd5, 0x63, 0x79, 0xe6, 0xa0, 0xf3);
6668 DEFINE_GUID (GUID_BATTERY_PERCENTAGE_REMAINING, 0xa7ad8041, 0xb45a, 0x4cae, 0x87, 0xa3, 0xee, 0xcb, 0xb4, 0x68, 0xa9, 0xe1);
6669 DEFINE_GUID (GUID_GLOBAL_USER_PRESENCE, 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9);
6670 DEFINE_GUID (GUID_SESSION_DISPLAY_STATUS, 0x2b84c20e, 0xad23, 0x4ddf, 0x93, 0xdb, 0x5, 0xff, 0xbd, 0x7e, 0xfc, 0xa5);
6671 DEFINE_GUID (GUID_SESSION_USER_PRESENCE, 0x3c0f4548, 0xc03f, 0x4c4d, 0xb9, 0xf2, 0x23, 0x7e, 0xde, 0x68, 0x63, 0x76);
6672 DEFINE_GUID (GUID_IDLE_BACKGROUND_TASK, 0x515c31d8, 0xf734, 0x163d, 0xa0, 0xfd, 0x11, 0xa0, 0x8c, 0x91, 0xe8, 0xf1);
6673 DEFINE_GUID (GUID_BACKGROUND_TASK_NOTIFICATION, 0xcf23f240, 0x2a54, 0x48d8, 0xb1, 0x14, 0xde, 0x15, 0x18, 0xff, 0x05, 0x2e);
6674 DEFINE_GUID (GUID_APPLAUNCH_BUTTON, 0x1a689231, 0x7399, 0x4e9a, 0x8f, 0x99, 0xb7, 0x1f, 0x99, 0x9d, 0xb3, 0xfa);
6675 DEFINE_GUID (GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af, 0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20);
6676 DEFINE_GUID (GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5);
6677 DEFINE_GUID (GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6);
6678
6679 typedef enum _SYSTEM_POWER_STATE {
6680 PowerSystemUnspecified = 0,PowerSystemWorking = 1,PowerSystemSleeping1 = 2,PowerSystemSleeping2 = 3,PowerSystemSleeping3 = 4,PowerSystemHibernate = 5,PowerSystemShutdown = 6,PowerSystemMaximum = 7
6681 } SYSTEM_POWER_STATE,*PSYSTEM_POWER_STATE;
6682
6683#define POWER_SYSTEM_MAXIMUM 7
6684
6685 typedef enum {
6686 PowerActionNone = 0, PowerActionReserved, PowerActionSleep, PowerActionHibernate,
6687 PowerActionShutdown, PowerActionShutdownReset, PowerActionShutdownOff,
6688 PowerActionWarmEject
6689 } POWER_ACTION,*PPOWER_ACTION;
6690
6691 typedef enum _DEVICE_POWER_STATE {
6692 PowerDeviceUnspecified = 0, PowerDeviceD0, PowerDeviceD1, PowerDeviceD2, PowerDeviceD3,
6693 PowerDeviceMaximum
6694 } DEVICE_POWER_STATE,*PDEVICE_POWER_STATE;
6695
6696 typedef enum _MONITOR_DISPLAY_STATE {
6697 PowerMonitorOff = 0, PowerMonitorOn, PowerMonitorDim
6698 } MONITOR_DISPLAY_STATE, *PMONITOR_DISPLAY_STATE;
6699
6700 typedef enum _USER_ACTIVITY_PRESENCE {
6701 PowerUserPresent = 0,
6702 PowerUserNotPresent,
6703 PowerUserInactive,
6704 PowerUserMaximum,
6705 PowerUserInvalid = PowerUserMaximum
6706 } USER_ACTIVITY_PRESENCE,*PUSER_ACTIVITY_PRESENCE;
6707
6708#define ES_SYSTEM_REQUIRED ((DWORD)0x00000001)
6709#define ES_DISPLAY_REQUIRED ((DWORD)0x00000002)
6710#define ES_USER_PRESENT ((DWORD)0x00000004)
6711#define ES_AWAYMODE_REQUIRED ((DWORD)0x00000040)
6712#define ES_CONTINUOUS ((DWORD)0x80000000)
6713
6714 typedef DWORD EXECUTION_STATE, *PEXECUTION_STATE;
6715
6716 typedef enum {
6717 LT_DONT_CARE,LT_LOWEST_LATENCY
6718 } LATENCY_TIME;
6719
6720#define DIAGNOSTIC_REASON_VERSION 0
6721#define POWER_REQUEST_CONTEXT_VERSION 0
6722
6723#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
6724#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
6725#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
6726#define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003)
6727
6728#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001
6729#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002
6730
6731 typedef enum _POWER_REQUEST_TYPE {
6732 PowerRequestDisplayRequired,
6733 PowerRequestSystemRequired,
6734 PowerRequestAwayModeRequired,
6735 PowerRequestExecutionRequired
6736 } POWER_REQUEST_TYPE,*PPOWER_REQUEST_TYPE;
6737
6738#define PDCAP_D0_SUPPORTED 0x00000001
6739#define PDCAP_D1_SUPPORTED 0x00000002
6740#define PDCAP_D2_SUPPORTED 0x00000004
6741#define PDCAP_D3_SUPPORTED 0x00000008
6742#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
6743#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
6744#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
6745#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
6746#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
6747
6748 typedef struct CM_Power_Data_s {
6749 DWORD PD_Size;
6750 DEVICE_POWER_STATE PD_MostRecentPowerState;
6751 DWORD PD_Capabilities;
6752 DWORD PD_D1Latency;
6753 DWORD PD_D2Latency;
6754 DWORD PD_D3Latency;
6755 DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
6756 SYSTEM_POWER_STATE PD_DeepestSystemWake;
6757 } CM_POWER_DATA,*PCM_POWER_DATA;
6758
6759 typedef enum {
6760 SystemPowerPolicyAc,
6761 SystemPowerPolicyDc,
6762 VerifySystemPolicyAc,
6763 VerifySystemPolicyDc,
6764 SystemPowerCapabilities,
6765 SystemBatteryState,
6766 SystemPowerStateHandler,
6767 ProcessorStateHandler,
6768 SystemPowerPolicyCurrent,
6769 AdministratorPowerPolicy,
6770 SystemReserveHiberFile,
6771 ProcessorInformation,
6772 SystemPowerInformation,
6773 ProcessorStateHandler2,
6774 LastWakeTime,
6775 LastSleepTime,
6776 SystemExecutionState,
6777 SystemPowerStateNotifyHandler,
6778 ProcessorPowerPolicyAc,
6779 ProcessorPowerPolicyDc,
6780 VerifyProcessorPowerPolicyAc,
6781 VerifyProcessorPowerPolicyDc,
6782 ProcessorPowerPolicyCurrent,
6783 SystemPowerStateLogging,
6784 SystemPowerLoggingEntry,
6785 SetPowerSettingValue,
6786 NotifyUserPowerSetting,
6787 PowerInformationLevelUnused0,
6788 SystemMonitorHiberBootPowerOff,
6789 SystemVideoState,
6790 TraceApplicationPowerMessage,
6791 TraceApplicationPowerMessageEnd,
6792 ProcessorPerfStates,
6793 ProcessorIdleStates,
6794 ProcessorCap,
6795 SystemWakeSource,
6796 SystemHiberFileInformation,
6797 TraceServicePowerMessage,
6798 ProcessorLoad,
6799 PowerShutdownNotification,
6800 MonitorCapabilities,
6801 SessionPowerInit,
6802 SessionDisplayState,
6803 PowerRequestCreate,
6804 PowerRequestAction,
6805 GetPowerRequestList,
6806 ProcessorInformationEx,
6807 NotifyUserModeLegacyPowerEvent,
6808 GroupPark,
6809 ProcessorIdleDomains,
6810 WakeTimerList,
6811 SystemHiberFileSize,
6812 ProcessorIdleStatesHv,
6813 ProcessorPerfStatesHv,
6814 ProcessorPerfCapHv,
6815 ProcessorSetIdle,
6816 LogicalProcessorIdling,
6817 UserPresence,
6818 PowerSettingNotificationName,
6819 GetPowerSettingValue,
6820 IdleResiliency,
6821 SessionRITState,
6822 SessionConnectNotification,
6823 SessionPowerCleanup,
6824 SessionLockState,
6825 SystemHiberbootState,
6826 PlatformInformation,
6827 PdcInvocation,
6828 MonitorInvocation,
6829 FirmwareTableInformationRegistered,
6830 SetShutdownSelectedTime,
6831 SuspendResumeInvocation,
6832 PlmPowerRequestCreate,
6833 ScreenOff,
6834 CsDeviceNotification,
6835 PlatformRole,
6836 LastResumePerformance,
6837 DisplayBurst,
6838 ExitLatencySamplingPercentage,
6839 ApplyLowPowerScenarioSettings,
6840 PowerInformationLevelMaximum
6841 } POWER_INFORMATION_LEVEL;
6842
6843 typedef enum {
6844 UserNotPresent = 0,
6845 UserPresent = 1,
6846 UserUnknown = 0xff
6847 } POWER_USER_PRESENCE_TYPE,*PPOWER_USER_PRESENCE_TYPE;
6848
6849 typedef struct _POWER_USER_PRESENCE {
6850 POWER_USER_PRESENCE_TYPE UserPresence;
6851 } POWER_USER_PRESENCE,*PPOWER_USER_PRESENCE;
6852
6853 typedef struct _POWER_SESSION_CONNECT {
6854 BOOLEAN Connected;
6855 BOOLEAN Console;
6856 } POWER_SESSION_CONNECT,*PPOWER_SESSION_CONNECT;
6857
6858 typedef struct _POWER_SESSION_TIMEOUTS {
6859 DWORD InputTimeout;
6860 DWORD DisplayTimeout;
6861 } POWER_SESSION_TIMEOUTS,*PPOWER_SESSION_TIMEOUTS;
6862
6863 typedef struct _POWER_SESSION_RIT_STATE {
6864 BOOLEAN Active;
6865 DWORD LastInputTime;
6866 } POWER_SESSION_RIT_STATE,*PPOWER_SESSION_RIT_STATE;
6867
6868 typedef struct _POWER_SESSION_WINLOGON {
6869 DWORD SessionId;
6870 BOOLEAN Console;
6871 BOOLEAN Locked;
6872 } POWER_SESSION_WINLOGON,*PPOWER_SESSION_WINLOGON;
6873
6874 typedef struct _POWER_IDLE_RESILIENCY {
6875 DWORD CoalescingTimeout;
6876 DWORD IdleResiliencyPeriod;
6877 } POWER_IDLE_RESILIENCY,*PPOWER_IDLE_RESILIENCY;
6878
6879 typedef enum {
6880 MonitorRequestReasonUnknown,
6881 MonitorRequestReasonPowerButton,
6882 MonitorRequestReasonRemoteConnection,
6883 MonitorRequestReasonScMonitorpower,
6884 MonitorRequestReasonUserInput,
6885 MonitorRequestReasonAcDcDisplayBurst,
6886 MonitorRequestReasonUserDisplayBurst,
6887 MonitorRequestReasonPoSetSystemState,
6888 MonitorRequestReasonSetThreadExecutionState,
6889 MonitorRequestReasonFullWake,
6890 MonitorRequestReasonSessionUnlock,
6891 MonitorRequestReasonScreenOffRequest,
6892 MonitorRequestReasonIdleTimeout,
6893 MonitorRequestReasonPolicyChange,
6894 MonitorRequestReasonMax
6895 } POWER_MONITOR_REQUEST_REASON;
6896
6897 typedef struct _POWER_MONITOR_INVOCATION {
6898 BOOLEAN On;
6899 BOOLEAN Console;
6900 POWER_MONITOR_REQUEST_REASON RequestReason;
6901 } POWER_MONITOR_INVOCATION,*PPOWER_MONITOR_INVOCATION;
6902
6903 typedef struct _RESUME_PERFORMANCE {
6904 DWORD PostTimeMs;
6905 ULONGLONG TotalResumeTimeMs;
6906 ULONGLONG ResumeCompleteTimestamp;
6907 } RESUME_PERFORMANCE,*PRESUME_PERFORMANCE;
6908
6909 typedef enum {
6910 PoAc,
6911 PoDc,
6912 PoHot,
6913 PoConditionMaximum
6914 } SYSTEM_POWER_CONDITION;
6915
6916 typedef struct {
6917 DWORD Version;
6918 GUID Guid;
6919 SYSTEM_POWER_CONDITION PowerCondition;
6920 DWORD DataLength;
6921 BYTE Data[ANYSIZE_ARRAY];
6922 } SET_POWER_SETTING_VALUE,*PSET_POWER_SETTING_VALUE;
6923
6924#define POWER_SETTING_VALUE_VERSION (0x1)
6925
6926 typedef struct {
6927 GUID Guid;
6928 } NOTIFY_USER_POWER_SETTING,*PNOTIFY_USER_POWER_SETTING;
6929
6930 typedef struct _APPLICATIONLAUNCH_SETTING_VALUE {
6931 LARGE_INTEGER ActivationTime;
6932 DWORD Flags;
6933 DWORD ButtonInstanceID;
6934 } APPLICATIONLAUNCH_SETTING_VALUE,*PAPPLICATIONLAUNCH_SETTING_VALUE;
6935
6936 typedef enum _POWER_PLATFORM_ROLE {
6937 PlatformRoleUnspecified = 0,
6938 PlatformRoleDesktop,
6939 PlatformRoleMobile,
6940 PlatformRoleWorkstation,
6941 PlatformRoleEnterpriseServer,
6942 PlatformRoleSOHOServer,
6943 PlatformRoleAppliancePC,
6944 PlatformRolePerformanceServer,
6945 PlatformRoleSlate,
6946 PlatformRoleMaximum
6947 } POWER_PLATFORM_ROLE,*PPOWER_PLATFORM_ROLE;
6948
6949 typedef struct _POWER_PLATFORM_INFORMATION {
6950 BOOLEAN AoAc;
6951 } POWER_PLATFORM_INFORMATION,*PPOWER_PLATFORM_INFORMATION;
6952
6953#define POWER_PLATFORM_ROLE_V1 (0x00000001)
6954#define POWER_PLATFORM_ROLE_V1_MAX (PlatformRolePerformanceServer + 1)
6955
6956#define POWER_PLATFORM_ROLE_V2 (0x00000002)
6957#define POWER_PLATFORM_ROLE_V2_MAX (PlatformRoleSlate + 1)
6958
6959#if _WIN32_WINNT >= 0x0602
6960#define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V2
6961#define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V2_MAX
6962#else
6963#define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V1
6964#define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V1_MAX
6965#endif
6966
6967 typedef struct {
6968 DWORD Granularity;
6969 DWORD Capacity;
6970 } BATTERY_REPORTING_SCALE,*PBATTERY_REPORTING_SCALE;
6971
6972 typedef struct {
6973 DWORD Frequency;
6974 DWORD Flags;
6975 DWORD PercentFrequency;
6976 } PPM_WMI_LEGACY_PERFSTATE,*PPPM_WMI_LEGACY_PERFSTATE;
6977
6978 typedef struct {
6979 DWORD Latency;
6980 DWORD Power;
6981 DWORD TimeCheck;
6982 BYTE PromotePercent;
6983 BYTE DemotePercent;
6984 BYTE StateType;
6985 BYTE Reserved;
6986 DWORD StateFlags;
6987 DWORD Context;
6988 DWORD IdleHandler;
6989 DWORD Reserved1;
6990 } PPM_WMI_IDLE_STATE,*PPPM_WMI_IDLE_STATE;
6991
6992 typedef struct {
6993 DWORD Type;
6994 DWORD Count;
6995 DWORD TargetState;
6996 DWORD OldState;
6997 DWORD64 TargetProcessors;
6998 PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
6999 } PPM_WMI_IDLE_STATES,*PPPM_WMI_IDLE_STATES;
7000
7001 typedef struct {
7002 DWORD Type;
7003 DWORD Count;
7004 DWORD TargetState;
7005 DWORD OldState;
7006 PVOID TargetProcessors;
7007 PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
7008 } PPM_WMI_IDLE_STATES_EX,*PPPM_WMI_IDLE_STATES_EX;
7009
7010 typedef struct {
7011 DWORD Frequency;
7012 DWORD Power;
7013 BYTE PercentFrequency;
7014 BYTE IncreaseLevel;
7015 BYTE DecreaseLevel;
7016 BYTE Type;
7017 DWORD IncreaseTime;
7018 DWORD DecreaseTime;
7019 DWORD64 Control;
7020 DWORD64 Status;
7021 DWORD HitCount;
7022 DWORD Reserved1;
7023 DWORD64 Reserved2;
7024 DWORD64 Reserved3;
7025 } PPM_WMI_PERF_STATE,*PPPM_WMI_PERF_STATE;
7026
7027 typedef struct {
7028 DWORD Count;
7029 DWORD MaxFrequency;
7030 DWORD CurrentState;
7031 DWORD MaxPerfState;
7032 DWORD MinPerfState;
7033 DWORD LowestPerfState;
7034 DWORD ThermalConstraint;
7035 BYTE BusyAdjThreshold;
7036 BYTE PolicyType;
7037 BYTE Type;
7038 BYTE Reserved;
7039 DWORD TimerInterval;
7040 DWORD64 TargetProcessors;
7041 DWORD PStateHandler;
7042 DWORD PStateContext;
7043 DWORD TStateHandler;
7044 DWORD TStateContext;
7045 DWORD FeedbackHandler;
7046 DWORD Reserved1;
7047 DWORD64 Reserved2;
7048 PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
7049 } PPM_WMI_PERF_STATES,*PPPM_WMI_PERF_STATES;
7050
7051 typedef struct {
7052 DWORD Count;
7053 DWORD MaxFrequency;
7054 DWORD CurrentState;
7055 DWORD MaxPerfState;
7056 DWORD MinPerfState;
7057 DWORD LowestPerfState;
7058 DWORD ThermalConstraint;
7059 BYTE BusyAdjThreshold;
7060 BYTE PolicyType;
7061 BYTE Type;
7062 BYTE Reserved;
7063 DWORD TimerInterval;
7064 PVOID TargetProcessors;
7065 DWORD PStateHandler;
7066 DWORD PStateContext;
7067 DWORD TStateHandler;
7068 DWORD TStateContext;
7069 DWORD FeedbackHandler;
7070 DWORD Reserved1;
7071 DWORD64 Reserved2;
7072 PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
7073 } PPM_WMI_PERF_STATES_EX,*PPPM_WMI_PERF_STATES_EX;
7074
7075#define PROC_IDLE_BUCKET_COUNT 6
7076#define PROC_IDLE_BUCKET_COUNT_EX 16
7077
7078 typedef struct {
7079 DWORD IdleTransitions;
7080 DWORD FailedTransitions;
7081 DWORD InvalidBucketIndex;
7082 DWORD64 TotalTime;
7083 DWORD IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT];
7084 } PPM_IDLE_STATE_ACCOUNTING,*PPPM_IDLE_STATE_ACCOUNTING;
7085
7086 typedef struct {
7087 DWORD StateCount;
7088 DWORD TotalTransitions;
7089 DWORD ResetCount;
7090 DWORD64 StartTime;
7091 PPM_IDLE_STATE_ACCOUNTING State[ANYSIZE_ARRAY];
7092 } PPM_IDLE_ACCOUNTING,*PPPM_IDLE_ACCOUNTING;
7093
7094 typedef struct {
7095 DWORD64 TotalTimeUs;
7096 DWORD MinTimeUs;
7097 DWORD MaxTimeUs;
7098 DWORD Count;
7099 } PPM_IDLE_STATE_BUCKET_EX,*PPPM_IDLE_STATE_BUCKET_EX;
7100
7101 typedef struct {
7102 DWORD64 TotalTime;
7103 DWORD IdleTransitions;
7104 DWORD FailedTransitions;
7105 DWORD InvalidBucketIndex;
7106 DWORD MinTimeUs;
7107 DWORD MaxTimeUs;
7108 DWORD CancelledTransitions;
7109 PPM_IDLE_STATE_BUCKET_EX IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT_EX];
7110 } PPM_IDLE_STATE_ACCOUNTING_EX,*PPPM_IDLE_STATE_ACCOUNTING_EX;
7111
7112 typedef struct {
7113 DWORD StateCount;
7114 DWORD TotalTransitions;
7115 DWORD ResetCount;
7116 DWORD AbortCount;
7117 DWORD64 StartTime;
7118 PPM_IDLE_STATE_ACCOUNTING_EX State[ANYSIZE_ARRAY];
7119 } PPM_IDLE_ACCOUNTING_EX,*PPPM_IDLE_ACCOUNTING_EX;
7120
7121#define ACPI_PPM_SOFTWARE_ALL 0xfc
7122#define ACPI_PPM_SOFTWARE_ANY 0xfd
7123#define ACPI_PPM_HARDWARE_ALL 0xfe
7124
7125#define MS_PPM_SOFTWARE_ALL 0x1
7126
7127#define PPM_FIRMWARE_ACPI1C2 0x1
7128#define PPM_FIRMWARE_ACPI1C3 0x2
7129#define PPM_FIRMWARE_ACPI1TSTATES 0x4
7130#define PPM_FIRMWARE_CST 0x8
7131#define PPM_FIRMWARE_CSD 0x10
7132#define PPM_FIRMWARE_PCT 0x20
7133#define PPM_FIRMWARE_PSS 0x40
7134#define PPM_FIRMWARE_XPSS 0x80
7135#define PPM_FIRMWARE_PPC 0x100
7136#define PPM_FIRMWARE_PSD 0x200
7137#define PPM_FIRMWARE_PTC 0x400
7138#define PPM_FIRMWARE_TSS 0x800
7139#define PPM_FIRMWARE_TPC 0x1000
7140#define PPM_FIRMWARE_TSD 0x2000
7141#define PPM_FIRMWARE_PCCH 0x4000
7142#define PPM_FIRMWARE_PCCP 0x8000
7143#define PPM_FIRMWARE_OSC 0x10000
7144#define PPM_FIRMWARE_PDC 0x20000
7145#define PPM_FIRMWARE_CPC 0x40000
7146
7147#define PPM_PERFORMANCE_IMPLEMENTATION_NONE 0
7148#define PPM_PERFORMANCE_IMPLEMENTATION_PSTATES 1
7149#define PPM_PERFORMANCE_IMPLEMENTATION_PCCV1 2
7150#define PPM_PERFORMANCE_IMPLEMENTATION_CPPC 3
7151#define PPM_PERFORMANCE_IMPLEMENTATION_PEP 4
7152
7153#define PPM_IDLE_IMPLEMENTATION_NONE 0x0
7154#define PPM_IDLE_IMPLEMENTATION_CSTATES 0x1
7155#define PPM_IDLE_IMPLEMENTATION_PEP 0x2
7156
7157 typedef struct {
7158 DWORD State;
7159 DWORD Status;
7160 DWORD Latency;
7161 DWORD Speed;
7162 DWORD Processor;
7163 } PPM_PERFSTATE_EVENT,*PPPM_PERFSTATE_EVENT;
7164
7165 typedef struct {
7166 DWORD State;
7167 DWORD Latency;
7168 DWORD Speed;
7169 DWORD64 Processors;
7170 } PPM_PERFSTATE_DOMAIN_EVENT,*PPPM_PERFSTATE_DOMAIN_EVENT;
7171
7172 typedef struct {
7173 DWORD NewState;
7174 DWORD OldState;
7175 DWORD64 Processors;
7176 } PPM_IDLESTATE_EVENT,*PPPM_IDLESTATE_EVENT;
7177
7178 typedef struct {
7179 DWORD ThermalConstraint;
7180 DWORD64 Processors;
7181 } PPM_THERMALCHANGE_EVENT,*PPPM_THERMALCHANGE_EVENT;
7182 typedef struct {
7183 BYTE Mode;
7184 DWORD64 Processors;
7185 } PPM_THERMAL_POLICY_EVENT,*PPPM_THERMAL_POLICY_EVENT;
7186
7187 DEFINE_GUID (PPM_PERFSTATE_CHANGE_GUID, 0xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb);
7188 DEFINE_GUID (PPM_PERFSTATE_DOMAIN_CHANGE_GUID, 0x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1);
7189 DEFINE_GUID (PPM_IDLESTATE_CHANGE_GUID, 0x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c);
7190 DEFINE_GUID (PPM_PERFSTATES_DATA_GUID, 0x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26);
7191 DEFINE_GUID (PPM_IDLESTATES_DATA_GUID, 0xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7);
7192 DEFINE_GUID (PPM_IDLE_ACCOUNTING_GUID, 0xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd);
7193 DEFINE_GUID (PPM_IDLE_ACCOUNTING_EX_GUID, 0xd67abd39, 0x81f8, 0x4a5e, 0x81, 0x52, 0x72, 0xe3, 0x1e, 0xc9, 0x12, 0xee);
7194 DEFINE_GUID (PPM_THERMALCONSTRAINT_GUID, 0xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88);
7195 DEFINE_GUID (PPM_PERFMON_PERFSTATE_GUID, 0x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e);
7196 DEFINE_GUID (PPM_THERMAL_POLICY_CHANGE_GUID, 0x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d);
7197
7198 typedef struct {
7199 POWER_ACTION Action;
7200 DWORD Flags;
7201 DWORD EventCode;
7202 } POWER_ACTION_POLICY,*PPOWER_ACTION_POLICY;
7203
7204#define POWER_ACTION_QUERY_ALLOWED 0x00000001
7205#define POWER_ACTION_UI_ALLOWED 0x00000002
7206#define POWER_ACTION_OVERRIDE_APPS 0x00000004
7207#define POWER_ACTION_HIBERBOOT 0x00000008
7208#define POWER_ACTION_PSEUDO_TRANSITION 0x08000000
7209#define POWER_ACTION_LIGHTEST_FIRST 0x10000000
7210#define POWER_ACTION_LOCK_CONSOLE 0x20000000
7211#define POWER_ACTION_DISABLE_WAKES 0x40000000
7212#define POWER_ACTION_CRITICAL 0x80000000
7213
7214#define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
7215#define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
7216#define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
7217#define POWER_USER_NOTIFY_BUTTON 0x00000008
7218#define POWER_USER_NOTIFY_SHUTDOWN 0x00000010
7219#define POWER_USER_NOTIFY_FORCED_SHUTDOWN 0x00000020
7220#define POWER_FORCE_TRIGGER_RESET 0x80000000
7221
7222#define BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK 0x00000007
7223#define BATTERY_DISCHARGE_FLAGS_ENABLE 0x80000000
7224
7225#define DISCHARGE_POLICY_CRITICAL 0
7226#define DISCHARGE_POLICY_LOW 1
7227
7228#define NUM_DISCHARGE_POLICIES 4
7229
7230#define PROCESSOR_IDLESTATE_POLICY_COUNT 0x3
7231
7232 typedef struct {
7233 DWORD TimeCheck;
7234 BYTE DemotePercent;
7235 BYTE PromotePercent;
7236 BYTE Spare[2];
7237 } PROCESSOR_IDLESTATE_INFO,*PPROCESSOR_IDLESTATE_INFO;
7238
7239 typedef struct {
7240 BOOLEAN Enable;
7241 BYTE Spare[3];
7242 DWORD BatteryLevel;
7243 POWER_ACTION_POLICY PowerPolicy;
7244 SYSTEM_POWER_STATE MinSystemState;
7245 } SYSTEM_POWER_LEVEL,*PSYSTEM_POWER_LEVEL;
7246
7247 typedef struct _SYSTEM_POWER_POLICY {
7248 DWORD Revision;
7249 POWER_ACTION_POLICY PowerButton;
7250 POWER_ACTION_POLICY SleepButton;
7251 POWER_ACTION_POLICY LidClose;
7252 SYSTEM_POWER_STATE LidOpenWake;
7253 DWORD Reserved;
7254 POWER_ACTION_POLICY Idle;
7255 DWORD IdleTimeout;
7256 BYTE IdleSensitivity;
7257 BYTE DynamicThrottle;
7258 BYTE Spare2[2];
7259 SYSTEM_POWER_STATE MinSleep;
7260 SYSTEM_POWER_STATE MaxSleep;
7261 SYSTEM_POWER_STATE ReducedLatencySleep;
7262 DWORD WinLogonFlags;
7263 DWORD Spare3;
7264 DWORD DozeS4Timeout;
7265 DWORD BroadcastCapacityResolution;
7266 SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
7267 DWORD VideoTimeout;
7268 BOOLEAN VideoDimDisplay;
7269 DWORD VideoReserved[3];
7270 DWORD SpindownTimeout;
7271 BOOLEAN OptimizeForPower;
7272 BYTE FanThrottleTolerance;
7273 BYTE ForcedThrottle;
7274 BYTE MinThrottle;
7275 POWER_ACTION_POLICY OverThrottled;
7276 } SYSTEM_POWER_POLICY,*PSYSTEM_POWER_POLICY;
7277
7278#define PO_THROTTLE_NONE 0
7279#define PO_THROTTLE_CONSTANT 1
7280#define PO_THROTTLE_DEGRADE 2
7281#define PO_THROTTLE_ADAPTIVE 3
7282#define PO_THROTTLE_MAXIMUM 4
7283
7284 typedef struct {
7285 WORD Revision;
7286 union {
7287 WORD AsWORD;
7288 __C89_NAMELESS struct {
7289 WORD AllowScaling : 1;
7290 WORD Disabled : 1;
7291 WORD Reserved : 14;
7292 } DUMMYSTRUCTNAME;
7293 } Flags;
7294 DWORD PolicyCount;
7295 PROCESSOR_IDLESTATE_INFO Policy[PROCESSOR_IDLESTATE_POLICY_COUNT];
7296 } PROCESSOR_IDLESTATE_POLICY,*PPROCESSOR_IDLESTATE_POLICY;
7297
7298 typedef struct _PROCESSOR_POWER_POLICY_INFO {
7299 DWORD TimeCheck;
7300 DWORD DemoteLimit;
7301 DWORD PromoteLimit;
7302 BYTE DemotePercent;
7303 BYTE PromotePercent;
7304 BYTE Spare[2];
7305 DWORD AllowDemotion:1;
7306 DWORD AllowPromotion:1;
7307 DWORD Reserved:30;
7308 } PROCESSOR_POWER_POLICY_INFO,*PPROCESSOR_POWER_POLICY_INFO;
7309
7310 typedef struct _PROCESSOR_POWER_POLICY {
7311 DWORD Revision;
7312 BYTE DynamicThrottle;
7313 BYTE Spare[3];
7314 DWORD DisableCStates:1;
7315 DWORD Reserved:31;
7316 DWORD PolicyCount;
7317 PROCESSOR_POWER_POLICY_INFO Policy[3];
7318 } PROCESSOR_POWER_POLICY,*PPROCESSOR_POWER_POLICY;
7319
7320 typedef struct {
7321 DWORD Revision;
7322 BYTE MaxThrottle;
7323 BYTE MinThrottle;
7324 BYTE BusyAdjThreshold;
7325 __C89_NAMELESS union {
7326 BYTE Spare;
7327 union {
7328 BYTE AsBYTE;
7329 __C89_NAMELESS struct {
7330 BYTE NoDomainAccounting : 1;
7331 BYTE IncreasePolicy: 2;
7332 BYTE DecreasePolicy: 2;
7333 BYTE Reserved : 3;
7334 } DUMMYSTRUCTNAME;
7335 } Flags;
7336 } DUMMYUNIONNAME;
7337 DWORD TimeCheck;
7338 DWORD IncreaseTime;
7339 DWORD DecreaseTime;
7340 DWORD IncreasePercent;
7341 DWORD DecreasePercent;
7342 } PROCESSOR_PERFSTATE_POLICY,*PPROCESSOR_PERFSTATE_POLICY;
7343
7344 typedef struct _ADMINISTRATOR_POWER_POLICY {
7345 SYSTEM_POWER_STATE MinSleep;
7346 SYSTEM_POWER_STATE MaxSleep;
7347 DWORD MinVideoTimeout;
7348 DWORD MaxVideoTimeout;
7349 DWORD MinSpindownTimeout;
7350 DWORD MaxSpindownTimeout;
7351 } ADMINISTRATOR_POWER_POLICY,*PADMINISTRATOR_POWER_POLICY;
7352
7353 typedef struct {
7354 BOOLEAN PowerButtonPresent;
7355 BOOLEAN SleepButtonPresent;
7356 BOOLEAN LidPresent;
7357 BOOLEAN SystemS1;
7358 BOOLEAN SystemS2;
7359 BOOLEAN SystemS3;
7360 BOOLEAN SystemS4;
7361 BOOLEAN SystemS5;
7362 BOOLEAN HiberFilePresent;
7363 BOOLEAN FullWake;
7364 BOOLEAN VideoDimPresent;
7365 BOOLEAN ApmPresent;
7366 BOOLEAN UpsPresent;
7367 BOOLEAN ThermalControl;
7368 BOOLEAN ProcessorThrottle;
7369 BYTE ProcessorMinThrottle;
7370 BYTE ProcessorMaxThrottle;
7371 BOOLEAN FastSystemS4;
7372 BYTE spare2[3];
7373 BOOLEAN DiskSpinDown;
7374 BYTE spare3[8];
7375 BOOLEAN SystemBatteriesPresent;
7376 BOOLEAN BatteriesAreShortTerm;
7377 BATTERY_REPORTING_SCALE BatteryScale[3];
7378 SYSTEM_POWER_STATE AcOnLineWake;
7379 SYSTEM_POWER_STATE SoftLidWake;
7380 SYSTEM_POWER_STATE RtcWake;
7381 SYSTEM_POWER_STATE MinDeviceWakeState;
7382 SYSTEM_POWER_STATE DefaultLowLatencyWake;
7383 } SYSTEM_POWER_CAPABILITIES,*PSYSTEM_POWER_CAPABILITIES;
7384
7385 typedef struct {
7386 BOOLEAN AcOnLine;
7387 BOOLEAN BatteryPresent;
7388 BOOLEAN Charging;
7389 BOOLEAN Discharging;
7390 BOOLEAN Spare1[4];
7391 DWORD MaxCapacity;
7392 DWORD RemainingCapacity;
7393 DWORD Rate;
7394 DWORD EstimatedTime;
7395 DWORD DefaultAlert1;
7396 DWORD DefaultAlert2;
7397 } SYSTEM_BATTERY_STATE,*PSYSTEM_BATTERY_STATE;
7398
7399#include "pshpack4.h"
7400
7401#define IMAGE_DOS_SIGNATURE 0x5A4D
7402#define IMAGE_OS2_SIGNATURE 0x454E
7403#define IMAGE_OS2_SIGNATURE_LE 0x454C
7404#define IMAGE_VXD_SIGNATURE 0x454C
7405#define IMAGE_NT_SIGNATURE 0x00004550
7406
7407#include "pshpack2.h"
7408
7409 typedef struct _IMAGE_DOS_HEADER {
7410 WORD e_magic;
7411 WORD e_cblp;
7412 WORD e_cp;
7413 WORD e_crlc;
7414 WORD e_cparhdr;
7415 WORD e_minalloc;
7416 WORD e_maxalloc;
7417 WORD e_ss;
7418 WORD e_sp;
7419 WORD e_csum;
7420 WORD e_ip;
7421 WORD e_cs;
7422 WORD e_lfarlc;
7423 WORD e_ovno;
7424 WORD e_res[4];
7425 WORD e_oemid;
7426 WORD e_oeminfo;
7427 WORD e_res2[10];
7428 LONG e_lfanew;
7429 } IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;
7430
7431 typedef struct _IMAGE_OS2_HEADER {
7432 WORD ne_magic;
7433 CHAR ne_ver;
7434 CHAR ne_rev;
7435 WORD ne_enttab;
7436 WORD ne_cbenttab;
7437 LONG ne_crc;
7438 WORD ne_flags;
7439 WORD ne_autodata;
7440 WORD ne_heap;
7441 WORD ne_stack;
7442 LONG ne_csip;
7443 LONG ne_sssp;
7444 WORD ne_cseg;
7445 WORD ne_cmod;
7446 WORD ne_cbnrestab;
7447 WORD ne_segtab;
7448 WORD ne_rsrctab;
7449 WORD ne_restab;
7450 WORD ne_modtab;
7451 WORD ne_imptab;
7452 LONG ne_nrestab;
7453 WORD ne_cmovent;
7454 WORD ne_align;
7455 WORD ne_cres;
7456 BYTE ne_exetyp;
7457 BYTE ne_flagsothers;
7458 WORD ne_pretthunks;
7459 WORD ne_psegrefbytes;
7460 WORD ne_swaparea;
7461 WORD ne_expver;
7462 } IMAGE_OS2_HEADER,*PIMAGE_OS2_HEADER;
7463
7464 typedef struct _IMAGE_VXD_HEADER {
7465 WORD e32_magic;
7466 BYTE e32_border;
7467 BYTE e32_worder;
7468 DWORD e32_level;
7469 WORD e32_cpu;
7470 WORD e32_os;
7471 DWORD e32_ver;
7472 DWORD e32_mflags;
7473 DWORD e32_mpages;
7474 DWORD e32_startobj;
7475 DWORD e32_eip;
7476 DWORD e32_stackobj;
7477 DWORD e32_esp;
7478 DWORD e32_pagesize;
7479 DWORD e32_lastpagesize;
7480 DWORD e32_fixupsize;
7481 DWORD e32_fixupsum;
7482 DWORD e32_ldrsize;
7483 DWORD e32_ldrsum;
7484 DWORD e32_objtab;
7485 DWORD e32_objcnt;
7486 DWORD e32_objmap;
7487 DWORD e32_itermap;
7488 DWORD e32_rsrctab;
7489 DWORD e32_rsrccnt;
7490 DWORD e32_restab;
7491 DWORD e32_enttab;
7492 DWORD e32_dirtab;
7493 DWORD e32_dircnt;
7494 DWORD e32_fpagetab;
7495 DWORD e32_frectab;
7496 DWORD e32_impmod;
7497 DWORD e32_impmodcnt;
7498 DWORD e32_impproc;
7499 DWORD e32_pagesum;
7500 DWORD e32_datapage;
7501 DWORD e32_preload;
7502 DWORD e32_nrestab;
7503 DWORD e32_cbnrestab;
7504 DWORD e32_nressum;
7505 DWORD e32_autodata;
7506 DWORD e32_debuginfo;
7507 DWORD e32_debuglen;
7508 DWORD e32_instpreload;
7509 DWORD e32_instdemand;
7510 DWORD e32_heapsize;
7511 BYTE e32_res3[12];
7512 DWORD e32_winresoff;
7513 DWORD e32_winreslen;
7514 WORD e32_devid;
7515 WORD e32_ddkver;
7516 } IMAGE_VXD_HEADER,*PIMAGE_VXD_HEADER;
7517
7518#include "poppack.h"
7519
7520 typedef struct _IMAGE_FILE_HEADER {
7521 WORD Machine;
7522 WORD NumberOfSections;
7523 DWORD TimeDateStamp;
7524 DWORD PointerToSymbolTable;
7525 DWORD NumberOfSymbols;
7526 WORD SizeOfOptionalHeader;
7527 WORD Characteristics;
7528 } IMAGE_FILE_HEADER,*PIMAGE_FILE_HEADER;
7529
7530#define IMAGE_SIZEOF_FILE_HEADER 20
7531
7532#define IMAGE_FILE_RELOCS_STRIPPED 0x0001
7533#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002
7534#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004
7535#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008
7536#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010
7537#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020
7538#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080
7539#define IMAGE_FILE_32BIT_MACHINE 0x0100
7540#define IMAGE_FILE_DEBUG_STRIPPED 0x0200
7541#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400
7542#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800
7543#define IMAGE_FILE_SYSTEM 0x1000
7544#define IMAGE_FILE_DLL 0x2000
7545#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000
7546#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000
7547
7548#define IMAGE_FILE_MACHINE_UNKNOWN 0
7549#define IMAGE_FILE_MACHINE_I386 0x014c
7550#define IMAGE_FILE_MACHINE_R3000 0x0162
7551#define IMAGE_FILE_MACHINE_R4000 0x0166
7552#define IMAGE_FILE_MACHINE_R10000 0x0168
7553#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169
7554#define IMAGE_FILE_MACHINE_ALPHA 0x0184
7555#define IMAGE_FILE_MACHINE_SH3 0x01a2
7556#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
7557#define IMAGE_FILE_MACHINE_SH3E 0x01a4
7558#define IMAGE_FILE_MACHINE_SH4 0x01a6
7559#define IMAGE_FILE_MACHINE_SH5 0x01a8
7560#define IMAGE_FILE_MACHINE_ARM 0x01c0
7561#define IMAGE_FILE_MACHINE_ARMV7 0x01c4
7562#define IMAGE_FILE_MACHINE_ARMNT 0x01c4
7563#define IMAGE_FILE_MACHINE_ARM64 0xaa64
7564#define IMAGE_FILE_MACHINE_THUMB 0x01c2
7565#define IMAGE_FILE_MACHINE_AM33 0x01d3
7566#define IMAGE_FILE_MACHINE_POWERPC 0x01F0
7567#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
7568#define IMAGE_FILE_MACHINE_IA64 0x0200
7569#define IMAGE_FILE_MACHINE_MIPS16 0x0266
7570#define IMAGE_FILE_MACHINE_ALPHA64 0x0284
7571#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366
7572#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466
7573#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
7574#define IMAGE_FILE_MACHINE_TRICORE 0x0520
7575#define IMAGE_FILE_MACHINE_CEF 0x0CEF
7576#define IMAGE_FILE_MACHINE_EBC 0x0EBC
7577#define IMAGE_FILE_MACHINE_AMD64 0x8664
7578#define IMAGE_FILE_MACHINE_M32R 0x9041
7579#define IMAGE_FILE_MACHINE_CEE 0xc0ee
7580
7581 typedef struct _IMAGE_DATA_DIRECTORY {
7582 DWORD VirtualAddress;
7583 DWORD Size;
7584 } IMAGE_DATA_DIRECTORY,*PIMAGE_DATA_DIRECTORY;
7585
7586#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
7587
7588 typedef struct _IMAGE_OPTIONAL_HEADER {
7589
7590 WORD Magic;
7591 BYTE MajorLinkerVersion;
7592 BYTE MinorLinkerVersion;
7593 DWORD SizeOfCode;
7594 DWORD SizeOfInitializedData;
7595 DWORD SizeOfUninitializedData;
7596 DWORD AddressOfEntryPoint;
7597 DWORD BaseOfCode;
7598 DWORD BaseOfData;
7599 DWORD ImageBase;
7600 DWORD SectionAlignment;
7601 DWORD FileAlignment;
7602 WORD MajorOperatingSystemVersion;
7603 WORD MinorOperatingSystemVersion;
7604 WORD MajorImageVersion;
7605 WORD MinorImageVersion;
7606 WORD MajorSubsystemVersion;
7607 WORD MinorSubsystemVersion;
7608 DWORD Win32VersionValue;
7609 DWORD SizeOfImage;
7610 DWORD SizeOfHeaders;
7611 DWORD CheckSum;
7612 WORD Subsystem;
7613 WORD DllCharacteristics;
7614 DWORD SizeOfStackReserve;
7615 DWORD SizeOfStackCommit;
7616 DWORD SizeOfHeapReserve;
7617 DWORD SizeOfHeapCommit;
7618 DWORD LoaderFlags;
7619 DWORD NumberOfRvaAndSizes;
7620 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
7621 } IMAGE_OPTIONAL_HEADER32,*PIMAGE_OPTIONAL_HEADER32;
7622
7623 typedef struct _IMAGE_ROM_OPTIONAL_HEADER {
7624 WORD Magic;
7625 BYTE MajorLinkerVersion;
7626 BYTE MinorLinkerVersion;
7627 DWORD SizeOfCode;
7628 DWORD SizeOfInitializedData;
7629 DWORD SizeOfUninitializedData;
7630 DWORD AddressOfEntryPoint;
7631 DWORD BaseOfCode;
7632 DWORD BaseOfData;
7633 DWORD BaseOfBss;
7634 DWORD GprMask;
7635 DWORD CprMask[4];
7636 DWORD GpValue;
7637 } IMAGE_ROM_OPTIONAL_HEADER,*PIMAGE_ROM_OPTIONAL_HEADER;
7638
7639 typedef struct _IMAGE_OPTIONAL_HEADER64 {
7640 WORD Magic;
7641 BYTE MajorLinkerVersion;
7642 BYTE MinorLinkerVersion;
7643 DWORD SizeOfCode;
7644 DWORD SizeOfInitializedData;
7645 DWORD SizeOfUninitializedData;
7646 DWORD AddressOfEntryPoint;
7647 DWORD BaseOfCode;
7648 ULONGLONG ImageBase;
7649 DWORD SectionAlignment;
7650 DWORD FileAlignment;
7651 WORD MajorOperatingSystemVersion;
7652 WORD MinorOperatingSystemVersion;
7653 WORD MajorImageVersion;
7654 WORD MinorImageVersion;
7655 WORD MajorSubsystemVersion;
7656 WORD MinorSubsystemVersion;
7657 DWORD Win32VersionValue;
7658 DWORD SizeOfImage;
7659 DWORD SizeOfHeaders;
7660 DWORD CheckSum;
7661 WORD Subsystem;
7662 WORD DllCharacteristics;
7663 ULONGLONG SizeOfStackReserve;
7664 ULONGLONG SizeOfStackCommit;
7665 ULONGLONG SizeOfHeapReserve;
7666 ULONGLONG SizeOfHeapCommit;
7667 DWORD LoaderFlags;
7668 DWORD NumberOfRvaAndSizes;
7669 IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
7670 } IMAGE_OPTIONAL_HEADER64,*PIMAGE_OPTIONAL_HEADER64;
7671
7672#define IMAGE_SIZEOF_ROM_OPTIONAL_HEADER 56
7673#define IMAGE_SIZEOF_STD_OPTIONAL_HEADER 28
7674#define IMAGE_SIZEOF_NT_OPTIONAL32_HEADER 224
7675#define IMAGE_SIZEOF_NT_OPTIONAL64_HEADER 240
7676
7677#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
7678#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
7679#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
7680
7681#ifdef _WIN64
7682 typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
7683 typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
7684#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL64_HEADER
7685#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
7686#else /* _WIN64 */
7687 typedef IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER;
7688 typedef PIMAGE_OPTIONAL_HEADER32 PIMAGE_OPTIONAL_HEADER;
7689#define IMAGE_SIZEOF_NT_OPTIONAL_HEADER IMAGE_SIZEOF_NT_OPTIONAL32_HEADER
7690#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
7691#endif /* _WIN64 */
7692
7693 typedef struct _IMAGE_NT_HEADERS64 {
7694 DWORD Signature;
7695 IMAGE_FILE_HEADER FileHeader;
7696 IMAGE_OPTIONAL_HEADER64 OptionalHeader;
7697 } IMAGE_NT_HEADERS64,*PIMAGE_NT_HEADERS64;
7698
7699 typedef struct _IMAGE_NT_HEADERS {
7700 DWORD Signature;
7701 IMAGE_FILE_HEADER FileHeader;
7702 IMAGE_OPTIONAL_HEADER32 OptionalHeader;
7703 } IMAGE_NT_HEADERS32,*PIMAGE_NT_HEADERS32;
7704
7705 typedef struct _IMAGE_ROM_HEADERS {
7706 IMAGE_FILE_HEADER FileHeader;
7707 IMAGE_ROM_OPTIONAL_HEADER OptionalHeader;
7708 } IMAGE_ROM_HEADERS,*PIMAGE_ROM_HEADERS;
7709
7710#ifdef _WIN64
7711 typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
7712 typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
7713#else /* _WIN64 */
7714 typedef IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS;
7715 typedef PIMAGE_NT_HEADERS32 PIMAGE_NT_HEADERS;
7716#endif /* _WIN64 */
7717
7718#define IMAGE_FIRST_SECTION(ntheader) ((PIMAGE_SECTION_HEADER) ((ULONG_PTR)ntheader + FIELD_OFFSET(IMAGE_NT_HEADERS,OptionalHeader) + ((PIMAGE_NT_HEADERS)(ntheader))->FileHeader.SizeOfOptionalHeader))
7719
7720#define IMAGE_SUBSYSTEM_UNKNOWN 0
7721#define IMAGE_SUBSYSTEM_NATIVE 1
7722#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2
7723#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3
7724#define IMAGE_SUBSYSTEM_OS2_CUI 5
7725#define IMAGE_SUBSYSTEM_POSIX_CUI 7
7726#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8
7727#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9
7728#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10
7729#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11
7730#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12
7731#define IMAGE_SUBSYSTEM_EFI_ROM 13
7732#define IMAGE_SUBSYSTEM_XBOX 14
7733#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
7734
7735#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020
7736#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040
7737#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080
7738#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100
7739#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200
7740#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400
7741#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800
7742#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000
7743#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000
7744#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000
7745#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
7746
7747#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
7748#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
7749#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
7750#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
7751#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
7752#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
7753#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
7754#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7
7755#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8
7756#define IMAGE_DIRECTORY_ENTRY_TLS 9
7757#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
7758#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
7759#define IMAGE_DIRECTORY_ENTRY_IAT 12
7760#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
7761#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
7762
7763 typedef struct ANON_OBJECT_HEADER {
7764 WORD Sig1;
7765 WORD Sig2;
7766 WORD Version;
7767 WORD Machine;
7768 DWORD TimeDateStamp;
7769 CLSID ClassID;
7770 DWORD SizeOfData;
7771 } ANON_OBJECT_HEADER;
7772
7773 typedef struct ANON_OBJECT_HEADER_V2 {
7774 WORD Sig1;
7775 WORD Sig2;
7776 WORD Version;
7777 WORD Machine;
7778 DWORD TimeDateStamp;
7779 CLSID ClassID;
7780 DWORD SizeOfData;
7781 DWORD Flags;
7782 DWORD MetaDataSize;
7783 DWORD MetaDataOffset;
7784 } ANON_OBJECT_HEADER_V2;
7785
7786 typedef struct ANON_OBJECT_HEADER_BIGOBJ {
7787 WORD Sig1;
7788 WORD Sig2;
7789 WORD Version;
7790 WORD Machine;
7791 DWORD TimeDateStamp;
7792 CLSID ClassID;
7793 DWORD SizeOfData;
7794 DWORD Flags;
7795 DWORD MetaDataSize;
7796 DWORD MetaDataOffset;
7797 DWORD NumberOfSections;
7798 DWORD PointerToSymbolTable;
7799 DWORD NumberOfSymbols;
7800 } ANON_OBJECT_HEADER_BIGOBJ;
7801
7802#define IMAGE_SIZEOF_SHORT_NAME 8
7803
7804 typedef struct _IMAGE_SECTION_HEADER {
7805 BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
7806 union {
7807 DWORD PhysicalAddress;
7808 DWORD VirtualSize;
7809 } Misc;
7810 DWORD VirtualAddress;
7811 DWORD SizeOfRawData;
7812 DWORD PointerToRawData;
7813 DWORD PointerToRelocations;
7814 DWORD PointerToLinenumbers;
7815 WORD NumberOfRelocations;
7816 WORD NumberOfLinenumbers;
7817 DWORD Characteristics;
7818 } IMAGE_SECTION_HEADER,*PIMAGE_SECTION_HEADER;
7819
7820#define IMAGE_SIZEOF_SECTION_HEADER 40
7821
7822#define IMAGE_SCN_TYPE_NO_PAD 0x00000008
7823
7824#define IMAGE_SCN_CNT_CODE 0x00000020
7825#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040
7826#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080
7827#define IMAGE_SCN_LNK_OTHER 0x00000100
7828#define IMAGE_SCN_LNK_INFO 0x00000200
7829#define IMAGE_SCN_LNK_REMOVE 0x00000800
7830#define IMAGE_SCN_LNK_COMDAT 0x00001000
7831#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000
7832#define IMAGE_SCN_GPREL 0x00008000
7833#define IMAGE_SCN_MEM_FARDATA 0x00008000
7834#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
7835#define IMAGE_SCN_MEM_16BIT 0x00020000
7836#define IMAGE_SCN_MEM_LOCKED 0x00040000
7837#define IMAGE_SCN_MEM_PRELOAD 0x00080000
7838
7839#define IMAGE_SCN_ALIGN_1BYTES 0x00100000
7840#define IMAGE_SCN_ALIGN_2BYTES 0x00200000
7841#define IMAGE_SCN_ALIGN_4BYTES 0x00300000
7842#define IMAGE_SCN_ALIGN_8BYTES 0x00400000
7843#define IMAGE_SCN_ALIGN_16BYTES 0x00500000
7844#define IMAGE_SCN_ALIGN_32BYTES 0x00600000
7845#define IMAGE_SCN_ALIGN_64BYTES 0x00700000
7846#define IMAGE_SCN_ALIGN_128BYTES 0x00800000
7847#define IMAGE_SCN_ALIGN_256BYTES 0x00900000
7848#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000
7849#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000
7850#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000
7851#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000
7852#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000
7853
7854#define IMAGE_SCN_ALIGN_MASK 0x00F00000
7855
7856#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000
7857#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000
7858#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000
7859#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000
7860#define IMAGE_SCN_MEM_SHARED 0x10000000
7861#define IMAGE_SCN_MEM_EXECUTE 0x20000000
7862#define IMAGE_SCN_MEM_READ 0x40000000
7863#define IMAGE_SCN_MEM_WRITE 0x80000000
7864
7865#define IMAGE_SCN_SCALE_INDEX 0x00000001
7866
7867#include "pshpack2.h"
7868 typedef struct _IMAGE_SYMBOL {
7869 union {
7870 BYTE ShortName[8];
7871 struct {
7872 DWORD Short;
7873 DWORD Long;
7874 } Name;
7875 DWORD LongName[2];
7876 } N;
7877 DWORD Value;
7878 SHORT SectionNumber;
7879 WORD Type;
7880 BYTE StorageClass;
7881 BYTE NumberOfAuxSymbols;
7882 } IMAGE_SYMBOL;
7883 typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
7884
7885#define IMAGE_SIZEOF_SYMBOL 18
7886
7887 typedef struct _IMAGE_SYMBOL_EX {
7888 union {
7889 BYTE ShortName[8];
7890 struct {
7891 DWORD Short;
7892 DWORD Long;
7893 } Name;
7894 DWORD LongName[2];
7895 } N;
7896 DWORD Value;
7897 LONG SectionNumber;
7898 WORD Type;
7899 BYTE StorageClass;
7900 BYTE NumberOfAuxSymbols;
7901 } IMAGE_SYMBOL_EX,UNALIGNED *PIMAGE_SYMBOL_EX;
7902
7903#define IMAGE_SYM_UNDEFINED (SHORT)0
7904#define IMAGE_SYM_ABSOLUTE (SHORT)-1
7905#define IMAGE_SYM_DEBUG (SHORT)-2
7906#define IMAGE_SYM_SECTION_MAX 0xFEFF
7907#define IMAGE_SYM_SECTION_MAX_EX MAXLONG
7908
7909#define IMAGE_SYM_TYPE_NULL 0x0000
7910#define IMAGE_SYM_TYPE_VOID 0x0001
7911#define IMAGE_SYM_TYPE_CHAR 0x0002
7912#define IMAGE_SYM_TYPE_SHORT 0x0003
7913#define IMAGE_SYM_TYPE_INT 0x0004
7914#define IMAGE_SYM_TYPE_LONG 0x0005
7915#define IMAGE_SYM_TYPE_FLOAT 0x0006
7916#define IMAGE_SYM_TYPE_DOUBLE 0x0007
7917#define IMAGE_SYM_TYPE_STRUCT 0x0008
7918#define IMAGE_SYM_TYPE_UNION 0x0009
7919#define IMAGE_SYM_TYPE_ENUM 0x000A
7920#define IMAGE_SYM_TYPE_MOE 0x000B
7921#define IMAGE_SYM_TYPE_BYTE 0x000C
7922#define IMAGE_SYM_TYPE_WORD 0x000D
7923#define IMAGE_SYM_TYPE_UINT 0x000E
7924#define IMAGE_SYM_TYPE_DWORD 0x000F
7925#define IMAGE_SYM_TYPE_PCODE 0x8000
7926
7927#define IMAGE_SYM_DTYPE_NULL 0
7928#define IMAGE_SYM_DTYPE_POINTER 1
7929#define IMAGE_SYM_DTYPE_FUNCTION 2
7930#define IMAGE_SYM_DTYPE_ARRAY 3
7931
7932#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE)-1
7933#define IMAGE_SYM_CLASS_NULL 0x0000
7934#define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
7935#define IMAGE_SYM_CLASS_EXTERNAL 0x0002
7936#define IMAGE_SYM_CLASS_STATIC 0x0003
7937#define IMAGE_SYM_CLASS_REGISTER 0x0004
7938#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
7939#define IMAGE_SYM_CLASS_LABEL 0x0006
7940#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
7941#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
7942#define IMAGE_SYM_CLASS_ARGUMENT 0x0009
7943#define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
7944#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
7945#define IMAGE_SYM_CLASS_UNION_TAG 0x000C
7946#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
7947#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
7948#define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
7949#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
7950#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
7951#define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
7952#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044
7953#define IMAGE_SYM_CLASS_BLOCK 0x0064
7954#define IMAGE_SYM_CLASS_FUNCTION 0x0065
7955#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
7956#define IMAGE_SYM_CLASS_FILE 0x0067
7957#define IMAGE_SYM_CLASS_SECTION 0x0068
7958#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
7959#define IMAGE_SYM_CLASS_CLR_TOKEN 0x006B
7960
7961#define N_BTMASK 0x000F
7962#define N_TMASK 0x0030
7963#define N_TMASK1 0x00C0
7964#define N_TMASK2 0x00F0
7965#define N_BTSHFT 4
7966#define N_TSHIFT 2
7967
7968#define BTYPE(x) ((x) & N_BTMASK)
7969
7970#ifndef ISPTR
7971#define ISPTR(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
7972#endif
7973
7974#ifndef ISFCN
7975#define ISFCN(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
7976#endif
7977
7978#ifndef ISARY
7979#define ISARY(x) (((x) & N_TMASK)==(IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
7980#endif
7981
7982#ifndef ISTAG
7983#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
7984#endif
7985
7986#ifndef INCREF
7987#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
7988#endif
7989#ifndef DECREF
7990#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
7991#endif
7992
7993#include <pshpack2.h>
7994 typedef struct IMAGE_AUX_SYMBOL_TOKEN_DEF {
7995 BYTE bAuxType;
7996 BYTE bReserved;
7997 DWORD SymbolTableIndex;
7998 BYTE rgbReserved[12];
7999 } IMAGE_AUX_SYMBOL_TOKEN_DEF,UNALIGNED *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
8000#include <poppack.h>
8001
8002 typedef union _IMAGE_AUX_SYMBOL {
8003 struct {
8004 DWORD TagIndex;
8005 union {
8006 struct {
8007 WORD Linenumber;
8008 WORD Size;
8009 } LnSz;
8010 DWORD TotalSize;
8011 } Misc;
8012 union {
8013 struct {
8014 DWORD PointerToLinenumber;
8015 DWORD PointerToNextFunction;
8016 } Function;
8017 struct {
8018 WORD Dimension[4];
8019 } Array;
8020 } FcnAry;
8021 WORD TvIndex;
8022 } Sym;
8023 struct {
8024 BYTE Name[IMAGE_SIZEOF_SYMBOL];
8025 } File;
8026 struct {
8027 DWORD Length;
8028 WORD NumberOfRelocations;
8029 WORD NumberOfLinenumbers;
8030 DWORD CheckSum;
8031 SHORT Number;
8032 BYTE Selection;
8033 } Section;
8034 IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
8035 struct {
8036 DWORD crc;
8037 BYTE rgbReserved[14];
8038 } CRC;
8039 } IMAGE_AUX_SYMBOL,UNALIGNED *PIMAGE_AUX_SYMBOL;
8040
8041 typedef union _IMAGE_AUX_SYMBOL_EX {
8042 struct {
8043 DWORD WeakDefaultSymIndex;
8044 DWORD WeakSearchType;
8045 BYTE rgbReserved[12];
8046 } Sym;
8047 struct {
8048 BYTE Name[sizeof (IMAGE_SYMBOL_EX)];
8049 } File;
8050 struct {
8051 DWORD Length;
8052 WORD NumberOfRelocations;
8053 WORD NumberOfLinenumbers;
8054 DWORD CheckSum;
8055 SHORT Number;
8056 BYTE Selection;
8057 BYTE bReserved;
8058 SHORT HighNumber;
8059 BYTE rgbReserved[2];
8060 } Section;
8061 __C89_NAMELESS struct {
8062 IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
8063 BYTE rgbReserved[2];
8064 };
8065 struct {
8066 DWORD crc;
8067 BYTE rgbReserved[16];
8068 } CRC;
8069 } IMAGE_AUX_SYMBOL_EX,UNALIGNED *PIMAGE_AUX_SYMBOL_EX;
8070
8071#define IMAGE_SIZEOF_AUX_SYMBOL 18
8072
8073 typedef enum IMAGE_AUX_SYMBOL_TYPE {
8074 IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1
8075 } IMAGE_AUX_SYMBOL_TYPE;
8076
8077#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
8078#define IMAGE_COMDAT_SELECT_ANY 2
8079#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
8080#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
8081#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
8082#define IMAGE_COMDAT_SELECT_LARGEST 6
8083#define IMAGE_COMDAT_SELECT_NEWEST 7
8084
8085#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
8086#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
8087#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
8088
8089 typedef struct _IMAGE_RELOCATION {
8090 __C89_NAMELESS union {
8091 DWORD VirtualAddress;
8092 DWORD RelocCount;
8093 } DUMMYUNIONNAME;
8094 DWORD SymbolTableIndex;
8095 WORD Type;
8096 } IMAGE_RELOCATION;
8097 typedef IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;
8098
8099#define IMAGE_SIZEOF_RELOCATION 10
8100
8101#define IMAGE_REL_I386_ABSOLUTE 0x0000
8102#define IMAGE_REL_I386_DIR16 0x0001
8103#define IMAGE_REL_I386_REL16 0x0002
8104#define IMAGE_REL_I386_DIR32 0x0006
8105#define IMAGE_REL_I386_DIR32NB 0x0007
8106#define IMAGE_REL_I386_SEG12 0x0009
8107#define IMAGE_REL_I386_SECTION 0x000A
8108#define IMAGE_REL_I386_SECREL 0x000B
8109#define IMAGE_REL_I386_TOKEN 0x000C
8110#define IMAGE_REL_I386_SECREL7 0x000D
8111#define IMAGE_REL_I386_REL32 0x0014
8112
8113#define IMAGE_REL_MIPS_ABSOLUTE 0x0000
8114#define IMAGE_REL_MIPS_REFHALF 0x0001
8115#define IMAGE_REL_MIPS_REFWORD 0x0002
8116#define IMAGE_REL_MIPS_JMPADDR 0x0003
8117#define IMAGE_REL_MIPS_REFHI 0x0004
8118#define IMAGE_REL_MIPS_REFLO 0x0005
8119#define IMAGE_REL_MIPS_GPREL 0x0006
8120#define IMAGE_REL_MIPS_LITERAL 0x0007
8121#define IMAGE_REL_MIPS_SECTION 0x000A
8122#define IMAGE_REL_MIPS_SECREL 0x000B
8123#define IMAGE_REL_MIPS_SECRELLO 0x000C
8124#define IMAGE_REL_MIPS_SECRELHI 0x000D
8125#define IMAGE_REL_MIPS_TOKEN 0x000E
8126#define IMAGE_REL_MIPS_JMPADDR16 0x0010
8127#define IMAGE_REL_MIPS_REFWORDNB 0x0022
8128#define IMAGE_REL_MIPS_PAIR 0x0025
8129
8130#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
8131#define IMAGE_REL_ALPHA_REFLONG 0x0001
8132#define IMAGE_REL_ALPHA_REFQUAD 0x0002
8133#define IMAGE_REL_ALPHA_GPREL32 0x0003
8134#define IMAGE_REL_ALPHA_LITERAL 0x0004
8135#define IMAGE_REL_ALPHA_LITUSE 0x0005
8136#define IMAGE_REL_ALPHA_GPDISP 0x0006
8137#define IMAGE_REL_ALPHA_BRADDR 0x0007
8138#define IMAGE_REL_ALPHA_HINT 0x0008
8139#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
8140#define IMAGE_REL_ALPHA_REFHI 0x000A
8141#define IMAGE_REL_ALPHA_REFLO 0x000B
8142#define IMAGE_REL_ALPHA_PAIR 0x000C
8143#define IMAGE_REL_ALPHA_MATCH 0x000D
8144#define IMAGE_REL_ALPHA_SECTION 0x000E
8145#define IMAGE_REL_ALPHA_SECREL 0x000F
8146#define IMAGE_REL_ALPHA_REFLONGNB 0x0010
8147#define IMAGE_REL_ALPHA_SECRELLO 0x0011
8148#define IMAGE_REL_ALPHA_SECRELHI 0x0012
8149#define IMAGE_REL_ALPHA_REFQ3 0x0013
8150#define IMAGE_REL_ALPHA_REFQ2 0x0014
8151#define IMAGE_REL_ALPHA_REFQ1 0x0015
8152#define IMAGE_REL_ALPHA_GPRELLO 0x0016
8153#define IMAGE_REL_ALPHA_GPRELHI 0x0017
8154
8155#define IMAGE_REL_PPC_ABSOLUTE 0x0000
8156#define IMAGE_REL_PPC_ADDR64 0x0001
8157#define IMAGE_REL_PPC_ADDR32 0x0002
8158#define IMAGE_REL_PPC_ADDR24 0x0003
8159#define IMAGE_REL_PPC_ADDR16 0x0004
8160#define IMAGE_REL_PPC_ADDR14 0x0005
8161#define IMAGE_REL_PPC_REL24 0x0006
8162#define IMAGE_REL_PPC_REL14 0x0007
8163#define IMAGE_REL_PPC_TOCREL16 0x0008
8164#define IMAGE_REL_PPC_TOCREL14 0x0009
8165#define IMAGE_REL_PPC_ADDR32NB 0x000A
8166#define IMAGE_REL_PPC_SECREL 0x000B
8167#define IMAGE_REL_PPC_SECTION 0x000C
8168#define IMAGE_REL_PPC_IFGLUE 0x000D
8169#define IMAGE_REL_PPC_IMGLUE 0x000E
8170#define IMAGE_REL_PPC_SECREL16 0x000F
8171#define IMAGE_REL_PPC_REFHI 0x0010
8172#define IMAGE_REL_PPC_REFLO 0x0011
8173#define IMAGE_REL_PPC_PAIR 0x0012
8174#define IMAGE_REL_PPC_SECRELLO 0x0013
8175#define IMAGE_REL_PPC_SECRELHI 0x0014
8176#define IMAGE_REL_PPC_GPREL 0x0015
8177#define IMAGE_REL_PPC_TOKEN 0x0016
8178#define IMAGE_REL_PPC_TYPEMASK 0x00FF
8179#define IMAGE_REL_PPC_NEG 0x0100
8180#define IMAGE_REL_PPC_BRTAKEN 0x0200
8181#define IMAGE_REL_PPC_BRNTAKEN 0x0400
8182#define IMAGE_REL_PPC_TOCDEFN 0x0800
8183
8184#define IMAGE_REL_SH3_ABSOLUTE 0x0000
8185#define IMAGE_REL_SH3_DIRECT16 0x0001
8186#define IMAGE_REL_SH3_DIRECT32 0x0002
8187#define IMAGE_REL_SH3_DIRECT8 0x0003
8188#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004
8189#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005
8190#define IMAGE_REL_SH3_DIRECT4 0x0006
8191#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007
8192#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008
8193#define IMAGE_REL_SH3_PCREL8_WORD 0x0009
8194#define IMAGE_REL_SH3_PCREL8_LONG 0x000A
8195#define IMAGE_REL_SH3_PCREL12_WORD 0x000B
8196#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C
8197#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D
8198#define IMAGE_REL_SH3_SECTION 0x000E
8199#define IMAGE_REL_SH3_SECREL 0x000F
8200#define IMAGE_REL_SH3_DIRECT32_NB 0x0010
8201#define IMAGE_REL_SH3_GPREL4_LONG 0x0011
8202#define IMAGE_REL_SH3_TOKEN 0x0012
8203
8204#define IMAGE_REL_SHM_PCRELPT 0x0013
8205#define IMAGE_REL_SHM_REFLO 0x0014
8206#define IMAGE_REL_SHM_REFHALF 0x0015
8207#define IMAGE_REL_SHM_RELLO 0x0016
8208#define IMAGE_REL_SHM_RELHALF 0x0017
8209#define IMAGE_REL_SHM_PAIR 0x0018
8210
8211#define IMAGE_REL_SH_NOMODE 0x8000
8212
8213#define IMAGE_REL_ARM_ABSOLUTE 0x0000
8214#define IMAGE_REL_ARM_ADDR32 0x0001
8215#define IMAGE_REL_ARM_ADDR32NB 0x0002
8216#define IMAGE_REL_ARM_BRANCH24 0x0003
8217#define IMAGE_REL_ARM_BRANCH11 0x0004
8218#define IMAGE_REL_ARM_TOKEN 0x0005
8219#define IMAGE_REL_ARM_GPREL12 0x0006
8220#define IMAGE_REL_ARM_GPREL7 0x0007
8221#define IMAGE_REL_ARM_BLX24 0x0008
8222#define IMAGE_REL_ARM_BLX11 0x0009
8223#define IMAGE_REL_ARM_SECTION 0x000E
8224#define IMAGE_REL_ARM_SECREL 0x000F
8225#define IMAGE_REL_ARM_MOV32A 0x0010
8226#define IMAGE_REL_ARM_MOV32 0x0010
8227#define IMAGE_REL_ARM_MOV32T 0x0011
8228#define IMAGE_REL_THUMB_MOV32 0x0011
8229#define IMAGE_REL_ARM_BRANCH20T 0x0012
8230#define IMAGE_REL_THUMB_BRANCH20 0x0012
8231#define IMAGE_REL_ARM_BRANCH24T 0x0014
8232#define IMAGE_REL_THUMB_BRANCH24 0x0014
8233#define IMAGE_REL_ARM_BLX23T 0x0015
8234#define IMAGE_REL_THUMB_BLX23 0x0015
8235
8236#define IMAGE_REL_AM_ABSOLUTE 0x0000
8237#define IMAGE_REL_AM_ADDR32 0x0001
8238#define IMAGE_REL_AM_ADDR32NB 0x0002
8239#define IMAGE_REL_AM_CALL32 0x0003
8240#define IMAGE_REL_AM_FUNCINFO 0x0004
8241#define IMAGE_REL_AM_REL32_1 0x0005
8242#define IMAGE_REL_AM_REL32_2 0x0006
8243#define IMAGE_REL_AM_SECREL 0x0007
8244#define IMAGE_REL_AM_SECTION 0x0008
8245#define IMAGE_REL_AM_TOKEN 0x0009
8246
8247#define IMAGE_REL_AMD64_ABSOLUTE 0x0000
8248#define IMAGE_REL_AMD64_ADDR64 0x0001
8249#define IMAGE_REL_AMD64_ADDR32 0x0002
8250#define IMAGE_REL_AMD64_ADDR32NB 0x0003
8251#define IMAGE_REL_AMD64_REL32 0x0004
8252#define IMAGE_REL_AMD64_REL32_1 0x0005
8253#define IMAGE_REL_AMD64_REL32_2 0x0006
8254#define IMAGE_REL_AMD64_REL32_3 0x0007
8255#define IMAGE_REL_AMD64_REL32_4 0x0008
8256#define IMAGE_REL_AMD64_REL32_5 0x0009
8257#define IMAGE_REL_AMD64_SECTION 0x000A
8258#define IMAGE_REL_AMD64_SECREL 0x000B
8259#define IMAGE_REL_AMD64_SECREL7 0x000C
8260#define IMAGE_REL_AMD64_TOKEN 0x000D
8261#define IMAGE_REL_AMD64_SREL32 0x000E
8262#define IMAGE_REL_AMD64_PAIR 0x000F
8263#define IMAGE_REL_AMD64_SSPAN32 0x0010
8264
8265#define IMAGE_REL_IA64_ABSOLUTE 0x0000
8266#define IMAGE_REL_IA64_IMM14 0x0001
8267#define IMAGE_REL_IA64_IMM22 0x0002
8268#define IMAGE_REL_IA64_IMM64 0x0003
8269#define IMAGE_REL_IA64_DIR32 0x0004
8270#define IMAGE_REL_IA64_DIR64 0x0005
8271#define IMAGE_REL_IA64_PCREL21B 0x0006
8272#define IMAGE_REL_IA64_PCREL21M 0x0007
8273#define IMAGE_REL_IA64_PCREL21F 0x0008
8274#define IMAGE_REL_IA64_GPREL22 0x0009
8275#define IMAGE_REL_IA64_LTOFF22 0x000A
8276#define IMAGE_REL_IA64_SECTION 0x000B
8277#define IMAGE_REL_IA64_SECREL22 0x000C
8278#define IMAGE_REL_IA64_SECREL64I 0x000D
8279#define IMAGE_REL_IA64_SECREL32 0x000E
8280
8281#define IMAGE_REL_IA64_DIR32NB 0x0010
8282#define IMAGE_REL_IA64_SREL14 0x0011
8283#define IMAGE_REL_IA64_SREL22 0x0012
8284#define IMAGE_REL_IA64_SREL32 0x0013
8285#define IMAGE_REL_IA64_UREL32 0x0014
8286#define IMAGE_REL_IA64_PCREL60X 0x0015
8287#define IMAGE_REL_IA64_PCREL60B 0x0016
8288#define IMAGE_REL_IA64_PCREL60F 0x0017
8289#define IMAGE_REL_IA64_PCREL60I 0x0018
8290#define IMAGE_REL_IA64_PCREL60M 0x0019
8291#define IMAGE_REL_IA64_IMMGPREL64 0x001A
8292#define IMAGE_REL_IA64_TOKEN 0x001B
8293#define IMAGE_REL_IA64_GPREL32 0x001C
8294#define IMAGE_REL_IA64_ADDEND 0x001F
8295
8296#define IMAGE_REL_CEF_ABSOLUTE 0x0000
8297#define IMAGE_REL_CEF_ADDR32 0x0001
8298#define IMAGE_REL_CEF_ADDR64 0x0002
8299#define IMAGE_REL_CEF_ADDR32NB 0x0003
8300#define IMAGE_REL_CEF_SECTION 0x0004
8301#define IMAGE_REL_CEF_SECREL 0x0005
8302#define IMAGE_REL_CEF_TOKEN 0x0006
8303
8304#define IMAGE_REL_CEE_ABSOLUTE 0x0000
8305#define IMAGE_REL_CEE_ADDR32 0x0001
8306#define IMAGE_REL_CEE_ADDR64 0x0002
8307#define IMAGE_REL_CEE_ADDR32NB 0x0003
8308#define IMAGE_REL_CEE_SECTION 0x0004
8309#define IMAGE_REL_CEE_SECREL 0x0005
8310#define IMAGE_REL_CEE_TOKEN 0x0006
8311
8312#define IMAGE_REL_M32R_ABSOLUTE 0x0000
8313#define IMAGE_REL_M32R_ADDR32 0x0001
8314#define IMAGE_REL_M32R_ADDR32NB 0x0002
8315#define IMAGE_REL_M32R_ADDR24 0x0003
8316#define IMAGE_REL_M32R_GPREL16 0x0004
8317#define IMAGE_REL_M32R_PCREL24 0x0005
8318#define IMAGE_REL_M32R_PCREL16 0x0006
8319#define IMAGE_REL_M32R_PCREL8 0x0007
8320#define IMAGE_REL_M32R_REFHALF 0x0008
8321#define IMAGE_REL_M32R_REFHI 0x0009
8322#define IMAGE_REL_M32R_REFLO 0x000A
8323#define IMAGE_REL_M32R_PAIR 0x000B
8324#define IMAGE_REL_M32R_SECTION 0x000C
8325#define IMAGE_REL_M32R_SECREL32 0x000D
8326#define IMAGE_REL_M32R_TOKEN 0x000E
8327
8328#define IMAGE_REL_EBC_ABSOLUTE 0x0000
8329#define IMAGE_REL_EBC_ADDR32NB 0x0001
8330#define IMAGE_REL_EBC_REL32 0x0002
8331#define IMAGE_REL_EBC_SECTION 0x0003
8332#define IMAGE_REL_EBC_SECREL 0x0004
8333
8334#define EXT_IMM64(Value,Address,Size,InstPos,ValPos) Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos)
8335#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)
8336
8337#define EMARCH_ENC_I17_IMM7B_INST_WORD_X 3
8338#define EMARCH_ENC_I17_IMM7B_SIZE_X 7
8339#define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 4
8340#define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0
8341
8342#define EMARCH_ENC_I17_IMM9D_INST_WORD_X 3
8343#define EMARCH_ENC_I17_IMM9D_SIZE_X 9
8344#define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 18
8345#define EMARCH_ENC_I17_IMM9D_VAL_POS_X 7
8346
8347#define EMARCH_ENC_I17_IMM5C_INST_WORD_X 3
8348#define EMARCH_ENC_I17_IMM5C_SIZE_X 5
8349#define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 13
8350#define EMARCH_ENC_I17_IMM5C_VAL_POS_X 16
8351
8352#define EMARCH_ENC_I17_IC_INST_WORD_X 3
8353#define EMARCH_ENC_I17_IC_SIZE_X 1
8354#define EMARCH_ENC_I17_IC_INST_WORD_POS_X 12
8355#define EMARCH_ENC_I17_IC_VAL_POS_X 21
8356
8357#define EMARCH_ENC_I17_IMM41a_INST_WORD_X 1
8358#define EMARCH_ENC_I17_IMM41a_SIZE_X 10
8359#define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 14
8360#define EMARCH_ENC_I17_IMM41a_VAL_POS_X 22
8361
8362#define EMARCH_ENC_I17_IMM41b_INST_WORD_X 1
8363#define EMARCH_ENC_I17_IMM41b_SIZE_X 8
8364#define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 24
8365#define EMARCH_ENC_I17_IMM41b_VAL_POS_X 32
8366
8367#define EMARCH_ENC_I17_IMM41c_INST_WORD_X 2
8368#define EMARCH_ENC_I17_IMM41c_SIZE_X 23
8369#define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0
8370#define EMARCH_ENC_I17_IMM41c_VAL_POS_X 40
8371
8372#define EMARCH_ENC_I17_SIGN_INST_WORD_X 3
8373#define EMARCH_ENC_I17_SIGN_SIZE_X 1
8374#define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 27
8375#define EMARCH_ENC_I17_SIGN_VAL_POS_X 63
8376
8377#define X3_OPCODE_INST_WORD_X 3
8378#define X3_OPCODE_SIZE_X 4
8379#define X3_OPCODE_INST_WORD_POS_X 28
8380#define X3_OPCODE_SIGN_VAL_POS_X 0
8381
8382#define X3_I_INST_WORD_X 3
8383#define X3_I_SIZE_X 1
8384#define X3_I_INST_WORD_POS_X 27
8385#define X3_I_SIGN_VAL_POS_X 59
8386
8387#define X3_D_WH_INST_WORD_X 3
8388#define X3_D_WH_SIZE_X 3
8389#define X3_D_WH_INST_WORD_POS_X 24
8390#define X3_D_WH_SIGN_VAL_POS_X 0
8391
8392#define X3_IMM20_INST_WORD_X 3
8393#define X3_IMM20_SIZE_X 20
8394#define X3_IMM20_INST_WORD_POS_X 4
8395#define X3_IMM20_SIGN_VAL_POS_X 0
8396
8397#define X3_IMM39_1_INST_WORD_X 2
8398#define X3_IMM39_1_SIZE_X 23
8399#define X3_IMM39_1_INST_WORD_POS_X 0
8400#define X3_IMM39_1_SIGN_VAL_POS_X 36
8401
8402#define X3_IMM39_2_INST_WORD_X 1
8403#define X3_IMM39_2_SIZE_X 16
8404#define X3_IMM39_2_INST_WORD_POS_X 16
8405#define X3_IMM39_2_SIGN_VAL_POS_X 20
8406
8407#define X3_P_INST_WORD_X 3
8408#define X3_P_SIZE_X 4
8409#define X3_P_INST_WORD_POS_X 0
8410#define X3_P_SIGN_VAL_POS_X 0
8411
8412#define X3_TMPLT_INST_WORD_X 0
8413#define X3_TMPLT_SIZE_X 4
8414#define X3_TMPLT_INST_WORD_POS_X 0
8415#define X3_TMPLT_SIGN_VAL_POS_X 0
8416
8417#define X3_BTYPE_QP_INST_WORD_X 2
8418#define X3_BTYPE_QP_SIZE_X 9
8419#define X3_BTYPE_QP_INST_WORD_POS_X 23
8420#define X3_BTYPE_QP_INST_VAL_POS_X 0
8421
8422#define X3_EMPTY_INST_WORD_X 1
8423#define X3_EMPTY_SIZE_X 2
8424#define X3_EMPTY_INST_WORD_POS_X 14
8425#define X3_EMPTY_INST_VAL_POS_X 0
8426
8427 typedef struct _IMAGE_LINENUMBER {
8428 union {
8429 DWORD SymbolTableIndex;
8430 DWORD VirtualAddress;
8431 } Type;
8432 WORD Linenumber;
8433 } IMAGE_LINENUMBER;
8434 typedef IMAGE_LINENUMBER UNALIGNED *PIMAGE_LINENUMBER;
8435
8436#define IMAGE_SIZEOF_LINENUMBER 6
8437
8438#include "poppack.h"
8439
8440 typedef struct _IMAGE_BASE_RELOCATION {
8441 DWORD VirtualAddress;
8442 DWORD SizeOfBlock;
8443 } IMAGE_BASE_RELOCATION;
8444 typedef IMAGE_BASE_RELOCATION UNALIGNED *PIMAGE_BASE_RELOCATION;
8445
8446#define IMAGE_SIZEOF_BASE_RELOCATION 8
8447
8448#define IMAGE_REL_BASED_ABSOLUTE 0
8449#define IMAGE_REL_BASED_HIGH 1
8450#define IMAGE_REL_BASED_LOW 2
8451#define IMAGE_REL_BASED_HIGHLOW 3
8452#define IMAGE_REL_BASED_HIGHADJ 4
8453#define IMAGE_REL_BASED_MIPS_JMPADDR 5
8454#define IMAGE_REL_BASED_ARM_MOV32 5
8455#define IMAGE_REL_BASED_THUMB_MOV32 7
8456#define IMAGE_REL_BASED_MIPS_JMPADDR16 9
8457#define IMAGE_REL_BASED_IA64_IMM64 9
8458#define IMAGE_REL_BASED_DIR64 10
8459
8460#define IMAGE_ARCHIVE_START_SIZE 8
8461#define IMAGE_ARCHIVE_START "!<arch>\n"
8462#define IMAGE_ARCHIVE_END "`\n"
8463#define IMAGE_ARCHIVE_PAD "\n"
8464#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
8465#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
8466
8467 typedef struct _IMAGE_ARCHIVE_MEMBER_HEADER {
8468 BYTE Name[16];
8469 BYTE Date[12];
8470 BYTE UserID[6];
8471 BYTE GroupID[6];
8472 BYTE Mode[8];
8473 BYTE Size[10];
8474 BYTE EndHeader[2];
8475 } IMAGE_ARCHIVE_MEMBER_HEADER,*PIMAGE_ARCHIVE_MEMBER_HEADER;
8476
8477#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
8478
8479 typedef struct _IMAGE_EXPORT_DIRECTORY {
8480 DWORD Characteristics;
8481 DWORD TimeDateStamp;
8482 WORD MajorVersion;
8483 WORD MinorVersion;
8484 DWORD Name;
8485 DWORD Base;
8486 DWORD NumberOfFunctions;
8487 DWORD NumberOfNames;
8488 DWORD AddressOfFunctions;
8489 DWORD AddressOfNames;
8490 DWORD AddressOfNameOrdinals;
8491 } IMAGE_EXPORT_DIRECTORY,*PIMAGE_EXPORT_DIRECTORY;
8492
8493 typedef struct _IMAGE_IMPORT_BY_NAME {
8494 WORD Hint;
8495 CHAR Name[1];
8496 } IMAGE_IMPORT_BY_NAME,*PIMAGE_IMPORT_BY_NAME;
8497
8498#include "pshpack8.h"
8499
8500 typedef struct _IMAGE_THUNK_DATA64 {
8501 union {
8502 ULONGLONG ForwarderString;
8503 ULONGLONG Function;
8504 ULONGLONG Ordinal;
8505 ULONGLONG AddressOfData;
8506 } u1;
8507 } IMAGE_THUNK_DATA64;
8508 typedef IMAGE_THUNK_DATA64 *PIMAGE_THUNK_DATA64;
8509
8510#include "poppack.h"
8511
8512 typedef struct _IMAGE_THUNK_DATA32 {
8513 union {
8514 DWORD ForwarderString;
8515 DWORD Function;
8516 DWORD Ordinal;
8517 DWORD AddressOfData;
8518 } u1;
8519 } IMAGE_THUNK_DATA32;
8520 typedef IMAGE_THUNK_DATA32 *PIMAGE_THUNK_DATA32;
8521
8522#define IMAGE_ORDINAL_FLAG64 0x8000000000000000ull
8523#define IMAGE_ORDINAL_FLAG32 0x80000000
8524#define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffffull)
8525#define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
8526#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64)!=0)
8527#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32)!=0)
8528
8529 typedef VOID (NTAPI *PIMAGE_TLS_CALLBACK)(PVOID DllHandle,DWORD Reason,PVOID Reserved);
8530
8531 typedef struct _IMAGE_TLS_DIRECTORY64 {
8532 ULONGLONG StartAddressOfRawData;
8533 ULONGLONG EndAddressOfRawData;
8534 ULONGLONG AddressOfIndex;
8535 ULONGLONG AddressOfCallBacks;
8536 DWORD SizeOfZeroFill;
8537 DWORD Characteristics;
8538 } IMAGE_TLS_DIRECTORY64;
8539 typedef IMAGE_TLS_DIRECTORY64 *PIMAGE_TLS_DIRECTORY64;
8540
8541 typedef struct _IMAGE_TLS_DIRECTORY32 {
8542 DWORD StartAddressOfRawData;
8543 DWORD EndAddressOfRawData;
8544 DWORD AddressOfIndex;
8545 DWORD AddressOfCallBacks;
8546 DWORD SizeOfZeroFill;
8547 DWORD Characteristics;
8548 } IMAGE_TLS_DIRECTORY32;
8549 typedef IMAGE_TLS_DIRECTORY32 *PIMAGE_TLS_DIRECTORY32;
8550
8551#ifdef _WIN64
8552#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
8553#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
8554 typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
8555 typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
8556#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
8557 typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
8558 typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
8559#else /* _WIN64 */
8560#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
8561#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
8562 typedef IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA;
8563 typedef PIMAGE_THUNK_DATA32 PIMAGE_THUNK_DATA;
8564#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
8565 typedef IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY;
8566 typedef PIMAGE_TLS_DIRECTORY32 PIMAGE_TLS_DIRECTORY;
8567#endif /* _WIN64 */
8568
8569 typedef struct _IMAGE_IMPORT_DESCRIPTOR {
8570 __C89_NAMELESS union {
8571 DWORD Characteristics;
8572 DWORD OriginalFirstThunk;
8573 } DUMMYUNIONNAME;
8574 DWORD TimeDateStamp;
8575
8576 DWORD ForwarderChain;
8577 DWORD Name;
8578 DWORD FirstThunk;
8579 } IMAGE_IMPORT_DESCRIPTOR;
8580 typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
8581
8582 typedef struct _IMAGE_BOUND_IMPORT_DESCRIPTOR {
8583 DWORD TimeDateStamp;
8584 WORD OffsetModuleName;
8585 WORD NumberOfModuleForwarderRefs;
8586 } IMAGE_BOUND_IMPORT_DESCRIPTOR,*PIMAGE_BOUND_IMPORT_DESCRIPTOR;
8587
8588 typedef struct _IMAGE_BOUND_FORWARDER_REF {
8589 DWORD TimeDateStamp;
8590 WORD OffsetModuleName;
8591 WORD Reserved;
8592 } IMAGE_BOUND_FORWARDER_REF,*PIMAGE_BOUND_FORWARDER_REF;
8593
8594 typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR {
8595 union {
8596 DWORD AllAttributes;
8597 __C89_NAMELESS struct {
8598 DWORD RvaBased : 1;
8599 DWORD ReservedAttributes : 31;
8600 };
8601 } Attributes;
8602 DWORD DllNameRVA;
8603 DWORD ModuleHandleRVA;
8604 DWORD ImportAddressTableRVA;
8605 DWORD ImportNameTableRVA;
8606 DWORD BoundImportAddressTableRVA;
8607 DWORD UnloadInformationTableRVA;
8608 DWORD TimeDateStamp;
8609 } IMAGE_DELAYLOAD_DESCRIPTOR,*PIMAGE_DELAYLOAD_DESCRIPTOR;
8610 typedef const IMAGE_DELAYLOAD_DESCRIPTOR *PCIMAGE_DELAYLOAD_DESCRIPTOR;
8611
8612 typedef struct _IMAGE_RESOURCE_DIRECTORY {
8613 DWORD Characteristics;
8614 DWORD TimeDateStamp;
8615 WORD MajorVersion;
8616 WORD MinorVersion;
8617 WORD NumberOfNamedEntries;
8618 WORD NumberOfIdEntries;
8619 } IMAGE_RESOURCE_DIRECTORY,*PIMAGE_RESOURCE_DIRECTORY;
8620
8621#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
8622#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
8623
8624 typedef struct _IMAGE_RESOURCE_DIRECTORY_ENTRY {
8625 __C89_NAMELESS union {
8626 __C89_NAMELESS struct {
8627 DWORD NameOffset:31;
8628 DWORD NameIsString:1;
8629 } DUMMYSTRUCTNAME;
8630 DWORD Name;
8631 WORD Id;
8632 } DUMMYUNIONNAME;
8633 __C89_NAMELESS union {
8634 DWORD OffsetToData;
8635 __C89_NAMELESS struct {
8636 DWORD OffsetToDirectory:31;
8637 DWORD DataIsDirectory:1;
8638 } DUMMYSTRUCTNAME2;
8639 } DUMMYUNIONNAME2;
8640 } IMAGE_RESOURCE_DIRECTORY_ENTRY,*PIMAGE_RESOURCE_DIRECTORY_ENTRY;
8641
8642 typedef struct _IMAGE_RESOURCE_DIRECTORY_STRING {
8643 WORD Length;
8644 CHAR NameString[1];
8645 } IMAGE_RESOURCE_DIRECTORY_STRING,*PIMAGE_RESOURCE_DIRECTORY_STRING;
8646
8647 typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
8648 WORD Length;
8649 WCHAR NameString[1];
8650 } IMAGE_RESOURCE_DIR_STRING_U,*PIMAGE_RESOURCE_DIR_STRING_U;
8651
8652 typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
8653 DWORD OffsetToData;
8654 DWORD Size;
8655 DWORD CodePage;
8656 DWORD Reserved;
8657 } IMAGE_RESOURCE_DATA_ENTRY,*PIMAGE_RESOURCE_DATA_ENTRY;
8658
8659 typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
8660 WORD Flags;
8661 WORD Catalog;
8662 DWORD CatalogOffset;
8663 DWORD Reserved;
8664 } IMAGE_LOAD_CONFIG_CODE_INTEGRITY,*PIMAGE_LOAD_CONFIG_CODE_INTEGRITY;
8665
8666 typedef struct {
8667 DWORD Size;
8668 DWORD TimeDateStamp;
8669 WORD MajorVersion;
8670 WORD MinorVersion;
8671 DWORD GlobalFlagsClear;
8672 DWORD GlobalFlagsSet;
8673 DWORD CriticalSectionDefaultTimeout;
8674 DWORD DeCommitFreeBlockThreshold;
8675 DWORD DeCommitTotalFreeThreshold;
8676 DWORD LockPrefixTable;
8677 DWORD MaximumAllocationSize;
8678 DWORD VirtualMemoryThreshold;
8679 DWORD ProcessHeapFlags;
8680 DWORD ProcessAffinityMask;
8681 WORD CSDVersion;
8682 WORD DependentLoadFlags;
8683 DWORD EditList;
8684 DWORD SecurityCookie;
8685 DWORD SEHandlerTable;
8686 DWORD SEHandlerCount;
8687 DWORD GuardCFCheckFunctionPointer;
8688 DWORD GuardCFDispatchFunctionPointer;
8689 DWORD GuardCFFunctionTable;
8690 DWORD GuardCFFunctionCount;
8691 DWORD GuardFlags;
8692 IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
8693 DWORD GuardAddressTakenIatEntryTable;
8694 DWORD GuardAddressTakenIatEntryCount;
8695 DWORD GuardLongJumpTargetTable;
8696 DWORD GuardLongJumpTargetCount;
8697 DWORD DynamicValueRelocTable;
8698 DWORD CHPEMetadataPointer;
8699 DWORD GuardRFFailureRoutine;
8700 DWORD GuardRFFailureRoutineFunctionPointer;
8701 DWORD DynamicValueRelocTableOffset;
8702 WORD DynamicValueRelocTableSection;
8703 WORD Reserved2;
8704 DWORD GuardRFVerifyStackPointerFunctionPointer;
8705 DWORD HotPatchTableOffset;
8706 DWORD Reserved3;
8707 DWORD EnclaveConfigurationPointer;
8708 DWORD VolatileMetadataPointer;
8709 DWORD GuardEHContinuationTable;
8710 DWORD GuardEHContinuationCount;
8711 DWORD GuardXFGCheckFunctionPointer;
8712 DWORD GuardXFGDispatchFunctionPointer;
8713 DWORD GuardXFGTableDispatchFunctionPointer;
8714 DWORD CastGuardOsDeterminedFailureMode;
8715 DWORD GuardMemcpyFunctionPointer;
8716 } IMAGE_LOAD_CONFIG_DIRECTORY32,*PIMAGE_LOAD_CONFIG_DIRECTORY32;
8717
8718 typedef struct {
8719 DWORD Size;
8720 DWORD TimeDateStamp;
8721 WORD MajorVersion;
8722 WORD MinorVersion;
8723 DWORD GlobalFlagsClear;
8724 DWORD GlobalFlagsSet;
8725 DWORD CriticalSectionDefaultTimeout;
8726 ULONGLONG DeCommitFreeBlockThreshold;
8727 ULONGLONG DeCommitTotalFreeThreshold;
8728 ULONGLONG LockPrefixTable;
8729 ULONGLONG MaximumAllocationSize;
8730 ULONGLONG VirtualMemoryThreshold;
8731 ULONGLONG ProcessAffinityMask;
8732 DWORD ProcessHeapFlags;
8733 WORD CSDVersion;
8734 WORD DependentLoadFlags;
8735 ULONGLONG EditList;
8736 ULONGLONG SecurityCookie;
8737 ULONGLONG SEHandlerTable;
8738 ULONGLONG SEHandlerCount;
8739 ULONGLONG GuardCFCheckFunctionPointer;
8740 ULONGLONG GuardCFDispatchFunctionPointer;
8741 ULONGLONG GuardCFFunctionTable;
8742 ULONGLONG GuardCFFunctionCount;
8743 DWORD GuardFlags;
8744 IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
8745 ULONGLONG GuardAddressTakenIatEntryTable;
8746 ULONGLONG GuardAddressTakenIatEntryCount;
8747 ULONGLONG GuardLongJumpTargetTable;
8748 ULONGLONG GuardLongJumpTargetCount;
8749 ULONGLONG DynamicValueRelocTable;
8750 ULONGLONG CHPEMetadataPointer;
8751 ULONGLONG GuardRFFailureRoutine;
8752 ULONGLONG GuardRFFailureRoutineFunctionPointer;
8753 DWORD DynamicValueRelocTableOffset;
8754 WORD DynamicValueRelocTableSection;
8755 WORD Reserved2;
8756 ULONGLONG GuardRFVerifyStackPointerFunctionPointer;
8757 DWORD HotPatchTableOffset;
8758 DWORD Reserved3;
8759 ULONGLONG EnclaveConfigurationPointer;
8760 ULONGLONG VolatileMetadataPointer;
8761 ULONGLONG GuardEHContinuationTable;
8762 ULONGLONG GuardEHContinuationCount;
8763 ULONGLONG GuardXFGCheckFunctionPointer;
8764 ULONGLONG GuardXFGDispatchFunctionPointer;
8765 ULONGLONG GuardXFGTableDispatchFunctionPointer;
8766 ULONGLONG CastGuardOsDeterminedFailureMode;
8767 ULONGLONG GuardMemcpyFunctionPointer;
8768 } IMAGE_LOAD_CONFIG_DIRECTORY64,*PIMAGE_LOAD_CONFIG_DIRECTORY64;
8769
8770#ifdef _WIN64
8771 typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
8772 typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
8773#else /* _WIN64 */
8774 typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
8775 typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
8776#endif /* _WIN64 */
8777
8778 typedef struct _IMAGE_CE_RUNTIME_FUNCTION_ENTRY {
8779 DWORD FuncStart;
8780 DWORD PrologLen : 8;
8781 DWORD FuncLen : 22;
8782 DWORD ThirtyTwoBit : 1;
8783 DWORD ExceptionFlag : 1;
8784 } IMAGE_CE_RUNTIME_FUNCTION_ENTRY,*PIMAGE_CE_RUNTIME_FUNCTION_ENTRY;
8785
8786 typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
8787 ULONGLONG BeginAddress;
8788 ULONGLONG EndAddress;
8789 ULONGLONG ExceptionHandler;
8790 ULONGLONG HandlerData;
8791 ULONGLONG PrologEndAddress;
8792 } IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
8793
8794 typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
8795 DWORD BeginAddress;
8796 DWORD EndAddress;
8797 DWORD ExceptionHandler;
8798 DWORD HandlerData;
8799 DWORD PrologEndAddress;
8800 } IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY;
8801
8802 typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY {
8803 DWORD BeginAddress;
8804 __C89_NAMELESS union {
8805 DWORD UnwindData;
8806 __C89_NAMELESS struct {
8807 DWORD Flag : 2;
8808 DWORD FunctionLength : 11;
8809 DWORD Ret : 2;
8810 DWORD H : 1;
8811 DWORD Reg : 3;
8812 DWORD R : 1;
8813 DWORD L : 1;
8814 DWORD C : 1;
8815 DWORD StackAdjust : 10;
8816 } DUMMYSTRUCTNAME;
8817 } DUMMYUNIONNAME;
8818 } IMAGE_ARM_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
8819
8820 typedef enum ARM64_FNPDATA_FLAGS {
8821 PdataRefToFullXdata = 0,
8822 PdataPackedUnwindFunction = 1,
8823 PdataPackedUnwindFragment = 2
8824 } ARM64_FNPDATA_FLAGS;
8825
8826 typedef enum ARM64_FNPDATA_CR {
8827 PdataCrUnchained = 0,
8828 PdataCrUnchainedSavedLr = 1,
8829 PdataCrChainedWithPac = 2,
8830 PdataCrChained = 3
8831 } ARM64_FNPDATA_CR;
8832
8833 typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
8834 DWORD BeginAddress;
8835 __C89_NAMELESS union {
8836 DWORD UnwindData;
8837 __C89_NAMELESS struct {
8838 DWORD Flag : 2;
8839 DWORD FunctionLength : 11;
8840 DWORD RegF : 3;
8841 DWORD RegI : 4;
8842 DWORD H : 1;
8843 DWORD CR : 2;
8844 DWORD FrameSize : 9;
8845 } DUMMYSTRUCTNAME;
8846 } DUMMYUNIONNAME;
8847 } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY,*PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
8848
8849 typedef union IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA {
8850 DWORD HeaderData;
8851 __C89_NAMELESS struct {
8852 DWORD FunctionLength : 18;
8853 DWORD Version : 2;
8854 DWORD ExceptionDataPresent : 1;
8855 DWORD EpilogInHeader : 1;
8856 DWORD EpilogCount : 5;
8857 DWORD CodeWords : 5;
8858 } DUMMYSTRUCTNAME;
8859 } IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY_XDATA;
8860
8861 typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY {
8862 DWORD BeginAddress;
8863 DWORD EndAddress;
8864 __C89_NAMELESS union {
8865 DWORD UnwindInfoAddress;
8866 DWORD UnwindData;
8867 } DUMMYUNIONNAME;
8868 } _IMAGE_RUNTIME_FUNCTION_ENTRY,*_PIMAGE_RUNTIME_FUNCTION_ENTRY;
8869
8870 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
8871 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY;
8872
8873#if defined (_AXP64_)
8874 typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
8875 typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
8876 typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
8877 typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
8878#elif defined (_ALPHA_)
8879 typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
8880 typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
8881#elif defined (__arm__)
8882 typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
8883 typedef PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
8884#elif defined (__aarch64__)
8885 typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
8886 typedef PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
8887#else
8888 typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
8889 typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
8890#endif
8891
8892 typedef struct _IMAGE_DEBUG_DIRECTORY {
8893 DWORD Characteristics;
8894 DWORD TimeDateStamp;
8895 WORD MajorVersion;
8896 WORD MinorVersion;
8897 DWORD Type;
8898 DWORD SizeOfData;
8899 DWORD AddressOfRawData;
8900 DWORD PointerToRawData;
8901 } IMAGE_DEBUG_DIRECTORY,*PIMAGE_DEBUG_DIRECTORY;
8902
8903#define IMAGE_DEBUG_TYPE_UNKNOWN 0
8904#define IMAGE_DEBUG_TYPE_COFF 1
8905#define IMAGE_DEBUG_TYPE_CODEVIEW 2
8906#define IMAGE_DEBUG_TYPE_FPO 3
8907#define IMAGE_DEBUG_TYPE_MISC 4
8908#define IMAGE_DEBUG_TYPE_EXCEPTION 5
8909#define IMAGE_DEBUG_TYPE_FIXUP 6
8910#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
8911#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
8912#define IMAGE_DEBUG_TYPE_BORLAND 9
8913#define IMAGE_DEBUG_TYPE_RESERVED10 10
8914#define IMAGE_DEBUG_TYPE_CLSID 11
8915
8916 typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
8917 DWORD NumberOfSymbols;
8918 DWORD LvaToFirstSymbol;
8919 DWORD NumberOfLinenumbers;
8920 DWORD LvaToFirstLinenumber;
8921 DWORD RvaToFirstByteOfCode;
8922 DWORD RvaToLastByteOfCode;
8923 DWORD RvaToFirstByteOfData;
8924 DWORD RvaToLastByteOfData;
8925 } IMAGE_COFF_SYMBOLS_HEADER,*PIMAGE_COFF_SYMBOLS_HEADER;
8926
8927#define FRAME_FPO 0
8928#define FRAME_TRAP 1
8929#define FRAME_TSS 2
8930#define FRAME_NONFPO 3
8931
8932 typedef struct _FPO_DATA {
8933 DWORD ulOffStart;
8934 DWORD cbProcSize;
8935 DWORD cdwLocals;
8936 WORD cdwParams;
8937 WORD cbProlog : 8;
8938 WORD cbRegs : 3;
8939 WORD fHasSEH : 1;
8940 WORD fUseBP : 1;
8941 WORD reserved : 1;
8942 WORD cbFrame : 2;
8943 } FPO_DATA,*PFPO_DATA;
8944#define SIZEOF_RFPO_DATA 16
8945
8946#define IMAGE_DEBUG_MISC_EXENAME 1
8947
8948 typedef struct _IMAGE_DEBUG_MISC {
8949 DWORD DataType;
8950 DWORD Length;
8951 BOOLEAN Unicode;
8952 BYTE Reserved[3];
8953 BYTE Data[1];
8954 } IMAGE_DEBUG_MISC,*PIMAGE_DEBUG_MISC;
8955
8956 typedef struct _IMAGE_FUNCTION_ENTRY {
8957 DWORD StartingAddress;
8958 DWORD EndingAddress;
8959 DWORD EndOfPrologue;
8960 } IMAGE_FUNCTION_ENTRY,*PIMAGE_FUNCTION_ENTRY;
8961
8962 typedef struct _IMAGE_FUNCTION_ENTRY64 {
8963 ULONGLONG StartingAddress;
8964 ULONGLONG EndingAddress;
8965 __C89_NAMELESS union {
8966 ULONGLONG EndOfPrologue;
8967 ULONGLONG UnwindInfoAddress;
8968 } DUMMYUNIONNAME;
8969 } IMAGE_FUNCTION_ENTRY64,*PIMAGE_FUNCTION_ENTRY64;
8970
8971 typedef struct _IMAGE_SEPARATE_DEBUG_HEADER {
8972 WORD Signature;
8973 WORD Flags;
8974 WORD Machine;
8975 WORD Characteristics;
8976 DWORD TimeDateStamp;
8977 DWORD CheckSum;
8978 DWORD ImageBase;
8979 DWORD SizeOfImage;
8980 DWORD NumberOfSections;
8981 DWORD ExportedNamesSize;
8982 DWORD DebugDirectorySize;
8983 DWORD SectionAlignment;
8984 DWORD Reserved[2];
8985 } IMAGE_SEPARATE_DEBUG_HEADER,*PIMAGE_SEPARATE_DEBUG_HEADER;
8986
8987 typedef struct _NON_PAGED_DEBUG_INFO {
8988 WORD Signature;
8989 WORD Flags;
8990 DWORD Size;
8991 WORD Machine;
8992 WORD Characteristics;
8993 DWORD TimeDateStamp;
8994 DWORD CheckSum;
8995 DWORD SizeOfImage;
8996 ULONGLONG ImageBase;
8997 } NON_PAGED_DEBUG_INFO,*PNON_PAGED_DEBUG_INFO;
8998
8999#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
9000#define NON_PAGED_DEBUG_SIGNATURE 0x494E
9001
9002#define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
9003#define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000
9004
9005 typedef struct _ImageArchitectureHeader {
9006 unsigned int AmaskValue: 1;
9007 int Adummy1 : 7;
9008 unsigned int AmaskShift : 8;
9009 int Adummy2 : 16;
9010 DWORD FirstEntryRVA;
9011 } IMAGE_ARCHITECTURE_HEADER,*PIMAGE_ARCHITECTURE_HEADER;
9012
9013 typedef struct _ImageArchitectureEntry {
9014 DWORD FixupInstRVA;
9015 DWORD NewInst;
9016 } IMAGE_ARCHITECTURE_ENTRY,*PIMAGE_ARCHITECTURE_ENTRY;
9017#include "poppack.h"
9018
9019#define IMPORT_OBJECT_HDR_SIG2 0xffff
9020
9021 typedef struct IMPORT_OBJECT_HEADER {
9022 WORD Sig1;
9023 WORD Sig2;
9024 WORD Version;
9025 WORD Machine;
9026 DWORD TimeDateStamp;
9027 DWORD SizeOfData;
9028 __C89_NAMELESS union {
9029 WORD Ordinal;
9030 WORD Hint;
9031 };
9032 WORD Type : 2;
9033 WORD NameType : 3;
9034 WORD Reserved : 11;
9035 } IMPORT_OBJECT_HEADER;
9036
9037 typedef enum IMPORT_OBJECT_TYPE {
9038 IMPORT_OBJECT_CODE = 0,IMPORT_OBJECT_DATA = 1,IMPORT_OBJECT_CONST = 2
9039 } IMPORT_OBJECT_TYPE;
9040
9041 typedef enum IMPORT_OBJECT_NAME_TYPE {
9042 IMPORT_OBJECT_ORDINAL = 0,IMPORT_OBJECT_NAME = 1,IMPORT_OBJECT_NAME_NO_PREFIX = 2,IMPORT_OBJECT_NAME_UNDECORATE = 3
9043 } IMPORT_OBJECT_NAME_TYPE;
9044
9045#ifndef __IMAGE_COR20_HEADER_DEFINED__
9046#define __IMAGE_COR20_HEADER_DEFINED__
9047 typedef enum ReplacesCorHdrNumericDefines {
9048 COMIMAGE_FLAGS_ILONLY = 0x00000001,COMIMAGE_FLAGS_32BITREQUIRED = 0x00000002,COMIMAGE_FLAGS_IL_LIBRARY = 0x00000004,
9049 COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x00000008,COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x00010000,COR_VERSION_MAJOR_V2 = 2,
9050 COR_VERSION_MAJOR = COR_VERSION_MAJOR_V2,COR_VERSION_MINOR = 0,COR_DELETED_NAME_LENGTH = 8,COR_VTABLEGAP_NAME_LENGTH = 8,
9051 NATIVE_TYPE_MAX_CB = 1,COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE= 0xFF,IMAGE_COR_MIH_METHODRVA = 0x01,IMAGE_COR_MIH_EHRVA = 0x02,
9052 IMAGE_COR_MIH_BASICBLOCK = 0x08,COR_VTABLE_32BIT =0x01,COR_VTABLE_64BIT =0x02,COR_VTABLE_FROM_UNMANAGED = 0x04,
9053 COR_VTABLE_CALL_MOST_DERIVED = 0x10,IMAGE_COR_EATJ_THUNK_SIZE = 32,MAX_CLASS_NAME =1024,MAX_PACKAGE_NAME = 1024
9054 } ReplacesCorHdrNumericDefines;
9055
9056 typedef struct IMAGE_COR20_HEADER {
9057 DWORD cb;
9058 WORD MajorRuntimeVersion;
9059 WORD MinorRuntimeVersion;
9060 IMAGE_DATA_DIRECTORY MetaData;
9061 DWORD Flags;
9062 __C89_NAMELESS union {
9063 DWORD EntryPointToken;
9064 DWORD EntryPointRVA;
9065 } DUMMYUNIONNAME;
9066 IMAGE_DATA_DIRECTORY Resources;
9067 IMAGE_DATA_DIRECTORY StrongNameSignature;
9068 IMAGE_DATA_DIRECTORY CodeManagerTable;
9069 IMAGE_DATA_DIRECTORY VTableFixups;
9070 IMAGE_DATA_DIRECTORY ExportAddressTableJumps;
9071 IMAGE_DATA_DIRECTORY ManagedNativeHeader;
9072 } IMAGE_COR20_HEADER,*PIMAGE_COR20_HEADER;
9073#endif
9074
9075#ifndef __i386__
9076
9077#define UNWIND_HISTORY_TABLE_SIZE 12
9078
9079 typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
9080 ULONG_PTR ImageBase;
9081 PRUNTIME_FUNCTION FunctionEntry;
9082 } UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
9083
9084 typedef struct _UNWIND_HISTORY_TABLE {
9085 DWORD Count;
9086 BYTE LocalHint;
9087 BYTE GlobalHint;
9088 BYTE Search;
9089 BYTE Once;
9090 ULONG_PTR LowAddress;
9091 ULONG_PTR HighAddress;
9092 UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
9093 } UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
9094#endif /* !__i386__ */
9095
9096#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
9097 NTSYSAPI WORD NTAPI RtlCaptureStackBackTrace (DWORD FramesToSkip, DWORD FramesToCapture, PVOID *BackTrace, PDWORD BackTraceHash);
9098#endif
9099#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
9100 NTSYSAPI VOID NTAPI __attribute__((__returns_twice__)) RtlCaptureContext (PCONTEXT ContextRecord);
9101 NTSYSAPI SIZE_T NTAPI RtlCompareMemory (const VOID *Source1, const VOID *Source2, SIZE_T Length);
9102#if defined (__x86_64__)
9103#if _WIN32_WINNT >= 0x0602
9104 NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
9105 NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
9106 NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
9107#endif
9108 NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD64 BaseAddress);
9109 NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
9110 NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (DWORD64 TableIdentifier, DWORD64 BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
9111 NTSYSAPI VOID __cdecl __MINGW_ATTRIB_NORETURN RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
9112#endif
9113#if defined (__arm__)
9114#if _WIN32_WINNT >= 0x0602
9115 NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
9116 NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
9117 NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
9118#endif
9119 NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD BaseAddress);
9120 NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
9121 NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (DWORD TableIdentifier, DWORD BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
9122 NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
9123#endif
9124#if defined (__aarch64__)
9125 NTSYSAPI DWORD NTAPI RtlAddGrowableFunctionTable (PVOID *DynamicTable, PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, DWORD MaximumEntryCount, ULONG_PTR RangeBase, ULONG_PTR RangeEnd);
9126 NTSYSAPI VOID NTAPI RtlGrowFunctionTable (PVOID DynamicTable, DWORD NewEntryCount);
9127 NTSYSAPI VOID NTAPI RtlDeleteGrowableFunctionTable (PVOID DynamicTable);
9128 NTSYSAPI BOOLEAN __cdecl RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, ULONG_PTR BaseAddress);
9129 NTSYSAPI BOOLEAN __cdecl RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
9130 NTSYSAPI BOOLEAN __cdecl RtlInstallFunctionTableCallback (ULONG_PTR TableIdentifier, ULONG_PTR BaseAddress, DWORD Length, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
9131 NTSYSAPI VOID __cdecl RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
9132#endif
9133#if defined (__ia64__)
9134 NTSYSAPI BOOLEAN NTAPI RtlAddFunctionTable (PRUNTIME_FUNCTION FunctionTable, DWORD EntryCount, ULONGLONG BaseAddress, ULONGLONG TargetGp);
9135 NTSYSAPI BOOLEAN NTAPI RtlDeleteFunctionTable (PRUNTIME_FUNCTION FunctionTable);
9136 NTSYSAPI BOOLEAN NTAPI RtlInstallFunctionTableCallback (DWORD64 TableIdentifier, DWORD64 BaseAddress, DWORD Length, DWORD64 TargetGp, PGET_RUNTIME_FUNCTION_CALLBACK Callback, PVOID Context, PCWSTR OutOfProcessCallbackDll);
9137 NTSYSAPI VOID NTAPI RtlRestoreContext (PCONTEXT ContextRecord, struct _EXCEPTION_RECORD *ExceptionRecord);
9138#endif
9139
9140#endif
9141
9142#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_APP)
9143 NTSYSAPI VOID NTAPI __MINGW_ATTRIB_NORETURN RtlUnwind (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue);
9144 NTSYSAPI PVOID NTAPI RtlPcToFileHeader (PVOID PcValue, PVOID *BaseOfImage);
9145#if defined (__x86_64__)
9146 NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (DWORD64 ControlPc, PDWORD64 ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
9147 NTSYSAPI VOID NTAPI __MINGW_ATTRIB_NORETURN RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
9148 NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, DWORD64 ImageBase, DWORD64 ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PDWORD64 EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
9149 NTSYSAPI BOOLEAN NTAPI RtlIsEcCode(DWORD64 CodePointer);
9150#endif
9151#if defined (__arm__)
9152 NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONG_PTR ControlPc, PDWORD ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
9153 NTSYSAPI VOID NTAPI __MINGW_ATTRIB_NORETURN RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
9154 NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, DWORD ImageBase, DWORD ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PDWORD EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
9155#endif
9156#if defined (__aarch64__)
9157 NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONG_PTR ControlPc, PULONG_PTR ImageBase, PUNWIND_HISTORY_TABLE HistoryTable);
9158 NTSYSAPI VOID NTAPI __MINGW_ATTRIB_NORETURN RtlUnwindEx (PVOID TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
9159 NTSYSAPI PEXCEPTION_ROUTINE NTAPI RtlVirtualUnwind (DWORD HandlerType, ULONG_PTR ImageBase, ULONG_PTR ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PVOID *HandlerData, PULONG_PTR EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
9160#endif
9161#if defined (__ia64__)
9162 NTSYSAPI PRUNTIME_FUNCTION NTAPI RtlLookupFunctionEntry (ULONGLONG ControlPc, PULONGLONG ImageBase, PULONGLONG TargetGp);
9163 NTSYSAPI VOID NTAPI __MINGW_ATTRIB_NORETURN RtlUnwindEx (FRAME_POINTERS TargetFrame, PVOID TargetIp, PEXCEPTION_RECORD ExceptionRecord, PVOID ReturnValue, PCONTEXT ContextRecord, PUNWIND_HISTORY_TABLE HistoryTable);
9164 NTSYSAPI ULONGLONG NTAPI RtlVirtualUnwind (ULONGLONG ImageBase, ULONGLONG ControlPc, PRUNTIME_FUNCTION FunctionEntry, PCONTEXT ContextRecord, PBOOLEAN InFunction, PFRAME_POINTERS EstablisherFrame, PKNONVOLATILE_CONTEXT_POINTERS ContextPointers);
9165#endif
9166#endif
9167
9168#include <string.h>
9169
9170#ifndef _SLIST_HEADER_
9171#define _SLIST_HEADER_
9172
9173#if defined (_WIN64)
9174 typedef struct DECLSPEC_ALIGN (16) _SLIST_ENTRY {
9175 struct _SLIST_ENTRY *Next;
9176 } SLIST_ENTRY,*PSLIST_ENTRY;
9177
9178 typedef union DECLSPEC_ALIGN (16) _SLIST_HEADER {
9179 __C89_NAMELESS struct {
9180 ULONGLONG Alignment;
9181 ULONGLONG Region;
9182 } DUMMYSTRUCTNAME;
9183 struct {
9184 ULONGLONG Depth:16;
9185 ULONGLONG Sequence:9;
9186 ULONGLONG NextEntry:39;
9187 ULONGLONG HeaderType:1;
9188 ULONGLONG Init:1;
9189 ULONGLONG Reserved:59;
9190 ULONGLONG Region:3;
9191 } Header8;
9192 struct {
9193 ULONGLONG Depth:16;
9194 ULONGLONG Sequence:48;
9195 ULONGLONG HeaderType:1;
9196 ULONGLONG Reserved:3;
9197 ULONGLONG NextEntry:60;
9198 } HeaderX64;
9199 } SLIST_HEADER,*PSLIST_HEADER;
9200#else /* _WIN64 */
9201 typedef struct _SINGLE_LIST_ENTRY SLIST_ENTRY,*PSLIST_ENTRY;
9202
9203 typedef union _SLIST_HEADER {
9204 ULONGLONG Alignment;
9205 __C89_NAMELESS struct {
9206 SLIST_ENTRY Next;
9207 WORD Depth;
9208 WORD Sequence;
9209 } DUMMYSTRUCTNAME;
9210 } SLIST_HEADER,*PSLIST_HEADER;
9211#endif /* _WIN64 */
9212
9213#endif /* _SLIST_HEADER_ */
9214
9215#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
9216 NTSYSAPI VOID NTAPI RtlInitializeSListHead (PSLIST_HEADER ListHead);
9217 NTSYSAPI PSLIST_ENTRY NTAPI RtlFirstEntrySList (const SLIST_HEADER *ListHead);
9218 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPopEntrySList (PSLIST_HEADER ListHead);
9219 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPushEntrySList (PSLIST_HEADER ListHead, PSLIST_ENTRY ListEntry);
9220 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedPushListSListEx (PSLIST_HEADER ListHead, PSLIST_ENTRY List, PSLIST_ENTRY ListEnd, DWORD Count);
9221 NTSYSAPI PSLIST_ENTRY NTAPI RtlInterlockedFlushSList (PSLIST_HEADER ListHead);
9222 NTSYSAPI WORD NTAPI RtlQueryDepthSList (PSLIST_HEADER ListHead);
9223#endif
9224
9225#ifndef _RTL_RUN_ONCE_DEF
9226#define _RTL_RUN_ONCE_DEF 1
9227
9228typedef struct _RTL_RUN_ONCE { PVOID Ptr; } RTL_RUN_ONCE, *PRTL_RUN_ONCE;
9229typedef DWORD (WINAPI *PRTL_RUN_ONCE_INIT_FN)(PRTL_RUN_ONCE, PVOID, PVOID *);
9230
9231#define RTL_RUN_ONCE_INIT {0}
9232#define RTL_RUN_ONCE_CHECK_ONLY __MSABI_LONG(1U)
9233#define RTL_RUN_ONCE_ASYNC __MSABI_LONG(2U)
9234#define RTL_RUN_ONCE_INIT_FAILED __MSABI_LONG(4U)
9235#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
9236#endif
9237
9238 typedef struct _RTL_BARRIER {
9239 DWORD Reserved1;
9240 DWORD Reserved2;
9241 ULONG_PTR Reserved3[2];
9242 DWORD Reserved4;
9243 DWORD Reserved5;
9244 } RTL_BARRIER,*PRTL_BARRIER;
9245
9246#define FAST_FAIL_LEGACY_GS_VIOLATION 0
9247#define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
9248#define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
9249#define FAST_FAIL_CORRUPT_LIST_ENTRY 3
9250#define FAST_FAIL_INCORRECT_STACK 4
9251#define FAST_FAIL_INVALID_ARG 5
9252#define FAST_FAIL_GS_COOKIE_INIT 6
9253#define FAST_FAIL_FATAL_APP_EXIT 7
9254#define FAST_FAIL_RANGE_CHECK_FAILURE 8
9255#define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
9256#define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xffffffff
9257
9258#define HEAP_NO_SERIALIZE 0x00000001
9259#define HEAP_GROWABLE 0x00000002
9260#define HEAP_GENERATE_EXCEPTIONS 0x00000004
9261#define HEAP_ZERO_MEMORY 0x00000008
9262#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
9263#define HEAP_TAIL_CHECKING_ENABLED 0x00000020
9264#define HEAP_FREE_CHECKING_ENABLED 0x00000040
9265#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
9266#define HEAP_CREATE_ALIGN_16 0x00010000
9267#define HEAP_CREATE_ENABLE_TRACING 0x00020000
9268#define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
9269#define HEAP_MAXIMUM_TAG 0x0FFF
9270#define HEAP_PSEUDO_TAG_FLAG 0x8000
9271#define HEAP_TAG_SHIFT 18
9272
9273 PVOID WINAPI RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt);
9274
9275#if !defined (__CRT__NO_INLINE) && !defined (__WIDL__)
9276 __CRT_INLINE PVOID WINAPI RtlSecureZeroMemory(PVOID ptr,SIZE_T cnt) {
9277 volatile char *vptr =(volatile char *)ptr;
9278#if defined(__x86_64__) && !defined(__arm64ec__)
9279 __stosb((PBYTE)((DWORD64)vptr),0,cnt);
9280#else
9281 while(cnt) {
9282 *vptr++ = 0;
9283 cnt--;
9284 }
9285#endif /* __x86_64 */
9286 return ptr;
9287 }
9288#endif /* !__CRT__NO_INLINE // !__WIDL__ */
9289
9290/* Let this macro fail for non-desktop mode. AFAIU this should be better an inline-function ... */
9291#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
9292#define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b) + ((o) << 18)))
9293#endif
9294
9295#define IS_TEXT_UNICODE_ASCII16 0x0001
9296#define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
9297
9298#define IS_TEXT_UNICODE_STATISTICS 0x0002
9299#define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
9300
9301#define IS_TEXT_UNICODE_CONTROLS 0x0004
9302#define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
9303
9304#define IS_TEXT_UNICODE_SIGNATURE 0x0008
9305#define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
9306
9307#define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
9308#define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
9309#define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
9310#define IS_TEXT_UNICODE_NULL_BYTES 0x1000
9311
9312#define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
9313#define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
9314#define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
9315#define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
9316
9317#define COMPRESSION_FORMAT_NONE (0x0000)
9318#define COMPRESSION_FORMAT_DEFAULT (0x0001)
9319#define COMPRESSION_FORMAT_LZNT1 (0x0002)
9320#define COMPRESSION_FORMAT_XPRESS (0x0003)
9321#define COMPRESSION_FORMAT_XPRESS_HUFF (0x0004)
9322#define COMPRESSION_ENGINE_STANDARD (0x0000)
9323#define COMPRESSION_ENGINE_MAXIMUM (0x0100)
9324#define COMPRESSION_ENGINE_HIBER (0x0200)
9325
9326#ifndef __CRT__NO_INLINE
9327#if _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
9328#define _MEMCPY_INLINE_
9329 __CRT_INLINE PVOID __cdecl memcpy_inline(void *dst,const void *src,size_t size) {
9330 if(((char *)dst > (char *)src) && ((char *)dst < ((char *)src + size))) {
9331 __debugbreak();
9332 }
9333 return memcpy(dst,src,size);
9334 }
9335#define memcpy memcpy_inline
9336#endif /* _DBG_MEMCPY_INLINE_ && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD) */
9337#endif /* !__CRT__NO_INLINE */
9338
9339#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
9340#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
9341#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
9342#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
9343#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
9344
9345 typedef struct _MESSAGE_RESOURCE_ENTRY {
9346 WORD Length;
9347 WORD Flags;
9348 BYTE Text[1];
9349 } MESSAGE_RESOURCE_ENTRY,*PMESSAGE_RESOURCE_ENTRY;
9350
9351#define SEF_DACL_AUTO_INHERIT 0x01
9352#define SEF_SACL_AUTO_INHERIT 0x02
9353#define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
9354#define SEF_AVOID_PRIVILEGE_CHECK 0x08
9355#define SEF_AVOID_OWNER_CHECK 0x10
9356#define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
9357#define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
9358#define SEF_MACL_NO_WRITE_UP 0x100
9359#define SEF_MACL_NO_READ_UP 0x200
9360#define SEF_MACL_NO_EXECUTE_UP 0x400
9361#define SEF_AVOID_OWNER_RESTRICTION 0x1000
9362
9363#define SEF_MACL_VALID_FLAGS (SEF_MACL_NO_WRITE_UP | SEF_MACL_NO_READ_UP | SEF_MACL_NO_EXECUTE_UP)
9364
9365#define MESSAGE_RESOURCE_UNICODE 0x0001
9366
9367 typedef struct _MESSAGE_RESOURCE_BLOCK {
9368 DWORD LowId;
9369 DWORD HighId;
9370 DWORD OffsetToEntries;
9371 } MESSAGE_RESOURCE_BLOCK,*PMESSAGE_RESOURCE_BLOCK;
9372
9373 typedef struct _MESSAGE_RESOURCE_DATA {
9374 DWORD NumberOfBlocks;
9375 MESSAGE_RESOURCE_BLOCK Blocks[1];
9376 } MESSAGE_RESOURCE_DATA,*PMESSAGE_RESOURCE_DATA;
9377
9378 typedef struct _OSVERSIONINFOA {
9379 DWORD dwOSVersionInfoSize;
9380 DWORD dwMajorVersion;
9381 DWORD dwMinorVersion;
9382 DWORD dwBuildNumber;
9383 DWORD dwPlatformId;
9384 CHAR szCSDVersion[128];
9385 } OSVERSIONINFOA,*POSVERSIONINFOA,*LPOSVERSIONINFOA;
9386
9387 typedef struct _OSVERSIONINFOW {
9388 DWORD dwOSVersionInfoSize;
9389 DWORD dwMajorVersion;
9390 DWORD dwMinorVersion;
9391 DWORD dwBuildNumber;
9392 DWORD dwPlatformId;
9393 WCHAR szCSDVersion[128];
9394 } OSVERSIONINFOW,*POSVERSIONINFOW,*LPOSVERSIONINFOW,RTL_OSVERSIONINFOW,*PRTL_OSVERSIONINFOW;
9395
9396 __MINGW_TYPEDEF_AW(OSVERSIONINFO)
9397 __MINGW_TYPEDEF_AW(POSVERSIONINFO)
9398 __MINGW_TYPEDEF_AW(LPOSVERSIONINFO)
9399
9400 typedef struct _OSVERSIONINFOEXA {
9401 DWORD dwOSVersionInfoSize;
9402 DWORD dwMajorVersion;
9403 DWORD dwMinorVersion;
9404 DWORD dwBuildNumber;
9405 DWORD dwPlatformId;
9406 CHAR szCSDVersion[128];
9407 WORD wServicePackMajor;
9408 WORD wServicePackMinor;
9409 WORD wSuiteMask;
9410 BYTE wProductType;
9411 BYTE wReserved;
9412 } OSVERSIONINFOEXA,*POSVERSIONINFOEXA,*LPOSVERSIONINFOEXA;
9413
9414 typedef struct _OSVERSIONINFOEXW {
9415 DWORD dwOSVersionInfoSize;
9416 DWORD dwMajorVersion;
9417 DWORD dwMinorVersion;
9418 DWORD dwBuildNumber;
9419 DWORD dwPlatformId;
9420 WCHAR szCSDVersion[128];
9421 WORD wServicePackMajor;
9422 WORD wServicePackMinor;
9423 WORD wSuiteMask;
9424 BYTE wProductType;
9425 BYTE wReserved;
9426 } OSVERSIONINFOEXW,*POSVERSIONINFOEXW,*LPOSVERSIONINFOEXW,RTL_OSVERSIONINFOEXW,*PRTL_OSVERSIONINFOEXW;
9427
9428 __MINGW_TYPEDEF_AW(OSVERSIONINFOEX)
9429 __MINGW_TYPEDEF_AW(POSVERSIONINFOEX)
9430 __MINGW_TYPEDEF_AW(LPOSVERSIONINFOEX)
9431
9432#define VER_EQUAL 1
9433#define VER_GREATER 2
9434#define VER_GREATER_EQUAL 3
9435#define VER_LESS 4
9436#define VER_LESS_EQUAL 5
9437#define VER_AND 6
9438#define VER_OR 7
9439
9440#define VER_CONDITION_MASK 7
9441#define VER_NUM_BITS_PER_CONDITION_MASK 3
9442
9443#define VER_MINORVERSION 0x0000001
9444#define VER_MAJORVERSION 0x0000002
9445#define VER_BUILDNUMBER 0x0000004
9446#define VER_PLATFORMID 0x0000008
9447#define VER_SERVICEPACKMINOR 0x0000010
9448#define VER_SERVICEPACKMAJOR 0x0000020
9449#define VER_SUITENAME 0x0000040
9450#define VER_PRODUCT_TYPE 0x0000080
9451
9452#define VER_NT_WORKSTATION 0x0000001
9453#define VER_NT_DOMAIN_CONTROLLER 0x0000002
9454#define VER_NT_SERVER 0x0000003
9455
9456#define VER_PLATFORM_WIN32s 0
9457#define VER_PLATFORM_WIN32_WINDOWS 1
9458#define VER_PLATFORM_WIN32_NT 2
9459
9460#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
9461#if !defined (_WINBASE_) && !defined (__WIDL__)
9462 NTSYSAPI ULONGLONG NTAPI VerSetConditionMask (ULONGLONG ConditionMask, DWORD TypeMask, BYTE Condition);
9463#endif
9464
9465#define VER_SET_CONDITION(_m_,_t_,_c_) ((_m_) = VerSetConditionMask((_m_),(_t_),(_c_)))
9466
9467#if _WIN32_WINNT >= 0x0600 && !defined (__WIDL__)
9468 NTSYSAPI BOOLEAN NTAPI RtlGetProductInfo (DWORD OSMajorVersion, DWORD OSMinorVersion, DWORD SpMajorVersion, DWORD SpMinorVersion, PDWORD ReturnedProductType);
9469#endif
9470#endif
9471
9472#define RTL_UMS_VERSION (0x0100)
9473
9474 typedef enum _RTL_UMS_THREAD_INFO_CLASS {
9475 UmsThreadInvalidInfoClass = 0,
9476 UmsThreadUserContext,
9477 UmsThreadPriority,
9478 UmsThreadAffinity,
9479 UmsThreadTeb,
9480 UmsThreadIsSuspended,
9481 UmsThreadIsTerminated,
9482 UmsThreadMaxInfoClass
9483 } RTL_UMS_THREAD_INFO_CLASS,*PRTL_UMS_THREAD_INFO_CLASS;
9484
9485 typedef enum _RTL_UMS_SCHEDULER_REASON {
9486 UmsSchedulerStartup = 0,
9487 UmsSchedulerThreadBlocked,
9488 UmsSchedulerThreadYield
9489 } RTL_UMS_SCHEDULER_REASON,*PRTL_UMS_SCHEDULER_REASON;
9490
9491 typedef VOID NTAPI RTL_UMS_SCHEDULER_ENTRY_POINT (RTL_UMS_SCHEDULER_REASON Reason, ULONG_PTR ActivationPayload, PVOID SchedulerParam);
9492 typedef RTL_UMS_SCHEDULER_ENTRY_POINT *PRTL_UMS_SCHEDULER_ENTRY_POINT;
9493
9494#if _WIN32_WINNT >= 0x0602
9495#ifndef IS_VALIDATION_ENABLED
9496#define IS_VALIDATION_ENABLED(C, L) ((L) & (C))
9497#define VRL_PREDEFINED_CLASS_BEGIN (1)
9498#define VRL_CUSTOM_CLASS_BEGIN (1 << 8)
9499#define VRL_CLASS_CONSISTENCY (VRL_PREDEFINED_CLASS_BEGIN)
9500#define VRL_ENABLE_KERNEL_BREAKS (1 << 31)
9501#endif
9502
9503#define CTMF_INCLUDE_APPCONTAINER __MSABI_LONG(0x1U)
9504#define CTMF_VALID_FLAGS (CTMF_INCLUDE_APPCONTAINER)
9505
9506#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP)
9507 NTSYSAPI DWORD NTAPI RtlCrc32 (const void *Buffer, size_t Size, DWORD InitialCrc);
9508 NTSYSAPI ULONGLONG NTAPI RtlCrc64 (const void *Buffer, size_t Size, ULONGLONG InitialCrc);
9509#endif
9510#endif
9511
9512 typedef struct _RTL_CRITICAL_SECTION_DEBUG {
9513 WORD Type;
9514 WORD CreatorBackTraceIndex;
9515 struct _RTL_CRITICAL_SECTION *CriticalSection;
9516 LIST_ENTRY ProcessLocksList;
9517 DWORD EntryCount;
9518 DWORD ContentionCount;
9519 DWORD Flags;
9520 WORD CreatorBackTraceIndexHigh;
9521 WORD SpareWORD;
9522 } RTL_CRITICAL_SECTION_DEBUG,*PRTL_CRITICAL_SECTION_DEBUG,RTL_RESOURCE_DEBUG,*PRTL_RESOURCE_DEBUG;
9523
9524#define RTL_CRITSECT_TYPE 0
9525#define RTL_RESOURCE_TYPE 1
9526
9527#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000
9528#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000
9529#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000
9530#define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000
9531#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000
9532#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xff000000
9533
9534#define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_ALL_FLAG_BITS & (~(RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO | RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN | RTL_CRITICAL_SECTION_FLAG_STATIC_INIT | RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE | RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO)))
9535
9536#define RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT 0x00000001
9537
9538#include <pshpack8.h>
9539 typedef struct _RTL_CRITICAL_SECTION {
9540 PRTL_CRITICAL_SECTION_DEBUG DebugInfo;
9541 LONG LockCount;
9542 LONG RecursionCount;
9543 HANDLE OwningThread;
9544 HANDLE LockSemaphore;
9545 ULONG_PTR SpinCount;
9546 } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION;
9547#include <poppack.h>
9548
9549 typedef struct _RTL_SRWLOCK { PVOID Ptr; } RTL_SRWLOCK,*PRTL_SRWLOCK;
9550 typedef struct _RTL_CONDITION_VARIABLE { PVOID Ptr; } RTL_CONDITION_VARIABLE,*PRTL_CONDITION_VARIABLE;
9551
9552#define RTL_SRWLOCK_INIT {0}
9553#define RTL_CONDITION_VARIABLE_INIT {0}
9554
9555#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
9556
9557 typedef VOID (NTAPI *PAPCFUNC) (ULONG_PTR Parameter);
9558 typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER) (struct _EXCEPTION_POINTERS *ExceptionInfo);
9559
9560 typedef enum _HEAP_INFORMATION_CLASS {
9561 HeapCompatibilityInformation = 0,
9562 HeapEnableTerminationOnCorruption = 1
9563#if ((NTDDI_VERSION > NTDDI_WINBLUE) || (NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14)))
9564 ,HeapOptimizeResources = 3
9565#endif
9566 ,HeapTag = 7
9567 } HEAP_INFORMATION_CLASS;
9568
9569#if ((NTDDI_VERSION > NTDDI_WINBLUE) || (NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14)))
9570#define HEAP_OPTIMIZE_RESOURCES_CURRENT_VERSION 1
9571 typedef struct _HEAP_OPTIMIZE_RESOURCES_INFORMATION {
9572 DWORD Version;
9573 DWORD Flags;
9574 } HEAP_OPTIMIZE_RESOURCES_INFORMATION, *PHEAP_OPTIMIZE_RESOURCES_INFORMATION;
9575#endif
9576
9577 typedef VOID (NTAPI *WORKERCALLBACKFUNC) (PVOID);
9578 typedef VOID (NTAPI *APC_CALLBACK_FUNCTION) (DWORD, PVOID, PVOID);
9579 typedef VOID (NTAPI *WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN);
9580 typedef WAITORTIMERCALLBACKFUNC WAITORTIMERCALLBACK;
9581 typedef VOID (NTAPI *PFLS_CALLBACK_FUNCTION) (PVOID lpFlsData);
9582 typedef BOOLEAN (NTAPI *PSECURE_MEMORY_CACHE_CALLBACK) (PVOID Addr, SIZE_T Range);
9583
9584#define WT_EXECUTEDEFAULT 0x00000000
9585#define WT_EXECUTEINIOTHREAD 0x00000001
9586#define WT_EXECUTEINUITHREAD 0x00000002
9587#define WT_EXECUTEINWAITTHREAD 0x00000004
9588#define WT_EXECUTEONLYONCE 0x00000008
9589#define WT_EXECUTEINTIMERTHREAD 0x00000020
9590#define WT_EXECUTELONGFUNCTION 0x00000010
9591#define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
9592#define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
9593#define WT_TRANSFER_IMPERSONATION 0x00000100
9594
9595#define WT_SET_MAX_THREADPOOL_THREADS(Flags, Limit) ((Flags) |= (Limit) << 16)
9596
9597#define WT_EXECUTEDELETEWAIT 0x00000008
9598#define WT_EXECUTEINLONGTHREAD 0x00000010
9599
9600 typedef enum _ACTIVATION_CONTEXT_INFO_CLASS {
9601 ActivationContextBasicInformation = 1,
9602 ActivationContextDetailedInformation = 2,
9603 AssemblyDetailedInformationInActivationContext = 3,
9604 FileInformationInAssemblyOfAssemblyInActivationContext = 4,
9605 RunlevelInformationInActivationContext = 5,
9606 CompatibilityInformationInActivationContext = 6,
9607 ActivationContextManifestResourceName = 7,
9608 MaxActivationContextInfoClass,
9609 AssemblyDetailedInformationInActivationContxt = 3,
9610 FileInformationInAssemblyOfAssemblyInActivationContxt = 4
9611 } ACTIVATION_CONTEXT_INFO_CLASS;
9612
9613 typedef enum {
9614 ACTCTX_RUN_LEVEL_UNSPECIFIED = 0,
9615 ACTCTX_RUN_LEVEL_AS_INVOKER,
9616 ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE,
9617 ACTCTX_RUN_LEVEL_REQUIRE_ADMIN,
9618 ACTCTX_RUN_LEVEL_NUMBERS
9619 } ACTCTX_REQUESTED_RUN_LEVEL;
9620
9621 typedef enum {
9622 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN = 0,
9623 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS,
9624 ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
9625 } ACTCTX_COMPATIBILITY_ELEMENT_TYPE;
9626
9627 typedef struct _ACTIVATION_CONTEXT_QUERY_INDEX {
9628 DWORD ulAssemblyIndex;
9629 DWORD ulFileIndexInAssembly;
9630 } ACTIVATION_CONTEXT_QUERY_INDEX,*PACTIVATION_CONTEXT_QUERY_INDEX;
9631
9632 typedef struct _ASSEMBLY_FILE_DETAILED_INFORMATION {
9633 DWORD ulFlags;
9634 DWORD ulFilenameLength;
9635 DWORD ulPathLength;
9636 PCWSTR lpFileName;
9637 PCWSTR lpFilePath;
9638 } ASSEMBLY_FILE_DETAILED_INFORMATION,*PASSEMBLY_FILE_DETAILED_INFORMATION;
9639
9640 typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
9641 DWORD ulFlags;
9642 DWORD ulEncodedAssemblyIdentityLength;
9643 DWORD ulManifestPathType;
9644 DWORD ulManifestPathLength;
9645 LARGE_INTEGER liManifestLastWriteTime;
9646 DWORD ulPolicyPathType;
9647 DWORD ulPolicyPathLength;
9648 LARGE_INTEGER liPolicyLastWriteTime;
9649 DWORD ulMetadataSatelliteRosterIndex;
9650 DWORD ulManifestVersionMajor;
9651 DWORD ulManifestVersionMinor;
9652 DWORD ulPolicyVersionMajor;
9653 DWORD ulPolicyVersionMinor;
9654 DWORD ulAssemblyDirectoryNameLength;
9655 PCWSTR lpAssemblyEncodedAssemblyIdentity;
9656 PCWSTR lpAssemblyManifestPath;
9657 PCWSTR lpAssemblyPolicyPath;
9658 PCWSTR lpAssemblyDirectoryName;
9659 DWORD ulFileCount;
9660 } ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
9661
9662 typedef struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION {
9663 DWORD ulFlags;
9664 ACTCTX_REQUESTED_RUN_LEVEL RunLevel;
9665 DWORD UiAccess;
9666 } ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION,*PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
9667
9668 typedef struct _COMPATIBILITY_CONTEXT_ELEMENT {
9669 GUID Id;
9670 ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type;
9671 } COMPATIBILITY_CONTEXT_ELEMENT,*PCOMPATIBILITY_CONTEXT_ELEMENT;
9672
9673/*Vista: {e2011457-1546-43c5-a5fe-008deee3d3f0}*/
9674/*Seven: {35138b9a-5d96-4fbd-8e2d-a2440225f93a}*/
9675 typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {
9676 DWORD ElementCount;
9677 COMPATIBILITY_CONTEXT_ELEMENT Elements[];
9678 } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION,*PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
9679
9680#define MAX_SUPPORTED_OS_NUM (4)
9681
9682 typedef struct _SUPPORTED_OS_INFO {
9683 WORD OsCount;
9684 WORD MitigationExist;
9685 WORD OsList[MAX_SUPPORTED_OS_NUM];
9686 } SUPPORTED_OS_INFO,*PSUPPORTED_OS_INFO;
9687
9688 typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
9689 DWORD dwFlags;
9690 DWORD ulFormatVersion;
9691 DWORD ulAssemblyCount;
9692 DWORD ulRootManifestPathType;
9693 DWORD ulRootManifestPathChars;
9694 DWORD ulRootConfigurationPathType;
9695 DWORD ulRootConfigurationPathChars;
9696 DWORD ulAppDirPathType;
9697 DWORD ulAppDirPathChars;
9698 PCWSTR lpRootManifestPath;
9699 PCWSTR lpRootConfigurationPath;
9700 PCWSTR lpAppDirPath;
9701 } ACTIVATION_CONTEXT_DETAILED_INFORMATION,*PACTIVATION_CONTEXT_DETAILED_INFORMATION;
9702
9703 typedef const struct _ACTIVATION_CONTEXT_QUERY_INDEX *PCACTIVATION_CONTEXT_QUERY_INDEX;
9704 typedef const ASSEMBLY_FILE_DETAILED_INFORMATION *PCASSEMBLY_FILE_DETAILED_INFORMATION;
9705 typedef const struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;
9706 typedef const struct _ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION *PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION;
9707 typedef const struct _COMPATIBILITY_CONTEXT_ELEMENT *PCCOMPATIBILITY_CONTEXT_ELEMENT;
9708 typedef const struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION *PCACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION;
9709 typedef const struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION *PCACTIVATION_CONTEXT_DETAILED_INFORMATION;
9710
9711#define ACTIVATIONCONTEXTINFOCLASS ACTIVATION_CONTEXT_INFO_CLASS
9712
9713#define ACTIVATION_CONTEXT_PATH_TYPE_NONE (1)
9714#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE (2)
9715#define ACTIVATION_CONTEXT_PATH_TYPE_URL (3)
9716#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF (4)
9717
9718#define _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION _ASSEMBLY_FILE_DETAILED_INFORMATION
9719#define ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION ASSEMBLY_FILE_DETAILED_INFORMATION
9720#define PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PASSEMBLY_FILE_DETAILED_INFORMATION
9721#define PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PCASSEMBLY_FILE_DETAILED_INFORMATION
9722#define INVALID_OS_COUNT (0xffff)
9723
9724#define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x1
9725
9726 typedef VOID (NTAPI *RTL_VERIFIER_DLL_LOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
9727 typedef VOID (NTAPI *RTL_VERIFIER_DLL_UNLOAD_CALLBACK) (PWSTR DllName,PVOID DllBase,SIZE_T DllSize,PVOID Reserved);
9728 typedef VOID (NTAPI *RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK)(PVOID AllocationBase,SIZE_T AllocationSize);
9729
9730 typedef struct _RTL_VERIFIER_THUNK_DESCRIPTOR {
9731 PCHAR ThunkName;
9732 PVOID ThunkOldAddress;
9733 PVOID ThunkNewAddress;
9734 } RTL_VERIFIER_THUNK_DESCRIPTOR,*PRTL_VERIFIER_THUNK_DESCRIPTOR;
9735
9736 typedef struct _RTL_VERIFIER_DLL_DESCRIPTOR {
9737 PWCHAR DllName;
9738 DWORD DllFlags;
9739 PVOID DllAddress;
9740 PRTL_VERIFIER_THUNK_DESCRIPTOR DllThunks;
9741 } RTL_VERIFIER_DLL_DESCRIPTOR,*PRTL_VERIFIER_DLL_DESCRIPTOR;
9742
9743 typedef struct _RTL_VERIFIER_PROVIDER_DESCRIPTOR {
9744 DWORD Length;
9745 PRTL_VERIFIER_DLL_DESCRIPTOR ProviderDlls;
9746 RTL_VERIFIER_DLL_LOAD_CALLBACK ProviderDllLoadCallback;
9747 RTL_VERIFIER_DLL_UNLOAD_CALLBACK ProviderDllUnloadCallback;
9748 PWSTR VerifierImage;
9749 DWORD VerifierFlags;
9750 DWORD VerifierDebug;
9751 PVOID RtlpGetStackTraceAddress;
9752 PVOID RtlpDebugPageHeapCreate;
9753 PVOID RtlpDebugPageHeapDestroy;
9754 RTL_VERIFIER_NTDLLHEAPFREE_CALLBACK ProviderNtdllHeapFreeCallback;
9755 } RTL_VERIFIER_PROVIDER_DESCRIPTOR,*PRTL_VERIFIER_PROVIDER_DESCRIPTOR;
9756
9757#define RTL_VRF_FLG_FULL_PAGE_HEAP 0x00000001
9758#define RTL_VRF_FLG_RESERVED_DONOTUSE 0x00000002
9759#define RTL_VRF_FLG_HANDLE_CHECKS 0x00000004
9760#define RTL_VRF_FLG_STACK_CHECKS 0x00000008
9761#define RTL_VRF_FLG_APPCOMPAT_CHECKS 0x00000010
9762#define RTL_VRF_FLG_TLS_CHECKS 0x00000020
9763#define RTL_VRF_FLG_DIRTY_STACKS 0x00000040
9764#define RTL_VRF_FLG_RPC_CHECKS 0x00000080
9765#define RTL_VRF_FLG_COM_CHECKS 0x00000100
9766#define RTL_VRF_FLG_DANGEROUS_APIS 0x00000200
9767#define RTL_VRF_FLG_RACE_CHECKS 0x00000400
9768#define RTL_VRF_FLG_DEADLOCK_CHECKS 0x00000800
9769#define RTL_VRF_FLG_FIRST_CHANCE_EXCEPTION_CHECKS 0x00001000
9770#define RTL_VRF_FLG_VIRTUAL_MEM_CHECKS 0x00002000
9771#define RTL_VRF_FLG_ENABLE_LOGGING 0x00004000
9772#define RTL_VRF_FLG_FAST_FILL_HEAP 0x00008000
9773#define RTL_VRF_FLG_VIRTUAL_SPACE_TRACKING 0x00010000
9774#define RTL_VRF_FLG_ENABLED_SYSTEM_WIDE 0x00020000
9775#define RTL_VRF_FLG_MISCELLANEOUS_CHECKS 0x00020000
9776#define RTL_VRF_FLG_LOCK_CHECKS 0x00040000
9777
9778#define APPLICATION_VERIFIER_INTERNAL_ERROR 0x80000000
9779#define APPLICATION_VERIFIER_INTERNAL_WARNING 0x40000000
9780#define APPLICATION_VERIFIER_NO_BREAK 0x20000000
9781#define APPLICATION_VERIFIER_CONTINUABLE_BREAK 0x10000000
9782
9783#define APPLICATION_VERIFIER_UNKNOWN_ERROR 0x0001
9784#define APPLICATION_VERIFIER_ACCESS_VIOLATION 0x0002
9785#define APPLICATION_VERIFIER_UNSYNCHRONIZED_ACCESS 0x0003
9786#define APPLICATION_VERIFIER_EXTREME_SIZE_REQUEST 0x0004
9787#define APPLICATION_VERIFIER_BAD_HEAP_HANDLE 0x0005
9788#define APPLICATION_VERIFIER_SWITCHED_HEAP_HANDLE 0x0006
9789#define APPLICATION_VERIFIER_DOUBLE_FREE 0x0007
9790#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK 0x0008
9791#define APPLICATION_VERIFIER_DESTROY_PROCESS_HEAP 0x0009
9792#define APPLICATION_VERIFIER_UNEXPECTED_EXCEPTION 0x000A
9793#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_HEADER 0x000B
9794#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_EXCEPTION_RAISED_FOR_PROBING 0x000C
9795#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_HEADER 0x000D
9796#define APPLICATION_VERIFIER_CORRUPTED_FREED_HEAP_BLOCK 0x000E
9797#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_SUFFIX 0x000F
9798#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_START_STAMP 0x0010
9799#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_END_STAMP 0x0011
9800#define APPLICATION_VERIFIER_CORRUPTED_HEAP_BLOCK_PREFIX 0x0012
9801#define APPLICATION_VERIFIER_FIRST_CHANCE_ACCESS_VIOLATION 0x0013
9802#define APPLICATION_VERIFIER_CORRUPTED_HEAP_LIST 0x0014
9803
9804#define APPLICATION_VERIFIER_TERMINATE_THREAD_CALL 0x0100
9805#define APPLICATION_VERIFIER_STACK_OVERFLOW 0x0101
9806#define APPLICATION_VERIFIER_INVALID_EXIT_PROCESS_CALL 0x0102
9807
9808#define APPLICATION_VERIFIER_EXIT_THREAD_OWNS_LOCK 0x0200
9809#define APPLICATION_VERIFIER_LOCK_IN_UNLOADED_DLL 0x0201
9810#define APPLICATION_VERIFIER_LOCK_IN_FREED_HEAP 0x0202
9811#define APPLICATION_VERIFIER_LOCK_DOUBLE_INITIALIZE 0x0203
9812#define APPLICATION_VERIFIER_LOCK_IN_FREED_MEMORY 0x0204
9813#define APPLICATION_VERIFIER_LOCK_CORRUPTED 0x0205
9814#define APPLICATION_VERIFIER_LOCK_INVALID_OWNER 0x0206
9815#define APPLICATION_VERIFIER_LOCK_INVALID_RECURSION_COUNT 0x0207
9816#define APPLICATION_VERIFIER_LOCK_INVALID_LOCK_COUNT 0x0208
9817#define APPLICATION_VERIFIER_LOCK_OVER_RELEASED 0x0209
9818#define APPLICATION_VERIFIER_LOCK_NOT_INITIALIZED 0x0210
9819#define APPLICATION_VERIFIER_LOCK_ALREADY_INITIALIZED 0x0211
9820#define APPLICATION_VERIFIER_LOCK_IN_FREED_VMEM 0x0212
9821#define APPLICATION_VERIFIER_LOCK_IN_UNMAPPED_MEM 0x0213
9822#define APPLICATION_VERIFIER_THREAD_NOT_LOCK_OWNER 0x0214
9823
9824#define APPLICATION_VERIFIER_INVALID_HANDLE 0x0300
9825#define APPLICATION_VERIFIER_INVALID_TLS_VALUE 0x0301
9826#define APPLICATION_VERIFIER_INCORRECT_WAIT_CALL 0x0302
9827#define APPLICATION_VERIFIER_NULL_HANDLE 0x0303
9828#define APPLICATION_VERIFIER_WAIT_IN_DLLMAIN 0x0304
9829
9830#define APPLICATION_VERIFIER_COM_ERROR 0x0400
9831#define APPLICATION_VERIFIER_COM_API_IN_DLLMAIN 0x0401
9832#define APPLICATION_VERIFIER_COM_UNHANDLED_EXCEPTION 0x0402
9833#define APPLICATION_VERIFIER_COM_UNBALANCED_COINIT 0x0403
9834#define APPLICATION_VERIFIER_COM_UNBALANCED_OLEINIT 0x0404
9835#define APPLICATION_VERIFIER_COM_UNBALANCED_SWC 0x0405
9836#define APPLICATION_VERIFIER_COM_NULL_DACL 0x0406
9837#define APPLICATION_VERIFIER_COM_UNSAFE_IMPERSONATION 0x0407
9838#define APPLICATION_VERIFIER_COM_SMUGGLED_WRAPPER 0x0408
9839#define APPLICATION_VERIFIER_COM_SMUGGLED_PROXY 0x0409
9840#define APPLICATION_VERIFIER_COM_CF_SUCCESS_WITH_NULL 0x040A
9841#define APPLICATION_VERIFIER_COM_GCO_SUCCESS_WITH_NULL 0x040B
9842#define APPLICATION_VERIFIER_COM_OBJECT_IN_FREED_MEMORY 0x040C
9843#define APPLICATION_VERIFIER_COM_OBJECT_IN_UNLOADED_DLL 0x040D
9844#define APPLICATION_VERIFIER_COM_VTBL_IN_FREED_MEMORY 0x040E
9845#define APPLICATION_VERIFIER_COM_VTBL_IN_UNLOADED_DLL 0x040F
9846#define APPLICATION_VERIFIER_COM_HOLDING_LOCKS_ON_CALL 0x0410
9847
9848#define APPLICATION_VERIFIER_RPC_ERROR 0x0500
9849
9850#define APPLICATION_VERIFIER_INVALID_FREEMEM 0x0600
9851#define APPLICATION_VERIFIER_INVALID_ALLOCMEM 0x0601
9852#define APPLICATION_VERIFIER_INVALID_MAPVIEW 0x0602
9853#define APPLICATION_VERIFIER_PROBE_INVALID_ADDRESS 0x0603
9854#define APPLICATION_VERIFIER_PROBE_FREE_MEM 0x0604
9855#define APPLICATION_VERIFIER_PROBE_GUARD_PAGE 0x0605
9856#define APPLICATION_VERIFIER_PROBE_NULL 0x0606
9857#define APPLICATION_VERIFIER_PROBE_INVALID_START_OR_SIZE 0x0607
9858#define APPLICATION_VERIFIER_SIZE_HEAP_UNEXPECTED_EXCEPTION 0x0618
9859
9860#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)); }
9861
9862 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);
9863 NTSYSAPI LONG NTAPI RtlSetHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength);
9864 NTSYSAPI LONG NTAPI RtlQueryHeapInformation(PVOID HeapHandle,HEAP_INFORMATION_CLASS HeapInformationClass,PVOID HeapInformation,SIZE_T HeapInformationLength,PSIZE_T ReturnLength);
9865 DWORD NTAPI RtlMultipleAllocateHeap(PVOID HeapHandle,DWORD Flags,SIZE_T Size,DWORD Count,PVOID *Array);
9866 DWORD NTAPI RtlMultipleFreeHeap(PVOID HeapHandle,DWORD Flags,DWORD Count,PVOID *Array);
9867
9868 typedef struct _HARDWARE_COUNTER_DATA {
9869 HARDWARE_COUNTER_TYPE Type;
9870 DWORD Reserved;
9871 DWORD64 Value;
9872 } HARDWARE_COUNTER_DATA,*PHARDWARE_COUNTER_DATA;
9873
9874 typedef struct _PERFORMANCE_DATA {
9875 WORD Size;
9876 BYTE Version;
9877 BYTE HwCountersCount;
9878 DWORD ContextSwitchCount;
9879 DWORD64 WaitReasonBitMap;
9880 DWORD64 CycleTime;
9881 DWORD RetryCount;
9882 DWORD Reserved;
9883 HARDWARE_COUNTER_DATA HwCounters[MAX_HW_COUNTERS];
9884 } PERFORMANCE_DATA,*PPERFORMANCE_DATA;
9885
9886#define PERFORMANCE_DATA_VERSION 1
9887
9888#define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x00000001
9889#define READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS 0x00000002
9890
9891#define DLL_PROCESS_ATTACH 1
9892#define DLL_THREAD_ATTACH 2
9893#define DLL_THREAD_DETACH 3
9894#define DLL_PROCESS_DETACH 0
9895#define DLL_PROCESS_VERIFIER 4
9896
9897#define EVENTLOG_SEQUENTIAL_READ 0x0001
9898#define EVENTLOG_SEEK_READ 0x0002
9899#define EVENTLOG_FORWARDS_READ 0x0004
9900#define EVENTLOG_BACKWARDS_READ 0x0008
9901
9902#define EVENTLOG_SUCCESS 0x0000
9903#define EVENTLOG_ERROR_TYPE 0x0001
9904#define EVENTLOG_WARNING_TYPE 0x0002
9905#define EVENTLOG_INFORMATION_TYPE 0x0004
9906#define EVENTLOG_AUDIT_SUCCESS 0x0008
9907#define EVENTLOG_AUDIT_FAILURE 0x0010
9908
9909#define EVENTLOG_START_PAIRED_EVENT 0x0001
9910#define EVENTLOG_END_PAIRED_EVENT 0x0002
9911#define EVENTLOG_END_ALL_PAIRED_EVENTS 0x0004
9912#define EVENTLOG_PAIRED_EVENT_ACTIVE 0x0008
9913#define EVENTLOG_PAIRED_EVENT_INACTIVE 0x0010
9914
9915 typedef struct _EVENTLOGRECORD {
9916 DWORD Length;
9917 DWORD Reserved;
9918 DWORD RecordNumber;
9919 DWORD TimeGenerated;
9920 DWORD TimeWritten;
9921 DWORD EventID;
9922 WORD EventType;
9923 WORD NumStrings;
9924 WORD EventCategory;
9925 WORD ReservedFlags;
9926 DWORD ClosingRecordNumber;
9927 DWORD StringOffset;
9928 DWORD UserSidLength;
9929 DWORD UserSidOffset;
9930 DWORD DataLength;
9931 DWORD DataOffset;
9932 } EVENTLOGRECORD,*PEVENTLOGRECORD;
9933
9934#define MAXLOGICALLOGNAMESIZE 256
9935
9936 typedef struct _EVENTSFORLOGFILE {
9937 DWORD ulSize;
9938 WCHAR szLogicalLogFile[MAXLOGICALLOGNAMESIZE];
9939 DWORD ulNumRecords;
9940 EVENTLOGRECORD pEventLogRecords[];
9941 } EVENTSFORLOGFILE,*PEVENTSFORLOGFILE;
9942
9943 typedef struct _PACKEDEVENTINFO {
9944 DWORD ulSize;
9945 DWORD ulNumEventsForLogFile;
9946 DWORD ulOffsets[];
9947 } PACKEDEVENTINFO,*PPACKEDEVENTINFO;
9948
9949#define KEY_QUERY_VALUE (0x0001)
9950#define KEY_SET_VALUE (0x0002)
9951#define KEY_CREATE_SUB_KEY (0x0004)
9952#define KEY_ENUMERATE_SUB_KEYS (0x0008)
9953#define KEY_NOTIFY (0x0010)
9954#define KEY_CREATE_LINK (0x0020)
9955#define KEY_WOW64_64KEY (0x0100)
9956#define KEY_WOW64_32KEY (0x0200)
9957#define KEY_WOW64_RES (0x0300)
9958
9959#define KEY_READ ((STANDARD_RIGHTS_READ | KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS | KEY_NOTIFY) & (~SYNCHRONIZE))
9960#define KEY_WRITE ((STANDARD_RIGHTS_WRITE | KEY_SET_VALUE | KEY_CREATE_SUB_KEY) & (~SYNCHRONIZE))
9961#define KEY_EXECUTE ((KEY_READ) & (~SYNCHRONIZE))
9962#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))
9963#define REG_OPTION_RESERVED (__MSABI_LONG(0x00000000))
9964
9965#define REG_OPTION_NON_VOLATILE (__MSABI_LONG(0x00000000))
9966#define REG_OPTION_VOLATILE (__MSABI_LONG(0x00000001))
9967#define REG_OPTION_CREATE_LINK (__MSABI_LONG(0x00000002))
9968#define REG_OPTION_BACKUP_RESTORE (__MSABI_LONG(0x00000004))
9969#define REG_OPTION_OPEN_LINK (__MSABI_LONG(0x00000008))
9970#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)
9971
9972#define REG_CREATED_NEW_KEY (__MSABI_LONG(0x00000001))
9973#define REG_OPENED_EXISTING_KEY (__MSABI_LONG(0x00000002))
9974
9975#define REG_STANDARD_FORMAT 1
9976#define REG_LATEST_FORMAT 2
9977#define REG_NO_COMPRESSION 4
9978
9979#define REG_WHOLE_HIVE_VOLATILE (__MSABI_LONG(0x00000001))
9980#define REG_REFRESH_HIVE (__MSABI_LONG(0x00000002))
9981#define REG_NO_LAZY_FLUSH (__MSABI_LONG(0x00000004))
9982#define REG_FORCE_RESTORE (__MSABI_LONG(0x00000008))
9983#define REG_APP_HIVE (__MSABI_LONG(0x00000010))
9984#define REG_PROCESS_PRIVATE (__MSABI_LONG(0x00000020))
9985#define REG_START_JOURNAL (__MSABI_LONG(0x00000040))
9986#define REG_HIVE_EXACT_FILE_GROWTH (__MSABI_LONG(0x00000080))
9987#define REG_HIVE_NO_RM (__MSABI_LONG(0x00000100))
9988#define REG_HIVE_SINGLE_LOG (__MSABI_LONG(0x00000200))
9989#define REG_BOOT_HIVE (__MSABI_LONG(0x00000400))
9990
9991#define REG_FORCE_UNLOAD 1
9992
9993#define REG_NOTIFY_CHANGE_NAME (__MSABI_LONG(0x00000001))
9994#define REG_NOTIFY_CHANGE_ATTRIBUTES (__MSABI_LONG(0x00000002))
9995#define REG_NOTIFY_CHANGE_LAST_SET (__MSABI_LONG(0x00000004))
9996#define REG_NOTIFY_CHANGE_SECURITY (__MSABI_LONG(0x00000008))
9997#define REG_NOTIFY_THREAD_AGNOSTIC (__MSABI_LONG(0x10000000))
9998
9999#define REG_LEGAL_CHANGE_FILTER (REG_NOTIFY_CHANGE_NAME | REG_NOTIFY_CHANGE_ATTRIBUTES | REG_NOTIFY_CHANGE_LAST_SET | REG_NOTIFY_CHANGE_SECURITY | REG_NOTIFY_THREAD_AGNOSTIC)
10000
10001#define REG_NONE (0)
10002#define REG_SZ (1)
10003#define REG_EXPAND_SZ (2)
10004#define REG_BINARY (3)
10005#define REG_DWORD (4)
10006#define REG_DWORD_LITTLE_ENDIAN (4)
10007#define REG_DWORD_BIG_ENDIAN (5)
10008#define REG_LINK (6)
10009#define REG_MULTI_SZ (7)
10010#define REG_RESOURCE_LIST (8)
10011#define REG_FULL_RESOURCE_DESCRIPTOR (9)
10012#define REG_RESOURCE_REQUIREMENTS_LIST (10)
10013#define REG_QWORD (11)
10014#define REG_QWORD_LITTLE_ENDIAN (11)
10015
10016#define SERVICE_KERNEL_DRIVER 0x00000001
10017#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
10018#define SERVICE_ADAPTER 0x00000004
10019#define SERVICE_RECOGNIZER_DRIVER 0x00000008
10020
10021#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | SERVICE_FILE_SYSTEM_DRIVER | SERVICE_RECOGNIZER_DRIVER)
10022
10023#define SERVICE_WIN32_OWN_PROCESS 0x00000010
10024#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
10025#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | SERVICE_WIN32_SHARE_PROCESS)
10026
10027#define SERVICE_INTERACTIVE_PROCESS 0x00000100
10028
10029#define SERVICE_TYPE_ALL (SERVICE_WIN32 | SERVICE_ADAPTER | SERVICE_DRIVER | SERVICE_INTERACTIVE_PROCESS)
10030
10031#define SERVICE_BOOT_START 0x00000000
10032#define SERVICE_SYSTEM_START 0x00000001
10033#define SERVICE_AUTO_START 0x00000002
10034#define SERVICE_DEMAND_START 0x00000003
10035#define SERVICE_DISABLED 0x00000004
10036
10037#define SERVICE_ERROR_IGNORE 0x00000000
10038#define SERVICE_ERROR_NORMAL 0x00000001
10039#define SERVICE_ERROR_SEVERE 0x00000002
10040#define SERVICE_ERROR_CRITICAL 0x00000003
10041
10042 typedef enum _CM_SERVICE_NODE_TYPE {
10043 DriverType = SERVICE_KERNEL_DRIVER,FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
10044 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,AdapterType = SERVICE_ADAPTER,RecognizerType = SERVICE_RECOGNIZER_DRIVER
10045 } SERVICE_NODE_TYPE;
10046
10047 typedef enum _CM_SERVICE_LOAD_TYPE {
10048 BootLoad = SERVICE_BOOT_START,SystemLoad = SERVICE_SYSTEM_START,AutoLoad = SERVICE_AUTO_START,DemandLoad = SERVICE_DEMAND_START,
10049 DisableLoad = SERVICE_DISABLED
10050 } SERVICE_LOAD_TYPE;
10051
10052 typedef enum _CM_ERROR_CONTROL_TYPE {
10053 IgnoreError = SERVICE_ERROR_IGNORE,NormalError = SERVICE_ERROR_NORMAL,SevereError = SERVICE_ERROR_SEVERE,CriticalError = SERVICE_ERROR_CRITICAL
10054 } SERVICE_ERROR_TYPE;
10055
10056#define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
10057#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
10058#define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
10059#define CM_SERVICE_SD_DISK_BOOT_LOAD 0x00000008
10060#define CM_SERVICE_USB3_DISK_BOOT_LOAD 0x00000010
10061#define CM_SERVICE_MEASURED_BOOT_LOAD 0x00000020
10062#define CM_SERVICE_VERIFIER_BOOT_LOAD 0x00000040
10063#define CM_SERVICE_WINPE_BOOT_LOAD 0x00000080
10064
10065#define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | CM_SERVICE_USB_DISK_BOOT_LOAD | CM_SERVICE_SD_DISK_BOOT_LOAD | CM_SERVICE_USB3_DISK_BOOT_LOAD | CM_SERVICE_MEASURED_BOOT_LOAD | CM_SERVICE_VERIFIER_BOOT_LOAD | CM_SERVICE_WINPE_BOOT_LOAD)
10066
10067#ifndef _NTDDTAPE_WINNT_
10068#define _NTDDTAPE_WINNT_
10069
10070#define TAPE_ERASE_SHORT __MSABI_LONG(0)
10071#define TAPE_ERASE_LONG __MSABI_LONG(1)
10072
10073 typedef struct _TAPE_ERASE {
10074 DWORD Type;
10075 BOOLEAN Immediate;
10076 } TAPE_ERASE,*PTAPE_ERASE;
10077
10078#define TAPE_LOAD __MSABI_LONG(0)
10079#define TAPE_UNLOAD __MSABI_LONG(1)
10080#define TAPE_TENSION __MSABI_LONG(2)
10081#define TAPE_LOCK __MSABI_LONG(3)
10082#define TAPE_UNLOCK __MSABI_LONG(4)
10083#define TAPE_FORMAT __MSABI_LONG(5)
10084
10085 typedef struct _TAPE_PREPARE {
10086 DWORD Operation;
10087 BOOLEAN Immediate;
10088 } TAPE_PREPARE,*PTAPE_PREPARE;
10089
10090#define TAPE_SETMARKS __MSABI_LONG(0)
10091#define TAPE_FILEMARKS __MSABI_LONG(1)
10092#define TAPE_SHORT_FILEMARKS __MSABI_LONG(2)
10093#define TAPE_LONG_FILEMARKS __MSABI_LONG(3)
10094
10095 typedef struct _TAPE_WRITE_MARKS {
10096 DWORD Type;
10097 DWORD Count;
10098 BOOLEAN Immediate;
10099 } TAPE_WRITE_MARKS,*PTAPE_WRITE_MARKS;
10100
10101#define TAPE_ABSOLUTE_POSITION __MSABI_LONG(0)
10102#define TAPE_LOGICAL_POSITION __MSABI_LONG(1)
10103#define TAPE_PSEUDO_LOGICAL_POSITION __MSABI_LONG(2)
10104
10105 typedef struct _TAPE_GET_POSITION {
10106 DWORD Type;
10107 DWORD Partition;
10108 LARGE_INTEGER Offset;
10109 } TAPE_GET_POSITION,*PTAPE_GET_POSITION;
10110
10111#define TAPE_REWIND __MSABI_LONG(0)
10112#define TAPE_ABSOLUTE_BLOCK __MSABI_LONG(1)
10113#define TAPE_LOGICAL_BLOCK __MSABI_LONG(2)
10114#define TAPE_PSEUDO_LOGICAL_BLOCK __MSABI_LONG(3)
10115#define TAPE_SPACE_END_OF_DATA __MSABI_LONG(4)
10116#define TAPE_SPACE_RELATIVE_BLOCKS __MSABI_LONG(5)
10117#define TAPE_SPACE_FILEMARKS __MSABI_LONG(6)
10118#define TAPE_SPACE_SEQUENTIAL_FMKS __MSABI_LONG(7)
10119#define TAPE_SPACE_SETMARKS __MSABI_LONG(8)
10120#define TAPE_SPACE_SEQUENTIAL_SMKS __MSABI_LONG(9)
10121
10122 typedef struct _TAPE_SET_POSITION {
10123 DWORD Method;
10124 DWORD Partition;
10125 LARGE_INTEGER Offset;
10126 BOOLEAN Immediate;
10127 } TAPE_SET_POSITION,*PTAPE_SET_POSITION;
10128
10129#define TAPE_DRIVE_FIXED 0x00000001
10130#define TAPE_DRIVE_SELECT 0x00000002
10131#define TAPE_DRIVE_INITIATOR 0x00000004
10132
10133#define TAPE_DRIVE_ERASE_SHORT 0x00000010
10134#define TAPE_DRIVE_ERASE_LONG 0x00000020
10135#define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040
10136#define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080
10137#define TAPE_DRIVE_TAPE_CAPACITY 0x00000100
10138#define TAPE_DRIVE_TAPE_REMAINING 0x00000200
10139#define TAPE_DRIVE_FIXED_BLOCK 0x00000400
10140#define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800
10141#define TAPE_DRIVE_WRITE_PROTECT 0x00001000
10142#define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000
10143#define TAPE_DRIVE_ECC 0x00010000
10144#define TAPE_DRIVE_COMPRESSION 0x00020000
10145#define TAPE_DRIVE_PADDING 0x00040000
10146#define TAPE_DRIVE_REPORT_SMKS 0x00080000
10147#define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000
10148#define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000
10149#define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000
10150#define TAPE_DRIVE_EJECT_MEDIA 0x01000000
10151#define TAPE_DRIVE_CLEAN_REQUESTS 0x02000000
10152#define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x04000000
10153
10154#define TAPE_DRIVE_RESERVED_BIT 0x80000000
10155
10156#define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
10157#define TAPE_DRIVE_TENSION 0x80000002
10158#define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
10159#define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
10160#define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
10161
10162#define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
10163#define TAPE_DRIVE_TENSION_IMMED 0x80000040
10164#define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
10165
10166#define TAPE_DRIVE_SET_ECC 0x80000100
10167#define TAPE_DRIVE_SET_COMPRESSION 0x80000200
10168#define TAPE_DRIVE_SET_PADDING 0x80000400
10169#define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
10170
10171#define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
10172#define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
10173#define TAPE_DRIVE_LOGICAL_BLK 0x80004000
10174#define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
10175
10176#define TAPE_DRIVE_END_OF_DATA 0x80010000
10177#define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
10178#define TAPE_DRIVE_FILEMARKS 0x80040000
10179#define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
10180
10181#define TAPE_DRIVE_SETMARKS 0x80100000
10182#define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
10183#define TAPE_DRIVE_REVERSE_POSITION 0x80400000
10184#define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
10185
10186#define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
10187#define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
10188#define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
10189#define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
10190
10191#define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
10192#define TAPE_DRIVE_FORMAT 0xA0000000
10193#define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
10194#define TAPE_DRIVE_HIGH_FEATURES 0x80000000
10195
10196 typedef struct _TAPE_GET_DRIVE_PARAMETERS {
10197 BOOLEAN ECC;
10198 BOOLEAN Compression;
10199 BOOLEAN DataPadding;
10200 BOOLEAN ReportSetmarks;
10201 DWORD DefaultBlockSize;
10202 DWORD MaximumBlockSize;
10203 DWORD MinimumBlockSize;
10204 DWORD MaximumPartitionCount;
10205 DWORD FeaturesLow;
10206 DWORD FeaturesHigh;
10207 DWORD EOTWarningZoneSize;
10208 } TAPE_GET_DRIVE_PARAMETERS,*PTAPE_GET_DRIVE_PARAMETERS;
10209
10210 typedef struct _TAPE_SET_DRIVE_PARAMETERS {
10211 BOOLEAN ECC;
10212 BOOLEAN Compression;
10213 BOOLEAN DataPadding;
10214 BOOLEAN ReportSetmarks;
10215 DWORD EOTWarningZoneSize;
10216 } TAPE_SET_DRIVE_PARAMETERS,*PTAPE_SET_DRIVE_PARAMETERS;
10217
10218 typedef struct _TAPE_GET_MEDIA_PARAMETERS {
10219 LARGE_INTEGER Capacity;
10220 LARGE_INTEGER Remaining;
10221 DWORD BlockSize;
10222 DWORD PartitionCount;
10223 BOOLEAN WriteProtected;
10224 } TAPE_GET_MEDIA_PARAMETERS,*PTAPE_GET_MEDIA_PARAMETERS;
10225
10226 typedef struct _TAPE_SET_MEDIA_PARAMETERS {
10227 DWORD BlockSize;
10228 } TAPE_SET_MEDIA_PARAMETERS,*PTAPE_SET_MEDIA_PARAMETERS;
10229
10230#define TAPE_FIXED_PARTITIONS __MSABI_LONG(0)
10231#define TAPE_SELECT_PARTITIONS __MSABI_LONG(1)
10232#define TAPE_INITIATOR_PARTITIONS __MSABI_LONG(2)
10233
10234 typedef struct _TAPE_CREATE_PARTITION {
10235 DWORD Method;
10236 DWORD Count;
10237 DWORD Size;
10238 } TAPE_CREATE_PARTITION,*PTAPE_CREATE_PARTITION;
10239
10240#define TAPE_QUERY_DRIVE_PARAMETERS __MSABI_LONG(0)
10241#define TAPE_QUERY_MEDIA_CAPACITY __MSABI_LONG(1)
10242#define TAPE_CHECK_FOR_DRIVE_PROBLEM __MSABI_LONG(2)
10243#define TAPE_QUERY_IO_ERROR_DATA __MSABI_LONG(3)
10244#define TAPE_QUERY_DEVICE_ERROR_DATA __MSABI_LONG(4)
10245
10246 typedef struct _TAPE_WMI_OPERATIONS {
10247 DWORD Method;
10248 DWORD DataBufferSize;
10249 PVOID DataBuffer;
10250 } TAPE_WMI_OPERATIONS,*PTAPE_WMI_OPERATIONS;
10251
10252 typedef enum _TAPE_DRIVE_PROBLEM_TYPE {
10253 TapeDriveProblemNone,TapeDriveReadWriteWarning,TapeDriveReadWriteError,TapeDriveReadWarning,TapeDriveWriteWarning,TapeDriveReadError,TapeDriveWriteError,TapeDriveHardwareError,TapeDriveUnsupportedMedia,TapeDriveScsiConnectionError,TapeDriveTimetoClean,TapeDriveCleanDriveNow,TapeDriveMediaLifeExpired,TapeDriveSnappedTape
10254 } TAPE_DRIVE_PROBLEM_TYPE;
10255#endif
10256
10257 typedef DWORD TP_VERSION,*PTP_VERSION;
10258 typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE,*PTP_CALLBACK_INSTANCE;
10259 typedef VOID (NTAPI *PTP_SIMPLE_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context);
10260 typedef struct _TP_POOL TP_POOL,*PTP_POOL;
10261
10262 typedef enum _TP_CALLBACK_PRIORITY {
10263 TP_CALLBACK_PRIORITY_HIGH,
10264 TP_CALLBACK_PRIORITY_NORMAL,
10265 TP_CALLBACK_PRIORITY_LOW,
10266 TP_CALLBACK_PRIORITY_INVALID,
10267 TP_CALLBACK_PRIORITY_COUNT = TP_CALLBACK_PRIORITY_INVALID
10268 } TP_CALLBACK_PRIORITY;
10269
10270 typedef struct _TP_POOL_STACK_INFORMATION {
10271 SIZE_T StackReserve;
10272 SIZE_T StackCommit;
10273 } TP_POOL_STACK_INFORMATION, *PTP_POOL_STACK_INFORMATION;
10274
10275 typedef struct _TP_CLEANUP_GROUP TP_CLEANUP_GROUP,*PTP_CLEANUP_GROUP;
10276 typedef VOID (NTAPI *PTP_CLEANUP_GROUP_CANCEL_CALLBACK) (PVOID ObjectContext, PVOID CleanupContext);
10277
10278#if _WIN32_WINNT >= 0x0601
10279 typedef struct _TP_CALLBACK_ENVIRON_V3 {
10280 TP_VERSION Version;
10281 PTP_POOL Pool;
10282 PTP_CLEANUP_GROUP CleanupGroup;
10283 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;
10284 PVOID RaceDll;
10285 struct _ACTIVATION_CONTEXT *ActivationContext;
10286 PTP_SIMPLE_CALLBACK FinalizationCallback;
10287 union {
10288 DWORD Flags;
10289 struct {
10290 DWORD LongFunction : 1;
10291 DWORD Persistent : 1;
10292 DWORD Private : 30;
10293 } s;
10294 } u;
10295 TP_CALLBACK_PRIORITY CallbackPriority;
10296 DWORD Size;
10297 } TP_CALLBACK_ENVIRON_V3;
10298 typedef TP_CALLBACK_ENVIRON_V3 TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON;
10299#else
10300 typedef struct _TP_CALLBACK_ENVIRON_V1 {
10301 TP_VERSION Version;
10302 PTP_POOL Pool;
10303 PTP_CLEANUP_GROUP CleanupGroup;
10304 PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;
10305 PVOID RaceDll;
10306 struct _ACTIVATION_CONTEXT *ActivationContext;
10307 PTP_SIMPLE_CALLBACK FinalizationCallback;
10308 union {
10309 DWORD Flags;
10310 struct {
10311 DWORD LongFunction : 1;
10312 DWORD Persistent : 1;
10313 DWORD Private : 30;
10314 } s;
10315 } u;
10316 } TP_CALLBACK_ENVIRON_V1;
10317 typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON,*PTP_CALLBACK_ENVIRON;
10318#endif
10319
10320 typedef struct _TP_WORK TP_WORK,*PTP_WORK;
10321 typedef VOID (NTAPI *PTP_WORK_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_WORK Work);
10322 typedef struct _TP_TIMER TP_TIMER,*PTP_TIMER;
10323 typedef VOID (NTAPI *PTP_TIMER_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_TIMER Timer);
10324 typedef DWORD TP_WAIT_RESULT;
10325 typedef struct _TP_WAIT TP_WAIT,*PTP_WAIT;
10326 typedef VOID (NTAPI *PTP_WAIT_CALLBACK) (PTP_CALLBACK_INSTANCE Instance, PVOID Context, PTP_WAIT Wait, TP_WAIT_RESULT WaitResult);
10327 typedef struct _TP_IO TP_IO,*PTP_IO;
10328
10329#if !defined (__WIDL__)
10330 FORCEINLINE VOID TpInitializeCallbackEnviron (PTP_CALLBACK_ENVIRON cbe) {
10331 cbe->Pool = NULL;
10332 cbe->CleanupGroup = NULL;
10333 cbe->CleanupGroupCancelCallback = NULL;
10334 cbe->RaceDll = NULL;
10335 cbe->ActivationContext = NULL;
10336 cbe->FinalizationCallback = NULL;
10337 cbe->u.Flags = 0;
10338#if _WIN32_WINNT < 0x0601
10339 cbe->Version = 1;
10340#else
10341 cbe->Version = 3;
10342 cbe->CallbackPriority = TP_CALLBACK_PRIORITY_NORMAL;
10343 cbe->Size = sizeof (TP_CALLBACK_ENVIRON);
10344#endif
10345 }
10346 FORCEINLINE VOID TpSetCallbackThreadpool (PTP_CALLBACK_ENVIRON cbe, PTP_POOL pool) { cbe->Pool = pool; }
10347 FORCEINLINE VOID TpSetCallbackCleanupGroup (PTP_CALLBACK_ENVIRON cbe, PTP_CLEANUP_GROUP cleanup_group, PTP_CLEANUP_GROUP_CANCEL_CALLBACK cleanup_group_cb) {
10348 cbe->CleanupGroup = cleanup_group;
10349 cbe->CleanupGroupCancelCallback = cleanup_group_cb;
10350 }
10351 FORCEINLINE VOID TpSetCallbackActivationContext (PTP_CALLBACK_ENVIRON cbe, struct _ACTIVATION_CONTEXT *actx) { cbe->ActivationContext = actx; }
10352 FORCEINLINE VOID TpSetCallbackNoActivationContext (PTP_CALLBACK_ENVIRON cbe) { cbe->ActivationContext = (struct _ACTIVATION_CONTEXT *) (LONG_PTR) -1; }
10353 FORCEINLINE VOID TpSetCallbackLongFunction (PTP_CALLBACK_ENVIRON cbe) { cbe->u.s.LongFunction = 1; }
10354 FORCEINLINE VOID TpSetCallbackRaceWithDll (PTP_CALLBACK_ENVIRON cbe, PVOID h) { cbe->RaceDll = h; }
10355 FORCEINLINE VOID TpSetCallbackFinalizationCallback (PTP_CALLBACK_ENVIRON cbe, PTP_SIMPLE_CALLBACK fini_cb) { cbe->FinalizationCallback = fini_cb; }
10356#if _WIN32_WINNT >= 0x0601
10357 FORCEINLINE VOID TpSetCallbackPriority (PTP_CALLBACK_ENVIRON cbe, TP_CALLBACK_PRIORITY prio) { cbe->CallbackPriority = prio; }
10358#endif
10359 FORCEINLINE VOID TpSetCallbackPersistent (PTP_CALLBACK_ENVIRON cbe) { cbe->u.s.Persistent = 1; }
10360 FORCEINLINE VOID TpDestroyCallbackEnviron (PTP_CALLBACK_ENVIRON cbe) { UNREFERENCED_PARAMETER (cbe); }
10361#endif
10362
10363#if !defined(__ia64__) && !defined (__WIDL__)
10364 struct _TEB *NtCurrentTeb(VOID);
10365 PVOID GetCurrentFiber(VOID);
10366 PVOID GetFiberData(VOID);
10367
10368#if defined (__aarch64__) || defined(__arm64ec__)
10369 register struct _TEB *__mingw_current_teb __asm__("x18");
10370 FORCEINLINE struct _TEB *NtCurrentTeb(VOID)
10371 {
10372 return __mingw_current_teb;
10373 }
10374 FORCEINLINE PVOID GetCurrentFiber(VOID)
10375 {
10376 return (PVOID)(((PNT_TIB)NtCurrentTeb())->FiberData);
10377 }
10378#elif defined(__x86_64__)
10379 FORCEINLINE struct _TEB *NtCurrentTeb(VOID)
10380 {
10381 return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB,Self));
10382 }
10383 FORCEINLINE PVOID GetCurrentFiber(VOID)
10384 {
10385 return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB,FiberData));
10386 }
10387#elif defined(__i386__)
10388# define PcTeb 0x18
10389 FORCEINLINE struct _TEB *NtCurrentTeb(void)
10390 {
10391 return (struct _TEB *)__readfsdword(PcTeb);
10392 }
10393 FORCEINLINE PVOID GetCurrentFiber(void)
10394 {
10395 return (PVOID)__readfsdword(0x10);
10396 }
10397#elif defined (__arm__)
10398 FORCEINLINE struct _TEB *NtCurrentTeb(VOID)
10399 {
10400 struct _TEB *teb;
10401 __asm ("mrc p15, 0, %0, c13, c0, 2" : "=r" (teb));
10402 return teb;
10403 }
10404 FORCEINLINE PVOID GetCurrentFiber(VOID)
10405 {
10406 return (PVOID)(((PNT_TIB)NtCurrentTeb())->FiberData);
10407 }
10408#endif
10409
10410 FORCEINLINE PVOID GetFiberData (VOID) { return *(void **)GetCurrentFiber (); }
10411#endif /* !defined(__ia64__) && !defined (__WIDL__) */
10412
10413#ifndef _NTTMAPI_
10414#define _NTTMAPI_
10415
10416#ifdef __cplusplus
10417 extern "C" {
10418#endif
10419
10420#include <ktmtypes.h>
10421
10422#define TRANSACTIONMANAGER_QUERY_INFORMATION 0x00001
10423#define TRANSACTIONMANAGER_SET_INFORMATION 0x00002
10424#define TRANSACTIONMANAGER_RECOVER 0x00004
10425#define TRANSACTIONMANAGER_RENAME 0x00008
10426#define TRANSACTIONMANAGER_CREATE_RM 0x00010
10427#define TRANSACTIONMANAGER_BIND_TRANSACTION 0x00020
10428
10429#define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ | TRANSACTIONMANAGER_QUERY_INFORMATION)
10430#define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | TRANSACTIONMANAGER_SET_INFORMATION | TRANSACTIONMANAGER_RECOVER | TRANSACTIONMANAGER_RENAME | TRANSACTIONMANAGER_CREATE_RM)
10431#define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
10432#define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | TRANSACTIONMANAGER_GENERIC_READ | TRANSACTIONMANAGER_GENERIC_WRITE | TRANSACTIONMANAGER_GENERIC_EXECUTE | TRANSACTIONMANAGER_BIND_TRANSACTION)
10433
10434#define TRANSACTION_QUERY_INFORMATION (0x0001)
10435#define TRANSACTION_SET_INFORMATION (0x0002)
10436#define TRANSACTION_ENLIST (0x0004)
10437#define TRANSACTION_COMMIT (0x0008)
10438#define TRANSACTION_ROLLBACK (0x0010)
10439#define TRANSACTION_PROPAGATE (0x0020)
10440#define TRANSACTION_RIGHT_RESERVED1 (0x0040)
10441
10442#define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ | TRANSACTION_QUERY_INFORMATION | SYNCHRONIZE)
10443#define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_COMMIT | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
10444#define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | TRANSACTION_COMMIT | TRANSACTION_ROLLBACK | SYNCHRONIZE)
10445#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | TRANSACTION_GENERIC_READ | TRANSACTION_GENERIC_WRITE | TRANSACTION_GENERIC_EXECUTE)
10446#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ | STANDARD_RIGHTS_WRITE | TRANSACTION_SET_INFORMATION | TRANSACTION_ENLIST | TRANSACTION_ROLLBACK | TRANSACTION_PROPAGATE | SYNCHRONIZE)
10447
10448#define RESOURCEMANAGER_QUERY_INFORMATION (0x0001)
10449#define RESOURCEMANAGER_SET_INFORMATION (0x0002)
10450#define RESOURCEMANAGER_RECOVER (0x0004)
10451#define RESOURCEMANAGER_ENLIST (0x0008)
10452#define RESOURCEMANAGER_GET_NOTIFICATION (0x0010)
10453#define RESOURCEMANAGER_REGISTER_PROTOCOL (0x0020)
10454#define RESOURCEMANAGER_COMPLETE_PROPAGATION (0x0040)
10455
10456#define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ | RESOURCEMANAGER_QUERY_INFORMATION | SYNCHRONIZE)
10457#define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | RESOURCEMANAGER_SET_INFORMATION | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_REGISTER_PROTOCOL | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE)
10458#define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | RESOURCEMANAGER_RECOVER | RESOURCEMANAGER_ENLIST | RESOURCEMANAGER_GET_NOTIFICATION | RESOURCEMANAGER_COMPLETE_PROPAGATION | SYNCHRONIZE)
10459#define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | RESOURCEMANAGER_GENERIC_READ | RESOURCEMANAGER_GENERIC_WRITE | RESOURCEMANAGER_GENERIC_EXECUTE)
10460
10461#define ENLISTMENT_QUERY_INFORMATION 1
10462#define ENLISTMENT_SET_INFORMATION 2
10463#define ENLISTMENT_RECOVER 4
10464#define ENLISTMENT_SUBORDINATE_RIGHTS 8
10465#define ENLISTMENT_SUPERIOR_RIGHTS 0x10
10466
10467#define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ | ENLISTMENT_QUERY_INFORMATION)
10468#define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE | ENLISTMENT_SET_INFORMATION | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS)
10469#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE | ENLISTMENT_RECOVER | ENLISTMENT_SUBORDINATE_RIGHTS | ENLISTMENT_SUPERIOR_RIGHTS)
10470#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | ENLISTMENT_GENERIC_READ | ENLISTMENT_GENERIC_WRITE | ENLISTMENT_GENERIC_EXECUTE)
10471
10472 typedef enum _TRANSACTION_OUTCOME {
10473 TransactionOutcomeUndetermined = 1,
10474 TransactionOutcomeCommitted,
10475 TransactionOutcomeAborted
10476 } TRANSACTION_OUTCOME;
10477
10478 typedef enum _TRANSACTION_STATE {
10479 TransactionStateNormal = 1,
10480 TransactionStateIndoubt,
10481 TransactionStateCommittedNotify
10482 } TRANSACTION_STATE;
10483
10484 typedef struct _TRANSACTION_BASIC_INFORMATION {
10485 GUID TransactionId;
10486 DWORD State;
10487 DWORD Outcome;
10488 } TRANSACTION_BASIC_INFORMATION,*PTRANSACTION_BASIC_INFORMATION;
10489
10490 typedef struct _TRANSACTIONMANAGER_BASIC_INFORMATION {
10491 GUID TmIdentity;
10492 LARGE_INTEGER VirtualClock;
10493 } TRANSACTIONMANAGER_BASIC_INFORMATION,*PTRANSACTIONMANAGER_BASIC_INFORMATION;
10494
10495 typedef struct _TRANSACTIONMANAGER_LOG_INFORMATION {
10496 GUID LogIdentity;
10497 } TRANSACTIONMANAGER_LOG_INFORMATION,*PTRANSACTIONMANAGER_LOG_INFORMATION;
10498
10499 typedef struct _TRANSACTIONMANAGER_LOGPATH_INFORMATION {
10500 DWORD LogPathLength;
10501 WCHAR LogPath[1];
10502 } TRANSACTIONMANAGER_LOGPATH_INFORMATION,*PTRANSACTIONMANAGER_LOGPATH_INFORMATION;
10503
10504 typedef struct _TRANSACTIONMANAGER_RECOVERY_INFORMATION {
10505 ULONGLONG LastRecoveredLsn;
10506 } TRANSACTIONMANAGER_RECOVERY_INFORMATION,*PTRANSACTIONMANAGER_RECOVERY_INFORMATION;
10507
10508 typedef struct _TRANSACTIONMANAGER_OLDEST_INFORMATION {
10509 GUID OldestTransactionGuid;
10510 } TRANSACTIONMANAGER_OLDEST_INFORMATION,*PTRANSACTIONMANAGER_OLDEST_INFORMATION;
10511
10512 typedef struct _TRANSACTION_PROPERTIES_INFORMATION {
10513 DWORD IsolationLevel;
10514 DWORD IsolationFlags;
10515 LARGE_INTEGER Timeout;
10516 DWORD Outcome;
10517 DWORD DescriptionLength;
10518 WCHAR Description[1];
10519 } TRANSACTION_PROPERTIES_INFORMATION,*PTRANSACTION_PROPERTIES_INFORMATION;
10520
10521 typedef struct _TRANSACTION_BIND_INFORMATION {
10522 HANDLE TmHandle;
10523 } TRANSACTION_BIND_INFORMATION,*PTRANSACTION_BIND_INFORMATION;
10524
10525 typedef struct _TRANSACTION_ENLISTMENT_PAIR {
10526 GUID EnlistmentId;
10527 GUID ResourceManagerId;
10528 } TRANSACTION_ENLISTMENT_PAIR,*PTRANSACTION_ENLISTMENT_PAIR;
10529
10530 typedef struct _TRANSACTION_ENLISTMENTS_INFORMATION {
10531 DWORD NumberOfEnlistments;
10532 TRANSACTION_ENLISTMENT_PAIR EnlistmentPair[1];
10533 } TRANSACTION_ENLISTMENTS_INFORMATION,*PTRANSACTION_ENLISTMENTS_INFORMATION;
10534
10535 typedef struct _TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION {
10536 TRANSACTION_ENLISTMENT_PAIR SuperiorEnlistmentPair;
10537 } TRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION,*PTRANSACTION_SUPERIOR_ENLISTMENT_INFORMATION;
10538
10539 typedef struct _RESOURCEMANAGER_BASIC_INFORMATION {
10540 GUID ResourceManagerId;
10541 DWORD DescriptionLength;
10542 WCHAR Description[1];
10543 } RESOURCEMANAGER_BASIC_INFORMATION,*PRESOURCEMANAGER_BASIC_INFORMATION;
10544
10545 typedef struct _RESOURCEMANAGER_COMPLETION_INFORMATION {
10546 HANDLE IoCompletionPortHandle;
10547 ULONG_PTR CompletionKey;
10548 } RESOURCEMANAGER_COMPLETION_INFORMATION,*PRESOURCEMANAGER_COMPLETION_INFORMATION;
10549
10550 typedef enum _TRANSACTION_INFORMATION_CLASS {
10551 TransactionBasicInformation,
10552 TransactionPropertiesInformation,
10553 TransactionEnlistmentInformation,
10554 TransactionSuperiorEnlistmentInformation,
10555 TransactionBindInformation,
10556 TransactionDTCPrivateInformation
10557 } TRANSACTION_INFORMATION_CLASS;
10558
10559 typedef enum _TRANSACTIONMANAGER_INFORMATION_CLASS {
10560 TransactionManagerBasicInformation,
10561 TransactionManagerLogInformation,
10562 TransactionManagerLogPathInformation,
10563 TransactionManagerOnlineProbeInformation = 3,
10564 TransactionManagerRecoveryInformation = 4,
10565 TransactionManagerOldestTransactionInformation = 5
10566 } TRANSACTIONMANAGER_INFORMATION_CLASS;
10567
10568 typedef enum _RESOURCEMANAGER_INFORMATION_CLASS {
10569 ResourceManagerBasicInformation,
10570 ResourceManagerCompletionInformation
10571 } RESOURCEMANAGER_INFORMATION_CLASS;
10572
10573 typedef struct _ENLISTMENT_BASIC_INFORMATION {
10574 GUID EnlistmentId;
10575 GUID TransactionId;
10576 GUID ResourceManagerId;
10577 } ENLISTMENT_BASIC_INFORMATION,*PENLISTMENT_BASIC_INFORMATION;
10578
10579 typedef struct _ENLISTMENT_CRM_INFORMATION {
10580 GUID CrmTransactionManagerId;
10581 GUID CrmResourceManagerId;
10582 GUID CrmEnlistmentId;
10583 } ENLISTMENT_CRM_INFORMATION,*PENLISTMENT_CRM_INFORMATION;
10584
10585 typedef enum _ENLISTMENT_INFORMATION_CLASS {
10586 EnlistmentBasicInformation,
10587 EnlistmentRecoveryInformation,
10588 EnlistmentCrmInformation
10589 } ENLISTMENT_INFORMATION_CLASS;
10590
10591 typedef struct _TRANSACTION_LIST_ENTRY {
10592 /*UOW*/ GUID UOW;
10593 } TRANSACTION_LIST_ENTRY,*PTRANSACTION_LIST_ENTRY;
10594
10595 typedef struct _TRANSACTION_LIST_INFORMATION {
10596 DWORD NumberOfTransactions;
10597 TRANSACTION_LIST_ENTRY TransactionInformation[1];
10598 } TRANSACTION_LIST_INFORMATION,*PTRANSACTION_LIST_INFORMATION;
10599
10600 typedef enum _KTMOBJECT_TYPE {
10601 KTMOBJECT_TRANSACTION,
10602 KTMOBJECT_TRANSACTION_MANAGER,
10603 KTMOBJECT_RESOURCE_MANAGER,
10604 KTMOBJECT_ENLISTMENT,
10605 KTMOBJECT_INVALID
10606 } KTMOBJECT_TYPE,*PKTMOBJECT_TYPE;
10607
10608 typedef struct _KTMOBJECT_CURSOR {
10609 GUID LastQuery;
10610 DWORD ObjectIdCount;
10611 GUID ObjectIds[1];
10612 } KTMOBJECT_CURSOR,*PKTMOBJECT_CURSOR;
10613
10614#ifdef __cplusplus
10615 }
10616#endif
10617
10618#endif
10619
10620/* Field Names From (See _fields_ section)
10621 * FIXME: Verify these against documentation
10622 * -- These documentation describes Win32 Constants and Structures in Python --
10623 * Constants - http://packages.python.org/winappdbg/winappdbg.win32.context_i386-pysrc.html
10624 * WOW64_FLOATING_SAVE_AREA - http://packages.python.org/winappdbg/winappdbg.win32.context_amd64.WOW64_FLOATING_SAVE_AREA-class.html
10625 * WOW64_CONTEXT - http://packages.python.org/winappdbg/winappdbg.win32.context_amd64.WOW64_CONTEXT-class.html
10626 */
10627
10628#define WOW64_CONTEXT_i386 0x00010000
10629#define WOW64_CONTEXT_i486 0x00010000
10630#define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000001))
10631#define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000002))
10632#define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000004))
10633#define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000008))
10634#define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000010))
10635#define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000020))
10636#define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
10637#define WOW64_CONTEXT_ALL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS | WOW64_CONTEXT_FLOATING_POINT | WOW64_CONTEXT_DEBUG_REGISTERS | WOW64_CONTEXT_EXTENDED_REGISTERS)
10638
10639#define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | __MSABI_LONG(0x00000040))
10640
10641#define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
10642#define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
10643#define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
10644#define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
10645
10646#define WOW64_SIZE_OF_80387_REGISTERS 80
10647#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
10648
10649typedef struct _WOW64_FLOATING_SAVE_AREA {
10650 DWORD ControlWord;
10651 DWORD StatusWord;
10652 DWORD TagWord;
10653 DWORD ErrorOffset;
10654 DWORD ErrorSelector;
10655 DWORD DataOffset;
10656 DWORD DataSelector;
10657 BYTE RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];
10658 DWORD Cr0NpxState;
10659} WOW64_FLOATING_SAVE_AREA, *PWOW64_FLOATING_SAVE_AREA;
10660
10661#include "pshpack4.h"
10662typedef struct _WOW64_CONTEXT {
10663 DWORD ContextFlags;
10664 DWORD Dr0;
10665 DWORD Dr1;
10666 DWORD Dr2;
10667 DWORD Dr3;
10668 DWORD Dr6;
10669 DWORD Dr7;
10670 WOW64_FLOATING_SAVE_AREA FloatSave;
10671 DWORD SegGs;
10672 DWORD SegFs;
10673 DWORD SegEs;
10674 DWORD SegDs;
10675 DWORD Edi;
10676 DWORD Esi;
10677 DWORD Ebx;
10678 DWORD Edx;
10679 DWORD Ecx;
10680 DWORD Eax;
10681 DWORD Ebp;
10682 DWORD Eip;
10683 DWORD SegCs;
10684 DWORD EFlags;
10685 DWORD Esp;
10686 DWORD SegSs;
10687 BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];
10688} WOW64_CONTEXT, *PWOW64_CONTEXT;
10689#include "poppack.h"
10690
10691typedef struct _WOW64_LDT_ENTRY {
10692 WORD LimitLow;
10693 WORD BaseLow;
10694 __C89_NAMELESS union {
10695 struct {
10696 BYTE BaseMid;
10697 BYTE Flags1;
10698 BYTE Flags2;
10699 BYTE BaseHi;
10700 } Bytes;
10701 struct {
10702 DWORD BaseMid :8;
10703 DWORD Type :5;
10704 DWORD Dpl :2;
10705 DWORD Pres :1;
10706 DWORD LimitHi :4;
10707 DWORD Sys :1;
10708 DWORD Reserved_0 :1;
10709 DWORD Default_Big :1;
10710 DWORD Granularity :1;
10711 DWORD BaseHi :8;
10712 } Bits;
10713 } HighWord;
10714} WOW64_LDT_ENTRY, *PWOW64_LDT_ENTRY;
10715
10716 typedef struct _WOW64_DESCRIPTOR_TABLE_ENTRY {
10717 DWORD Selector;
10718 WOW64_LDT_ENTRY Descriptor;
10719 } WOW64_DESCRIPTOR_TABLE_ENTRY,*PWOW64_DESCRIPTOR_TABLE_ENTRY;
10720
10721#if (_WIN32_WINNT >= 0x0601)
10722
10723#ifndef ___PROCESSOR_NUMBER_DEFINED
10724#define ___PROCESSOR_NUMBER_DEFINED
10725typedef struct _PROCESSOR_NUMBER {
10726 WORD Group;
10727 BYTE Number;
10728 BYTE Reserved;
10729} PROCESSOR_NUMBER, *PPROCESSOR_NUMBER;
10730
10731#define ALL_PROCESSOR_GROUPS 0xffff
10732#endif /* !___PROCESSOR_NUMBER_DEFINED */
10733
10734#endif /*(_WIN32_WINNT >= 0x0601)*/
10735
10736#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION (1)
10737#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION (2)
10738#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION (3)
10739#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION (4)
10740#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION (5)
10741#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION (6)
10742#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION (7)
10743#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE (8)
10744#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES (9)
10745#define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS (10)
10746#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO (11)
10747#define ACTIVATION_CONTEXT_SECTION_WINRT_ACTIVATABLE_CLASSES (12)
10748
10749#ifdef __cplusplus
10750}
10751#endif
10752
10753#endif /* _WINNT_ */
10754