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