#ifndef _WINNT_
#define _WINNT_
#if _MSC_VER >= 1200
#pragma warning(push)
#pragma warning(disable:4668) // #if not_defined treated as #if 0
#pragma warning(disable:
4668
)
#pragma warning(disable:4820) // padded added
#endif
#pragma warning(disable:
4820
)
#pragma warning(disable:4200) // nonstandard extension used : zero-sized array in struct/union
#pragma warning(disable:
4200
)
#pragma warning(disable:4201) // named type definition in parentheses
#pragma warning(disable:
4201
)
#pragma warning(disable:4214) // bit field types other than int
#pragma warning(disable:
4214
)
#ifdef __cplusplus
extern
"C"
{
#endif
#include <ctype.h>
#include <winapifamily.h>
#define ANYSIZE_ARRAY 1
#ifndef DUMMYUNIONNAME
#if defined(NONAMELESSUNION) || !defined(_MSC_EXTENSIONS)
#define DUMMYUNIONNAME u
#define DUMMYUNIONNAME2 u2
#define DUMMYUNIONNAME3 u3
#define DUMMYUNIONNAME4 u4
#define DUMMYUNIONNAME5 u5
#define DUMMYUNIONNAME6 u6
#define DUMMYUNIONNAME7 u7
#define DUMMYUNIONNAME8 u8
#define DUMMYUNIONNAME9 u9
#else
#define DUMMYUNIONNAME
#define DUMMYUNIONNAME2
#define DUMMYUNIONNAME3
#define DUMMYUNIONNAME4
#define DUMMYUNIONNAME5
#define DUMMYUNIONNAME6
#define DUMMYUNIONNAME7
#define DUMMYUNIONNAME8
#define DUMMYUNIONNAME9
#endif
#endif // DUMMYUNIONNAME
#ifndef DUMMYSTRUCTNAME
#if defined(NONAMELESSUNION) || !defined(_MSC_EXTENSIONS)
#define DUMMYSTRUCTNAME s
#define DUMMYSTRUCTNAME2 s2
#define DUMMYSTRUCTNAME3 s3
#define DUMMYSTRUCTNAME4 s4
#define DUMMYSTRUCTNAME5 s5
#define DUMMYSTRUCTNAME6 s6
#else
#define DUMMYSTRUCTNAME
#define DUMMYSTRUCTNAME2
#define DUMMYSTRUCTNAME3
#define DUMMYSTRUCTNAME4
#define DUMMYSTRUCTNAME5
#define DUMMYSTRUCTNAME6
#endif
#endif // DUMMYSTRUCTNAME
#include <specstrings.h>
#include <kernelspecs.h>
#if defined(STRICT_GS_ENABLED)
#pragma strict_gs_check(push, on)
#endif
#if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && defined(ENABLE_RESTRICTED)
#define RESTRICTED_POINTER __restrict
#else
#define RESTRICTED_POINTER
#endif
#if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64)
#define ALIGNMENT_MACHINE
#define UNALIGNED __unaligned
#if defined(_WIN64)
#define UNALIGNED64 __unaligned
#else
#define UNALIGNED64
#endif
#else
#undef ALIGNMENT_MACHINE
#define UNALIGNED
#define UNALIGNED64
#endif
#if defined(_WIN64) || defined(_M_ALPHA)
#define MAX_NATURAL_ALIGNMENT sizeof(ULONGLONG)
#define MEMORY_ALLOCATION_ALIGNMENT 16
#else
#define MAX_NATURAL_ALIGNMENT sizeof(DWORD)
#define MEMORY_ALLOCATION_ALIGNMENT 8
#endif
#ifdef __cplusplus
#if _MSC_VER >= 1300
#define TYPE_ALIGNMENT( t ) __alignof(t)
#endif
#else
#define TYPE_ALIGNMENT( t ) \
FIELD_OFFSET( struct { char x; t test; }, test )
#endif
#if defined(_AMD64_) || defined(_X86_)
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)
//
// TODO: WOWXX - Unblock ARM. Make all alignment checks DWORD for now.
//
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED)
#error "No Target Architecture"
#endif
#define PROBE_ALIGNMENT32( _s ) TYPE_ALIGNMENT( DWORD )
#ifndef SORTPP_PASS
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
#else
#define C_ASSERT(e) /* nothing */
#endif
#include <basetsd.h>
#ifndef DECLSPEC_IMPORT
#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64)) && !defined(MIDL_PASS)
#define DECLSPEC_IMPORT __declspec(dllimport)
#else
#define DECLSPEC_IMPORT
#endif
#endif
#ifndef DECLSPEC_NORETURN
#if (_MSC_VER >= 1200) && !defined(MIDL_PASS)
#define DECLSPEC_NORETURN __declspec(noreturn)
#else
#define DECLSPEC_NORETURN
#endif
#endif
#ifndef DECLSPEC_NOTHROW
#if (_MSC_VER >= 1200) && !defined(MIDL_PASS)
#define DECLSPEC_NOTHROW __declspec(nothrow)
#else
#define DECLSPEC_NOTHROW
#endif
#endif
#ifndef DECLSPEC_ALIGN
#if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
#define DECLSPEC_ALIGN(x) __declspec(align(x))
#else
#define DECLSPEC_ALIGN(x)
#endif
#endif
#ifndef SYSTEM_CACHE_ALIGNMENT_SIZE
#if defined(_AMD64_) || defined(_X86_)
#define SYSTEM_CACHE_ALIGNMENT_SIZE 64
#else
#define SYSTEM_CACHE_ALIGNMENT_SIZE 128
#endif
#endif
#ifndef DECLSPEC_CACHEALIGN
#define DECLSPEC_CACHEALIGN DECLSPEC_ALIGN(SYSTEM_CACHE_ALIGNMENT_SIZE)
#endif
#ifndef DECLSPEC_UUID
#if (_MSC_VER >= 1100) && defined (__cplusplus)
#define DECLSPEC_UUID(x) __declspec(uuid(x))
#else
#define DECLSPEC_UUID(x)
#endif
#endif
#ifndef DECLSPEC_NOVTABLE
#if (_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_NOVTABLE __declspec(novtable)
#else
#define DECLSPEC_NOVTABLE
#endif
#endif
#ifndef DECLSPEC_SELECTANY
#if (_MSC_VER >= 1100)
#define DECLSPEC_SELECTANY __declspec(selectany)
#else
#define DECLSPEC_SELECTANY
#endif
#endif
#ifndef NOP_FUNCTION
#if (_MSC_VER >= 1210)
#define NOP_FUNCTION __noop
#else
#define NOP_FUNCTION (void)0
#endif
#endif
#ifndef DECLSPEC_ADDRSAFE
#if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
#define DECLSPEC_ADDRSAFE __declspec(address_safe)
#else
#define DECLSPEC_ADDRSAFE
#endif
#endif
#ifndef DECLSPEC_SAFEBUFFERS
#if (_MSC_VER >= 1600)
#define DECLSPEC_SAFEBUFFERS __declspec(safebuffers)
#else
#define DECLSPEC_SAFEBUFFERS
#endif
#endif
#ifndef DECLSPEC_NOINLINE
#if (_MSC_VER >= 1300)
#define DECLSPEC_NOINLINE __declspec(noinline)
#else
#define DECLSPEC_NOINLINE
#endif
#endif
#ifndef DECLSPEC_SAFEBUFFERS
#if (_MSC_VER >= 1300)
#define DECLSPEC_SAFEBUFFERS __declspec(safebuffers)
#else
#define DECLSPEC_SAFEBUFFERS
#endif
#endif
#ifndef DECLSPEC_GUARDNOCF
#if (_MSC_FULL_VER >= 170065501) || defined(_D1VERSIONLKG171_)
#define DECLSPEC_GUARDNOCF __declspec(guard(nocf))
#else
#define DECLSPEC_GUARDNOCF
#endif
#endif
#ifndef DECLSPEC_GUARD_SUPPRESS
#if (_MSC_FULL_VER >= 181040116) || defined(_D1VERSIONLKG171_)
#define DECLSPEC_GUARD_SUPPRESS __declspec(guard(suppress))
#else
#define DECLSPEC_GUARD_SUPPRESS
#endif
#endif
#ifndef DECLSPEC_CHPE_GUEST
#if _M_HYBRID
#define DECLSPEC_CHPE_GUEST __declspec(hybrid_guest)
#else
#define DECLSPEC_CHPE_GUEST
#endif
#endif
#ifndef DECLSPEC_CHPE_PATCHABLE
#if _M_HYBRID
#define DECLSPEC_CHPE_PATCHABLE __declspec(hybrid_patchable)
#else
#define DECLSPEC_CHPE_PATCHABLE
#endif
#endif
#ifndef FORCEINLINE
#if (_MSC_VER >= 1200)
#define FORCEINLINE __forceinline
#else
#define FORCEINLINE __inline
#endif
#endif
#define CFORCEINLINE FORCEINLINE
#define STKFORCEINLINE FORCEINLINE
#ifndef PFORCEINLINE
#define PFORCEINLINE FORCEINLINE
#endif
#ifndef DECLSPEC_DEPRECATED
#if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
#define DECLSPEC_DEPRECATED __declspec(deprecated)
#define DEPRECATE_SUPPORTED
#else
#define DECLSPEC_DEPRECATED
#undef DEPRECATE_SUPPORTED
#endif
#endif
#ifdef DEPRECATE_DDK_FUNCTIONS
#ifdef _NTDDK_
#define DECLSPEC_DEPRECATED_DDK DECLSPEC_DEPRECATED
#ifdef DEPRECATE_SUPPORTED
#define PRAGMA_DEPRECATED_DDK 1
#endif
#else
#define DECLSPEC_DEPRECATED_DDK
#define PRAGMA_DEPRECATED_DDK 1
#endif
#else
#define DECLSPEC_DEPRECATED_DDK
#define PRAGMA_DEPRECATED_DDK 0
#endif
typedef
void
*
;
typedef void * POINTER_64 PVOID64;
#if (_MSC_VER >= 800) || defined(_STDCALL_SUPPORTED)
#define NTAPI __stdcall
#else
#define _cdecl
#define __cdecl
#define NTAPI
#endif
#if !defined(_M_CEE_PURE)
#define NTAPI_INLINE NTAPI
#else
#define NTAPI_INLINE
#endif
#if !defined(_NTSYSTEM_)
#define NTSYSAPI DECLSPEC_IMPORT
#define NTSYSCALLAPI DECLSPEC_IMPORT
#else
#define NTSYSAPI
#if defined(_NTDLLBUILD_)
#define NTSYSCALLAPI
#else
#define NTSYSCALLAPI DECLSPEC_ADDRSAFE
#endif
#endif
#ifndef VOID
#define VOID void
typedef
char
;
typedef
short
;
typedef
long
;
#if !defined(MIDL_PASS)
typedef
int
;
#endif
#endif
#ifndef _MAC
typedef
wchar_t
;
#else
// some Macintosh compilers don't define wchar_t in a convenient location, or define it as a char
typedef unsigned short WCHAR; // wc, 16-bit UNICODE character
#endif
typedef
*
, *
, *
;
typedef CONST WCHAR *LPCWCH, *PCWCH;
typedef _Null_terminated_ WCHAR *NWPSTR, *LPWSTR, *PWSTR;
typedef _Null_terminated_ PWSTR *PZPWSTR;
typedef _Null_terminated_ CONST PWSTR *PCZPWSTR;
typedef _Null_terminated_ WCHAR UNALIGNED *LPUWSTR, *PUWSTR;
typedef _Null_terminated_ CONST WCHAR *LPCWSTR, *PCWSTR;
typedef _Null_terminated_ PCWSTR *PZPCWSTR;
typedef _Null_terminated_ CONST PCWSTR *PCZPCWSTR;
typedef _Null_terminated_ CONST WCHAR UNALIGNED *LPCUWSTR, *PCUWSTR;
typedef _NullNull_terminated_ WCHAR *PZZWSTR;
typedef _NullNull_terminated_ CONST WCHAR *PCZZWSTR;
typedef _NullNull_terminated_ WCHAR UNALIGNED *PUZZWSTR;
typedef _NullNull_terminated_ CONST WCHAR UNALIGNED *PCUZZWSTR;
typedef
*
;
typedef CONST WCHAR *PCNZWCH;
typedef WCHAR UNALIGNED *PUNZWCH;
typedef CONST WCHAR UNALIGNED *PCUNZWCH;
#if _WIN32_WINNT >= 0x0600 || (defined(__cplusplus) && defined(WINDOWS_ENABLE_CPLUSPLUS))
typedef CONST WCHAR *LPCWCHAR, *PCWCHAR;
typedef CONST WCHAR UNALIGNED *LPCUWCHAR, *PCUWCHAR;
typedef
unsigned
long
;
#define UCSCHAR_INVALID_CHARACTER (0xffffffff)
#define MIN_UCSCHAR (0)
#define MAX_UCSCHAR (0x0010FFFF)
typedef
*
;
typedef
const
*
;
typedef
*
;
typedef UCSCHAR UNALIGNED *PUUCSSTR;
typedef
const
*
;
typedef const UCSCHAR UNALIGNED *PCUUCSSTR;
typedef UCSCHAR UNALIGNED *PUUCSCHAR;
typedef const UCSCHAR UNALIGNED *PCUUCSCHAR;
#endif // _WIN32_WINNT >= 0x0600
typedef
*
, *
, *
;
typedef CONST CHAR *LPCCH, *PCCH;
typedef _Null_terminated_ CHAR *NPSTR, *LPSTR, *PSTR;
typedef _Null_terminated_ PSTR *PZPSTR;
typedef _Null_terminated_ CONST PSTR *PCZPSTR;
typedef _Null_terminated_ CONST CHAR *LPCSTR, *PCSTR;
typedef _Null_terminated_ PCSTR *PZPCSTR;
typedef _Null_terminated_ CONST PCSTR *PCZPCSTR;
typedef _NullNull_terminated_ CHAR *PZZSTR;
typedef _NullNull_terminated_ CONST CHAR *PCZZSTR;
typedef
*
;
typedef CONST CHAR *PCNZCH;
#ifdef UNICODE // r_winnt
#ifndef _TCHAR_DEFINED
typedef
, *
;
typedef
, *
;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef
,
;
typedef
,
;
typedef
,
;
typedef
,
;
typedef
,
;
typedef
,
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
#define __TEXT(quote) L##quote // r_winnt
#else /* UNICODE */ // r_winnt
#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */
typedef LPCH LPTCH, PTCH;
typedef LPCCH LPCTCH, PCTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
typedef PZZSTR PZZTSTR, PUZZTSTR;
typedef PCZZSTR PCZZTSTR, PCUZZTSTR;
typedef PZPSTR PZPTSTR;
typedef PNZCH PNZTCH, PUNZTCH;
typedef PCNZCH PCNZTCH, PCUNZTCH;
#define __TEXT(quote) quote // r_winnt
#endif /* UNICODE */ // r_winnt
#define TEXT(quote) __TEXT(quote) // r_winnt
typedef
*
;
typedef
*
;
#define ALL_PROCESSOR_GROUPS 0xffff
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
[
3
];
}
, *
;
#if defined(_WIN64)
#define MAXIMUM_PROC_PER_GROUP 64
#else
#define MAXIMUM_PROC_PER_GROUP 32
#endif
#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
#ifdef STRICT
typedef
void
*
;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef
*
;
typedef
;
typedef
;
typedef
;
#ifndef _HRESULT_DEFINED
#define _HRESULT_DEFINED
#ifdef __midl
typedef LONG HRESULT;
#else
typedef _Return_type_success_(return >= 0) long HRESULT;
#endif // __midl
#endif // !_HRESULT_DEFINED
#ifdef __cplusplus
#define EXTERN_C extern "C"
#define EXTERN_C_START extern "C" {
#define EXTERN_C_END }
#else
#define EXTERN_C extern
#define EXTERN_C_START
#define EXTERN_C_END
#endif
#if defined(_WIN32) || defined(_MPPC_)
#ifdef _68K_
#define STDMETHODCALLTYPE __cdecl
#else
#define STDMETHODCALLTYPE __stdcall
#endif
#define STDMETHODVCALLTYPE __cdecl
#define STDAPICALLTYPE __stdcall
#define STDAPIVCALLTYPE __cdecl
#else
#define STDMETHODCALLTYPE __export __stdcall
#define STDMETHODVCALLTYPE __export __cdecl
#define STDAPICALLTYPE __export __stdcall
#define STDAPIVCALLTYPE __export __cdecl
#endif
#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
#define STDOVERRIDEMETHODIMP __override STDMETHODIMP
#define STDOVERRIDEMETHODIMP_(type) __override STDMETHODIMP_(type)
#define IFACEMETHODIMP __override STDMETHODIMP
#define IFACEMETHODIMP_(type) __override STDMETHODIMP_(type)
#define STDAPIV EXTERN_C HRESULT STDAPIVCALLTYPE
#define STDAPIV_(type) EXTERN_C type STDAPIVCALLTYPE
#define STDMETHODIMPV HRESULT STDMETHODVCALLTYPE
#define STDMETHODIMPV_(type) type STDMETHODVCALLTYPE
#define STDOVERRIDEMETHODIMPV __override STDMETHODIMPV
#define STDOVERRIDEMETHODIMPV_(type) __override STDMETHODIMPV_(type)
#define IFACEMETHODIMPV __override STDMETHODIMPV
#define IFACEMETHODIMPV_(type) __override STDMETHODIMPV_(type)
typedef
char
;
typedef
;
typedef
;
typedef
;
#ifndef __COMPARTMENT_ID_DEFINED__
#define __COMPARTMENT_ID_DEFINED__
typedef
enum
{
UNSPECIFIED_COMPARTMENT_ID
=
0
,
}
, *
;
#endif // __COMPARTMENT_ID_DEFINED__
#define APPLICATION_ERROR_MASK 0x20000000
#define ERROR_SEVERITY_SUCCESS 0x00000000
#define ERROR_SEVERITY_INFORMATIONAL 0x40000000
#define ERROR_SEVERITY_WARNING 0x80000000
#define ERROR_SEVERITY_ERROR 0xC0000000
#if defined(_M_IA64) && !defined(MIDL_PASS)
__declspec(align(16))
#endif
typedef
struct
{
__int64
;
__int64
;
}
;
typedef
*
;
#define _ULONGLONG_
#if (!defined (_MAC) && (!defined(MIDL_PASS) || defined(__midl)) && (!defined(_M_IX86) || (defined(_INTEGRAL_MAX_BITS) && _INTEGRAL_MAX_BITS >= 64)))
typedef
__int64
;
typedef
unsigned
__int64
;
#define MAXLONGLONG (0x7fffffffffffffff)
#else
#if defined(_MAC) && defined(_MAC_INT_64)
typedef __int64 LONGLONG;
typedef unsigned __int64 ULONGLONG;
#define MAXLONGLONG (0x7fffffffffffffff)
#else
typedef double LONGLONG;
typedef double ULONGLONG;
#endif //_MAC and int64
#endif
typedef
*
;
typedef
*
;
typedef
;
#if defined(MIDL_PASS)
typedef struct _LARGE_INTEGER {
LONGLONG QuadPart;
} LARGE_INTEGER;
#else // MIDL_PASS
typedef
union
{
struct
{
;
;
struct
{
;
;
}
;
;
}
;
#endif //MIDL_PASS
typedef
*
;
#if defined(MIDL_PASS)
typedef struct _ULARGE_INTEGER {
ULONGLONG QuadPart;
} ULARGE_INTEGER;
#else // MIDL_PASS
typedef
union
{
struct
{
;
;
struct
{
;
;
}
;
;
}
;
#endif //MIDL_PASS
typedef
*
;
typedef
, *
;
typedef
, *
;
typedef
struct
{
;
;
}
, *
;
#define _DWORDLONG_
typedef
;
typedef
*
;
#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \
|| defined(_68K_) || defined(_MPPC_) \
|| defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64) \
|| defined(_M_HYBRID_X86_ARM64)
//
// Midl does not understand inline assembler. Therefore, the Rtl functions
// are used for shifts by 0..31 and multiplies of 32-bits times 32-bits to
// form a 64-bit product.
//
//
// IA64 and AMD64 have native 64-bit operations that are just as fast as their
// 32-bit counter parts. Therefore, the int64 data type is used directly to form
// shifts of 0..31 and multiplies of 32-bits times 32-bits to form a 64-bit
// product.
//
#define Int32x32To64(a, b) (((__int64)((long)(a))) * ((__int64)((long)(b))))
#define UInt32x32To64(a, b) (((unsigned __int64)((unsigned int)(a))) * ((unsigned __int64)((unsigned int)(b))))
#define Int64ShllMod32(a, b) (((unsigned __int64)(a)) << (b))
#define Int64ShraMod32(a, b) (((__int64)(a)) >> (b))
#define Int64ShrlMod32(a, b) (((unsigned __int64)(a)) >> (b))
#elif defined(_M_IX86)
#define Int32x32To64(a, b) ((__int64)(((__int64)((long)(a))) * ((long)(b))))
#define UInt32x32To64(a, b) ((unsigned __int64)(((unsigned __int64)((unsigned int)(a))) * ((unsigned int)(b))))
(
);
(
);
(
);
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable:4035 4793) // re-enable below
#pragma warning(disable:
4035
4793
)
__inline
(
)
{
__asm
{
mov ecx, ShiftCount
mov eax, dword ptr [Value]
mov edx, dword ptr [Value+
4
]
shld edx, eax, cl
shl eax, cl
}
}
__inline
(
)
{
__asm
{
mov ecx, ShiftCount
mov eax, dword ptr [Value]
mov edx, dword ptr [Value+
4
]
shrd eax, edx, cl
sar edx, cl
}
}
__inline
(
)
{
__asm
{
mov ecx, ShiftCount
mov eax, dword ptr [Value]
mov edx, dword ptr [Value+
4
]
shrd eax, edx, cl
shr edx, cl
}
}
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning(default:4035 4793)
#endif
#else
#error Must define a target architecture.
#endif
#ifdef __cplusplus
extern
"C"
{
#endif
#if defined(_M_AMD64)
#define RotateLeft8 _rotl8
#define RotateLeft16 _rotl16
#define RotateRight8 _rotr8
#define RotateRight16 _rotr16
unsigned char
__cdecl
_rotl8 (
_In_ unsigned char Value,
_In_ unsigned char Shift
);
unsigned short
__cdecl
_rotl16 (
_In_ unsigned short Value,
_In_ unsigned char Shift
);
unsigned char
__cdecl
_rotr8 (
_In_ unsigned char Value,
_In_ unsigned char Shift
);
unsigned short
__cdecl
_rotr16 (
_In_ unsigned short Value,
_In_ unsigned char Shift
);
#pragma intrinsic(_rotl8)
#pragma intrinsic(_rotl16)
#pragma intrinsic(_rotr8)
#pragma intrinsic(_rotr16)
#endif /* _M_AMD64 */
#if _MSC_VER >= 1300
#define RotateLeft32 _rotl
#define RotateLeft64 _rotl64
#define RotateRight32 _rotr
#define RotateRight64 _rotr64
unsigned
int
__cdecl
(
);
unsigned
__int64
__cdecl
(
_In_ unsigned __int64 Value,
);
unsigned
int
__cdecl
(
);
unsigned
__int64
__cdecl
(
_In_ unsigned __int64 Value,
);
#pragma intrinsic(_rotl)
#pragma intrinsic(_rotl64)
#pragma intrinsic(_rotr)
#pragma intrinsic(_rotr64)
#endif /* _MSC_VER >= 1300 */
#ifdef __cplusplus
}
#endif
#define ANSI_NULL ((CHAR)0)
#define UNICODE_NULL ((WCHAR)0)
#define UNICODE_STRING_MAX_BYTES ((WORD ) 65534)
#define UNICODE_STRING_MAX_CHARS (32767)
typedef
;
typedef
*
;
typedef
struct
{
struct
*
;
struct
*
;
} LIST_ENTRY, *PLIST_ENTRY, *RESTRICTED_POINTER PRLIST_ENTRY;
typedef
struct
{
struct
*
;
}
, *
;
typedef
struct
{
;
;
}
;
typedef
*
;
typedef
struct
{
;
;
}
;
typedef
*
;
#include <guiddef.h>
#ifndef __OBJECTID_DEFINED
#define __OBJECTID_DEFINED
typedef
struct
{
;
;
}
;
#endif // !_OBJECTID_DEFINED
#define MINCHAR 0x80
#define MAXCHAR 0x7f
#define MINSHORT 0x8000
#define MAXSHORT 0x7fff
#define MINLONG 0x80000000
#define MAXLONG 0x7fffffff
#define MAXBYTE 0xff
#define MAXWORD 0xffff
#define MAXDWORD 0xffffffff
#define FIELD_OFFSET(type, field) ((LONG)(LONG_PTR)&(((type *)0)->field))
#define UFIELD_OFFSET(type, field) ((DWORD)(LONG_PTR)&(((type *)0)->field))
#define RTL_FIELD_SIZE(type, field) (sizeof(((type *)0)->field))
#define RTL_SIZEOF_THROUGH_FIELD(type, field) \
(FIELD_OFFSET(type, field) + RTL_FIELD_SIZE(type, field))
#define RTL_CONTAINS_FIELD(Struct, Size, Field) \
( (((PCHAR)(&(Struct)->Field)) + sizeof((Struct)->Field)) <= (((PCHAR)(Struct))+(Size)) )
#define RTL_NUMBER_OF_V1(A) (sizeof(A)/sizeof((A)[0]))
#if defined(__cplusplus) && \
!defined(RC_INVOKED) && \
(_MSC_FULL_VER >= 13009466) && \
// RtlpNumberOf is a function that takes a reference to an array of N Ts.
// typedef T array_of_T[N];
// typedef array_of_T &reference_to_array_of_T;
// RtlpNumberOf returns a pointer to an array of N chars.
// We could return a reference instead of a pointer but older compilers do not accept that.
// typedef char array_of_char[N];
// typedef array_of_char *pointer_to_array_of_char;
// sizeof(array_of_char) == N
// sizeof(*pointer_to_array_of_char) == N
// pointer_to_array_of_char RtlpNumberOf(reference_to_array_of_T);
// We never even call RtlpNumberOf, we just take the size of dereferencing its return type.
// We do not even implement RtlpNumberOf, we just declare it.
// Attempts to pass pointers instead of arrays to this macro result in compile time errors.
// That is the point.
#pragma region Application Family or OneCore Family
//
// end_ntndis end_ntminiport
#pragma region Application Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
// begin_ntndis begin_ntminiport
extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
// end_ntndis end_ntminiport
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))
#else
#define RTL_NUMBER_OF_V2(A) RTL_NUMBER_OF_V1(A)
#endif
#ifdef ENABLE_RTL_NUMBER_OF_V2
#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V2(A)
#else
#define RTL_NUMBER_OF(A) RTL_NUMBER_OF_V1(A)
#endif
#define ARRAYSIZE(A) RTL_NUMBER_OF_V2(A)
#define _ARRAYSIZE(A) RTL_NUMBER_OF_V1(A)
#define RTL_FIELD_TYPE(type, field) (((type*)0)->field)
#define RTL_NUMBER_OF_FIELD(type, field) (RTL_NUMBER_OF(RTL_FIELD_TYPE(type, field)))
#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)))
#if defined(__cplusplus)
#define RTL_CONST_CAST(type) const_cast<type>
#else
#define RTL_CONST_CAST(type) (type)
#endif
#define RTL_BITS_OF(sizeOfArg) (sizeof(sizeOfArg) * 8)
#define RTL_BITS_OF_FIELD(type, field) (RTL_BITS_OF(RTL_FIELD_TYPE(type, field)))
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
#include <excpt.h>
typedef
_IRQL_requires_same_
_Function_class_(EXCEPTION_ROUTINE)
(
_Inout_ struct _EXCEPTION_RECORD *ExceptionRecord,
_In_ PVOID EstablisherFrame,
_Inout_ struct _CONTEXT *ContextRecord,
_In_ PVOID DispatcherContext
);
typedef
*
;
#define VER_SERVER_NT 0x80000000
#define VER_WORKSTATION_NT 0x40000000
#define VER_SUITE_SMALLBUSINESS 0x00000001
#define VER_SUITE_ENTERPRISE 0x00000002
#define VER_SUITE_BACKOFFICE 0x00000004
#define VER_SUITE_COMMUNICATIONS 0x00000008
#define VER_SUITE_TERMINAL 0x00000010
#define VER_SUITE_SMALLBUSINESS_RESTRICTED 0x00000020
#define VER_SUITE_EMBEDDEDNT 0x00000040
#define VER_SUITE_DATACENTER 0x00000080
#define VER_SUITE_SINGLEUSERTS 0x00000100
#define VER_SUITE_PERSONAL 0x00000200
#define VER_SUITE_BLADE 0x00000400
#define VER_SUITE_EMBEDDED_RESTRICTED 0x00000800
#define VER_SUITE_SECURITY_APPLIANCE 0x00001000
#define VER_SUITE_STORAGE_SERVER 0x00002000
#define VER_SUITE_COMPUTE_SERVER 0x00004000
#define VER_SUITE_WH_SERVER 0x00008000
#define VER_SUITE_MULTIUSERTS 0x00020000
#define PRODUCT_UNDEFINED 0x00000000
#define PRODUCT_ULTIMATE 0x00000001
#define PRODUCT_HOME_BASIC 0x00000002
#define PRODUCT_HOME_PREMIUM 0x00000003
#define PRODUCT_ENTERPRISE 0x00000004
#define PRODUCT_HOME_BASIC_N 0x00000005
#define PRODUCT_BUSINESS 0x00000006
#define PRODUCT_STANDARD_SERVER 0x00000007
#define PRODUCT_DATACENTER_SERVER 0x00000008
#define PRODUCT_SMALLBUSINESS_SERVER 0x00000009
#define PRODUCT_ENTERPRISE_SERVER 0x0000000A
#define PRODUCT_STARTER 0x0000000B
#define PRODUCT_DATACENTER_SERVER_CORE 0x0000000C
#define PRODUCT_STANDARD_SERVER_CORE 0x0000000D
#define PRODUCT_ENTERPRISE_SERVER_CORE 0x0000000E
#define PRODUCT_ENTERPRISE_SERVER_IA64 0x0000000F
#define PRODUCT_BUSINESS_N 0x00000010
#define PRODUCT_WEB_SERVER 0x00000011
#define PRODUCT_CLUSTER_SERVER 0x00000012
#define PRODUCT_HOME_SERVER 0x00000013
#define PRODUCT_STORAGE_EXPRESS_SERVER 0x00000014
#define PRODUCT_STORAGE_STANDARD_SERVER 0x00000015
#define PRODUCT_STORAGE_WORKGROUP_SERVER 0x00000016
#define PRODUCT_STORAGE_ENTERPRISE_SERVER 0x00000017
#define PRODUCT_SERVER_FOR_SMALLBUSINESS 0x00000018
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM 0x00000019
#define PRODUCT_HOME_PREMIUM_N 0x0000001A
#define PRODUCT_ENTERPRISE_N 0x0000001B
#define PRODUCT_ULTIMATE_N 0x0000001C
#define PRODUCT_WEB_SERVER_CORE 0x0000001D
#define PRODUCT_MEDIUMBUSINESS_SERVER_MANAGEMENT 0x0000001E
#define PRODUCT_MEDIUMBUSINESS_SERVER_SECURITY 0x0000001F
#define PRODUCT_MEDIUMBUSINESS_SERVER_MESSAGING 0x00000020
#define PRODUCT_SERVER_FOUNDATION 0x00000021
#define PRODUCT_HOME_PREMIUM_SERVER 0x00000022
#define PRODUCT_SERVER_FOR_SMALLBUSINESS_V 0x00000023
#define PRODUCT_STANDARD_SERVER_V 0x00000024
#define PRODUCT_DATACENTER_SERVER_V 0x00000025
#define PRODUCT_ENTERPRISE_SERVER_V 0x00000026
#define PRODUCT_DATACENTER_SERVER_CORE_V 0x00000027
#define PRODUCT_STANDARD_SERVER_CORE_V 0x00000028
#define PRODUCT_ENTERPRISE_SERVER_CORE_V 0x00000029
#define PRODUCT_HYPERV 0x0000002A
#define PRODUCT_STORAGE_EXPRESS_SERVER_CORE 0x0000002B
#define PRODUCT_STORAGE_STANDARD_SERVER_CORE 0x0000002C
#define PRODUCT_STORAGE_WORKGROUP_SERVER_CORE 0x0000002D
#define PRODUCT_STORAGE_ENTERPRISE_SERVER_CORE 0x0000002E
#define PRODUCT_STARTER_N 0x0000002F
#define PRODUCT_PROFESSIONAL 0x00000030
#define PRODUCT_PROFESSIONAL_N 0x00000031
#define PRODUCT_SB_SOLUTION_SERVER 0x00000032
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS 0x00000033
#define PRODUCT_STANDARD_SERVER_SOLUTIONS 0x00000034
#define PRODUCT_STANDARD_SERVER_SOLUTIONS_CORE 0x00000035
#define PRODUCT_SB_SOLUTION_SERVER_EM 0x00000036
#define PRODUCT_SERVER_FOR_SB_SOLUTIONS_EM 0x00000037
#define PRODUCT_SOLUTION_EMBEDDEDSERVER 0x00000038
#define PRODUCT_SOLUTION_EMBEDDEDSERVER_CORE 0x00000039
#define PRODUCT_PROFESSIONAL_EMBEDDED 0x0000003A
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMT 0x0000003B
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDL 0x0000003C
#define PRODUCT_ESSENTIALBUSINESS_SERVER_MGMTSVC 0x0000003D
#define PRODUCT_ESSENTIALBUSINESS_SERVER_ADDLSVC 0x0000003E
#define PRODUCT_SMALLBUSINESS_SERVER_PREMIUM_CORE 0x0000003F
#define PRODUCT_CLUSTER_SERVER_V 0x00000040
#define PRODUCT_EMBEDDED 0x00000041
#define PRODUCT_STARTER_E 0x00000042
#define PRODUCT_HOME_BASIC_E 0x00000043
#define PRODUCT_HOME_PREMIUM_E 0x00000044
#define PRODUCT_PROFESSIONAL_E 0x00000045
#define PRODUCT_ENTERPRISE_E 0x00000046
#define PRODUCT_ULTIMATE_E 0x00000047
#define PRODUCT_ENTERPRISE_EVALUATION 0x00000048
#define PRODUCT_MULTIPOINT_STANDARD_SERVER 0x0000004C
#define PRODUCT_MULTIPOINT_PREMIUM_SERVER 0x0000004D
#define PRODUCT_STANDARD_EVALUATION_SERVER 0x0000004F
#define PRODUCT_DATACENTER_EVALUATION_SERVER 0x00000050
#define PRODUCT_ENTERPRISE_N_EVALUATION 0x00000054
#define PRODUCT_EMBEDDED_AUTOMOTIVE 0x00000055
#define PRODUCT_EMBEDDED_INDUSTRY_A 0x00000056
#define PRODUCT_THINPC 0x00000057
#define PRODUCT_EMBEDDED_A 0x00000058
#define PRODUCT_EMBEDDED_INDUSTRY 0x00000059
#define PRODUCT_EMBEDDED_E 0x0000005A
#define PRODUCT_EMBEDDED_INDUSTRY_E 0x0000005B
#define PRODUCT_EMBEDDED_INDUSTRY_A_E 0x0000005C
#define PRODUCT_STORAGE_WORKGROUP_EVALUATION_SERVER 0x0000005F
#define PRODUCT_STORAGE_STANDARD_EVALUATION_SERVER 0x00000060
#define PRODUCT_CORE_ARM 0x00000061
#define PRODUCT_CORE_N 0x00000062
#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
#define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
#define PRODUCT_CORE 0x00000065
#define PRODUCT_PROFESSIONAL_WMC 0x00000067
#define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
#define PRODUCT_EMBEDDED_EVAL 0x0000006B
#define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
#define PRODUCT_NANO_SERVER 0x0000006D
#define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
#define PRODUCT_CORE_CONNECTED 0x0000006F
#define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
#define PRODUCT_CORE_CONNECTED_N 0x00000071
#define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074
#define PRODUCT_CONNECTED_CAR 0x00000075
#define PRODUCT_INDUSTRY_HANDHELD 0x00000076
#define PRODUCT_PPI_PRO 0x00000077
#define PRODUCT_ARM64_SERVER 0x00000078
#define PRODUCT_EDUCATION 0x00000079
#define PRODUCT_EDUCATION_N 0x0000007A
#define PRODUCT_IOTUAP 0x0000007B
#define PRODUCT_CLOUD_HOST_INFRASTRUCTURE_SERVER 0x0000007C
#define PRODUCT_ENTERPRISE_S 0x0000007D
#define PRODUCT_ENTERPRISE_S_N 0x0000007E
#define PRODUCT_PROFESSIONAL_S 0x0000007F
#define PRODUCT_PROFESSIONAL_S_N 0x00000080
#define PRODUCT_ENTERPRISE_S_EVALUATION 0x00000081
#define PRODUCT_ENTERPRISE_S_N_EVALUATION 0x00000082
#define PRODUCT_HOLOGRAPHIC 0x00000087
#define PRODUCT_PRO_SINGLE_LANGUAGE 0x0000008A
#define PRODUCT_PRO_CHINA 0x0000008B
#define PRODUCT_ENTERPRISE_SUBSCRIPTION 0x0000008C
#define PRODUCT_ENTERPRISE_SUBSCRIPTION_N 0x0000008D
#define PRODUCT_DATACENTER_NANO_SERVER 0x0000008F
#define PRODUCT_STANDARD_NANO_SERVER 0x00000090
#define PRODUCT_DATACENTER_A_SERVER_CORE 0x00000091
#define PRODUCT_STANDARD_A_SERVER_CORE 0x00000092
#define PRODUCT_DATACENTER_WS_SERVER_CORE 0x00000093
#define PRODUCT_STANDARD_WS_SERVER_CORE 0x00000094
#define PRODUCT_UTILITY_VM 0x00000095
#define PRODUCT_DATACENTER_EVALUATION_SERVER_CORE 0x0000009F
#define PRODUCT_STANDARD_EVALUATION_SERVER_CORE 0x000000A0
#define PRODUCT_PRO_WORKSTATION 0x000000A1
#define PRODUCT_PRO_WORKSTATION_N 0x000000A2
#define PRODUCT_PRO_FOR_EDUCATION 0x000000A4
#define PRODUCT_PRO_FOR_EDUCATION_N 0x000000A5
#define PRODUCT_AZURE_SERVER_CORE 0x000000A8
#define PRODUCT_AZURE_NANO_SERVER 0x000000A9
#define PRODUCT_ENTERPRISEG 0x000000AB
#define PRODUCT_ENTERPRISEGN 0x000000AC
#define PRODUCT_SERVERRDSH 0x000000AF
#define PRODUCT_CLOUD 0x000000B2
#define PRODUCT_CLOUDN 0x000000B3
#define PRODUCT_HUBOS 0x000000B4
#define PRODUCT_ONECOREUPDATEOS 0x000000B6
#define PRODUCT_CLOUDE 0x000000B7
#define PRODUCT_ANDROMEDA 0x000000B8
#define PRODUCT_IOTOS 0x000000B9
#define PRODUCT_CLOUDEN 0x000000BA
#define PRODUCT_UNLICENSED 0xABCDABCD
#include <sdkddkver.h>
#define LANG_NEUTRAL 0x00
#define LANG_INVARIANT 0x7f
#define LANG_AFRIKAANS 0x36
#define LANG_ALBANIAN 0x1c
#define LANG_ALSATIAN 0x84
#define LANG_AMHARIC 0x5e
#define LANG_ARABIC 0x01
#define LANG_ARMENIAN 0x2b
#define LANG_ASSAMESE 0x4d
#define LANG_AZERI 0x2c // for Azerbaijani, LANG_AZERBAIJANI is preferred
#define LANG_AZERBAIJANI 0x2c
#define LANG_BANGLA 0x45
#define LANG_BASHKIR 0x6d
#define LANG_BASQUE 0x2d
#define LANG_BELARUSIAN 0x23
#define LANG_BENGALI 0x45 // Some prefer to use LANG_BANGLA
#define LANG_BRETON 0x7e
#define LANG_BOSNIAN 0x1a // Use with SUBLANG_BOSNIAN_* Sublanguage IDs
#define LANG_BOSNIAN_NEUTRAL 0x781a // Use with the ConvertDefaultLocale function
#define LANG_BULGARIAN 0x02
#define LANG_CATALAN 0x03
#define LANG_CENTRAL_KURDISH 0x92
#define LANG_CHEROKEE 0x5c
#define LANG_CHINESE 0x04 // Use with SUBLANG_CHINESE_* Sublanguage IDs
#define LANG_CHINESE_SIMPLIFIED 0x04 // Use with the ConvertDefaultLocale function
#define LANG_CHINESE_TRADITIONAL 0x7c04 // Use with the ConvertDefaultLocale function
#define LANG_CORSICAN 0x83
#define LANG_CROATIAN 0x1a
#define LANG_CZECH 0x05
#define LANG_DANISH 0x06
#define LANG_DARI 0x8c
#define LANG_DIVEHI 0x65
#define LANG_DUTCH 0x13
#define LANG_ENGLISH 0x09
#define LANG_ESTONIAN 0x25
#define LANG_FAEROESE 0x38
#define LANG_FARSI 0x29 // Deprecated: use LANG_PERSIAN instead
#define LANG_FILIPINO 0x64
#define LANG_FINNISH 0x0b
#define LANG_FRENCH 0x0c
#define LANG_FRISIAN 0x62
#define LANG_FULAH 0x67
#define LANG_GALICIAN 0x56
#define LANG_GEORGIAN 0x37
#define LANG_GERMAN 0x07
#define LANG_GREEK 0x08
#define LANG_GREENLANDIC 0x6f
#define LANG_GUJARATI 0x47
#define LANG_HAUSA 0x68
#define LANG_HAWAIIAN 0x75
#define LANG_HEBREW 0x0d
#define LANG_HINDI 0x39
#define LANG_HUNGARIAN 0x0e
#define LANG_ICELANDIC 0x0f
#define LANG_IGBO 0x70
#define LANG_INDONESIAN 0x21
#define LANG_INUKTITUT 0x5d
#define LANG_IRISH 0x3c // Use with the SUBLANG_IRISH_IRELAND Sublanguage ID
#define LANG_ITALIAN 0x10
#define LANG_JAPANESE 0x11
#define LANG_KANNADA 0x4b
#define LANG_KASHMIRI 0x60
#define LANG_KAZAK 0x3f
#define LANG_KHMER 0x53
#define LANG_KICHE 0x86
#define LANG_KINYARWANDA 0x87
#define LANG_KONKANI 0x57
#define LANG_KOREAN 0x12
#define LANG_KYRGYZ 0x40
#define LANG_LAO 0x54
#define LANG_LATVIAN 0x26
#define LANG_LITHUANIAN 0x27
#define LANG_LOWER_SORBIAN 0x2e
#define LANG_LUXEMBOURGISH 0x6e
#define LANG_MACEDONIAN 0x2f // the Former Yugoslav Republic of Macedonia
#define LANG_MALAY 0x3e
#define LANG_MALAYALAM 0x4c
#define LANG_MALTESE 0x3a
#define LANG_MANIPURI 0x58
#define LANG_MAORI 0x81
#define LANG_MAPUDUNGUN 0x7a
#define LANG_MARATHI 0x4e
#define LANG_MOHAWK 0x7c
#define LANG_MONGOLIAN 0x50
#define LANG_NEPALI 0x61
#define LANG_NORWEGIAN 0x14
#define LANG_OCCITAN 0x82
#define LANG_ODIA 0x48
#define LANG_ORIYA 0x48 // Deprecated: use LANG_ODIA, instead.
#define LANG_PASHTO 0x63
#define LANG_PERSIAN 0x29
#define LANG_POLISH 0x15
#define LANG_PORTUGUESE 0x16
#define LANG_PULAR 0x67 // Deprecated: use LANG_FULAH instead
#define LANG_PUNJABI 0x46
#define LANG_QUECHUA 0x6b
#define LANG_ROMANIAN 0x18
#define LANG_ROMANSH 0x17
#define LANG_RUSSIAN 0x19
#define LANG_SAKHA 0x85
#define LANG_SAMI 0x3b
#define LANG_SANSKRIT 0x4f
#define LANG_SCOTTISH_GAELIC 0x91
#define LANG_SERBIAN 0x1a // Use with the SUBLANG_SERBIAN_* Sublanguage IDs
#define LANG_SERBIAN_NEUTRAL 0x7c1a // Use with the ConvertDefaultLocale function
#define LANG_SINDHI 0x59
#define LANG_SINHALESE 0x5b
#define LANG_SLOVAK 0x1b
#define LANG_SLOVENIAN 0x24
#define LANG_SOTHO 0x6c
#define LANG_SPANISH 0x0a
#define LANG_SWAHILI 0x41
#define LANG_SWEDISH 0x1d
#define LANG_SYRIAC 0x5a
#define LANG_TAJIK 0x28
#define LANG_TAMAZIGHT 0x5f
#define LANG_TAMIL 0x49
#define LANG_TATAR 0x44
#define LANG_TELUGU 0x4a
#define LANG_THAI 0x1e
#define LANG_TIBETAN 0x51
#define LANG_TIGRIGNA 0x73
#define LANG_TIGRINYA 0x73 // Preferred spelling in locale
#define LANG_TSWANA 0x32
#define LANG_TURKISH 0x1f
#define LANG_TURKMEN 0x42
#define LANG_UIGHUR 0x80
#define LANG_UKRAINIAN 0x22
#define LANG_UPPER_SORBIAN 0x2e
#define LANG_URDU 0x20
#define LANG_UZBEK 0x43
#define LANG_VALENCIAN 0x03
#define LANG_VIETNAMESE 0x2a
#define LANG_WELSH 0x52
#define LANG_WOLOF 0x88
#define LANG_XHOSA 0x34
#define LANG_YAKUT 0x85 // Deprecated: use LANG_SAKHA,instead
#define LANG_YI 0x78
#define LANG_YORUBA 0x6a
#define LANG_ZULU 0x35
#define SUBLANG_NEUTRAL 0x00 // language neutral
#define SUBLANG_DEFAULT 0x01 // user default
#define SUBLANG_SYS_DEFAULT 0x02 // system default
#define SUBLANG_CUSTOM_DEFAULT 0x03 // default custom language/locale
#define SUBLANG_CUSTOM_UNSPECIFIED 0x04 // custom language/locale
#define SUBLANG_UI_CUSTOM_DEFAULT 0x05 // Default custom MUI language/locale
#define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 // Afrikaans (South Africa) 0x0436 af-ZA
#define SUBLANG_ALBANIAN_ALBANIA 0x01 // Albanian (Albania) 0x041c sq-AL
#define SUBLANG_ALSATIAN_FRANCE 0x01 // Alsatian (France) 0x0484
#define SUBLANG_AMHARIC_ETHIOPIA 0x01 // Amharic (Ethiopia) 0x045e
#define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 // Arabic (Saudi Arabia)
#define SUBLANG_ARABIC_IRAQ 0x02 // Arabic (Iraq)
#define SUBLANG_ARABIC_EGYPT 0x03 // Arabic (Egypt)
#define SUBLANG_ARABIC_LIBYA 0x04 // Arabic (Libya)
#define SUBLANG_ARABIC_ALGERIA 0x05 // Arabic (Algeria)
#define SUBLANG_ARABIC_MOROCCO 0x06 // Arabic (Morocco)
#define SUBLANG_ARABIC_TUNISIA 0x07 // Arabic (Tunisia)
#define SUBLANG_ARABIC_OMAN 0x08 // Arabic (Oman)
#define SUBLANG_ARABIC_YEMEN 0x09 // Arabic (Yemen)
#define SUBLANG_ARABIC_SYRIA 0x0a // Arabic (Syria)
#define SUBLANG_ARABIC_JORDAN 0x0b // Arabic (Jordan)
#define SUBLANG_ARABIC_LEBANON 0x0c // Arabic (Lebanon)
#define SUBLANG_ARABIC_KUWAIT 0x0d // Arabic (Kuwait)
#define SUBLANG_ARABIC_UAE 0x0e // Arabic (U.A.E)
#define SUBLANG_ARABIC_BAHRAIN 0x0f // Arabic (Bahrain)
#define SUBLANG_ARABIC_QATAR 0x10 // Arabic (Qatar)
#define SUBLANG_ARMENIAN_ARMENIA 0x01 // Armenian (Armenia) 0x042b hy-AM
#define SUBLANG_ASSAMESE_INDIA 0x01 // Assamese (India) 0x044d
#define SUBLANG_AZERI_LATIN 0x01 // Azeri (Latin) - for Azerbaijani, SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN preferred
#define SUBLANG_AZERI_CYRILLIC 0x02 // Azeri (Cyrillic) - for Azerbaijani, SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC preferred
#define SUBLANG_AZERBAIJANI_AZERBAIJAN_LATIN 0x01 // Azerbaijani (Azerbaijan, Latin)
#define SUBLANG_AZERBAIJANI_AZERBAIJAN_CYRILLIC 0x02 // Azerbaijani (Azerbaijan, Cyrillic)
#define SUBLANG_BANGLA_INDIA 0x01 // Bangla (India)
#define SUBLANG_BANGLA_BANGLADESH 0x02 // Bangla (Bangladesh)
#define SUBLANG_BASHKIR_RUSSIA 0x01 // Bashkir (Russia) 0x046d ba-RU
#define SUBLANG_BASQUE_BASQUE 0x01 // Basque (Basque) 0x042d eu-ES
#define SUBLANG_BELARUSIAN_BELARUS 0x01 // Belarusian (Belarus) 0x0423 be-BY
#define SUBLANG_BENGALI_INDIA 0x01 // Bengali (India) - Note some prefer SUBLANG_BANGLA_INDIA
#define SUBLANG_BENGALI_BANGLADESH 0x02 // Bengali (Bangladesh) - Note some prefer SUBLANG_BANGLA_BANGLADESH
#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 // Bosnian (Bosnia and Herzegovina - Latin) 0x141a bs-BA-Latn
#define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 // Bosnian (Bosnia and Herzegovina - Cyrillic) 0x201a bs-BA-Cyrl
#define SUBLANG_BRETON_FRANCE 0x01 // Breton (France) 0x047e
#define SUBLANG_BULGARIAN_BULGARIA 0x01 // Bulgarian (Bulgaria) 0x0402
#define SUBLANG_CATALAN_CATALAN 0x01 // Catalan (Catalan) 0x0403
#define SUBLANG_CENTRAL_KURDISH_IRAQ 0x01 // Central Kurdish (Iraq) 0x0492 ku-Arab-IQ
#define SUBLANG_CHEROKEE_CHEROKEE 0x01 // Cherokee (Cherokee) 0x045c chr-Cher-US
#define SUBLANG_CHINESE_TRADITIONAL 0x01 // Chinese (Taiwan) 0x0404 zh-TW
#define SUBLANG_CHINESE_SIMPLIFIED 0x02 // Chinese (PR China) 0x0804 zh-CN
#define SUBLANG_CHINESE_HONGKONG 0x03 // Chinese (Hong Kong S.A.R., P.R.C.) 0x0c04 zh-HK
#define SUBLANG_CHINESE_SINGAPORE 0x04 // Chinese (Singapore) 0x1004 zh-SG
#define SUBLANG_CHINESE_MACAU 0x05 // Chinese (Macau S.A.R.) 0x1404 zh-MO
#define SUBLANG_CORSICAN_FRANCE 0x01 // Corsican (France) 0x0483
#define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 // Czech (Czech Republic) 0x0405
#define SUBLANG_CROATIAN_CROATIA 0x01 // Croatian (Croatia)
#define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 // Croatian (Bosnia and Herzegovina - Latin) 0x101a hr-BA
#define SUBLANG_DANISH_DENMARK 0x01 // Danish (Denmark) 0x0406
#define SUBLANG_DARI_AFGHANISTAN 0x01 // Dari (Afghanistan)
#define SUBLANG_DIVEHI_MALDIVES 0x01 // Divehi (Maldives) 0x0465 div-MV
#define SUBLANG_DUTCH 0x01 // Dutch
#define SUBLANG_DUTCH_BELGIAN 0x02 // Dutch (Belgian)
#define SUBLANG_ENGLISH_US 0x01 // English (USA)
#define SUBLANG_ENGLISH_UK 0x02 // English (UK)
#define SUBLANG_ENGLISH_AUS 0x03 // English (Australian)
#define SUBLANG_ENGLISH_CAN 0x04 // English (Canadian)
#define SUBLANG_ENGLISH_NZ 0x05 // English (New Zealand)
#define SUBLANG_ENGLISH_EIRE 0x06 // English (Irish)
#define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 // English (South Africa)
#define SUBLANG_ENGLISH_JAMAICA 0x08 // English (Jamaica)
#define SUBLANG_ENGLISH_CARIBBEAN 0x09 // English (Caribbean)
#define SUBLANG_ENGLISH_BELIZE 0x0a // English (Belize)
#define SUBLANG_ENGLISH_TRINIDAD 0x0b // English (Trinidad)
#define SUBLANG_ENGLISH_ZIMBABWE 0x0c // English (Zimbabwe)
#define SUBLANG_ENGLISH_PHILIPPINES 0x0d // English (Philippines)
#define SUBLANG_ENGLISH_INDIA 0x10 // English (India)
#define SUBLANG_ENGLISH_MALAYSIA 0x11 // English (Malaysia)
#define SUBLANG_ENGLISH_SINGAPORE 0x12 // English (Singapore)
#define SUBLANG_ESTONIAN_ESTONIA 0x01 // Estonian (Estonia) 0x0425 et-EE
#define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 // Faroese (Faroe Islands) 0x0438 fo-FO
#define SUBLANG_FILIPINO_PHILIPPINES 0x01 // Filipino (Philippines) 0x0464 fil-PH
#define SUBLANG_FINNISH_FINLAND 0x01 // Finnish (Finland) 0x040b
#define SUBLANG_FRENCH 0x01 // French
#define SUBLANG_FRENCH_BELGIAN 0x02 // French (Belgian)
#define SUBLANG_FRENCH_CANADIAN 0x03 // French (Canadian)
#define SUBLANG_FRENCH_SWISS 0x04 // French (Swiss)
#define SUBLANG_FRENCH_LUXEMBOURG 0x05 // French (Luxembourg)
#define SUBLANG_FRENCH_MONACO 0x06 // French (Monaco)
#define SUBLANG_FRISIAN_NETHERLANDS 0x01 // Frisian (Netherlands) 0x0462 fy-NL
#define SUBLANG_FULAH_SENEGAL 0x02 // Fulah (Senegal) 0x0867 ff-SN
#define SUBLANG_GALICIAN_GALICIAN 0x01 // Galician (Galician) 0x0456 gl-ES
#define SUBLANG_GEORGIAN_GEORGIA 0x01 // Georgian (Georgia) 0x0437 ka-GE
#define SUBLANG_GERMAN 0x01 // German
#define SUBLANG_GERMAN_SWISS 0x02 // German (Swiss)
#define SUBLANG_GERMAN_AUSTRIAN 0x03 // German (Austrian)
#define SUBLANG_GERMAN_LUXEMBOURG 0x04 // German (Luxembourg)
#define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 // German (Liechtenstein)
#define SUBLANG_GREEK_GREECE 0x01 // Greek (Greece)
#define SUBLANG_GREENLANDIC_GREENLAND 0x01 // Greenlandic (Greenland) 0x046f kl-GL
#define SUBLANG_GUJARATI_INDIA 0x01 // Gujarati (India (Gujarati Script)) 0x0447 gu-IN
#define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 // Hausa (Latin, Nigeria) 0x0468 ha-NG-Latn
#define SUBLANG_HAWAIIAN_US 0x01 // Hawiian (US) 0x0475 haw-US
#define SUBLANG_HEBREW_ISRAEL 0x01 // Hebrew (Israel) 0x040d
#define SUBLANG_HINDI_INDIA 0x01 // Hindi (India) 0x0439 hi-IN
#define SUBLANG_HUNGARIAN_HUNGARY 0x01 // Hungarian (Hungary) 0x040e
#define SUBLANG_ICELANDIC_ICELAND 0x01 // Icelandic (Iceland) 0x040f
#define SUBLANG_IGBO_NIGERIA 0x01 // Igbo (Nigeria) 0x0470 ig-NG
#define SUBLANG_INDONESIAN_INDONESIA 0x01 // Indonesian (Indonesia) 0x0421 id-ID
#define SUBLANG_INUKTITUT_CANADA 0x01 // Inuktitut (Syllabics) (Canada) 0x045d iu-CA-Cans
#define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 // Inuktitut (Canada - Latin)
#define SUBLANG_IRISH_IRELAND 0x02 // Irish (Ireland)
#define SUBLANG_ITALIAN 0x01 // Italian
#define SUBLANG_ITALIAN_SWISS 0x02 // Italian (Swiss)
#define SUBLANG_JAPANESE_JAPAN 0x01 // Japanese (Japan) 0x0411
#define SUBLANG_KANNADA_INDIA 0x01 // Kannada (India (Kannada Script)) 0x044b kn-IN
#define SUBLANG_KASHMIRI_SASIA 0x02 // Kashmiri (South Asia)
#define SUBLANG_KASHMIRI_INDIA 0x02 // For app compatibility only
#define SUBLANG_KAZAK_KAZAKHSTAN 0x01 // Kazakh (Kazakhstan) 0x043f kk-KZ
#define SUBLANG_KHMER_CAMBODIA 0x01 // Khmer (Cambodia) 0x0453 kh-KH
#define SUBLANG_KICHE_GUATEMALA 0x01 // K'iche (Guatemala)
#define SUBLANG_KINYARWANDA_RWANDA 0x01 // Kinyarwanda (Rwanda) 0x0487 rw-RW
#define SUBLANG_KONKANI_INDIA 0x01 // Konkani (India) 0x0457 kok-IN
#define SUBLANG_KOREAN 0x01 // Korean (Extended Wansung)
#define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 // Kyrgyz (Kyrgyzstan) 0x0440 ky-KG
#define SUBLANG_LAO_LAO 0x01 // Lao (Lao PDR) 0x0454 lo-LA
#define SUBLANG_LATVIAN_LATVIA 0x01 // Latvian (Latvia) 0x0426 lv-LV
#define SUBLANG_LITHUANIAN 0x01 // Lithuanian
#define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 // Lower Sorbian (Germany) 0x082e wee-DE
#define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 // Luxembourgish (Luxembourg) 0x046e lb-LU
#define SUBLANG_MACEDONIAN_MACEDONIA 0x01 // Macedonian (Macedonia (FYROM)) 0x042f mk-MK
#define SUBLANG_MALAY_MALAYSIA 0x01 // Malay (Malaysia)
#define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 // Malay (Brunei Darussalam)
#define SUBLANG_MALAYALAM_INDIA 0x01 // Malayalam (India (Malayalam Script) ) 0x044c ml-IN
#define SUBLANG_MALTESE_MALTA 0x01 // Maltese (Malta) 0x043a mt-MT
#define SUBLANG_MAORI_NEW_ZEALAND 0x01 // Maori (New Zealand) 0x0481 mi-NZ
#define SUBLANG_MAPUDUNGUN_CHILE 0x01 // Mapudungun (Chile) 0x047a arn-CL
#define SUBLANG_MARATHI_INDIA 0x01 // Marathi (India) 0x044e mr-IN
#define SUBLANG_MOHAWK_MOHAWK 0x01 // Mohawk (Mohawk) 0x047c moh-CA
#define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 // Mongolian (Cyrillic, Mongolia)
#define SUBLANG_MONGOLIAN_PRC 0x02 // Mongolian (PRC)
#define SUBLANG_NEPALI_INDIA 0x02 // Nepali (India)
#define SUBLANG_NEPALI_NEPAL 0x01 // Nepali (Nepal) 0x0461 ne-NP
#define SUBLANG_NORWEGIAN_BOKMAL 0x01 // Norwegian (Bokmal)
#define SUBLANG_NORWEGIAN_NYNORSK 0x02 // Norwegian (Nynorsk)
#define SUBLANG_OCCITAN_FRANCE 0x01 // Occitan (France) 0x0482 oc-FR
#define SUBLANG_ODIA_INDIA 0x01 // Odia (India (Odia Script)) 0x0448 or-IN
#define SUBLANG_ORIYA_INDIA 0x01 // Deprecated: use SUBLANG_ODIA_INDIA instead
#define SUBLANG_PASHTO_AFGHANISTAN 0x01 // Pashto (Afghanistan)
#define SUBLANG_PERSIAN_IRAN 0x01 // Persian (Iran) 0x0429 fa-IR
#define SUBLANG_POLISH_POLAND 0x01 // Polish (Poland) 0x0415
#define SUBLANG_PORTUGUESE 0x02 // Portuguese
#define SUBLANG_PORTUGUESE_BRAZILIAN 0x01 // Portuguese (Brazil)
#define SUBLANG_PULAR_SENEGAL 0x02 // Deprecated: Use SUBLANG_FULAH_SENEGAL instead
#define SUBLANG_PUNJABI_INDIA 0x01 // Punjabi (India (Gurmukhi Script)) 0x0446 pa-IN
#define SUBLANG_PUNJABI_PAKISTAN 0x02 // Punjabi (Pakistan (Arabic Script)) 0x0846 pa-Arab-PK
#define SUBLANG_QUECHUA_BOLIVIA 0x01 // Quechua (Bolivia)
#define SUBLANG_QUECHUA_ECUADOR 0x02 // Quechua (Ecuador)
#define SUBLANG_QUECHUA_PERU 0x03 // Quechua (Peru)
#define SUBLANG_ROMANIAN_ROMANIA 0x01 // Romanian (Romania) 0x0418
#define SUBLANG_ROMANSH_SWITZERLAND 0x01 // Romansh (Switzerland) 0x0417 rm-CH
#define SUBLANG_RUSSIAN_RUSSIA 0x01 // Russian (Russia) 0x0419
#define SUBLANG_SAKHA_RUSSIA 0x01 // Sakha (Russia) 0x0485 sah-RU
#define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 // Northern Sami (Norway)
#define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 // Northern Sami (Sweden)
#define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 // Northern Sami (Finland)
#define SUBLANG_SAMI_LULE_NORWAY 0x04 // Lule Sami (Norway)
#define SUBLANG_SAMI_LULE_SWEDEN 0x05 // Lule Sami (Sweden)
#define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 // Southern Sami (Norway)
#define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 // Southern Sami (Sweden)
#define SUBLANG_SAMI_SKOLT_FINLAND 0x08 // Skolt Sami (Finland)
#define SUBLANG_SAMI_INARI_FINLAND 0x09 // Inari Sami (Finland)
#define SUBLANG_SANSKRIT_INDIA 0x01 // Sanskrit (India) 0x044f sa-IN
#define SUBLANG_SCOTTISH_GAELIC 0x01 // Scottish Gaelic (United Kingdom) 0x0491 gd-GB
#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN 0x06 // Serbian (Bosnia and Herzegovina - Latin)
#define SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x07 // Serbian (Bosnia and Herzegovina - Cyrillic)
#define SUBLANG_SERBIAN_MONTENEGRO_LATIN 0x0b // Serbian (Montenegro - Latn)
#define SUBLANG_SERBIAN_MONTENEGRO_CYRILLIC 0x0c // Serbian (Montenegro - Cyrillic)
#define SUBLANG_SERBIAN_SERBIA_LATIN 0x09 // Serbian (Serbia - Latin)
#define SUBLANG_SERBIAN_SERBIA_CYRILLIC 0x0a // Serbian (Serbia - Cyrillic)
#define SUBLANG_SERBIAN_CROATIA 0x01 // Croatian (Croatia) 0x041a hr-HR
#define SUBLANG_SERBIAN_LATIN 0x02 // Serbian (Latin)
#define SUBLANG_SERBIAN_CYRILLIC 0x03 // Serbian (Cyrillic)
#define SUBLANG_SINDHI_INDIA 0x01 // Sindhi (India) reserved 0x0459
#define SUBLANG_SINDHI_PAKISTAN 0x02 // Sindhi (Pakistan) 0x0859 sd-Arab-PK
#define SUBLANG_SINDHI_AFGHANISTAN 0x02 // For app compatibility only
#define SUBLANG_SINHALESE_SRI_LANKA 0x01 // Sinhalese (Sri Lanka)
#define SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA 0x01 // Northern Sotho (South Africa)
#define SUBLANG_SLOVAK_SLOVAKIA 0x01 // Slovak (Slovakia) 0x041b sk-SK
#define SUBLANG_SLOVENIAN_SLOVENIA 0x01 // Slovenian (Slovenia) 0x0424 sl-SI
#define SUBLANG_SPANISH 0x01 // Spanish (Castilian)
#define SUBLANG_SPANISH_MEXICAN 0x02 // Spanish (Mexico)
#define SUBLANG_SPANISH_MODERN 0x03 // Spanish (Modern)
#define SUBLANG_SPANISH_GUATEMALA 0x04 // Spanish (Guatemala)
#define SUBLANG_SPANISH_COSTA_RICA 0x05 // Spanish (Costa Rica)
#define SUBLANG_SPANISH_PANAMA 0x06 // Spanish (Panama)
#define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 // Spanish (Dominican Republic)
#define SUBLANG_SPANISH_VENEZUELA 0x08 // Spanish (Venezuela)
#define SUBLANG_SPANISH_COLOMBIA 0x09 // Spanish (Colombia)
#define SUBLANG_SPANISH_PERU 0x0a // Spanish (Peru)
#define SUBLANG_SPANISH_ARGENTINA 0x0b // Spanish (Argentina)
#define SUBLANG_SPANISH_ECUADOR 0x0c // Spanish (Ecuador)
#define SUBLANG_SPANISH_CHILE 0x0d // Spanish (Chile)
#define SUBLANG_SPANISH_URUGUAY 0x0e // Spanish (Uruguay)
#define SUBLANG_SPANISH_PARAGUAY 0x0f // Spanish (Paraguay)
#define SUBLANG_SPANISH_BOLIVIA 0x10 // Spanish (Bolivia)
#define SUBLANG_SPANISH_EL_SALVADOR 0x11 // Spanish (El Salvador)
#define SUBLANG_SPANISH_HONDURAS 0x12 // Spanish (Honduras)
#define SUBLANG_SPANISH_NICARAGUA 0x13 // Spanish (Nicaragua)
#define SUBLANG_SPANISH_PUERTO_RICO 0x14 // Spanish (Puerto Rico)
#define SUBLANG_SPANISH_US 0x15 // Spanish (United States)
#define SUBLANG_SWAHILI_KENYA 0x01 // Swahili (Kenya) 0x0441 sw-KE
#define SUBLANG_SWEDISH 0x01 // Swedish
#define SUBLANG_SWEDISH_FINLAND 0x02 // Swedish (Finland)
#define SUBLANG_SYRIAC_SYRIA 0x01 // Syriac (Syria) 0x045a syr-SY
#define SUBLANG_TAJIK_TAJIKISTAN 0x01 // Tajik (Tajikistan) 0x0428 tg-TJ-Cyrl
#define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 // Tamazight (Latin, Algeria) 0x085f tzm-Latn-DZ
#define SUBLANG_TAMAZIGHT_MOROCCO_TIFINAGH 0x04 // Tamazight (Tifinagh) 0x105f tzm-Tfng-MA
#define SUBLANG_TAMIL_INDIA 0x01 // Tamil (India)
#define SUBLANG_TAMIL_SRI_LANKA 0x02 // Tamil (Sri Lanka) 0x0849 ta-LK
#define SUBLANG_TATAR_RUSSIA 0x01 // Tatar (Russia) 0x0444 tt-RU
#define SUBLANG_TELUGU_INDIA 0x01 // Telugu (India (Telugu Script)) 0x044a te-IN
#define SUBLANG_THAI_THAILAND 0x01 // Thai (Thailand) 0x041e th-TH
#define SUBLANG_TIBETAN_PRC 0x01 // Tibetan (PRC)
#define SUBLANG_TIGRIGNA_ERITREA 0x02 // Tigrigna (Eritrea)
#define SUBLANG_TIGRINYA_ERITREA 0x02 // Tigrinya (Eritrea) 0x0873 ti-ER (preferred spelling)
#define SUBLANG_TIGRINYA_ETHIOPIA 0x01 // Tigrinya (Ethiopia) 0x0473 ti-ET
#define SUBLANG_TSWANA_BOTSWANA 0x02 // Setswana / Tswana (Botswana) 0x0832 tn-BW
#define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 // Setswana / Tswana (South Africa) 0x0432 tn-ZA
#define SUBLANG_TURKISH_TURKEY 0x01 // Turkish (Turkey) 0x041f tr-TR
#define SUBLANG_TURKMEN_TURKMENISTAN 0x01 // Turkmen (Turkmenistan) 0x0442 tk-TM
#define SUBLANG_UIGHUR_PRC 0x01 // Uighur (PRC) 0x0480 ug-CN
#define SUBLANG_UKRAINIAN_UKRAINE 0x01 // Ukrainian (Ukraine) 0x0422 uk-UA
#define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 // Upper Sorbian (Germany) 0x042e wen-DE
#define SUBLANG_URDU_PAKISTAN 0x01 // Urdu (Pakistan)
#define SUBLANG_URDU_INDIA 0x02 // Urdu (India)
#define SUBLANG_UZBEK_LATIN 0x01 // Uzbek (Latin)
#define SUBLANG_UZBEK_CYRILLIC 0x02 // Uzbek (Cyrillic)
#define SUBLANG_VALENCIAN_VALENCIA 0x02 // Valencian (Valencia) 0x0803 ca-ES-Valencia
#define SUBLANG_VIETNAMESE_VIETNAM 0x01 // Vietnamese (Vietnam) 0x042a vi-VN
#define SUBLANG_WELSH_UNITED_KINGDOM 0x01 // Welsh (United Kingdom) 0x0452 cy-GB
#define SUBLANG_WOLOF_SENEGAL 0x01 // Wolof (Senegal)
#define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 // isiXhosa / Xhosa (South Africa) 0x0434 xh-ZA
#define SUBLANG_YAKUT_RUSSIA 0x01 // Deprecated: use SUBLANG_SAKHA_RUSSIA instead
#define SUBLANG_YI_PRC 0x01 // Yi (PRC)) 0x0478
#define SUBLANG_YORUBA_NIGERIA 0x01 // Yoruba (Nigeria) 046a yo-NG
#define SUBLANG_ZULU_SOUTH_AFRICA 0x01 // isiZulu / Zulu (South Africa) 0x0435 zu-ZA
#define SORT_DEFAULT 0x0 // sorting default
#define SORT_INVARIANT_MATH 0x1 // Invariant (Mathematical Symbols)
#define SORT_JAPANESE_XJIS 0x0 // Japanese XJIS order
#define SORT_JAPANESE_UNICODE 0x1 // Japanese Unicode order (no longer supported)
#define SORT_JAPANESE_RADICALSTROKE 0x4 // Japanese radical/stroke order
#define SORT_CHINESE_BIG5 0x0 // Chinese BIG5 order
#define SORT_CHINESE_PRCP 0x0 // PRC Chinese Phonetic order
#define SORT_CHINESE_UNICODE 0x1 // Chinese Unicode order (no longer supported)
#define SORT_CHINESE_PRC 0x2 // PRC Chinese Stroke Count order
#define SORT_CHINESE_BOPOMOFO 0x3 // Traditional Chinese Bopomofo order
#define SORT_CHINESE_RADICALSTROKE 0x4 // Traditional Chinese radical/stroke order.
#define SORT_KOREAN_KSC 0x0 // Korean KSC order
#define SORT_KOREAN_UNICODE 0x1 // Korean Unicode order (no longer supported)
#define SORT_GERMAN_PHONE_BOOK 0x1 // German Phone Book order
#define SORT_HUNGARIAN_DEFAULT 0x0 // Hungarian Default order
#define SORT_HUNGARIAN_TECHNICAL 0x1 // Hungarian Technical order
#define SORT_GEORGIAN_TRADITIONAL 0x0 // Georgian Traditional order
#define SORT_GEORGIAN_MODERN 0x1 // Georgian Modern order
#define MAKELANGID(p, s) ((((WORD )(s)) << 10) | (WORD )(p))
#define PRIMARYLANGID(lgid) ((WORD )(lgid) & 0x3ff)
#define SUBLANGID(lgid) ((WORD )(lgid) >> 10)
#define NLS_VALID_LOCALE_MASK 0x000fffff
#define MAKELCID(lgid, srtid) ((DWORD)((((DWORD)((WORD )(srtid))) << 16) | \
((DWORD)((WORD )(lgid)))))
#define MAKESORTLCID(lgid, srtid, ver) \
((DWORD)((MAKELCID(lgid, srtid)) | \
(((DWORD)((WORD )(ver))) << 20)))
#define LANGIDFROMLCID(lcid) ((WORD )(lcid))
#define SORTIDFROMLCID(lcid) ((WORD )((((DWORD)(lcid)) >> 16) & 0xf))
#define SORTVERSIONFROMLCID(lcid) ((WORD )((((DWORD)(lcid)) >> 20) & 0xf))
#define LOCALE_NAME_MAX_LENGTH 85
#define LANG_SYSTEM_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_SYS_DEFAULT))
#define LANG_USER_DEFAULT (MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT))
#define LOCALE_SYSTEM_DEFAULT (MAKELCID(LANG_SYSTEM_DEFAULT, SORT_DEFAULT))
#define LOCALE_USER_DEFAULT (MAKELCID(LANG_USER_DEFAULT, SORT_DEFAULT))
#define LOCALE_CUSTOM_DEFAULT \
(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_DEFAULT), SORT_DEFAULT))
#define LOCALE_CUSTOM_UNSPECIFIED \
(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_CUSTOM_UNSPECIFIED), SORT_DEFAULT))
#define LOCALE_CUSTOM_UI_DEFAULT \
(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_UI_CUSTOM_DEFAULT), SORT_DEFAULT))
#define LOCALE_NEUTRAL \
(MAKELCID(MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), SORT_DEFAULT))
#define LOCALE_INVARIANT \
(MAKELCID(MAKELANGID(LANG_INVARIANT, SUBLANG_NEUTRAL), SORT_DEFAULT))
#define LOCALE_TRANSIENT_KEYBOARD1 0x2000
#define LOCALE_TRANSIENT_KEYBOARD2 0x2400
#define LOCALE_TRANSIENT_KEYBOARD3 0x2800
#define LOCALE_TRANSIENT_KEYBOARD4 0x2c00
#define LOCALE_UNASSIGNED_LCID LOCALE_CUSTOM_UNSPECIFIED
#if ! defined(lint)
#ifdef _PREFAST_
void _Prefast_unreferenced_parameter_impl_(const char*, ...);
#define UNREFERENCED_PARAMETER(P) _Prefast_unreferenced_parameter_impl_("PREfast", ((void) (P), 0))
#define DBG_UNREFERENCED_PARAMETER(P) _Prefast_unreferenced_parameter_impl_("PREfast", ((void) (P), 0))
#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) _Prefast_unreferenced_parameter_impl_("PREfast", ((void) (V), 0))
#else // _PREFAST_
#define UNREFERENCED_PARAMETER(P) (P)
#define DBG_UNREFERENCED_PARAMETER(P) (P)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
#endif // _PREFAST_
#else // lint
// Note: lint -e530 says don't complain about uninitialized variables for
// this variable. Error 527 has to do with unreachable code.
// -restore restores checking to the -save state
#define UNREFERENCED_PARAMETER(P) \
/*lint -save -e527 -e530 */ \
{ \
(P) = (P); \
} \
/*lint -restore */
#define DBG_UNREFERENCED_PARAMETER(P) \
/*lint -save -e527 -e530 */ \
{ \
(P) = (P); \
} \
/*lint -restore */
#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) \
/*lint -save -e527 -e530 */ \
{ \
(V) = (V); \
} \
/*lint -restore */
#endif // lint
#if (_MSC_VER > 1200)
#define DEFAULT_UNREACHABLE default: __assume(0)
#else
//
// Older compilers do not support __assume(), and there is no other free
// method of eliminating the warning.
//
#define DEFAULT_UNREACHABLE
#endif
#ifdef __cplusplus
extern
"C++"
{
template
<
>
struct
_ENUM_FLAG_INTEGER_FOR_SIZE
;
template
<>
struct
_ENUM_FLAG_INTEGER_FOR_SIZE
<
1
>
{
typedef
;
};
template
<>
struct
_ENUM_FLAG_INTEGER_FOR_SIZE
<
2
>
{
typedef
;
};
template
<>
struct
_ENUM_FLAG_INTEGER_FOR_SIZE
<
4
>
{
typedef
;
};
template
<>
struct
_ENUM_FLAG_INTEGER_FOR_SIZE
<
8
>
{
typedef
;
};
template
<
class
>
struct
{
typedef
typename
_ENUM_FLAG_INTEGER_FOR_SIZE
<
sizeof
(
)>::
;
};
}
#if _MSC_VER >= 1900
#define _ENUM_FLAG_CONSTEXPR constexpr
#else
#define _ENUM_FLAG_CONSTEXPR
#endif
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
extern "C++" { \
inline _ENUM_FLAG_CONSTEXPR ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) | ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) |= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline _ENUM_FLAG_CONSTEXPR ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) & ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) &= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline _ENUM_FLAG_CONSTEXPR ENUMTYPE operator ~ (ENUMTYPE a) throw() { return ENUMTYPE(~((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a)); } \
inline _ENUM_FLAG_CONSTEXPR ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) ^ ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYPE &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) ^= ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)b)); } \
}
#else
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) // NOP, C allows these operators.
#endif
#define COMPILETIME_OR_2FLAGS(a,b) ((UINT)(a)|(UINT)(b))
#define COMPILETIME_OR_3FLAGS(a,b,c) ((UINT)(a)|(UINT)(b)|(UINT)(c))
#define COMPILETIME_OR_4FLAGS(a,b,c,d) ((UINT)(a)|(UINT)(b)|(UINT)(c)|(UINT)(d))
#define COMPILETIME_OR_5FLAGS(a,b,c,d,e) ((UINT)(a)|(UINT)(b)|(UINT)(c)|(UINT)(d)|(UINT)(e))
#define COMPILETIME_OR_6FLAGS(a,b,c,d,e,f) ((UINT)(a)|(UINT)(b)|(UINT)(c)|(UINT)(d)|(UINT)(e)|(UINT)(f))
#ifndef UMDF_USING_NTSTATUS
#ifndef WIN32_NO_STATUS
#define STATUS_WAIT_0 ((DWORD )0x00000000L)
#define STATUS_ABANDONED_WAIT_0 ((DWORD )0x00000080L)
#define STATUS_USER_APC ((DWORD )0x000000C0L)
#define STATUS_TIMEOUT ((DWORD )0x00000102L)
#define STATUS_PENDING ((DWORD )0x00000103L)
#define DBG_EXCEPTION_HANDLED ((DWORD )0x00010001L)
#define DBG_CONTINUE ((DWORD )0x00010002L)
#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
#define STATUS_FATAL_APP_EXIT ((DWORD )0x40000015L)
#define DBG_REPLY_LATER ((DWORD )0x40010001L)
#define DBG_TERMINATE_THREAD ((DWORD )0x40010003L)
#define DBG_TERMINATE_PROCESS ((DWORD )0x40010004L)
#define DBG_CONTROL_C ((DWORD )0x40010005L)
#define DBG_PRINTEXCEPTION_C ((DWORD )0x40010006L)
#define DBG_RIPEXCEPTION ((DWORD )0x40010007L)
#define DBG_CONTROL_BREAK ((DWORD )0x40010008L)
#define DBG_COMMAND_EXCEPTION ((DWORD )0x40010009L)
#define DBG_PRINTEXCEPTION_WIDE_C ((DWORD )0x4001000AL)
#define STATUS_GUARD_PAGE_VIOLATION ((DWORD )0x80000001L)
#define STATUS_DATATYPE_MISALIGNMENT ((DWORD )0x80000002L)
#define STATUS_BREAKPOINT ((DWORD )0x80000003L)
#define STATUS_SINGLE_STEP ((DWORD )0x80000004L)
#define STATUS_LONGJUMP ((DWORD )0x80000026L)
#define STATUS_UNWIND_CONSOLIDATE ((DWORD )0x80000029L)
#define DBG_EXCEPTION_NOT_HANDLED ((DWORD )0x80010001L)
#define STATUS_ACCESS_VIOLATION ((DWORD )0xC0000005L)
#define STATUS_IN_PAGE_ERROR ((DWORD )0xC0000006L)
#define STATUS_INVALID_HANDLE ((DWORD )0xC0000008L)
#define STATUS_INVALID_PARAMETER ((DWORD )0xC000000DL)
#define STATUS_NO_MEMORY ((DWORD )0xC0000017L)
#define STATUS_ILLEGAL_INSTRUCTION ((DWORD )0xC000001DL)
#define STATUS_NONCONTINUABLE_EXCEPTION ((DWORD )0xC0000025L)
#define STATUS_INVALID_DISPOSITION ((DWORD )0xC0000026L)
#define STATUS_ARRAY_BOUNDS_EXCEEDED ((DWORD )0xC000008CL)
#define STATUS_FLOAT_DENORMAL_OPERAND ((DWORD )0xC000008DL)
#define STATUS_FLOAT_DIVIDE_BY_ZERO ((DWORD )0xC000008EL)
#define STATUS_FLOAT_INEXACT_RESULT ((DWORD )0xC000008FL)
#define STATUS_FLOAT_INVALID_OPERATION ((DWORD )0xC0000090L)
#define STATUS_FLOAT_OVERFLOW ((DWORD )0xC0000091L)
#define STATUS_FLOAT_STACK_CHECK ((DWORD )0xC0000092L)
#define STATUS_FLOAT_UNDERFLOW ((DWORD )0xC0000093L)
#define STATUS_INTEGER_DIVIDE_BY_ZERO ((DWORD )0xC0000094L)
#define STATUS_INTEGER_OVERFLOW ((DWORD )0xC0000095L)
#define STATUS_PRIVILEGED_INSTRUCTION ((DWORD )0xC0000096L)
#define STATUS_STACK_OVERFLOW ((DWORD )0xC00000FDL)
#define STATUS_DLL_NOT_FOUND ((DWORD )0xC0000135L)
#define STATUS_ORDINAL_NOT_FOUND ((DWORD )0xC0000138L)
#define STATUS_ENTRYPOINT_NOT_FOUND ((DWORD )0xC0000139L)
#define STATUS_CONTROL_C_EXIT ((DWORD )0xC000013AL)
#define STATUS_DLL_INIT_FAILED ((DWORD )0xC0000142L)
#define STATUS_FLOAT_MULTIPLE_FAULTS ((DWORD )0xC00002B4L)
#define STATUS_FLOAT_MULTIPLE_TRAPS ((DWORD )0xC00002B5L)
#define STATUS_REG_NAT_CONSUMPTION ((DWORD )0xC00002C9L)
#define STATUS_HEAP_CORRUPTION ((DWORD )0xC0000374L)
#define STATUS_STACK_BUFFER_OVERRUN ((DWORD )0xC0000409L)
#define STATUS_INVALID_CRUNTIME_PARAMETER ((DWORD )0xC0000417L)
#define STATUS_ASSERTION_FAILURE ((DWORD )0xC0000420L)
#define STATUS_ENCLAVE_VIOLATION ((DWORD )0xC00004A2L)
#if defined(STATUS_SUCCESS) || (_WIN32_WINNT > 0x0500) || (_WIN32_FUSION >= 0x0100)
#define STATUS_SXS_EARLY_DEACTIVATION ((DWORD )0xC015000FL)
#define STATUS_SXS_INVALID_DEACTIVATION ((DWORD )0xC0150010L)
#endif
#endif
#endif /* UMDF_USING_NTSTATUS */
#define MAXIMUM_WAIT_OBJECTS 64 // Maximum number of wait objects
#define MAXIMUM_SUSPEND_COUNT MAXCHAR // Maximum times thread can be suspended
typedef
;
typedef
*
;
typedef struct DECLSPEC_ALIGN(16) _M128A {
typedef
struct
__declspec
(align(
16
))
{
;
;
}
, *
;
typedef struct DECLSPEC_ALIGN(16) _XSAVE_FORMAT {
typedef
struct
__declspec
(align(
16
))
{
;
;
;
;
;
;
;
;
;
;
;
;
;
[
8
];
#if defined(_WIN64)
M128A XmmRegisters[16];
BYTE Reserved4[96];
#else
[
8
];
[
224
];
#endif
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
typedef
struct
__declspec
(align(
8
)) {
;
;
[
6
];
} , *;
typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
typedef
struct
__declspec
(align(
16
))
{
;
;
}
, *
;
typedef
struct
{
;
;
;
_Field_size_bytes_opt_(Length) PXSAVE_AREA Area;
#if defined(_X86_)
;
#endif
;
#if defined(_X86_)
;
#endif
}
, *
;
typedef
struct
{
;
struct
{
;
;
;
;
}
[
1
];
}
, *
;
#ifdef _AMD64_
#if defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
//
// Define bit test intrinsics.
//
#ifdef __cplusplus
extern "C" {
#endif
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndSetAcquire _interlockedbittestandset
#define InterlockedBitTestAndSetRelease _interlockedbittestandset
#define InterlockedBitTestAndSetNoFence _interlockedbittestandset
#define InterlockedBitTestAndReset _interlockedbittestandreset
#define InterlockedBitTestAndResetAcquire _interlockedbittestandreset
#define InterlockedBitTestAndResetRelease _interlockedbittestandreset
#define InterlockedBitTestAndResetNoFence _interlockedbittestandreset
#define BitTest64 _bittest64
#define BitTestAndComplement64 _bittestandcomplement64
#define BitTestAndSet64 _bittestandset64
#define BitTestAndReset64 _bittestandreset64
#define InterlockedBitTestAndSet64 _interlockedbittestandset64
#define InterlockedBitTestAndSet64Acquire _interlockedbittestandset64
#define InterlockedBitTestAndSet64Release _interlockedbittestandset64
#define InterlockedBitTestAndSet64NoFence _interlockedbittestandset64
#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Acquire _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Release _interlockedbittestandreset64
#define InterlockedBitTestAndReset64NoFence _interlockedbittestandreset64
_Must_inspect_result_
BOOLEAN
_bittest (
_In_reads_bytes_((Offset/8)+1) LONG const *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_bittestandcomplement (
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_bittestandset (
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_bittestandreset (
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_interlockedbittestandset (
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_interlockedbittestandreset (
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Base,
_In_range_(>=,0) LONG Offset
);
BOOLEAN
_bittest64 (
_In_reads_bytes_((Offset/8)+1) LONG64 const *Base,
_In_range_(>=,0) LONG64 Offset
);
BOOLEAN
_bittestandcomplement64 (
_Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_range_(>=,0) LONG64 Offset
);
BOOLEAN
_bittestandset64 (
_Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_range_(>=,0) LONG64 Offset
);
BOOLEAN
_bittestandreset64 (
_Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_range_(>=,0) LONG64 Offset
);
BOOLEAN
_interlockedbittestandset64 (
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG64 volatile *Base,
_In_range_(>=,0) LONG64 Offset
);
BOOLEAN
_interlockedbittestandreset64 (
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG64 volatile *Base,
_In_range_(>=,0) LONG64 Offset
);
#pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandreset)
#pragma intrinsic(_bittest64)
#pragma intrinsic(_bittestandcomplement64)
#pragma intrinsic(_bittestandset64)
#pragma intrinsic(_bittestandreset64)
#pragma intrinsic(_interlockedbittestandset64)
#pragma intrinsic(_interlockedbittestandreset64)
//
// Define bit scan intrinsics.
//
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
#define BitScanForward64 _BitScanForward64
#define BitScanReverse64 _BitScanReverse64
_Success_(return!=0)
BOOLEAN
_BitScanForward (
_Out_ DWORD *Index,
_In_ DWORD Mask
);
_Success_(return!=0)
BOOLEAN
_BitScanReverse (
_Out_ DWORD *Index,
_In_ DWORD Mask
);
_Success_(return!=0)
BOOLEAN
_BitScanForward64 (
_Out_ DWORD *Index,
_In_ DWORD64 Mask
);
_Success_(return!=0)
BOOLEAN
_BitScanReverse64 (
_Out_ DWORD *Index,
_In_ DWORD64 Mask
);
#pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse)
#pragma intrinsic(_BitScanForward64)
#pragma intrinsic(_BitScanReverse64)
//
// Interlocked intrinsic functions.
//
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedIncrementAcquire16 _InterlockedIncrement16
#define InterlockedIncrementRelease16 _InterlockedIncrement16
#define InterlockedIncrementNoFence16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedDecrementAcquire16 _InterlockedDecrement16
#define InterlockedDecrementRelease16 _InterlockedDecrement16
#define InterlockedDecrementNoFence16 _InterlockedDecrement16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeAcquire16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeRelease16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeNoFence16 _InterlockedCompareExchange16
#define InterlockedAnd _InterlockedAnd
#define InterlockedAndAcquire _InterlockedAnd
#define InterlockedAndRelease _InterlockedAnd
#define InterlockedAndNoFence _InterlockedAnd
#define InterlockedOr _InterlockedOr
#define InterlockedOrAcquire _InterlockedOr
#define InterlockedOrRelease _InterlockedOr
#define InterlockedOrNoFence _InterlockedOr
#define InterlockedXor _InterlockedXor
#define InterlockedXorAcquire _InterlockedXor
#define InterlockedXorRelease _InterlockedXor
#define InterlockedXorNoFence _InterlockedXor
#define InterlockedIncrement _InterlockedIncrement
#define InterlockedIncrementAcquire _InterlockedIncrement
#define InterlockedIncrementRelease _InterlockedIncrement
#define InterlockedIncrementNoFence _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement
#define InterlockedDecrementAcquire _InterlockedDecrement
#define InterlockedDecrementRelease _InterlockedDecrement
#define InterlockedDecrementNoFence _InterlockedDecrement
#define InterlockedAdd _InlineInterlockedAdd
#define InterlockedAddAcquire _InlineInterlockedAdd
#define InterlockedAddRelease _InlineInterlockedAdd
#define InterlockedAddNoFence _InlineInterlockedAdd
#define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAcquire _InterlockedExchange
#define InterlockedExchangeNoFence _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd
#define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange
#define InterlockedCompareExchangeNoFence _InterlockedCompareExchange
#define InterlockedAnd64 _InterlockedAnd64
#define InterlockedAnd64Acquire _InterlockedAnd64
#define InterlockedAnd64Release _InterlockedAnd64
#define InterlockedAnd64NoFence _InterlockedAnd64
#define InterlockedAndAffinity InterlockedAnd64
#define InterlockedOr64 _InterlockedOr64
#define InterlockedOr64Acquire _InterlockedOr64
#define InterlockedOr64Release _InterlockedOr64
#define InterlockedOr64NoFence _InterlockedOr64
#define InterlockedOrAffinity InterlockedOr64
#define InterlockedXor64 _InterlockedXor64
#define InterlockedXor64Acquire _InterlockedXor64
#define InterlockedXor64Release _InterlockedXor64
#define InterlockedXor64NoFence _InterlockedXor64
#define InterlockedIncrement64 _InterlockedIncrement64
#define InterlockedIncrementAcquire64 _InterlockedIncrement64
#define InterlockedIncrementRelease64 _InterlockedIncrement64
#define InterlockedIncrementNoFence64 _InterlockedIncrement64
#define InterlockedDecrement64 _InterlockedDecrement64
#define InterlockedDecrementAcquire64 _InterlockedDecrement64
#define InterlockedDecrementRelease64 _InterlockedDecrement64
#define InterlockedDecrementNoFence64 _InterlockedDecrement64
#define InterlockedAdd64 _InlineInterlockedAdd64
#define InterlockedAddAcquire64 _InlineInterlockedAdd64
#define InterlockedAddRelease64 _InlineInterlockedAdd64
#define InterlockedAddNoFence64 _InlineInterlockedAdd64
#define InterlockedExchange64 _InterlockedExchange64
#define InterlockedExchangeAcquire64 InterlockedExchange64
#define InterlockedExchangeNoFence64 InterlockedExchange64
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
#define InterlockedCompareExchangeNoFence64 InterlockedCompareExchange64
#define InterlockedCompareExchange128 _InterlockedCompareExchange128
#define InterlockedExchangePointer _InterlockedExchangePointer
#define InterlockedExchangePointerNoFence _InterlockedExchangePointer
#define InterlockedExchangePointerAcquire _InterlockedExchangePointer
#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePointer
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrement64((LONG64 *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrement64((LONG64 *)a)
SHORT
InterlockedIncrement16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Addend
);
SHORT
InterlockedDecrement16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Addend
);
SHORT
InterlockedCompareExchange16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT ExChange,
_In_ SHORT Comperand
);
LONG
InterlockedAnd (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
InterlockedOr (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
InterlockedXor (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG64
InterlockedAnd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
);
LONG64
InterlockedOr64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
);
LONG64
InterlockedXor64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
);
LONG
InterlockedIncrement (
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
InterlockedDecrement (
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
InterlockedExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);
LONG
InterlockedExchangeAdd (
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
#if !defined(_X86AMD64_)
__forceinline
LONG
InterlockedAdd (
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
)
{
return InterlockedExchangeAdd(Addend, Value) + Value;
}
#endif
LONG
InterlockedCompareExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG ExChange,
_In_ LONG Comperand
);
LONG64
InterlockedIncrement64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend
);
LONG64
InterlockedDecrement64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend
);
LONG64
InterlockedExchange64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Target,
_In_ LONG64 Value
);
LONG64
InterlockedExchangeAdd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
_In_ LONG64 Value
);
#if !defined(_X86AMD64_)
__forceinline
LONG64
_InlineInterlockedAdd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
_In_ LONG64 Value
)
{
return InterlockedExchangeAdd64(Addend, Value) + Value;
}
#endif
LONG64
InterlockedCompareExchange64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 ExChange,
_In_ LONG64 Comperand
);
BOOLEAN
InterlockedCompareExchange128 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 ExchangeHigh,
_In_ LONG64 ExchangeLow,
_Inout_ LONG64 *ComparandResult
);
_Ret_writes_(_Inexpressible_(Unknown)) PVOID
InterlockedCompareExchangePointer (
_Inout_ _At_(*Destination,
_Pre_writable_byte_size_(_Inexpressible_(Unknown))
_Post_writable_byte_size_(_Inexpressible_(Unknown)))
_Interlocked_operand_ PVOID volatile *Destination,
_In_opt_ PVOID Exchange,
_In_opt_ PVOID Comperand
);
_Ret_writes_(_Inexpressible_(Unknown)) PVOID
InterlockedExchangePointer(
_Inout_ _At_(*Target,
_Pre_writable_byte_size_(_Inexpressible_(Unknown))
_Post_writable_byte_size_(_Inexpressible_(Unknown)))
_Interlocked_operand_ PVOID volatile *Target,
_In_opt_ PVOID Value
);
#pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedAnd)
#pragma intrinsic(_InterlockedOr)
#pragma intrinsic(_InterlockedXor)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedCompareExchange)
#pragma intrinsic(_InterlockedAnd64)
#pragma intrinsic(_InterlockedOr64)
#pragma intrinsic(_InterlockedXor64)
#pragma intrinsic(_InterlockedIncrement64)
#pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedExchangeAdd64)
#pragma intrinsic(_InterlockedCompareExchange64)
#if _MSC_VER >= 1500
#pragma intrinsic(_InterlockedCompareExchange128)
#endif
#pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_InterlockedCompareExchangePointer)
#if (_MSC_VER >= 1600)
#define InterlockedExchange8 _InterlockedExchange8
#define InterlockedExchange16 _InterlockedExchange16
CHAR
InterlockedExchange8 (
_Inout_ _Interlocked_operand_ CHAR volatile *Target,
_In_ CHAR Value
);
SHORT
InterlockedExchange16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT ExChange
);
#pragma intrinsic(_InterlockedExchange8)
#pragma intrinsic(_InterlockedExchange16)
#endif /* _MSC_VER >= 1600 */
#if _MSC_FULL_VER >= 140041204
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8
#define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16
char
InterlockedExchangeAdd8 (
_Inout_ _Interlocked_operand_ char volatile * _Addend,
_In_ char _Value
);
char
InterlockedAnd8 (
_Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value
);
char
InterlockedOr8 (
_Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value
);
char
InterlockedXor8 (
_Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value
);
SHORT
InterlockedAnd16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
InterlockedOr16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
InterlockedXor16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
#pragma intrinsic (_InterlockedExchangeAdd8)
#pragma intrinsic (_InterlockedAnd8)
#pragma intrinsic (_InterlockedOr8)
#pragma intrinsic (_InterlockedXor8)
#pragma intrinsic (_InterlockedAnd16)
#pragma intrinsic (_InterlockedOr16)
#pragma intrinsic (_InterlockedXor16)
#endif
// end_ntoshvp
//
// Define extended CPUID intrinsic.
//
#define CpuIdEx __cpuidex
VOID
__cpuidex (
int CPUInfo[4],
int Function,
int SubLeaf
);
#pragma intrinsic(__cpuidex)
// begin_ntoshvp
//
// Define function to flush a cache line.
//
#define CacheLineFlush(Address) _mm_clflush(Address)
VOID
_mm_clflush (
_In_ VOID const *Address
);
#pragma intrinsic(_mm_clflush)
// begin_sdfwdm
// begin_wudfpwdm
VOID
_ReadWriteBarrier (
VOID
);
#pragma intrinsic(_ReadWriteBarrier)
//
// Define memory fence intrinsics
//
#define FastFence __faststorefence
// end_wudfpwdm
// end_sdfwdm
#define LoadFence _mm_lfence
#define MemoryFence _mm_mfence
#define StoreFence _mm_sfence
#define SpeculationFence LoadFence
// begin_sdfwdm
// begin_wudfpwdm
VOID
__faststorefence (
VOID
);
// end_wudfpwdm
// end_sdfwdm
VOID
_mm_lfence (
VOID
);
VOID
_mm_mfence (
VOID
);
VOID
_mm_sfence (
VOID
);
VOID
_mm_pause (
VOID
);
VOID
_mm_prefetch (
_In_ CHAR CONST *a,
_In_ int sel
);
VOID
_m_prefetchw (
_In_ volatile CONST VOID *Source
);
//
// Define constants for use with _mm_prefetch.
//
#define _MM_HINT_T0 1
#define _MM_HINT_T1 2
#define _MM_HINT_T2 3
#define _MM_HINT_NTA 0
// begin_sdfwdm
// begin_wudfpwdm
#pragma intrinsic(__faststorefence)
// end_wudfpwdm
// end_sdfwdm
#pragma intrinsic(_mm_pause)
#pragma intrinsic(_mm_prefetch)
#pragma intrinsic(_mm_lfence)
#pragma intrinsic(_mm_mfence)
#pragma intrinsic(_mm_sfence)
#pragma intrinsic(_m_prefetchw)
#define YieldProcessor _mm_pause
#define MemoryBarrier __faststorefence
#define PreFetchCacheLine(l, a) _mm_prefetch((CHAR CONST *) a, l)
#define PrefetchForWrite(p) _m_prefetchw(p)
#define ReadForWriteAccess(p) (_m_prefetchw(p), *(p))
//
// PreFetchCacheLine level defines.
//
#define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
#define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
#define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
#define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
//
// Define get/set MXCSR intrinsics.
//
#define ReadMxCsr _mm_getcsr
#define WriteMxCsr _mm_setcsr
unsigned int
_mm_getcsr (
VOID
);
VOID
_mm_setcsr (
_In_ unsigned int MxCsr
);
#pragma intrinsic(_mm_getcsr)
#pragma intrinsic(_mm_setcsr)
//
// Define function to get the caller's EFLAGs value.
//
#define GetCallersEflags() __getcallerseflags()
unsigned __int32
__getcallerseflags (
VOID
);
#pragma intrinsic(__getcallerseflags)
//
// Define function to get segment limit.
//
#define GetSegmentLimit __segmentlimit
DWORD
__segmentlimit (
_In_ DWORD Selector
);
#pragma intrinsic(__segmentlimit)
//
// Define function to read the value of a performance counter.
//
#define ReadPMC __readpmc
DWORD64
__readpmc (
_In_ DWORD Counter
);
#pragma intrinsic(__readpmc)
//
// Define function to read the value of the time stamp counter
//
#define ReadTimeStampCounter() __rdtsc()
DWORD64
__rdtsc (
VOID
);
#pragma intrinsic(__rdtsc)
//
// Define functions to move strings as bytes, words, dwords, and qwords.
//
VOID
__movsb (
_Out_writes_all_(Count) PBYTE Destination,
_In_reads_(Count) BYTE const *Source,
_In_ SIZE_T Count
);
VOID
__movsw (
_Out_writes_all_(Count) PWORD Destination,
_In_reads_(Count) WORD const *Source,
_In_ SIZE_T Count
);
VOID
__movsd (
_Out_writes_all_(Count) PDWORD Destination,
_In_reads_(Count) DWORD const *Source,
_In_ SIZE_T Count
);
VOID
__movsq (
_Out_writes_all_(Count) PDWORD64 Destination,
_In_reads_(Count) DWORD64 const *Source,
_In_ SIZE_T Count
);
#pragma intrinsic(__movsb)
#pragma intrinsic(__movsw)
#pragma intrinsic(__movsd)
#pragma intrinsic(__movsq)
//
// Define functions to store strings as bytes, words, dwords, and qwords.
//
VOID
__stosb (
_Out_writes_all_(Count) PBYTE Destination,
_In_ BYTE Value,
_In_ SIZE_T Count
);
VOID
__stosw (
_Out_writes_all_(Count) PWORD Destination,
_In_ WORD Value,
_In_ SIZE_T Count
);
VOID
__stosd (
_Out_writes_all_(Count) PDWORD Destination,
_In_ DWORD Value,
_In_ SIZE_T Count
);
VOID
__stosq (
_Out_writes_all_(Count) PDWORD64 Destination,
_In_ DWORD64 Value,
_In_ SIZE_T Count
);
#pragma intrinsic(__stosb)
#pragma intrinsic(__stosw)
#pragma intrinsic(__stosd)
#pragma intrinsic(__stosq)
//
// Define functions to capture the high 64-bits of a 128-bit multiply.
//
#define MultiplyHigh __mulh
#define UnsignedMultiplyHigh __umulh
LONGLONG
MultiplyHigh (
_In_ LONG64 Multiplier,
_In_ LONG64 Multiplicand
);
ULONGLONG
UnsignedMultiplyHigh (
_In_ DWORD64 Multiplier,
_In_ DWORD64 Multiplicand
);
#pragma intrinsic(__mulh)
#pragma intrinsic(__umulh)
//
// Define population count intrinsic.
//
#define PopulationCount64 __popcnt64
DWORD64
PopulationCount64 (
_In_ DWORD64 operand
);
#if _MSC_VER >= 1500
#pragma intrinsic(__popcnt64)
#endif
//
// Define functions to perform 128-bit shifts
//
#define ShiftLeft128 __shiftleft128
#define ShiftRight128 __shiftright128
DWORD64
ShiftLeft128 (
_In_ DWORD64 LowPart,
_In_ DWORD64 HighPart,
_In_ BYTE Shift
);
DWORD64
ShiftRight128 (
_In_ DWORD64 LowPart,
_In_ DWORD64 HighPart,
_In_ BYTE Shift
);
#pragma intrinsic(__shiftleft128)
#pragma intrinsic(__shiftright128)
//
// Define functions to perform 128-bit multiplies.
//
#define Multiply128 _mul128
LONG64
Multiply128 (
_In_ LONG64 Multiplier,
_In_ LONG64 Multiplicand,
_Out_ LONG64 *HighProduct
);
#pragma intrinsic(_mul128)
#ifndef UnsignedMultiply128
#define UnsignedMultiply128 _umul128
DWORD64
UnsignedMultiply128 (
_In_ DWORD64 Multiplier,
_In_ DWORD64 Multiplicand,
_Out_ DWORD64 *HighProduct
);
#pragma intrinsic(_umul128)
#endif
__forceinline
LONG64
MultiplyExtract128 (
_In_ LONG64 Multiplier,
_In_ LONG64 Multiplicand,
_In_ BYTE Shift
)
{
LONG64 extractedProduct;
LONG64 highProduct;
LONG64 lowProduct;
BOOLEAN negate;
DWORD64 uhighProduct;
DWORD64 ulowProduct;
lowProduct = Multiply128(Multiplier, Multiplicand, &highProduct);
negate = FALSE;
uhighProduct = (DWORD64)highProduct;
ulowProduct = (DWORD64)lowProduct;
if (highProduct < 0) {
negate = TRUE;
uhighProduct = (DWORD64)(-highProduct);
ulowProduct = (DWORD64)(-lowProduct);
if (ulowProduct != 0) {
uhighProduct -= 1;
}
}
extractedProduct = (LONG64)ShiftRight128(ulowProduct, uhighProduct, Shift);
if (negate != FALSE) {
extractedProduct = -extractedProduct;
}
return extractedProduct;
}
__forceinline
DWORD64
UnsignedMultiplyExtract128 (
_In_ DWORD64 Multiplier,
_In_ DWORD64 Multiplicand,
_In_ BYTE Shift
)
{
DWORD64 extractedProduct;
DWORD64 highProduct;
DWORD64 lowProduct;
lowProduct = UnsignedMultiply128(Multiplier, Multiplicand, &highProduct);
extractedProduct = ShiftRight128(lowProduct, highProduct, Shift);
return extractedProduct;
}
//
// Define functions to read and write the uer TEB and the system PCR/PRCB.
//
BYTE
__readgsbyte (
_In_ DWORD Offset
);
WORD
__readgsword (
_In_ DWORD Offset
);
DWORD
__readgsdword (
_In_ DWORD Offset
);
DWORD64
__readgsqword (
_In_ DWORD Offset
);
VOID
__writegsbyte (
_In_ DWORD Offset,
_In_ BYTE Data
);
VOID
__writegsword (
_In_ DWORD Offset,
_In_ WORD Data
);
VOID
__writegsdword (
_In_ DWORD Offset,
_In_ DWORD Data
);
VOID
__writegsqword (
_In_ DWORD Offset,
_In_ DWORD64 Data
);
#pragma intrinsic(__readgsbyte)
#pragma intrinsic(__readgsword)
#pragma intrinsic(__readgsdword)
#pragma intrinsic(__readgsqword)
#pragma intrinsic(__writegsbyte)
#pragma intrinsic(__writegsword)
#pragma intrinsic(__writegsdword)
#pragma intrinsic(__writegsqword)
#if !defined(_MANAGED)
VOID
__incgsbyte (
_In_ DWORD Offset
);
VOID
__addgsbyte (
_In_ DWORD Offset,
_In_ BYTE Value
);
VOID
__incgsword (
_In_ DWORD Offset
);
VOID
__addgsword (
_In_ DWORD Offset,
_In_ WORD Value
);
VOID
__incgsdword (
_In_ DWORD Offset
);
VOID
__addgsdword (
_In_ DWORD Offset,
_In_ DWORD Value
);
VOID
__incgsqword (
_In_ DWORD Offset
);
VOID
__addgsqword (
_In_ DWORD Offset,
_In_ DWORD64 Value
);
#if 0
#pragma intrinsic(__incgsbyte)
#pragma intrinsic(__addgsbyte)
#pragma intrinsic(__incgsword)
#pragma intrinsic(__addgsword)
#pragma intrinsic(__incgsdword)
#pragma intrinsic(__addgsdword)
#pragma intrinsic(__incgsqword)
#pragma intrinsic(__addgsqword)
#endif
#endif // !defined(_MANAGED)
#ifdef __cplusplus
}
#endif
#endif // defined(_M_AMD64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
// end_ntoshvp
//
// The following values specify the type of access in the first parameter
// of the exception record whan the exception code specifies an access
// violation.
//
#define EXCEPTION_READ_FAULT 0 // exception caused by a read
#define EXCEPTION_WRITE_FAULT 1 // exception caused by a write
#define EXCEPTION_EXECUTE_FAULT 8 // exception caused by an instruction fetch
// begin_wx86
//
// The following flags control the contents of the CONTEXT structure.
//
#if !defined(RC_INVOKED)
#define CONTEXT_AMD64 0x00100000L
// end_wx86
#define CONTEXT_CONTROL (CONTEXT_AMD64 | 0x00000001L)
#define CONTEXT_INTEGER (CONTEXT_AMD64 | 0x00000002L)
#define CONTEXT_SEGMENTS (CONTEXT_AMD64 | 0x00000004L)
#define CONTEXT_FLOATING_POINT (CONTEXT_AMD64 | 0x00000008L)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_AMD64 | 0x00000010L)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | \
CONTEXT_FLOATING_POINT)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | \
CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | \
CONTEXT_DEBUG_REGISTERS)
#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x00000040L)
#if defined(XBOX_SYSTEMOS)
#define CONTEXT_KERNEL_DEBUGGER 0x04000000L
#endif
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
// begin_wx86
#endif // !defined(RC_INVOKED)
//
// Define initial MxCsr and FpCsr control.
//
#define INITIAL_MXCSR 0x1f80 // initial MXCSR value
#define INITIAL_FPCSR 0x027f // initial FPCSR value
// end_ntddk
// begin_wdm begin_ntosp
// begin_ntoshvp
typedef XSAVE_FORMAT XMM_SAVE_AREA32, *PXMM_SAVE_AREA32;
// end_wdm end_ntosp
// begin_ntddk
//
// Context Frame
//
// This frame has a several purposes: 1) it is used as an argument to
// NtContinue, 2) it is used to constuct a call frame for APC delivery,
// and 3) it is used in the user level thread creation routines.
//
//
// The flags field within this record controls the contents of a CONTEXT
// record.
//
// If the context record is used as an input parameter, then for each
// portion of the context record controlled by a flag whose value is
// set, it is assumed that that portion of the context record contains
// valid context. If the context record is being used to modify a threads
// context, then only that portion of the threads context is modified.
//
// If the context record is used as an output parameter to capture the
// context of a thread, then only those portions of the thread's context
// corresponding to set flags will be returned.
//
// CONTEXT_CONTROL specifies SegSs, Rsp, SegCs, Rip, and EFlags.
//
// CONTEXT_INTEGER specifies Rax, Rcx, Rdx, Rbx, Rbp, Rsi, Rdi, and R8-R15.
//
// CONTEXT_SEGMENTS specifies SegDs, SegEs, SegFs, and SegGs.
//
// CONTEXT_FLOATING_POINT specifies Xmm0-Xmm15.
//
// CONTEXT_DEBUG_REGISTERS specifies Dr0-Dr3 and Dr6-Dr7.
//
typedef struct DECLSPEC_ALIGN(16) _CONTEXT {
//
// Register parameter home addresses.
//
// N.B. These fields are for convience - they could be used to extend the
// context record in the future.
//
DWORD64 P1Home;
DWORD64 P2Home;
DWORD64 P3Home;
DWORD64 P4Home;
DWORD64 P5Home;
DWORD64 P6Home;
//
// Control flags.
//
DWORD ContextFlags;
DWORD MxCsr;
//
// Segment Registers and processor flags.
//
WORD SegCs;
WORD SegDs;
WORD SegEs;
WORD SegFs;
WORD SegGs;
WORD SegSs;
DWORD EFlags;
//
// Debug registers
//
DWORD64 Dr0;
DWORD64 Dr1;
DWORD64 Dr2;
DWORD64 Dr3;
DWORD64 Dr6;
DWORD64 Dr7;
//
// Integer registers.
//
DWORD64 Rax;
DWORD64 Rcx;
DWORD64 Rdx;
DWORD64 Rbx;
DWORD64 Rsp;
DWORD64 Rbp;
DWORD64 Rsi;
DWORD64 Rdi;
DWORD64 R8;
DWORD64 R9;
DWORD64 R10;
DWORD64 R11;
DWORD64 R12;
DWORD64 R13;
DWORD64 R14;
DWORD64 R15;
//
// Program counter.
//
DWORD64 Rip;
//
// Floating point state.
//
union {
XMM_SAVE_AREA32 FltSave;
struct {
M128A Header[2];
M128A Legacy[8];
M128A Xmm0;
M128A Xmm1;
M128A Xmm2;
M128A Xmm3;
M128A Xmm4;
M128A Xmm5;
M128A Xmm6;
M128A Xmm7;
M128A Xmm8;
M128A Xmm9;
M128A Xmm10;
M128A Xmm11;
M128A Xmm12;
M128A Xmm13;
M128A Xmm14;
M128A Xmm15;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
//
// Vector registers.
//
M128A VectorRegister[26];
DWORD64 VectorControl;
//
// Special debug control registers.
//
DWORD64 DebugControl;
DWORD64 LastBranchToRip;
DWORD64 LastBranchFromRip;
DWORD64 LastExceptionToRip;
DWORD64 LastExceptionFromRip;
} CONTEXT, *PCONTEXT;
// end_ntoshvp
//
// Select platform-specific definitions
//
typedef struct _IMAGE_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
typedef SCOPE_TABLE_AMD64 SCOPE_TABLE, *PSCOPE_TABLE;
#define RUNTIME_FUNCTION_INDIRECT 0x1
//
// Define unwind information flags.
//
#define UNW_FLAG_NHANDLER 0x0
#define UNW_FLAG_EHANDLER 0x1
#define UNW_FLAG_UHANDLER 0x2
#define UNW_FLAG_CHAININFO 0x4
#define UNW_FLAG_NO_EPILOGUE 0x80000000UL // Software only flag
//
// Define unwind history table structure.
//
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
DWORD64 ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
typedef struct _UNWIND_HISTORY_TABLE {
DWORD Count;
BYTE LocalHint;
BYTE GlobalHint;
BYTE Search;
BYTE Once;
DWORD64 LowAddress;
DWORD64 HighAddress;
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
//
// Define dynamic function table entry.
//
typedef
_Function_class_(GET_RUNTIME_FUNCTION_CALLBACK)
PRUNTIME_FUNCTION
GET_RUNTIME_FUNCTION_CALLBACK (
_In_ DWORD64 ControlPc,
_In_opt_ PVOID Context
);
typedef GET_RUNTIME_FUNCTION_CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK;
typedef
_Function_class_(OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)
DWORD
OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK (
_In_ HANDLE Process,
_In_ PVOID TableAddress,
_Out_ PDWORD Entries,
_Out_ PRUNTIME_FUNCTION* Functions
);
typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK;
#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
"OutOfProcessFunctionTableCallback"
//
// Define exception dispatch context structure.
//
typedef struct _DISPATCHER_CONTEXT {
DWORD64 ControlPc;
DWORD64 ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
DWORD64 EstablisherFrame;
DWORD64 TargetIp;
PCONTEXT ContextRecord;
PEXCEPTION_ROUTINE LanguageHandler;
PVOID HandlerData;
PUNWIND_HISTORY_TABLE HistoryTable;
DWORD ScopeIndex;
DWORD Fill0;
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
//
// Define exception filter and termination handler function types.
//
struct _EXCEPTION_POINTERS;
typedef
LONG
(*PEXCEPTION_FILTER) (
struct _EXCEPTION_POINTERS *ExceptionPointers,
PVOID EstablisherFrame
);
typedef
VOID
(*PTERMINATION_HANDLER) (
BOOLEAN AbnormalTermination,
PVOID EstablisherFrame
);
//
// Nonvolatile context pointer record.
//
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
union {
PM128A FloatingContext[16];
struct {
PM128A Xmm0;
PM128A Xmm1;
PM128A Xmm2;
PM128A Xmm3;
PM128A Xmm4;
PM128A Xmm5;
PM128A Xmm6;
PM128A Xmm7;
PM128A Xmm8;
PM128A Xmm9;
PM128A Xmm10;
PM128A Xmm11;
PM128A Xmm12;
PM128A Xmm13;
PM128A Xmm14;
PM128A Xmm15;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
union {
PDWORD64 IntegerContext[16];
struct {
PDWORD64 Rax;
PDWORD64 Rcx;
PDWORD64 Rdx;
PDWORD64 Rbx;
PDWORD64 Rsp;
PDWORD64 Rbp;
PDWORD64 Rsi;
PDWORD64 Rdi;
PDWORD64 R8;
PDWORD64 R9;
PDWORD64 R10;
PDWORD64 R11;
PDWORD64 R12;
PDWORD64 R13;
PDWORD64 R14;
PDWORD64 R15;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME2;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
#endif // _AMD64_
typedef
struct
{
;
struct
{
;
;
;
;
}
[
1
];
}
, *
;
#ifdef _ARM_
#if defined(_M_ARM) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#include <intrin.h>
#if !defined(_M_CEE_PURE)
#ifdef __cplusplus
extern "C" {
#endif
//
// Memory barriers and prefetch intrinsics.
//
#pragma intrinsic(__yield)
#pragma intrinsic(__prefetch)
#if (_MSC_FULL_VER >= 170040825)
#pragma intrinsic(__dmb)
#pragma intrinsic(__dsb)
#pragma intrinsic(__isb)
#else
#define __dmb(x) { __emit(0xF3BF); __emit(0x8F5F); }
#define __dsb(x) { __emit(0xF3BF); __emit(0x8F4F); }
#define __isb(x) { __emit(0xF3BF); __emit(0x8F6F); }
#endif
#pragma intrinsic(_ReadWriteBarrier)
#pragma intrinsic(_WriteBarrier)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
__dmb(_ARM_BARRIER_ISHST);
__yield();
}
#define MemoryBarrier() __dmb(_ARM_BARRIER_SY)
#define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
#define PrefetchForWrite(p) __prefetch((const void *) (p))
#define ReadForWriteAccess(p) (*(p))
#define _DataSynchronizationBarrier() __dsb(_ARM_BARRIER_SY)
#define _InstructionSynchronizationBarrier() __isb(_ARM_BARRIER_SY)
//
// Define bit test intrinsics.
//
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndSetAcquire _interlockedbittestandset_acq
#define InterlockedBitTestAndSetRelease _interlockedbittestandset_rel
#define InterlockedBitTestAndSetNoFence _interlockedbittestandset_nf
#define InterlockedBitTestAndReset _interlockedbittestandreset
#define InterlockedBitTestAndResetAcquire _interlockedbittestandreset_acq
#define InterlockedBitTestAndResetRelease _interlockedbittestandreset_rel
#define InterlockedBitTestAndResetNoFence _interlockedbittestandreset_nf
#pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandset_acq)
#pragma intrinsic(_interlockedbittestandset_rel)
#pragma intrinsic(_interlockedbittestandset_nf)
#pragma intrinsic(_interlockedbittestandreset)
#pragma intrinsic(_interlockedbittestandreset_acq)
#pragma intrinsic(_interlockedbittestandreset_rel)
#pragma intrinsic(_interlockedbittestandreset_nf)
//
// Define bit scan functions
//
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
#pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse)
//
// Interlocked intrinsic functions.
//
#pragma intrinsic(_InterlockedAnd8)
#pragma intrinsic(_InterlockedOr8)
#pragma intrinsic(_InterlockedXor8)
#pragma intrinsic(_InterlockedExchangeAdd8)
#pragma intrinsic(_InterlockedAnd16)
#pragma intrinsic(_InterlockedOr16)
#pragma intrinsic(_InterlockedXor16)
#pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedAnd)
#pragma intrinsic(_InterlockedOr)
#pragma intrinsic(_InterlockedXor)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedCompareExchange)
#pragma intrinsic(_InterlockedAnd64)
#pragma intrinsic(_InterlockedOr64)
#pragma intrinsic(_InterlockedXor64)
#pragma intrinsic(_InterlockedIncrement64)
#pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_InterlockedCompareExchangePointer)
#define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedAnd _InterlockedAnd
#define InterlockedOr _InterlockedOr
#define InterlockedXor _InterlockedXor
#define InterlockedIncrement _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement
#define InterlockedAdd _InterlockedAdd
#define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedAnd64 _InterlockedAnd64
#define InterlockedAndAffinity InterlockedAnd64
#define InterlockedOr64 _InterlockedOr64
#define InterlockedOrAffinity InterlockedOr64
#define InterlockedXor64 _InterlockedXor64
#define InterlockedIncrement64 _InterlockedIncrement64
#define InterlockedDecrement64 _InterlockedDecrement64
#define InterlockedAdd64 _InterlockedAdd64
#define InterlockedExchange64 _InterlockedExchange64
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedExchangePointer _InterlockedExchangePointer
#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
#pragma intrinsic(_InterlockedExchange16)
#define InterlockedExchange16 _InterlockedExchange16
#pragma intrinsic(_InterlockedAnd8_acq)
#pragma intrinsic(_InterlockedAnd8_rel)
#pragma intrinsic(_InterlockedAnd8_nf)
#pragma intrinsic(_InterlockedOr8_acq)
#pragma intrinsic(_InterlockedOr8_rel)
#pragma intrinsic(_InterlockedOr8_nf)
#pragma intrinsic(_InterlockedXor8_acq)
#pragma intrinsic(_InterlockedXor8_rel)
#pragma intrinsic(_InterlockedXor8_nf)
#pragma intrinsic(_InterlockedAnd16_acq)
#pragma intrinsic(_InterlockedAnd16_rel)
#pragma intrinsic(_InterlockedAnd16_nf)
#pragma intrinsic(_InterlockedOr16_acq)
#pragma intrinsic(_InterlockedOr16_rel)
#pragma intrinsic(_InterlockedOr16_nf)
#pragma intrinsic(_InterlockedXor16_acq)
#pragma intrinsic(_InterlockedXor16_rel)
#pragma intrinsic(_InterlockedXor16_nf)
#pragma intrinsic(_InterlockedIncrement16_acq)
#pragma intrinsic(_InterlockedIncrement16_rel)
#pragma intrinsic(_InterlockedIncrement16_nf)
#pragma intrinsic(_InterlockedDecrement16_acq)
#pragma intrinsic(_InterlockedDecrement16_rel)
#pragma intrinsic(_InterlockedDecrement16_nf)
#pragma intrinsic(_InterlockedExchange16_acq)
#pragma intrinsic(_InterlockedExchange16_nf)
#pragma intrinsic(_InterlockedCompareExchange16_acq)
#pragma intrinsic(_InterlockedCompareExchange16_rel)
#pragma intrinsic(_InterlockedCompareExchange16_nf)
#pragma intrinsic(_InterlockedAnd_acq)
#pragma intrinsic(_InterlockedAnd_rel)
#pragma intrinsic(_InterlockedAnd_nf)
#pragma intrinsic(_InterlockedOr_acq)
#pragma intrinsic(_InterlockedOr_rel)
#pragma intrinsic(_InterlockedOr_nf)
#pragma intrinsic(_InterlockedXor_acq)
#pragma intrinsic(_InterlockedXor_rel)
#pragma intrinsic(_InterlockedXor_nf)
#pragma intrinsic(_InterlockedIncrement_acq)
#pragma intrinsic(_InterlockedIncrement_rel)
#pragma intrinsic(_InterlockedIncrement_nf)
#pragma intrinsic(_InterlockedDecrement_acq)
#pragma intrinsic(_InterlockedDecrement_rel)
#pragma intrinsic(_InterlockedDecrement_nf)
#pragma intrinsic(_InterlockedExchange_acq)
#pragma intrinsic(_InterlockedExchange_nf)
#pragma intrinsic(_InterlockedExchangeAdd_acq)
#pragma intrinsic(_InterlockedExchangeAdd_rel)
#pragma intrinsic(_InterlockedExchangeAdd_nf)
#pragma intrinsic(_InterlockedCompareExchange_acq)
#pragma intrinsic(_InterlockedCompareExchange_rel)
#pragma intrinsic(_InterlockedCompareExchange_nf)
#pragma intrinsic(_InterlockedAnd64_acq)
#pragma intrinsic(_InterlockedAnd64_rel)
#pragma intrinsic(_InterlockedAnd64_nf)
#pragma intrinsic(_InterlockedOr64_acq)
#pragma intrinsic(_InterlockedOr64_rel)
#pragma intrinsic(_InterlockedOr64_nf)
#pragma intrinsic(_InterlockedXor64_acq)
#pragma intrinsic(_InterlockedXor64_rel)
#pragma intrinsic(_InterlockedXor64_nf)
#pragma intrinsic(_InterlockedIncrement64_acq)
#pragma intrinsic(_InterlockedIncrement64_rel)
#pragma intrinsic(_InterlockedIncrement64_nf)
#pragma intrinsic(_InterlockedDecrement64_acq)
#pragma intrinsic(_InterlockedDecrement64_rel)
#pragma intrinsic(_InterlockedDecrement64_nf)
#pragma intrinsic(_InterlockedExchange64_acq)
#pragma intrinsic(_InterlockedExchange64_nf)
#pragma intrinsic(_InterlockedCompareExchange64_acq)
#pragma intrinsic(_InterlockedCompareExchange64_rel)
#pragma intrinsic(_InterlockedCompareExchange64_nf)
#pragma intrinsic(_InterlockedExchangePointer_acq)
#pragma intrinsic(_InterlockedExchangePointer_nf)
#pragma intrinsic(_InterlockedCompareExchangePointer_acq)
#pragma intrinsic(_InterlockedCompareExchangePointer_rel)
#pragma intrinsic(_InterlockedCompareExchangePointer_nf)
#define InterlockedAndAcquire8 _InterlockedAnd8_acq
#define InterlockedAndRelease8 _InterlockedAnd8_rel
#define InterlockedAndNoFence8 _InterlockedAnd8_nf
#define InterlockedOrAcquire8 _InterlockedOr8_acq
#define InterlockedOrRelease8 _InterlockedOr8_rel
#define InterlockedOrNoFence8 _InterlockedOr8_nf
#define InterlockedXorAcquire8 _InterlockedXor8_acq
#define InterlockedXorRelease8 _InterlockedXor8_rel
#define InterlockedXorNoFence8 _InterlockedXor8_nf
#define InterlockedAndAcquire16 _InterlockedAnd16_acq
#define InterlockedAndRelease16 _InterlockedAnd16_rel
#define InterlockedAndNoFence16 _InterlockedAnd16_nf
#define InterlockedOrAcquire16 _InterlockedOr16_acq
#define InterlockedOrRelease16 _InterlockedOr16_rel
#define InterlockedOrNoFence16 _InterlockedOr16_nf
#define InterlockedXorAcquire16 _InterlockedXor16_acq
#define InterlockedXorRelease16 _InterlockedXor16_rel
#define InterlockedXorNoFence16 _InterlockedXor16_nf
#define InterlockedIncrementAcquire16 _InterlockedIncrement16_acq
#define InterlockedIncrementRelease16 _InterlockedIncrement16_rel
#define InterlockedIncrementNoFence16 _InterlockedIncrement16_nf
#define InterlockedDecrementAcquire16 _InterlockedDecrement16_acq
#define InterlockedDecrementRelease16 _InterlockedDecrement16_rel
#define InterlockedDecrementNoFence16 _InterlockedDecrement16_nf
#define InterlockedExchangeAcquire16 _InterlockedExchange16_acq
#define InterlockedExchangeNoFence16 _InterlockedExchange16_nf
#define InterlockedCompareExchangeAcquire16 _InterlockedCompareExchange16_acq
#define InterlockedCompareExchangeRelease16 _InterlockedCompareExchange16_rel
#define InterlockedCompareExchangeNoFence16 _InterlockedCompareExchange16_nf
#define InterlockedAndAcquire _InterlockedAnd_acq
#define InterlockedAndRelease _InterlockedAnd_rel
#define InterlockedAndNoFence _InterlockedAnd_nf
#define InterlockedOrAcquire _InterlockedOr_acq
#define InterlockedOrRelease _InterlockedOr_rel
#define InterlockedOrNoFence _InterlockedOr_nf
#define InterlockedXorAcquire _InterlockedXor_acq
#define InterlockedXorRelease _InterlockedXor_rel
#define InterlockedXorNoFence _InterlockedXor_nf
#define InterlockedIncrementAcquire _InterlockedIncrement_acq
#define InterlockedIncrementRelease _InterlockedIncrement_rel
#define InterlockedIncrementNoFence _InterlockedIncrement_nf
#define InterlockedDecrementAcquire _InterlockedDecrement_acq
#define InterlockedDecrementRelease _InterlockedDecrement_rel
#define InterlockedDecrementNoFence _InterlockedDecrement_nf
#define InterlockedAddAcquire _InterlockedAdd_acq
#define InterlockedAddRelease _InterlockedAdd_rel
#define InterlockedAddNoFence _InterlockedAdd_nf
#define InterlockedExchangeAcquire _InterlockedExchange_acq
#define InterlockedExchangeNoFence _InterlockedExchange_nf
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd_acq
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd_rel
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd_nf
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange_acq
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange_rel
#define InterlockedCompareExchangeNoFence _InterlockedCompareExchange_nf
#define InterlockedAndAcquire64 _InterlockedAnd64_acq
#define InterlockedAndRelease64 _InterlockedAnd64_rel
#define InterlockedAndNoFence64 _InterlockedAnd64_nf
#define InterlockedOrAcquire64 _InterlockedOr64_acq
#define InterlockedOrRelease64 _InterlockedOr64_rel
#define InterlockedOrNoFence64 _InterlockedOr64_nf
#define InterlockedXorAcquire64 _InterlockedXor64_acq
#define InterlockedXorRelease64 _InterlockedXor64_rel
#define InterlockedXorNoFence64 _InterlockedXor64_nf
#define InterlockedIncrementAcquire64 _InterlockedIncrement64_acq
#define InterlockedIncrementRelease64 _InterlockedIncrement64_rel
#define InterlockedIncrementNoFence64 _InterlockedIncrement64_nf
#define InterlockedDecrementAcquire64 _InterlockedDecrement64_acq
#define InterlockedDecrementRelease64 _InterlockedDecrement64_rel
#define InterlockedDecrementNoFence64 _InterlockedDecrement64_nf
#define InterlockedAddAcquire64 _InterlockedAdd64_acq
#define InterlockedAddRelease64 _InterlockedAdd64_rel
#define InterlockedAddNoFence64 _InterlockedAdd64_nf
#define InterlockedExchangeAcquire64 _InterlockedExchange64_acq
#define InterlockedExchangeNoFence64 _InterlockedExchange64_nf
#define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64_acq
#define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64_rel
#define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64_nf
#define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64_acq
#define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64_rel
#define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64_nf
#define InterlockedExchangePointerAcquire _InterlockedExchangePointer_acq
#define InterlockedExchangePointerNoFence _InterlockedExchangePointer_nf
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer_acq
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer_rel
#define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePointer_nf
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire((LONG *)a, b)
#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence((LONG *)a, b)
#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence((LONG *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence((LONG *)a)
//
// Define accessors for volatile loads and stores.
//
#pragma intrinsic(__iso_volatile_load8)
#pragma intrinsic(__iso_volatile_load16)
#pragma intrinsic(__iso_volatile_load32)
#pragma intrinsic(__iso_volatile_load64)
#pragma intrinsic(__iso_volatile_store8)
#pragma intrinsic(__iso_volatile_store16)
#pragma intrinsic(__iso_volatile_store32)
#pragma intrinsic(__iso_volatile_store64)
// end_wdm end_ntndis end_ntosp end_ntminiport
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_wdm begin_ntndis begin_ntosp begin_ntminiport
FORCEINLINE
CHAR
ReadAcquire8 (
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
CHAR Value;
Value = __iso_volatile_load8(Source);
__dmb(_ARM_BARRIER_ISH);
return Value;
}
FORCEINLINE
CHAR
ReadNoFence8 (
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
CHAR Value;
Value = __iso_volatile_load8(Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease8 (
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
)
{
__dmb(_ARM_BARRIER_ISH);
__iso_volatile_store8(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence8 (
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
)
{
__iso_volatile_store8(Destination, Value);
return;
}
FORCEINLINE
SHORT
ReadAcquire16 (
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
SHORT Value;
Value = __iso_volatile_load16(Source);
__dmb(_ARM_BARRIER_ISH);
return Value;
}
FORCEINLINE
SHORT
ReadNoFence16 (
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
SHORT Value;
Value = __iso_volatile_load16(Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease16 (
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
)
{
__dmb(_ARM_BARRIER_ISH);
__iso_volatile_store16(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence16 (
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
)
{
__iso_volatile_store16(Destination, Value);
return;
}
FORCEINLINE
LONG
ReadAcquire (
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
LONG Value;
Value = __iso_volatile_load32((int *)Source);
__dmb(_ARM_BARRIER_ISH);
return Value;
}
FORCEINLINE
LONG
ReadNoFence (
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
LONG Value;
Value = __iso_volatile_load32((int *)Source);
return Value;
}
CFORCEINLINE
VOID
WriteRelease (
_Out_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
)
{
__dmb(_ARM_BARRIER_ISH);
__iso_volatile_store32((int *)Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence (
_Out_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
)
{
__iso_volatile_store32((int *)Destination, Value);
return;
}
FORCEINLINE
LONG64
ReadAcquire64 (
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
LONG64 Value;
Value = __iso_volatile_load64(Source);
__dmb(_ARM_BARRIER_ISH);
return Value;
}
FORCEINLINE
LONG64
ReadNoFence64 (
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
LONG64 Value;
Value = __iso_volatile_load64(Source);
return Value;
}
CFORCEINLINE
VOID
WriteRelease64 (
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
)
{
__dmb(_ARM_BARRIER_ISH);
__iso_volatile_store64(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence64 (
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
)
{
__iso_volatile_store64(Destination, Value);
return;
}
// end_wdm end_ntndis end_ntosp end_ntminiport
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_wdm begin_ntndis begin_ntosp begin_ntminiport
//
// Define coprocessor access intrinsics. Coprocessor 15 contains
// registers for the MMU, cache, TLB, feature bits, core
// identification and performance counters.
//
#define CP15_PMSELR 15, 0, 9, 12, 5 // Event Counter Selection Register
#define CP15_PMXEVCNTR 15, 0, 9, 13, 2 // Event Count Register
#define CP15_TPIDRURW 15, 0, 13, 0, 2 // Software Thread ID Register, User Read/Write
#define CP15_TPIDRURO 15, 0, 13, 0, 3 // Software Thread ID Register, User Read Only
#define CP15_TPIDRPRW 15, 0, 13, 0, 4 // Software Thread ID Register, Privileged Only
#pragma intrinsic(_MoveToCoprocessor)
#pragma intrinsic(_MoveFromCoprocessor)
//
// Coprocessor registers for synchronization
//
#define _InvalidateBTAC() _MoveToCoprocessor(0, CP15_BPIALL)
//
// PreFetchCacheLine level defines.
//
#define PF_TEMPORAL_LEVEL_1 0
#define PF_TEMPORAL_LEVEL_2 1
#define PF_TEMPORAL_LEVEL_3 2
#define PF_NON_TEMPORAL_LEVEL_ALL 3
//
// Define function to read the value of the time stamp counter which
// ARM doesn't have.
//
DWORD64
ReadTimeStampCounter(
VOID
);
FORCEINLINE
DWORD64
ReadPMC (
_In_ DWORD Counter
)
{
_MoveToCoprocessor(Counter, CP15_PMSELR);
return (DWORD64)_MoveFromCoprocessor(CP15_PMXEVCNTR);
}
#ifdef __cplusplus
}
#endif
#endif // !defined(_M_CEE_PURE)
#endif // defined(_M_ARM) && !defined(RC_INVOKED) && !defined(MIDL_PASS) && !defined(_M_CEE_PURE)
#if defined(_M_CEE_PURE)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
}
#endif
//
// The following values specify the type of access in the first parameter
// of the exception record whan the exception code specifies an access
// violation.
//
#define EXCEPTION_READ_FAULT 0 // exception caused by a read
#define EXCEPTION_WRITE_FAULT 1 // exception caused by a write
#define EXCEPTION_EXECUTE_FAULT 8 // exception caused by an instruction fetch
// begin_wx86
//
// The following flags control the contents of the CONTEXT structure.
//
#if !defined(RC_INVOKED)
#define CONTEXT_ARM 0x00200000L
// end_wx86
#define CONTEXT_CONTROL (CONTEXT_ARM | 0x1L)
#define CONTEXT_INTEGER (CONTEXT_ARM | 0x2L)
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM | 0x4L)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM | 0x8L)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
#define CONTEXT_EXCEPTION_ACTIVE 0x8000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
//
// This flag is set by the unwinder if it has unwound to a call
// site, and cleared whenever it unwinds through a trap frame.
// It is used by language-specific exception handlers to help
// differentiate exception scopes during dispatching.
//
#define CONTEXT_UNWOUND_TO_CALL 0x20000000
// begin_wx86
#endif // !defined(RC_INVOKED)
//
// Define initial Cpsr/Fpscr value
//
#define INITIAL_CPSR 0x10
#define INITIAL_FPSCR 0
//
// Specify the number of breakpoints and watchpoints that the OS
// will track. Architecturally, ARM supports up to 16. In practice,
// however, almost no one implements more than 4 of each.
//
#define ARM_MAX_BREAKPOINTS 8
#define ARM_MAX_WATCHPOINTS 1
//
// Context Frame
//
// This frame has a several purposes: 1) it is used as an argument to
// NtContinue, 2) it is used to constuct a call frame for APC delivery,
// and 3) it is used in the user level thread creation routines.
//
//
// The flags field within this record controls the contents of a CONTEXT
// record.
//
// If the context record is used as an input parameter, then for each
// portion of the context record controlled by a flag whose value is
// set, it is assumed that that portion of the context record contains
// valid context. If the context record is being used to modify a threads
// context, then only that portion of the threads context is modified.
//
// If the context record is used as an output parameter to capture the
// context of a thread, then only those portions of the thread's context
// corresponding to set flags will be returned.
//
// CONTEXT_CONTROL specifies Sp, Lr, Pc, and Cpsr
//
// CONTEXT_INTEGER specifies R0-R12
//
// CONTEXT_FLOATING_POINT specifies Q0-Q15 / D0-D31 / S0-S31
//
// CONTEXT_DEBUG_REGISTERS specifies up to 16 of DBGBVR, DBGBCR, DBGWVR,
// DBGWCR.
//
typedef struct _NEON128 {
ULONGLONG Low;
LONGLONG High;
} NEON128, *PNEON128;
typedef struct DECLSPEC_ALIGN(8) _CONTEXT {
//
// Control flags.
//
DWORD ContextFlags;
//
// Integer registers
//
DWORD R0;
DWORD R1;
DWORD R2;
DWORD R3;
DWORD R4;
DWORD R5;
DWORD R6;
DWORD R7;
DWORD R8;
DWORD R9;
DWORD R10;
DWORD R11;
DWORD R12;
//
// Control Registers
//
DWORD Sp;
DWORD Lr;
DWORD Pc;
DWORD Cpsr;
//
// Floating Point/NEON Registers
//
DWORD Fpscr;
DWORD Padding;
union {
NEON128 Q[16];
ULONGLONG D[32];
DWORD S[32];
} DUMMYUNIONNAME;
//
// Debug registers
//
DWORD Bvr[ARM_MAX_BREAKPOINTS];
DWORD Bcr[ARM_MAX_BREAKPOINTS];
DWORD Wvr[ARM_MAX_WATCHPOINTS];
DWORD Wcr[ARM_MAX_WATCHPOINTS];
DWORD Padding2[2];
} CONTEXT, *PCONTEXT;
//
// Select platform-specific definitions
//
typedef struct _IMAGE_ARM_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
typedef SCOPE_TABLE_ARM SCOPE_TABLE, *PSCOPE_TABLE;
//
// Define unwind information flags.
//
#define UNW_FLAG_NHANDLER 0x0 /* any handler */
#define UNW_FLAG_EHANDLER 0x1 /* filter handler */
#define UNW_FLAG_UHANDLER 0x2 /* unwind handler */
//
// Define unwind history table structure.
//
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
DWORD ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
typedef struct _UNWIND_HISTORY_TABLE {
DWORD Count;
BYTE LocalHint;
BYTE GlobalHint;
BYTE Search;
BYTE Once;
DWORD LowAddress;
DWORD HighAddress;
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
//
// Define exception dispatch context structure.
//
typedef struct _DISPATCHER_CONTEXT {
DWORD ControlPc;
DWORD ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
DWORD EstablisherFrame;
DWORD TargetPc;
PCONTEXT ContextRecord;
PEXCEPTION_ROUTINE LanguageHandler;
PVOID HandlerData;
PUNWIND_HISTORY_TABLE HistoryTable;
DWORD ScopeIndex;
BOOLEAN ControlPcIsUnwound;
PBYTE NonVolatileRegisters;
DWORD Reserved;
} DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
//
// Define exception filter and termination handler function types.
// N.B. These functions use a custom calling convention.
//
struct _EXCEPTION_POINTERS;
typedef
LONG
(*PEXCEPTION_FILTER) (
struct _EXCEPTION_POINTERS *ExceptionPointers,
DWORD EstablisherFrame
);
typedef
VOID
(*PTERMINATION_HANDLER) (
BOOLEAN AbnormalTermination,
DWORD EstablisherFrame
);
//
// Define dynamic function table entry.
//
typedef
_Function_class_(GET_RUNTIME_FUNCTION_CALLBACK)
PRUNTIME_FUNCTION
GET_RUNTIME_FUNCTION_CALLBACK (
_In_ DWORD ControlPc,
_In_opt_ PVOID Context
);
typedef GET_RUNTIME_FUNCTION_CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK;
typedef
_Function_class_(OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)
DWORD
OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK (
_In_ HANDLE Process,
_In_ PVOID TableAddress,
_Out_ PDWORD Entries,
_Out_ PRUNTIME_FUNCTION* Functions
);
typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK;
#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
"OutOfProcessFunctionTableCallback"
//
// Nonvolatile context pointer record.
//
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
PDWORD R4;
PDWORD R5;
PDWORD R6;
PDWORD R7;
PDWORD R8;
PDWORD R9;
PDWORD R10;
PDWORD R11;
PDWORD Lr;
PULONGLONG D8;
PULONGLONG D9;
PULONGLONG D10;
PULONGLONG D11;
PULONGLONG D12;
PULONGLONG D13;
PULONGLONG D14;
PULONGLONG D15;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
#endif // _ARM_
typedef
struct
{
;
struct
{
;
;
;
;
}
[
1
];
}
, *
;
#if defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
// end_ntddk end_wdm end_nthal end_ntminiport end_wx86
#if !defined(_M_CEE_PURE)
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)
#include <intrin.h>
#if defined(_M_ARM64)
#pragma intrinsic(__readx18byte)
#pragma intrinsic(__readx18word)
#pragma intrinsic(__readx18dword)
#pragma intrinsic(__readx18qword)
#pragma intrinsic(__writex18byte)
#pragma intrinsic(__writex18word)
#pragma intrinsic(__writex18dword)
#pragma intrinsic(__writex18qword)
#pragma intrinsic(__addx18byte)
#pragma intrinsic(__addx18word)
#pragma intrinsic(__addx18dword)
#pragma intrinsic(__addx18qword)
#pragma intrinsic(__incx18byte)
#pragma intrinsic(__incx18word)
#pragma intrinsic(__incx18dword)
#pragma intrinsic(__incx18qword)
//
// Define bit test intrinsics.
//
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndSetAcquire _interlockedbittestandset_acq
#define InterlockedBitTestAndSetRelease _interlockedbittestandset_rel
#define InterlockedBitTestAndSetNoFence _interlockedbittestandset_nf
#define InterlockedBitTestAndReset _interlockedbittestandreset
#define InterlockedBitTestAndResetAcquire _interlockedbittestandreset_acq
#define InterlockedBitTestAndResetRelease _interlockedbittestandreset_rel
#define InterlockedBitTestAndResetNoFence _interlockedbittestandreset_nf
#define BitTest64 _bittest64
#define BitTestAndComplement64 _bittestandcomplement64
#define BitTestAndSet64 _bittestandset64
#define BitTestAndReset64 _bittestandreset64
#define InterlockedBitTestAndSet64 _interlockedbittestandset64
#define InterlockedBitTestAndSet64Acquire _interlockedbittestandset64
#define InterlockedBitTestAndSet64Release _interlockedbittestandset64
#define InterlockedBitTestAndReset64 _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Acquire _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Release _interlockedbittestandreset64
#pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandset_acq)
#pragma intrinsic(_interlockedbittestandset_rel)
#pragma intrinsic(_interlockedbittestandreset)
#pragma intrinsic(_interlockedbittestandreset_acq)
#pragma intrinsic(_interlockedbittestandreset_rel)
#pragma intrinsic(_bittest64)
#pragma intrinsic(_bittestandcomplement64)
#pragma intrinsic(_bittestandset64)
#pragma intrinsic(_bittestandreset64)
#pragma intrinsic(_interlockedbittestandset64)
#pragma intrinsic(_interlockedbittestandset64_acq)
#pragma intrinsic(_interlockedbittestandset64_rel)
#pragma intrinsic(_interlockedbittestandreset64)
#pragma intrinsic(_interlockedbittestandreset64_acq)
#pragma intrinsic(_interlockedbittestandreset64_rel)
//
// Define bit scan functions
//
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
#define BitScanForward64 _BitScanForward64
#define BitScanReverse64 _BitScanReverse64
#pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse)
#pragma intrinsic(_BitScanForward64)
#pragma intrinsic(_BitScanReverse64)
//
// Interlocked intrinsic functions.
//
#pragma intrinsic(_InterlockedAnd8)
#pragma intrinsic(_InterlockedOr8)
#pragma intrinsic(_InterlockedXor8)
#pragma intrinsic(_InterlockedExchangeAdd8)
#pragma intrinsic(_InterlockedAnd16)
#pragma intrinsic(_InterlockedOr16)
#pragma intrinsic(_InterlockedXor16)
#pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedAnd)
#pragma intrinsic(_InterlockedOr)
#pragma intrinsic(_InterlockedXor)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedCompareExchange)
#pragma intrinsic(_InterlockedAnd64)
#pragma intrinsic(_InterlockedOr64)
#pragma intrinsic(_InterlockedXor64)
#pragma intrinsic(_InterlockedIncrement64)
#pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedCompareExchange128)
#pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_InterlockedCompareExchangePointer)
#define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedAnd _InterlockedAnd
#define InterlockedOr _InterlockedOr
#define InterlockedXor _InterlockedXor
#define InterlockedIncrement _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement
#define InterlockedAdd _InterlockedAdd
#define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedAnd64 _InterlockedAnd64
#define InterlockedAndAffinity InterlockedAnd64
#define InterlockedOr64 _InterlockedOr64
#define InterlockedOrAffinity InterlockedOr64
#define InterlockedXor64 _InterlockedXor64
#define InterlockedIncrement64 _InterlockedIncrement64
#define InterlockedDecrement64 _InterlockedDecrement64
#define InterlockedAdd64 _InterlockedAdd64
#define InterlockedExchange64 _InterlockedExchange64
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedExchangePointer _InterlockedExchangePointer
#define InterlockedCompareExchangePointer _InterlockedCompareExchangePointer
#pragma intrinsic(_InterlockedExchange16)
#define InterlockedExchange16 _InterlockedExchange16
#pragma intrinsic(_InterlockedAnd8_acq)
#pragma intrinsic(_InterlockedAnd8_rel)
#pragma intrinsic(_InterlockedAnd8_nf)
#pragma intrinsic(_InterlockedOr8_acq)
#pragma intrinsic(_InterlockedOr8_rel)
#pragma intrinsic(_InterlockedOr8_nf)
#pragma intrinsic(_InterlockedXor8_acq)
#pragma intrinsic(_InterlockedXor8_rel)
#pragma intrinsic(_InterlockedXor8_nf)
#pragma intrinsic(_InterlockedAnd16_acq)
#pragma intrinsic(_InterlockedAnd16_rel)
#pragma intrinsic(_InterlockedAnd16_nf)
#pragma intrinsic(_InterlockedOr16_acq)
#pragma intrinsic(_InterlockedOr16_rel)
#pragma intrinsic(_InterlockedOr16_nf)
#pragma intrinsic(_InterlockedXor16_acq)
#pragma intrinsic(_InterlockedXor16_rel)
#pragma intrinsic(_InterlockedXor16_nf)
#pragma intrinsic(_InterlockedIncrement16_acq)
#pragma intrinsic(_InterlockedIncrement16_rel)
#pragma intrinsic(_InterlockedIncrement16_nf)
#pragma intrinsic(_InterlockedDecrement16_acq)
#pragma intrinsic(_InterlockedDecrement16_rel)
#pragma intrinsic(_InterlockedDecrement16_nf)
#pragma intrinsic(_InterlockedExchange16_acq)
#pragma intrinsic(_InterlockedExchange16_nf)
#pragma intrinsic(_InterlockedCompareExchange16_acq)
#pragma intrinsic(_InterlockedCompareExchange16_rel)
#pragma intrinsic(_InterlockedCompareExchange16_nf)
#pragma intrinsic(_InterlockedAnd_acq)
#pragma intrinsic(_InterlockedAnd_rel)
#pragma intrinsic(_InterlockedAnd_nf)
#pragma intrinsic(_InterlockedOr_acq)
#pragma intrinsic(_InterlockedOr_rel)
#pragma intrinsic(_InterlockedOr_nf)
#pragma intrinsic(_InterlockedXor_acq)
#pragma intrinsic(_InterlockedXor_rel)
#pragma intrinsic(_InterlockedXor_nf)
#pragma intrinsic(_InterlockedIncrement_acq)
#pragma intrinsic(_InterlockedIncrement_rel)
#pragma intrinsic(_InterlockedIncrement_nf)
#pragma intrinsic(_InterlockedDecrement_acq)
#pragma intrinsic(_InterlockedDecrement_rel)
#pragma intrinsic(_InterlockedDecrement_nf)
#pragma intrinsic(_InterlockedExchange_acq)
#pragma intrinsic(_InterlockedExchange_nf)
#pragma intrinsic(_InterlockedExchangeAdd_acq)
#pragma intrinsic(_InterlockedExchangeAdd_rel)
#pragma intrinsic(_InterlockedExchangeAdd_nf)
#pragma intrinsic(_InterlockedCompareExchange_rel)
#pragma intrinsic(_InterlockedCompareExchange_nf)
#pragma intrinsic(_InterlockedAnd64_acq)
#pragma intrinsic(_InterlockedAnd64_rel)
#pragma intrinsic(_InterlockedAnd64_nf)
#pragma intrinsic(_InterlockedOr64_acq)
#pragma intrinsic(_InterlockedOr64_rel)
#pragma intrinsic(_InterlockedOr64_nf)
#pragma intrinsic(_InterlockedXor64_acq)
#pragma intrinsic(_InterlockedXor64_rel)
#pragma intrinsic(_InterlockedXor64_nf)
#pragma intrinsic(_InterlockedIncrement64_acq)
#pragma intrinsic(_InterlockedIncrement64_rel)
#pragma intrinsic(_InterlockedIncrement64_nf)
#pragma intrinsic(_InterlockedDecrement64_acq)
#pragma intrinsic(_InterlockedDecrement64_rel)
#pragma intrinsic(_InterlockedDecrement64_nf)
#pragma intrinsic(_InterlockedExchange64_acq)
#pragma intrinsic(_InterlockedExchange64_nf)
#pragma intrinsic(_InterlockedCompareExchange64_acq)
#pragma intrinsic(_InterlockedCompareExchange64_rel)
#pragma intrinsic(_InterlockedCompareExchange64_nf)
#pragma intrinsic(_InterlockedExchangePointer_acq)
#pragma intrinsic(_InterlockedExchangePointer_nf)
#pragma intrinsic(_InterlockedCompareExchangePointer_acq)
#pragma intrinsic(_InterlockedCompareExchangePointer_rel)
#pragma intrinsic(_InterlockedCompareExchangePointer_nf)
#define InterlockedAndAcquire8 _InterlockedAnd8_acq
#define InterlockedAndRelease8 _InterlockedAnd8_rel
#define InterlockedAndNoFence8 _InterlockedAnd8_nf
#define InterlockedOrAcquire8 _InterlockedOr8_acq
#define InterlockedOrRelease8 _InterlockedOr8_rel
#define InterlockedOrNoFence8 _InterlockedOr8_nf
#define InterlockedXorAcquire8 _InterlockedXor8_acq
#define InterlockedXorRelease8 _InterlockedXor8_rel
#define InterlockedXorNoFence8 _InterlockedXor8_nf
#define InterlockedAndAcquire16 _InterlockedAnd16_acq
#define InterlockedAndRelease16 _InterlockedAnd16_rel
#define InterlockedAndNoFence16 _InterlockedAnd16_nf
#define InterlockedOrAcquire16 _InterlockedOr16_acq
#define InterlockedOrRelease16 _InterlockedOr16_rel
#define InterlockedOrNoFence16 _InterlockedOr16_nf
#define InterlockedXorAcquire16 _InterlockedXor16_acq
#define InterlockedXorRelease16 _InterlockedXor16_rel
#define InterlockedXorNoFence16 _InterlockedXor16_nf
#define InterlockedIncrementAcquire16 _InterlockedIncrement16_acq
#define InterlockedIncrementRelease16 _InterlockedIncrement16_rel
#define InterlockedIncrementNoFence16 _InterlockedIncrement16_nf
#define InterlockedDecrementAcquire16 _InterlockedDecrement16_acq
#define InterlockedDecrementRelease16 _InterlockedDecrement16_rel
#define InterlockedDecrementNoFence16 _InterlockedDecrement16_nf
#define InterlockedExchangeAcquire16 _InterlockedExchange16_acq
#define InterlockedExchangeNoFence16 _InterlockedExchange16_nf
#define InterlockedCompareExchangeAcquire16 _InterlockedCompareExchange16_acq
#define InterlockedCompareExchangeRelease16 _InterlockedCompareExchange16_rel
#define InterlockedCompareExchangeNoFence16 _InterlockedCompareExchange16_nf
#define InterlockedAndAcquire _InterlockedAnd_acq
#define InterlockedAndRelease _InterlockedAnd_rel
#define InterlockedAndNoFence _InterlockedAnd_nf
#define InterlockedOrAcquire _InterlockedOr_acq
#define InterlockedOrRelease _InterlockedOr_rel
#define InterlockedOrNoFence _InterlockedOr_nf
#define InterlockedXorAcquire _InterlockedXor_acq
#define InterlockedXorRelease _InterlockedXor_rel
#define InterlockedXorNoFence _InterlockedXor_nf
#define InterlockedIncrementAcquire _InterlockedIncrement_acq
#define InterlockedIncrementRelease _InterlockedIncrement_rel
#define InterlockedIncrementNoFence _InterlockedIncrement_nf
#define InterlockedDecrementAcquire _InterlockedDecrement_acq
#define InterlockedDecrementRelease _InterlockedDecrement_rel
#define InterlockedDecrementNoFence _InterlockedDecrement_nf
#define InterlockedAddAcquire _InterlockedAdd_acq
#define InterlockedAddRelease _InterlockedAdd_rel
#define InterlockedAddNoFence _InterlockedAdd_nf
#define InterlockedExchangeAcquire _InterlockedExchange_acq
#define InterlockedExchangeNoFence _InterlockedExchange_nf
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd_acq
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd_rel
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd_nf
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange_acq
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange_rel
#define InterlockedCompareExchangeNoFence _InterlockedCompareExchange_nf
#define InterlockedAndAcquire64 _InterlockedAnd64_acq
#define InterlockedAndRelease64 _InterlockedAnd64_rel
#define InterlockedAndNoFence64 _InterlockedAnd64_nf
#define InterlockedOrAcquire64 _InterlockedOr64_acq
#define InterlockedOrRelease64 _InterlockedOr64_rel
#define InterlockedOrNoFence64 _InterlockedOr64_nf
#define InterlockedXorAcquire64 _InterlockedXor64_acq
#define InterlockedXorRelease64 _InterlockedXor64_rel
#define InterlockedXorNoFence64 _InterlockedXor64_nf
#define InterlockedIncrementAcquire64 _InterlockedIncrement64_acq
#define InterlockedIncrementRelease64 _InterlockedIncrement64_rel
#define InterlockedIncrementNoFence64 _InterlockedIncrement64_nf
#define InterlockedDecrementAcquire64 _InterlockedDecrement64_acq
#define InterlockedDecrementRelease64 _InterlockedDecrement64_rel
#define InterlockedDecrementNoFence64 _InterlockedDecrement64_nf
#define InterlockedAddAcquire64 _InterlockedAdd64_acq
#define InterlockedAddRelease64 _InterlockedAdd64_rel
#define InterlockedAddNoFence64 _InterlockedAdd64_nf
#define InterlockedExchangeAcquire64 _InterlockedExchange64_acq
#define InterlockedExchangeNoFence64 _InterlockedExchange64_nf
#define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64_acq
#define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64_rel
#define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64_nf
#define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64_acq
#define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64_rel
#define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64_nf
#define InterlockedCompareExchange128 _InterlockedCompareExchange128
// AMD64_WORKITEM : these are redundant but necessary for AMD64 compatibility
#define InterlockedAnd64Acquire _InterlockedAnd64_acq
#define InterlockedAnd64Release _InterlockedAnd64_rel
#define InterlockedAnd64NoFence _InterlockedAnd64_nf
#define InterlockedOr64Acquire _InterlockedOr64_acq
#define InterlockedOr64Release _InterlockedOr64_rel
#define InterlockedOr64NoFence _InterlockedOr64_nf
#define InterlockedXor64Acquire _InterlockedXor64_acq
#define InterlockedXor64Release _InterlockedXor64_rel
#define InterlockedXor64NoFence _InterlockedXor64_nf
#define InterlockedExchangePointerAcquire _InterlockedExchangePointer_acq
#define InterlockedExchangePointerNoFence _InterlockedExchangePointer_nf
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePointer_acq
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePointer_rel
#define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePointer_nf
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a, b)
#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAddAcquire64((LONG64 *)a, b)
#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAddNoFence64((LONG64 *)a, b)
#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrementNoFence64((LONG64 *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence64((LONG64 *)a)
#endif // defined(_M_ARM64)
#if defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64)
#pragma intrinsic(__getReg)
#pragma intrinsic(__getCallerReg)
#pragma intrinsic(__getRegFp)
#pragma intrinsic(__getCallerRegFp)
#pragma intrinsic(__setReg)
#pragma intrinsic(__setCallerReg)
#pragma intrinsic(__setRegFp)
#pragma intrinsic(__setCallerRegFp)
//
// Memory barriers and prefetch intrinsics.
//
#pragma intrinsic(__yield)
#pragma intrinsic(__prefetch)
#pragma intrinsic(__dmb)
#pragma intrinsic(__dsb)
#pragma intrinsic(__isb)
#pragma intrinsic(_ReadWriteBarrier)
#pragma intrinsic(_WriteBarrier)
#define MemoryBarrier() __dmb(_ARM64_BARRIER_SY)
#define PreFetchCacheLine(l,a) __prefetch((const void *) (a))
#define PrefetchForWrite(p) __prefetch((const void *) (p))
#define ReadForWriteAccess(p) (*(p))
#define _DataSynchronizationBarrier() __dsb(_ARM64_BARRIER_SY)
#define _InstructionSynchronizationBarrier() __isb(_ARM64_BARRIER_SY)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
__dmb(_ARM64_BARRIER_ISHST);
__yield();
}
//
// Define accessors for volatile loads and stores.
//
#pragma intrinsic(__iso_volatile_load8)
#pragma intrinsic(__iso_volatile_load16)
#pragma intrinsic(__iso_volatile_load32)
#pragma intrinsic(__iso_volatile_load64)
#pragma intrinsic(__iso_volatile_store8)
#pragma intrinsic(__iso_volatile_store16)
#pragma intrinsic(__iso_volatile_store32)
#pragma intrinsic(__iso_volatile_store64)
// end_wdm end_ntndis end_ntosp end_ntminiport end_ntoshvp
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_wdm begin_ntndis begin_ntosp begin_ntminiport begin_ntoshvp
FORCEINLINE
CHAR
ReadAcquire8 (
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
CHAR Value;
Value = __iso_volatile_load8(Source);
__dmb(_ARM64_BARRIER_ISH);
return Value;
}
FORCEINLINE
CHAR
ReadNoFence8 (
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
CHAR Value;
Value = __iso_volatile_load8(Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease8 (
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
)
{
__dmb(_ARM64_BARRIER_ISH);
__iso_volatile_store8(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence8 (
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
)
{
__iso_volatile_store8(Destination, Value);
return;
}
FORCEINLINE
SHORT
ReadAcquire16 (
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
SHORT Value;
Value = __iso_volatile_load16(Source);
__dmb(_ARM64_BARRIER_ISH);
return Value;
}
FORCEINLINE
SHORT
ReadNoFence16 (
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
SHORT Value;
Value = __iso_volatile_load16(Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease16 (
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
)
{
__dmb(_ARM64_BARRIER_ISH);
__iso_volatile_store16(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence16 (
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
)
{
__iso_volatile_store16(Destination, Value);
return;
}
FORCEINLINE
LONG
ReadAcquire (
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
LONG Value;
Value = __iso_volatile_load32((int *)Source);
__dmb(_ARM64_BARRIER_ISH);
return Value;
}
FORCEINLINE
LONG
ReadNoFence (
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
LONG Value;
Value = __iso_volatile_load32((int *)Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease (
_Out_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
)
{
__dmb(_ARM64_BARRIER_ISH);
__iso_volatile_store32((int *)Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence (
_Out_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
)
{
__iso_volatile_store32((int *)Destination, Value);
return;
}
FORCEINLINE
LONG64
ReadAcquire64 (
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
LONG64 Value;
Value = __iso_volatile_load64(Source);
__dmb(_ARM64_BARRIER_ISH);
return Value;
}
FORCEINLINE
LONG64
ReadNoFence64 (
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
LONG64 Value;
Value = __iso_volatile_load64(Source);
return Value;
}
FORCEINLINE
VOID
WriteRelease64 (
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
)
{
__dmb(_ARM64_BARRIER_ISH);
__iso_volatile_store64(Destination, Value);
return;
}
FORCEINLINE
VOID
WriteNoFence64 (
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value
)
{
__iso_volatile_store64(Destination, Value);
return;
}
// end_wdm end_ntndis end_ntosp end_ntminiport end_ntoshvp
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_wdm begin_ntndis begin_ntosp begin_ntminiport begin_ntoshvp
//
// Define coprocessor access intrinsics. Coprocessor 15 contains
// registers for the MMU, cache, TLB, feature bits, core
// identification and performance counters.
//
// op0=2/3 encodings, use with _Read/WriteStatusReg
#define ARM64_SYSREG(op0, op1, crn, crm, op2) \
( ((op0 & 1) << 14) | \
((op1 & 7) << 11) | \
((crn & 15) << 7) | \
((crm & 15) << 3) | \
((op2 & 7) << 0) )
// op0=1 encodings, use with __sys
#define ARM64_SYSINSTR(op0, op1, crn, crm, op2) \
( ((op1 & 7) << 11) | \
((crn & 15) << 7) | \
((crm & 15) << 3) | \
((op2 & 7) << 0) )
#define ARM64_SYSREG_OP1(_Reg_) (((_Reg_) >> 11) & 7)
#define ARM64_SYSREG_CRN(_Reg_) (((_Reg_) >> 7) & 15)
#define ARM64_SYSREG_CRM(_Reg_) (((_Reg_) >> 3) & 15)
#define ARM64_SYSREG_OP2(_Reg_) ((_Reg_) & 7)
#define ARM64_CNTVCT ARM64_SYSREG(3,3,14, 0,2) // Generic Timer counter register
#define ARM64_PMCCNTR_EL0 ARM64_SYSREG(3,3, 9,13,0) // Cycle Count Register [CP15_PMCCNTR]
#define ARM64_PMSELR_EL0 ARM64_SYSREG(3,3, 9,12,5) // Event Counter Selection Register [CP15_PMSELR]
#define ARM64_PMXEVCNTR_EL0 ARM64_SYSREG(3,3, 9,13,2) // Event Count Register [CP15_PMXEVCNTR]
#define ARM64_PMXEVCNTRn_EL0(n) ARM64_SYSREG(3,3,14, 8+((n)/8), (n)%8) // Direct Event Count Register [n/a]
#define ARM64_TPIDR_EL0 ARM64_SYSREG(3,3,13, 0,2) // Thread ID Register, User Read/Write [CP15_TPIDRURW]
#define ARM64_TPIDRRO_EL0 ARM64_SYSREG(3,3,13, 0,3) // Thread ID Register, User Read Only [CP15_TPIDRURO]
#define ARM64_TPIDR_EL1 ARM64_SYSREG(3,0,13, 0,4) // Thread ID Register, Privileged Only [CP15_TPIDRPRW]
#pragma intrinsic(_WriteStatusReg)
#pragma intrinsic(_ReadStatusReg)
//
// PreFetchCacheLine level defines.
//
#define PF_TEMPORAL_LEVEL_1 0
#define PF_TEMPORAL_LEVEL_2 1
#define PF_TEMPORAL_LEVEL_3 2
#define PF_NON_TEMPORAL_LEVEL_ALL 3
#if defined(_M_HYBRID_X86_ARM64)
extern DWORD64 (*_os_wowa64_rdtsc) (VOID);
#endif
//
// Define function to read the value of the time stamp counter.
//
#if defined(_M_HYBRID_X86_ARM64)
DECLSPEC_GUARDNOCF
#endif
FORCEINLINE
DWORD64
ReadTimeStampCounter(
VOID
)
{
#if defined(_M_HYBRID_X86_ARM64)
//
// Call into the emulator to return the same value as the x86 RDTSC
// instruction.
//
return (*_os_wowa64_rdtsc)();
#else
return (DWORD64)_ReadStatusReg(ARM64_PMCCNTR_EL0);
#endif
}
FORCEINLINE
DWORD64
ReadPMC (
_In_ DWORD Counter
)
{
// ARM64_WORKITEM: These can be directly accessed, but
// given our usage, it that any benefit? We need to know
// the register index at compile time, though atomicity
// benefits would still be good if needed, even if we
// went with a big switch statement.
_WriteStatusReg(ARM64_PMSELR_EL0, Counter);
return (DWORD64)_ReadStatusReg(ARM64_PMXEVCNTR_EL0);
}
//
// Define functions to capture the high 64-bits of a 128-bit multiply.
//
#define MultiplyHigh __mulh
#define UnsignedMultiplyHigh __umulh
#pragma intrinsic(__mulh)
#pragma intrinsic(__umulh)
#endif // defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64)
#endif // !defined(RC_INVOKED) && !defined(MIDL_PASS)
#else // defined(_M_CEE_PURE)
#include <intrin.h>
#endif // !defined(_M_CEE_PURE)
#if defined(_M_CEE_PURE)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
}
#endif // defined(_M_CEE_PURE)
//
// The following values specify the type of access in the first parameter
// of the exception record whan the exception code specifies an access
// violation.
//
#define EXCEPTION_READ_FAULT 0 // exception caused by a read
#define EXCEPTION_WRITE_FAULT 1 // exception caused by a write
#define EXCEPTION_EXECUTE_FAULT 8 // exception caused by an instruction fetch
// begin_wx86
//
// Define initial Cpsr/Fpscr value
//
#define INITIAL_CPSR 0x10
#define INITIAL_FPSCR 0
// end_wx86
// begin_wx86
//
// The following flags control the contents of the CONTEXT structure.
//
#if !defined(RC_INVOKED)
#define CONTEXT_ARM64 0x00400000L
// end_wx86
#define CONTEXT_ARM64_CONTROL (CONTEXT_ARM64 | 0x1L)
#define CONTEXT_ARM64_INTEGER (CONTEXT_ARM64 | 0x2L)
#define CONTEXT_ARM64_FLOATING_POINT (CONTEXT_ARM64 | 0x4L)
#define CONTEXT_ARM64_DEBUG_REGISTERS (CONTEXT_ARM64 | 0x8L)
#define CONTEXT_ARM64_X18 (CONTEXT_ARM64 | 0x10L)
//
// CONTEXT_ARM64_X18 is not part of CONTEXT_ARM64_FULL because in NT user-mode
// threads, x18 contains a pointer to the TEB and should generally not be set
// without intending to.
//
#define CONTEXT_ARM64_FULL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT)
#define CONTEXT_ARM64_ALL (CONTEXT_ARM64_CONTROL | CONTEXT_ARM64_INTEGER | CONTEXT_ARM64_FLOATING_POINT | CONTEXT_ARM64_DEBUG_REGISTERS | CONTEXT_ARM64_X18)
#if defined(_ARM64_)
#define CONTEXT_CONTROL CONTEXT_ARM64_CONTROL
#define CONTEXT_INTEGER CONTEXT_ARM64_INTEGER
#define CONTEXT_FLOATING_POINT CONTEXT_ARM64_FLOATING_POINT
#define CONTEXT_DEBUG_REGISTERS CONTEXT_ARM64_DEBUG_REGISTERS
#define CONTEXT_FULL CONTEXT_ARM64_FULL
#define CONTEXT_ALL CONTEXT_ARM64_ALL
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
#endif
#if defined(_ARM64_) || defined(_CHPE_X86_ARM64_) || defined(_X86_)
//
// This flag is set by the unwinder if it has unwound to a call
// site, and cleared whenever it unwinds through a trap frame.
// It is used by language-specific exception handlers to help
// differentiate exception scopes during dispatching.
//
#define CONTEXT_UNWOUND_TO_CALL 0x20000000
#define CONTEXT_RET_TO_GUEST 0x04000000
#endif
// begin_wx86
#endif // !defined(RC_INVOKED)
// begin_ntoshvp
//
// Specify the number of breakpoints and watchpoints that the OS
// will track. Architecturally, ARM64 supports up to 16. In practice,
// however, almost no one implements more than 4 of each.
//
#define ARM64_MAX_BREAKPOINTS 8
#define ARM64_MAX_WATCHPOINTS 2
//
// Context Frame
//
// This frame has a several purposes: 1) it is used as an argument to
// NtContinue, 2) it is used to constuct a call frame for APC delivery,
// and 3) it is used in the user level thread creation routines.
//
//
// The flags field within this record controls the contents of a CONTEXT
// record.
//
// If the context record is used as an input parameter, then for each
// portion of the context record controlled by a flag whose value is
// set, it is assumed that that portion of the context record contains
// valid context. If the context record is being used to modify a threads
// context, then only that portion of the threads context is modified.
//
// If the context record is used as an output parameter to capture the
// context of a thread, then only those portions of the thread's context
// corresponding to set flags will be returned.
//
// CONTEXT_CONTROL specifies FP, LR, SP, PC, and CPSR
//
// CONTEXT_INTEGER specifies X0-X28
//
// CONTEXT_FLOATING_POINT specifies Fpcr, Fpsr and Q0-Q31 / D0-D31 / S0-S31
//
// CONTEXT_DEBUG_REGISTERS specifies up to 16 of DBGBVR, DBGBCR, DBGWVR,
// DBGWCR.
//
typedef union _ARM64_NT_NEON128 {
struct {
ULONGLONG Low;
LONGLONG High;
} DUMMYSTRUCTNAME;
double D[2];
float S[4];
WORD H[8];
BYTE B[16];
} ARM64_NT_NEON128, *PARM64_NT_NEON128;
#if defined(_ARM64_)
typedef ARM64_NT_NEON128 NEON128, *PNEON128;
#endif
#if defined(_ARM64_)
#pragma push_macro("_ARM64_NT_CONTEXT")
#undef _ARM64_NT_CONTEXT
#define _ARM64_NT_CONTEXT _CONTEXT
#pragma push_macro("ARM64_NT_NEON128")
#undef ARM64_NT_NEON128
#define ARM64_NT_NEON128 NEON128
#endif
typedef struct DECLSPEC_ALIGN(16) _ARM64_NT_CONTEXT {
//
// Control flags.
//
/* +0x000 */ DWORD ContextFlags;
//
// Integer registers
//
/* +0x004 */ DWORD Cpsr; // NZVF + DAIF + CurrentEL + SPSel
/* +0x008 */ union {
struct {
DWORD64 X0;
DWORD64 X1;
DWORD64 X2;
DWORD64 X3;
DWORD64 X4;
DWORD64 X5;
DWORD64 X6;
DWORD64 X7;
DWORD64 X8;
DWORD64 X9;
DWORD64 X10;
DWORD64 X11;
DWORD64 X12;
DWORD64 X13;
DWORD64 X14;
DWORD64 X15;
DWORD64 X16;
DWORD64 X17;
DWORD64 X18;
DWORD64 X19;
DWORD64 X20;
DWORD64 X21;
DWORD64 X22;
DWORD64 X23;
DWORD64 X24;
DWORD64 X25;
DWORD64 X26;
DWORD64 X27;
DWORD64 X28;
/* +0x0f0 */ DWORD64 Fp;
/* +0x0f8 */ DWORD64 Lr;
} DUMMYSTRUCTNAME;
DWORD64 X[31];
} DUMMYUNIONNAME;
/* +0x100 */ DWORD64 Sp;
/* +0x108 */ DWORD64 Pc;
//
// Floating Point/NEON Registers
//
/* +0x110 */ ARM64_NT_NEON128 V[32];
/* +0x310 */ DWORD Fpcr;
/* +0x314 */ DWORD Fpsr;
//
// Debug registers
//
/* +0x318 */ DWORD Bcr[ARM64_MAX_BREAKPOINTS];
/* +0x338 */ DWORD64 Bvr[ARM64_MAX_BREAKPOINTS];
/* +0x378 */ DWORD Wcr[ARM64_MAX_WATCHPOINTS];
/* +0x380 */ DWORD64 Wvr[ARM64_MAX_WATCHPOINTS];
/* +0x390 */
} ARM64_NT_CONTEXT, *PARM64_NT_CONTEXT;
#if defined(_ARM64_)
#undef ARM64_NT_NEON128
#pragma pop_macro("ARM64_NT_NEON128")
#undef _ARM64_NT_CONTEXT
#pragma pop_macro("_ARM64_NT_CONTEXT")
typedef ARM64_NT_CONTEXT CONTEXT, *PCONTEXT;
#endif
// end_ntoshvp
// end_wx86
//
// Select platform-specific definitions
//
#if defined(_ARM64_)
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
#endif
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY ARM64_RUNTIME_FUNCTION, *PARM64_RUNTIME_FUNCTION;
typedef SCOPE_TABLE_ARM64 SCOPE_TABLE, *PSCOPE_TABLE;
//
// Define unwind information flags.
//
#define UNW_FLAG_NHANDLER 0x0 /* any handler */
#define UNW_FLAG_EHANDLER 0x1 /* filter handler */
#define UNW_FLAG_UHANDLER 0x2 /* unwind handler */
//
// Define unwind history table structure.
//
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
DWORD64 ImageBase;
PARM64_RUNTIME_FUNCTION FunctionEntry;
} UNWIND_HISTORY_TABLE_ENTRY, *PUNWIND_HISTORY_TABLE_ENTRY;
typedef struct _UNWIND_HISTORY_TABLE {
DWORD Count;
BYTE LocalHint;
BYTE GlobalHint;
BYTE Search;
BYTE Once;
DWORD64 LowAddress;
DWORD64 HighAddress;
UNWIND_HISTORY_TABLE_ENTRY Entry[UNWIND_HISTORY_TABLE_SIZE];
} UNWIND_HISTORY_TABLE, *PUNWIND_HISTORY_TABLE;
#if defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
#pragma push_macro("_DISPATCHER_CONTEXT_ARM64")
#undef _DISPATCHER_CONTEXT_ARM64
#define _DISPATCHER_CONTEXT_ARM64 _DISPATCHER_CONTEXT
#endif
//
// Define exception dispatch context structure.
//
typedef struct _DISPATCHER_CONTEXT_ARM64 {
ULONG_PTR ControlPc;
ULONG_PTR ImageBase;
PARM64_RUNTIME_FUNCTION FunctionEntry;
ULONG_PTR EstablisherFrame;
ULONG_PTR TargetPc;
PARM64_NT_CONTEXT ContextRecord;
PEXCEPTION_ROUTINE LanguageHandler;
PVOID HandlerData;
PUNWIND_HISTORY_TABLE HistoryTable;
DWORD ScopeIndex;
BOOLEAN ControlPcIsUnwound;
PBYTE NonVolatileRegisters;
} DISPATCHER_CONTEXT_ARM64, *PDISPATCHER_CONTEXT_ARM64;
#if defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
#undef _DISPATCHER_CONTEXT_ARM64
#pragma pop_macro("_DISPATCHER_CONTEXT_ARM64")
typedef DISPATCHER_CONTEXT_ARM64 DISPATCHER_CONTEXT, *PDISPATCHER_CONTEXT;
#endif
#if defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
//
// Define exception filter and termination handler function types.
// N.B. These functions use a custom calling convention.
//
struct _EXCEPTION_POINTERS;
typedef
LONG
(*PEXCEPTION_FILTER) (
struct _EXCEPTION_POINTERS *ExceptionPointers,
DWORD64 EstablisherFrame
);
typedef
VOID
(*PTERMINATION_HANDLER) (
BOOLEAN AbnormalTermination,
DWORD64 EstablisherFrame
);
#endif // defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
#if defined(_ARM64_)
//
// Define dynamic function table entry.
//
typedef
_Function_class_(GET_RUNTIME_FUNCTION_CALLBACK)
PARM64_RUNTIME_FUNCTION
GET_RUNTIME_FUNCTION_CALLBACK (
_In_ DWORD64 ControlPc,
_In_opt_ PVOID Context
);
typedef GET_RUNTIME_FUNCTION_CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK;
typedef
_Function_class_(OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK)
DWORD
OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK (
_In_ HANDLE Process,
_In_ PVOID TableAddress,
_Out_ PDWORD Entries,
_Out_ PARM64_RUNTIME_FUNCTION* Functions
);
typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK;
#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
"OutOfProcessFunctionTableCallback"
#endif // defined(_ARM64_)
// begin_ntoshvp
#endif // defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
typedef
struct
_KNONVOLATILE_CONTEXT_POINTERS_ARM64
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
KNONVOLATILE_CONTEXT_POINTERS_ARM64
, *
PKNONVOLATILE_CONTEXT_POINTERS_ARM64
;
#if defined(_ARM64_)
typedef KNONVOLATILE_CONTEXT_POINTERS_ARM64 KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
#endif
#if defined(_CHPE_X86_ARM64_)
//
// The following typedef works-around the fact that the dummy NV_C_P for x86
// is defined in i386.h, which is incorrect because it doesn't have the
// correct scope. This will not be needed after fixing that: moving the
// definition to nti386_x.w with the same scoping as other architectures.
//
typedef struct _KNONVOLATILE_CONTEXT_POINTERS *PKNONVOLATILE_CONTEXT_POINTERS;
#endif
#ifdef __cplusplus
extern
"C"
{
#endif
#if !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#define _DBGRAISEASSERTIONFAILURE_
#if defined(_PREFAST_)
__analysis_noreturn
FORCEINLINE
VOID
DbgRaiseAssertionFailure (
VOID
);
#endif
#if defined(_AMD64_)
#if defined(_M_AMD64)
VOID
__int2c (
VOID
);
#pragma intrinsic(__int2c)
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __int2c()
#endif // !defined(_PREFAST_)
#endif // defined(_M_AMD64)
#elif defined(_X86_) && !defined(_M_HYBRID_X86_ARM64)
#if defined(_M_IX86) && !defined(_M_HYBRID_X86_ARM64)
#if _MSC_FULL_VER >= 140030222
(
);
#pragma intrinsic(__int2c)
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __int2c()
#endif // !defined(_PREFAST_)
#else // _MSC_FULL_VER >= 140030222
#pragma warning( push )
#pragma warning( disable : 4793 )
#if !defined(_PREFAST_)
__analysis_noreturn
FORCEINLINE
VOID
DbgRaiseAssertionFailure (
VOID
)
{
__asm int 0x2c
}
#endif // !defined(_PREFAST_)
#pragma warning( pop )
#endif // _MSC_FULL_VER >= 140030222
#endif // defined(_M_IX86)
#elif defined(_IA64_)
#if defined(_M_IA64)
void
__break(
_In_ int StIIM
);
#pragma intrinsic (__break)
#define BREAK_DEBUG_BASE 0x080000
#define ASSERT_BREAKPOINT (BREAK_DEBUG_BASE+3) // Cause a STATUS_ASSERTION_FAILURE exception to be raised.
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
#endif // !defined(_PREFAST_)
#endif // defined(_M_IA64)
#elif defined(_ARM64_) || defined(_CHPE_X86_ARM64_)
#if defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64)
void
__break(
_In_ int Code
);
#pragma intrinsic (__break)
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __break(0xf001)
#endif // !defined(_PREFAST_)
#endif // defined(_M_ARM64) || defined(_M_HYBRID_X86_ARM64)
#elif defined(_ARM_)
#if defined(_M_ARM)
VOID
__emit(
const unsigned __int32 opcode
);
#pragma intrinsic(__emit)
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __emit(0xdefc) // THUMB_ASSERT
#endif // !defined(_PREFAST_)
#endif // defined(_M_ARM)
#endif // _AMD64_, _X86_, _IA64_, _ARM64_, _ARM_
#endif // !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#ifdef __cplusplus
}
#endif
#ifdef _X86_
#if defined(_M_CEE_PURE)
#define CDECL_NON_WVMPURE
#else
#define CDECL_NON_WVMPURE __cdecl
#endif
#if !defined(MIDL_PASS)
#if !defined(RC_INVOKED)
#if _MSC_VER >= 1200
#pragma warning(push)
#endif // _MSC_VER >= 1200
#if _MSC_VER >= 1200
#pragma warning( pop )
#else
#pragma warning( default:4164 ) // reenable C4164 warning
#endif // _MSC_VER >= 1200
#endif // !defined(MIDL_PASS)
#endif // !defined(RC_INVOKED)
#if defined(_M_IX86) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#ifdef __cplusplus
extern
"C"
{
#endif
#if !defined(_MANAGED)
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define InterlockedBitTestAndSet _interlockedbittestandset
#define InterlockedBitTestAndSetAcquire _interlockedbittestandset
#define InterlockedBitTestAndSetRelease _interlockedbittestandset
#define InterlockedBitTestAndSetNoFence _interlockedbittestandset
#define InterlockedBitTestAndReset _interlockedbittestandreset
#define InterlockedBitTestAndResetAcquire _interlockedbittestandreset
#define InterlockedBitTestAndResetRelease _interlockedbittestandreset
#define InterlockedBitTestAndResetNoFence _interlockedbittestandreset
_Must_inspect_result_
(
_In_reads_bytes_((Offset/8)+1) LONG const *Base,
_In_range_(>=,0) LONG Offset
);
(
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
(
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
(
_Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_range_(>=,0) LONG Offset
);
_interlockedbittestandset
(
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Base,
_In_range_(>=,0) LONG Offset
);
_interlockedbittestandreset
(
_Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Base,
_In_range_(>=,0) LONG Offset
);
#pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandreset)
#define BitScanForward _BitScanForward
#define BitScanReverse _BitScanReverse
_Success_(return != 0)
(
);
_Success_(return != 0)
(
);
#pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse)
_Success_(return != 0)
(
)
{
if
(
(
, (
)
)) {
return
1
;
}
if
(
(
, (
)(
>>
32
))) {
*
+=
32
;
return
1
;
}
return
0
;
}
#define BitScanForward64 _InlineBitScanForward64
_Success_(return != 0)
(
)
{
if
(
(
, (
)(
>>
32
))) {
*
+=
32
;
return
1
;
}
if
(
(
, (
)
)) {
return
1
;
}
return
0
;
}
#define BitScanReverse64 _InlineBitScanReverse64
#endif // !defined(_MANAGED)
#if !defined(_MANAGED)
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedIncrementAcquire16 _InterlockedIncrement16
#define InterlockedIncrementRelease16 _InterlockedIncrement16
#define InterlockedIncrementNoFence16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedDecrementAcquire16 _InterlockedDecrement16
#define InterlockedDecrementRelease16 _InterlockedDecrement16
#define InterlockedDecrementNoFence16 _InterlockedDecrement16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeAcquire16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeRelease16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeNoFence16 _InterlockedCompareExchange16
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64
_Inout_ _Interlocked_operand_ SHORT volatile *Addend
);
_Inout_ _Interlocked_operand_ SHORT volatile *Addend
);
InterlockedCompareExchange16 (
_InterlockedCompareExchange16
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
InterlockedCompareExchange64 (
_InterlockedCompareExchange64
(
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
);
#pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedCompareExchange64)
#endif // !defined(_MANAGED)
#define InterlockedAnd _InterlockedAnd
#define InterlockedAndAcquire _InterlockedAnd
#define InterlockedAndRelease _InterlockedAnd
#define InterlockedAndNoFence _InterlockedAnd
#define InterlockedOr _InterlockedOr
#define InterlockedOrAcquire _InterlockedOr
#define InterlockedOrRelease _InterlockedOr
#define InterlockedOrNoFence _InterlockedOr
#define InterlockedXor _InterlockedXor
#define InterlockedXorAcquire _InterlockedXor
#define InterlockedXorRelease _InterlockedXor
#define InterlockedXorNoFence _InterlockedXor
#define InterlockedIncrement _InterlockedIncrement
#define InterlockedIncrementAcquire _InterlockedIncrement
#define InterlockedIncrementRelease _InterlockedIncrement
#define InterlockedIncrementNoFence _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement
#define InterlockedDecrementAcquire _InterlockedDecrement
#define InterlockedDecrementRelease _InterlockedDecrement
#define InterlockedDecrementNoFence _InterlockedDecrement
#define InterlockedAdd _InlineInterlockedAdd
#define InterlockedAddAcquire _InlineInterlockedAdd
#define InterlockedAddRelease _InlineInterlockedAdd
#define InterlockedAddNoFence _InlineInterlockedAdd
#define InterlockedAddNoFence64 _InlineInterlockedAdd64
#define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAcquire _InterlockedExchange
#define InterlockedExchangeNoFence _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd
#define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange
#define InterlockedCompareExchangeNoFence _InterlockedCompareExchange
#define InterlockedExchange16 _InterlockedExchange16
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
);
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
);
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
);
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
__cdecl
_Inout_ _Interlocked_operand_ LONG volatile *Target,
);
__cdecl
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
);
(
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
)
{
return InterlockedExchangeAdd(Addend, Value) + Value;
}
InterlockedCompareExchange (
_InterlockedCompareExchange
(
_Inout_ _Interlocked_operand_ LONG volatile * Destination,
);
#undef _InterlockedExchangePointer
_Ret_writes_(_Inexpressible_(Unknown))
_InlineInterlockedExchangePointer
(
_Inout_ _At_(*Destination,
_Pre_writable_byte_size_(_Inexpressible_(Unknown))
_Post_writable_byte_size_(_Inexpressible_(Unknown)))
_Interlocked_operand_ PVOID volatile * Destination,
)
{
return (PVOID)InterlockedExchange((LONG volatile *) Destination,
return
(
)
((
volatile
*)
,
(
)
);
}
#define InterlockedExchangePointer _InlineInterlockedExchangePointer
#define InterlockedExchangePointerAcquire _InlineInterlockedExchangePointer
#define InterlockedExchangePointerRelease _InlineInterlockedExchangePointer
#define InterlockedExchangePointerNoFence _InlineInterlockedExchangePointer
_Ret_writes_(_Inexpressible_(Unknown))
_InlineInterlockedCompareExchangePointer
(
_Inout_ _At_(*Destination,
_Pre_writable_byte_size_(_Inexpressible_(Unknown))
_Post_writable_byte_size_(_Inexpressible_(Unknown)))
_Interlocked_operand_ PVOID volatile * Destination,
)
{
return (PVOID)InterlockedCompareExchange((LONG volatile *) Destination,
return
(
)
_InterlockedCompareExchange
((
volatile
*)
,
(
)
,
(
)
);
}
#define InterlockedCompareExchangePointer \
_InlineInterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerAcquire \
_InlineInterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerRelease \
_InlineInterlockedCompareExchangePointer
#define InterlockedCompareExchangePointerNoFence \
_InlineInterlockedCompareExchangePointer
#pragma intrinsic(_InterlockedAnd)
#pragma intrinsic(_InterlockedOr)
#pragma intrinsic(_InterlockedXor)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedCompareExchange)
#if !defined(_MANAGED)
#if (_MSC_VER >= 1600)
#define InterlockedExchange8 _InterlockedExchange8
#define InterlockedExchange16 _InterlockedExchange16
_Inout_ _Interlocked_operand_ CHAR volatile *Target,
);
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
#pragma intrinsic(_InterlockedExchange8)
#pragma intrinsic(_InterlockedExchange16)
#endif // _MSC_VER >= 1600
#if _MSC_FULL_VER >= 140041204
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8
#define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16
char
InterlockedExchangeAdd8 (
_Inout_ _Interlocked_operand_ char volatile * _Addend,
);
char
_Inout_ _Interlocked_operand_ char volatile *Destination,
);
char
_Inout_ _Interlocked_operand_ char volatile *Destination,
);
char
_Inout_ _Interlocked_operand_ char volatile *Destination,
);
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
_InterlockedCompareExchange16
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
);
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination
);
(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination
);
#pragma intrinsic (_InterlockedExchangeAdd8)
#pragma intrinsic (_InterlockedAnd8)
#pragma intrinsic (_InterlockedOr8)
#pragma intrinsic (_InterlockedXor8)
#pragma intrinsic (_InterlockedAnd16)
#pragma intrinsic (_InterlockedOr16)
#pragma intrinsic (_InterlockedXor16)
#pragma intrinsic (_InterlockedCompareExchange16)
#pragma intrinsic (_InterlockedIncrement16)
#pragma intrinsic (_InterlockedDecrement16)
#endif /* _MSC_FULL_VER >= 140040816 */
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
(
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Destination,
}
while
(
_InterlockedCompareExchange64
(
,
Old
&
,
Old
) !=
Old
);
return
Old
;
}
#define InterlockedAnd64 _InlineInterlockedAnd64
#define InterlockedAnd64Acquire _InlineInterlockedAnd64
#define InterlockedAnd64Release _InlineInterlockedAnd64
#define InterlockedAnd64NoFence _InlineInterlockedAnd64
(
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Addend,
}
while
(
_InterlockedCompareExchange64
(
,
Old
+
,
Old
) !=
Old
);
return
Old
+
;
}
#define InterlockedAdd64 _InlineInterlockedAdd64
#define InterlockedAddAcquire64 _InlineInterlockedAdd64
#define InterlockedAddRelease64 _InlineInterlockedAdd64
#define InterlockedAddNoFence64 _InlineInterlockedAdd64
#endif // !defined(_MANAGED)
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAdd((LONG *)a, b)
#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAdd((LONG *)a, b)
#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrement((LONG *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrement((LONG *)a)
(
_Inout_ _Interlocked_operand_ LONG volatile *Target,
);
#pragma intrinsic(_InterlockedXor)
#define InterlockedXor _InterlockedXor
#if !defined(_MANAGED)
(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Destination,
}
while
(
_InterlockedCompareExchange64
(
,
Old
|
,
Old
) !=
Old
);
return
Old
;
}
#define InterlockedOr64 _InlineInterlockedOr64
(
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Destination,
}
while
(
_InterlockedCompareExchange64
(
,
Old
^
,
Old
) !=
Old
);
return
Old
;
}
#define InterlockedXor64 _InlineInterlockedXor64
_InlineInterlockedIncrement64
(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Addend,
}
while
(
_InterlockedCompareExchange64
(
,
Old
+
1
,
Old
) !=
Old
);
return
Old
+
1
;
}
#define InterlockedIncrement64 _InlineInterlockedIncrement64
#define InterlockedIncrementAcquire64 InterlockedIncrement64
#define InterlockedIncrementRelease64 InterlockedIncrement64
#define InterlockedIncrementNoFence64 InterlockedIncrement64
_InlineInterlockedDecrement64
(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Addend,
}
while
(
_InterlockedCompareExchange64
(
,
Old
-
1
,
Old
) !=
Old
);
return
Old
-
1
;
}
#define InterlockedDecrement64 _InlineInterlockedDecrement64
#define InterlockedDecrementAcquire64 InterlockedDecrement64
#define InterlockedDecrementRelease64 InterlockedDecrement64
#define InterlockedDecrementNoFence64 InterlockedDecrement64
_InlineInterlockedExchange64
(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Target,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Target,
}
while
(
_InterlockedCompareExchange64
(
,
,
Old
) !=
Old
);
return
Old
;
}
#define InterlockedExchange64 _InlineInterlockedExchange64
#define InterlockedExchangeAcquire64 InterlockedExchange64
#define InterlockedExchangeNoFence64 _InlineInterlockedExchange64
_InlineInterlockedExchangeAdd64
(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
)
{
;
do
{
Old
= *
;
} while (InterlockedCompareExchange64(Addend,
}
while
(
_InterlockedCompareExchange64
(
,
Old
+
,
Old
) !=
Old
);
return
Old
;
}
#define InterlockedExchangeAdd64 _InlineInterlockedExchangeAdd64
#define InterlockedExchangeAddNoFence64 _InlineInterlockedExchangeAdd64
(
);
(
);
(
);
(
);
(
);
(
);
#pragma intrinsic(__incfsbyte)
#pragma intrinsic(__addfsbyte)
#pragma intrinsic(__incfsword)
#pragma intrinsic(__addfsword)
#pragma intrinsic(__incfsdword)
#pragma intrinsic(__addfsdword)
#endif // !defined(_MANAGED)
#if !defined(_M_CEE_PURE)
#if _MSC_VER >= 1500
#define CpuIdEx __cpuidex
(
int
[
4
],
int
,
int
);
#pragma intrinsic(__cpuidex)
#endif
(
);
(
);
(
);
(
);
(
);
(
);
#pragma intrinsic(__readfsbyte)
#pragma intrinsic(__readfsword)
#pragma intrinsic(__readfsdword)
#pragma intrinsic(__writefsbyte)
#pragma intrinsic(__writefsword)
#pragma intrinsic(__writefsdword)
#endif // !defined(_M_CEE_PURE)
#if !defined(_MANAGED) && !defined(_M_HYBRID_X86_ARM64)
(
);
#pragma intrinsic(_mm_pause)
#define YieldProcessor _mm_pause
#endif // !defined(_MANAGED) && !defined(_M_HYBRID_X86_ARM64)
#ifdef __cplusplus
}
#endif
#endif /* !defined(MIDL_PASS) || defined(_M_IX86) */
#if !defined(MIDL_PASS) && defined(_M_IX86)
#if !defined(_M_CEE_PURE) && !defined(_M_HYBRID_X86_ARM64)
#pragma prefast(push)
#pragma warning(push)
#pragma prefast(disable:
6001
28113
,
"The barrier variable is accessed only to create a side effect."
)
#pragma warning(disable:
4793
)
(
)
{
;
InterlockedOr(&Barrier, 0);
return
;
}
#pragma warning(pop)
#pragma prefast(pop)
#endif /* !_M_CEE_PURE || !_M_HYBRID_X86_ARM64*/
#if !defined(_M_HYBRID_X86_ARM64)
#define _MM_HINT_T0 1
#define _MM_HINT_T1 2
#define _MM_HINT_T2 3
#define _MM_HINT_NTA 0
(
);
#pragma intrinsic(_mm_prefetch)
#define PF_TEMPORAL_LEVEL_1 _MM_HINT_T0
#define PF_TEMPORAL_LEVEL_2 _MM_HINT_T1
#define PF_TEMPORAL_LEVEL_3 _MM_HINT_T2
#define PF_NON_TEMPORAL_LEVEL_ALL _MM_HINT_NTA
#define PreFetchCacheLine(l, a) _mm_prefetch((CHAR CONST *) a, l)
#define PrefetchForWrite(p)
#define ReadForWriteAccess(p) (*(p))
#if !defined(_MANAGED)
#define ReadPMC __readpmc
(
);
#pragma intrinsic(__readpmc)
#define ReadTimeStampCounter() __rdtsc()
(
);
#pragma intrinsic(__rdtsc)
#endif // !defined(_MANAGED)
#endif // !defined(_M_HYBRID_X86_ARM64)
#if !defined(_MANAGED)
__inline
(
void
) {
return
*(
*) (
)
(
0x10
);}
__inline
(
void
) {
return
(
) (
)
(
0x10
);}
#endif // !defined(_MANAGED)
#endif // !defined(MIDL_PASS) && defined(_M_IX86)
#define EXCEPTION_READ_FAULT 0 // Access violation was caused by a read
#define EXCEPTION_WRITE_FAULT 1 // Access violation was caused by a write
#define EXCEPTION_EXECUTE_FAULT 8 // Access violation was caused by an instruction fetch
#define SIZE_OF_80387_REGISTERS 80
#if !defined(RC_INVOKED)
#define CONTEXT_i386 0x00010000L // this assumes that i386 and
#define CONTEXT_i486 0x00010000L // i486 have identical context records
#define CONTEXT_CONTROL (CONTEXT_i386 | 0x00000001L) // SS:SP, CS:IP, FLAGS, BP
#define CONTEXT_INTEGER (CONTEXT_i386 | 0x00000002L) // AX, BX, CX, DX, SI, DI
#define CONTEXT_SEGMENTS (CONTEXT_i386 | 0x00000004L) // DS, ES, FS, GS
#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 0x00000008L) // 387 state
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x00000010L) // DB 0-3,6,7
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_i386 | 0x00000020L) // cpu specific extensions
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER |\
CONTEXT_SEGMENTS)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
CONTEXT_EXTENDED_REGISTERS)
#define CONTEXT_XSTATE (CONTEXT_i386 | 0x00000040L)
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
#endif // !defined(RC_INVOKED)
typedef
struct
{
;
;
;
;
;
;
;
BYTE RegisterArea[SIZE_OF_80387_REGISTERS];
;
}
;
typedef
*
;
#define MAXIMUM_SUPPORTED_EXTENSION 512
#if !defined(__midl) && !defined(MIDL_PASS)
C_ASSERT(sizeof(XSAVE_FORMAT) == MAXIMUM_SUPPORTED_EXTENSION);
typedef
char
[(
sizeof
(
) ==
512
)?
1
:-
1
];
#endif
#include "pshpack4.h"
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
BYTE ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
}
;
typedef
*
;
#include "poppack.h"
#endif //_X86_
#ifndef _LDT_ENTRY_DEFINED
#define _LDT_ENTRY_DEFINED
typedef
struct
{
;
;
union
{
struct
{
;
;
;
;
}
;
struct
{
:
8
;
:
5
;
:
2
;
:
1
;
:
4
;
:
1
;
:
1
;
:
1
;
:
1
;
:
8
;
}
;
}
;
}
, *
;
#endif
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#if !defined(RC_INVOKED) && !defined(MIDL_PASS)
#if ((defined(_M_AMD64) || defined(_M_IX86)) && !defined(_M_HYBRID_X86_ARM64)) || defined(_M_CEE_PURE)
#ifdef __cplusplus
extern
"C"
{
#endif
(
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
)
{
*
=
;
return
;
}
(
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
)
{
*
=
;
return
;
}
(
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
)
{
*
=
;
return
;
}
(
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
)
{
*
=
;
return
;
}
(
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ LONG volatile *Destination,
)
{
*
=
;
return
;
}
(
_Out_ _Interlocked_operand_ LONG volatile *Destination,
)
{
*
=
;
return
;
}
(
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
;
Value
= *
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
)
{
*
=
;
return
;
}
(
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
)
{
*
=
;
return
;
}
#ifdef __cplusplus
}
#endif
#endif // defined(_M_AMD64) || defined(_M_IX86) || defined(_M_CEE_PURE)
(
_In_ _Interlocked_operand_ CHAR const volatile *Source
)
{
;
Value
= *(
*)
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ CHAR volatile *Destination,
)
{
*(
*)
=
;
return
;
}
(
_In_ _Interlocked_operand_ SHORT const volatile *Source
)
{
;
Value
= *(
*)
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ SHORT volatile *Destination,
)
{
*(
*)
=
;
return
;
}
(
_In_ _Interlocked_operand_ LONG const volatile *Source
)
{
;
Value
= *(
*)
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ LONG volatile *Destination,
)
{
*(
*)
=
;
return
;
}
(
_In_ _Interlocked_operand_ LONG64 const volatile *Source
)
{
;
Value
= *(
*)
;
return
Value
;
}
(
_Out_ _Interlocked_operand_ LONG64 volatile *Destination,
)
{
*(
*)
=
;
return
;
}
(
_In_ _Interlocked_operand_ BYTE const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ BYTE const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ BOOLEAN const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ BOOLEAN const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ BYTE const volatile *Source
)
{
return
(
)
((
)
);
}
(
_Out_ _Interlocked_operand_ BYTE volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ BYTE volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ BOOLEAN volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ BOOLEAN volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ BYTE volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_In_ _Interlocked_operand_ WORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ WORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ WORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_Out_ _Interlocked_operand_ WORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ WORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ WORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_In_ _Interlocked_operand_ DWORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ DWORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ DWORD const volatile *Source
)
{
return
(
)
((
)
);
}
(
_Out_ _Interlocked_operand_ DWORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ DWORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ DWORD volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_In_ _Interlocked_operand_ DWORD64 const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ DWORD64 const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ DWORD64 const volatile *Source
)
{
return
(
)
((
)
);
}
(
_Out_ _Interlocked_operand_ DWORD64 volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ DWORD64 volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ DWORD64 volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
#define ReadSizeTAcquire ReadULongPtrAcquire
#define ReadSizeTNoFence ReadULongPtrNoFence
#define ReadSizeTRaw ReadULongPtrRaw
#define WriteSizeTRelease WriteULongPtrRelease
#define WriteSizeTNoFence WriteULongPtrNoFence
#define WriteSizeTRaw WriteULongPtrRaw
#if !defined(_WIN64)
(
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return
(
)
((
)
);
}
(
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return
(
)
((
)
);
}
(
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
(
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
)
{
((
)
, (
)
);
return
;
}
#define ReadLongPtrAcquire ReadAcquire
#define ReadLongPtrNoFence ReadNoFence
#define ReadLongPtrRaw ReadRaw
#define WriteLongPtrRelease WriteRelease
#define WriteLongPtrNoFence WriteNoFence
#define WriteLongPtrRaw WriteRaw
#define ReadULongPtrAcquire ReadULongAcquire
#define ReadULongPtrNoFence ReadULongNoFence
#define ReadULongPtrRaw ReadULongRaw
#define WriteULongPtrRelease WriteULongRelease
#define WriteULongPtrNoFence WriteULongNoFence
#define WriteULongPtrRaw WriteULongRaw
#else // !defined(_WIN64)
FORCEINLINE
PVOID
ReadPointerAcquire (
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return (PVOID)ReadAcquire64((PLONG64)Source);
}
CFORCEINLINE
PVOID
ReadPointerNoFence (
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return (PVOID)ReadNoFence64((PLONG64)Source);
}
FORCEINLINE
PVOID
ReadPointerRaw (
_In_ _Interlocked_operand_ PVOID const volatile *Source
)
{
return (PVOID)ReadRaw64((PLONG64)Source);
}
FORCEINLINE
VOID
WritePointerRelease (
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Value
)
{
WriteRelease64((PLONG64)Destination, (LONG64)Value);
return;
}
FORCEINLINE
VOID
WritePointerNoFence (
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Value
)
{
WriteNoFence64((PLONG64)Destination, (LONG64)Value);
return;
}
FORCEINLINE
VOID
WritePointerRaw (
_Out_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Value
)
{
WriteRaw64((PLONG64)Destination, (LONG64)Value);
return;
}
#define ReadLongPtrAcquire ReadAcquire64
#define ReadLongPtrNoFence ReadNoFence64
#define ReadLongPtrRaw ReadRaw64
#define WriteLongPtrRelease WriteRelease64
#define WriteLongPtrNoFence WriteNoFence64
#define WriteLongPtrRaw WriteRaw64
#define ReadULongPtrAcquire ReadULong64Acquire
#define ReadULongPtrNoFence ReadULong64NoFence
#define ReadULongPtrRaw ReadULong64Raw
#define WriteULongPtrRelease WriteULong64Release
#define WriteULongPtrNoFence WriteULong64NoFence
#define WriteULongPtrRaw WriteULong64Raw
#endif // !defined(_WIN64)
#endif // !defined(RC_INVOKED) && !defined(MIDL_PASS)
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#if !defined(RC_INVOKED)
#define WOW64_CONTEXT_i386 0x00010000 // this assumes that i386 and
#define WOW64_CONTEXT_i486 0x00010000 // i486 have identical context records
#define WOW64_CONTEXT_CONTROL (WOW64_CONTEXT_i386 | 0x00000001L) // SS:SP, CS:IP, FLAGS, BP
#define WOW64_CONTEXT_INTEGER (WOW64_CONTEXT_i386 | 0x00000002L) // AX, BX, CX, DX, SI, DI
#define WOW64_CONTEXT_SEGMENTS (WOW64_CONTEXT_i386 | 0x00000004L) // DS, ES, FS, GS
#define WOW64_CONTEXT_FLOATING_POINT (WOW64_CONTEXT_i386 | 0x00000008L) // 387 state
#define WOW64_CONTEXT_DEBUG_REGISTERS (WOW64_CONTEXT_i386 | 0x00000010L) // DB 0-3,6,7
#define WOW64_CONTEXT_EXTENDED_REGISTERS (WOW64_CONTEXT_i386 | 0x00000020L) // cpu specific extensions
#define WOW64_CONTEXT_FULL (WOW64_CONTEXT_CONTROL | WOW64_CONTEXT_INTEGER | WOW64_CONTEXT_SEGMENTS)
#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)
#define WOW64_CONTEXT_XSTATE (WOW64_CONTEXT_i386 | 0x00000040L)
#define WOW64_CONTEXT_EXCEPTION_ACTIVE 0x08000000
#define WOW64_CONTEXT_SERVICE_ACTIVE 0x10000000
#define WOW64_CONTEXT_EXCEPTION_REQUEST 0x40000000
#define WOW64_CONTEXT_EXCEPTION_REPORTING 0x80000000
#endif // !defined(RC_INVOKED)
#define WOW64_SIZE_OF_80387_REGISTERS 80
#define WOW64_MAXIMUM_SUPPORTED_EXTENSION 512
typedef
struct
_WOW64_FLOATING_SAVE_AREA
{
;
;
;
;
;
;
;
BYTE RegisterArea[WOW64_SIZE_OF_80387_REGISTERS];
;
}
;
typedef
*
PWOW64_FLOATING_SAVE_AREA
;
#include "pshpack4.h"
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
BYTE ExtendedRegisters[WOW64_MAXIMUM_SUPPORTED_EXTENSION];
}
;
typedef
*
;
#include "poppack.h"
typedef
struct
{
;
;
union
{
struct
{
;
;
;
;
}
;
struct
{
:
8
;
:
5
;
:
2
;
:
1
;
:
4
;
:
1
;
:
1
;
:
1
;
:
1
;
:
8
;
}
;
}
;
}
, *
;
typedef
struct
_WOW64_DESCRIPTOR_TABLE_ENTRY
{
;
;
}
WOW64_DESCRIPTOR_TABLE_ENTRY
, *
PWOW64_DESCRIPTOR_TABLE_ENTRY
;
#define EXCEPTION_NONCONTINUABLE 0x1 // Noncontinuable exception
#define EXCEPTION_UNWINDING 0x2 // Unwind is in progress
#define EXCEPTION_EXIT_UNWIND 0x4 // Exit unwind is in progress
#define EXCEPTION_STACK_INVALID 0x8 // Stack out of limits or unaligned
#define EXCEPTION_NESTED_CALL 0x10 // Nested exception handler call
#define EXCEPTION_TARGET_UNWIND 0x20 // Target unwind in progress
#define EXCEPTION_COLLIDED_UNWIND 0x40 // Collided exception handler call
#define EXCEPTION_UNWIND (EXCEPTION_UNWINDING | EXCEPTION_EXIT_UNWIND | \
EXCEPTION_TARGET_UNWIND | EXCEPTION_COLLIDED_UNWIND)
#define IS_UNWINDING(Flag) ((Flag & EXCEPTION_UNWIND) != 0)
#define IS_DISPATCHING(Flag) ((Flag & EXCEPTION_UNWIND) == 0)
#define IS_TARGET_UNWIND(Flag) (Flag & EXCEPTION_TARGET_UNWIND)
#define EXCEPTION_MAXIMUM_PARAMETERS 15 // maximum number of exception parameters
typedef
struct
{
;
;
struct
*
;
;
;
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
}
;
typedef
*
;
typedef
struct
{
;
;
;
;
;
DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
}
, *
;
typedef
struct
{
;
;
;
;
;
;
DWORD64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
}
, *
;
typedef
struct
{
;
;
}
, *
;
#if defined(_IA64_)
NTSYSAPI
VOID
NTAPI
RtlUnwind2 (
_In_opt_ FRAME_POINTERS TargetFrame,
_In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord
);
#endif
typedef
;
typedef
;
typedef
;
typedef
;
typedef
;
typedef
*
;
#define DELETE (0x00010000L)
#define READ_CONTROL (0x00020000L)
#define WRITE_DAC (0x00040000L)
#define WRITE_OWNER (0x00080000L)
#define SYNCHRONIZE (0x00100000L)
#define STANDARD_RIGHTS_REQUIRED (0x000F0000L)
#define STANDARD_RIGHTS_READ (READ_CONTROL)
#define STANDARD_RIGHTS_WRITE (READ_CONTROL)
#define STANDARD_RIGHTS_EXECUTE (READ_CONTROL)
#define STANDARD_RIGHTS_ALL (0x001F0000L)
#define SPECIFIC_RIGHTS_ALL (0x0000FFFFL)
#define ACCESS_SYSTEM_SECURITY (0x01000000L)
#define MAXIMUM_ALLOWED (0x02000000L)
#define GENERIC_READ (0x80000000L)
#define GENERIC_WRITE (0x40000000L)
#define GENERIC_EXECUTE (0x20000000L)
#define GENERIC_ALL (0x10000000L)
typedef
struct
{
;
;
;
;
}
;
typedef
*
;
#include <pshpack4.h>
typedef
struct
{
;
;
}
, *
;
typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
typedef
LUID_AND_ATTRIBUTES_ARRAY
[
1
];
typedef
LUID_AND_ATTRIBUTES_ARRAY
*
PLUID_AND_ATTRIBUTES_ARRAY
;
#include <poppack.h>
#ifndef SID_IDENTIFIER_AUTHORITY_DEFINED
#define SID_IDENTIFIER_AUTHORITY_DEFINED
typedef
struct
_SID_IDENTIFIER_AUTHORITY
{
[
6
];
}
, *
PSID_IDENTIFIER_AUTHORITY
;
#endif
#ifndef SID_DEFINED
#define SID_DEFINED
typedef
struct
{
;
;
;
#ifdef MIDL_PASS
[size_is(SubAuthorityCount)] DWORD SubAuthority[*];
#else // MIDL_PASS
DWORD SubAuthority[ANYSIZE_ARRAY];
#endif // MIDL_PASS
}
, *
;
#endif
#define SID_REVISION (1) // Current revision level
#define SID_MAX_SUB_AUTHORITIES (15)
#define SID_RECOMMENDED_SUB_AUTHORITIES (1) // Will change to around 6
#ifndef MIDL_PASS
#define SECURITY_MAX_SID_SIZE \
(sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
#define SECURITY_SID_SIZE(SubAuthorityCount_) (sizeof(SID) - sizeof(DWORD) + \
(SubAuthorityCount_) * sizeof(DWORD))
#define SECURITY_MAX_SID_STRING_CHARACTERS \
(2 + 4 + 15 + (11 * SID_MAX_SUB_AUTHORITIES) + 1)
typedef
union
{
;
BYTE Buffer[SECURITY_MAX_SID_SIZE];
[(
sizeof
(
) -
sizeof
(
) + ((
15
) *
sizeof
(
)))];
}
, *
;
#endif // MIDL_PASS
typedef
enum
{
=
1
,
,
,
,
,
,
,
,
,
,
}
, *
;
typedef
struct
{
#ifdef MIDL_PASS
PISID Sid;
#else // MIDL_PASS
;
#endif // MIDL_PASS
;
}
, *
;
typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
typedef
*
PSID_AND_ATTRIBUTES_ARRAY
;
#define SID_HASH_SIZE 32
typedef
, *
;
typedef
struct
{
;
;
SID_HASH_ENTRY Hash[SID_HASH_SIZE];
}
, *
;
#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}
#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}
#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}
#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}
#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}
#define SECURITY_RESOURCE_MANAGER_AUTHORITY {0,0,0,0,0,9}
#define SECURITY_NULL_RID (0x00000000L)
#define SECURITY_WORLD_RID (0x00000000L)
#define SECURITY_LOCAL_RID (0x00000000L)
#define SECURITY_LOCAL_LOGON_RID (0x00000001L)
#define SECURITY_CREATOR_OWNER_RID (0x00000000L)
#define SECURITY_CREATOR_GROUP_RID (0x00000001L)
#define SECURITY_CREATOR_OWNER_SERVER_RID (0x00000002L)
#define SECURITY_CREATOR_GROUP_SERVER_RID (0x00000003L)
#define SECURITY_CREATOR_OWNER_RIGHTS_RID (0x00000004L)
#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5} // ntifs
#define SECURITY_DIALUP_RID (0x00000001L)
#define SECURITY_NETWORK_RID (0x00000002L)
#define SECURITY_BATCH_RID (0x00000003L)
#define SECURITY_INTERACTIVE_RID (0x00000004L)
#define SECURITY_LOGON_IDS_RID (0x00000005L)
#define SECURITY_LOGON_IDS_RID_COUNT (3L)
#define SECURITY_SERVICE_RID (0x00000006L)
#define SECURITY_ANONYMOUS_LOGON_RID (0x00000007L)
#define SECURITY_PROXY_RID (0x00000008L)
#define SECURITY_ENTERPRISE_CONTROLLERS_RID (0x00000009L)
#define SECURITY_SERVER_LOGON_RID SECURITY_ENTERPRISE_CONTROLLERS_RID
#define SECURITY_PRINCIPAL_SELF_RID (0x0000000AL)
#define SECURITY_AUTHENTICATED_USER_RID (0x0000000BL)
#define SECURITY_RESTRICTED_CODE_RID (0x0000000CL)
#define SECURITY_TERMINAL_SERVER_RID (0x0000000DL)
#define SECURITY_REMOTE_LOGON_RID (0x0000000EL)
#define SECURITY_THIS_ORGANIZATION_RID (0x0000000FL)
#define SECURITY_IUSER_RID (0x00000011L)
#define SECURITY_LOCAL_SYSTEM_RID (0x00000012L)
#define SECURITY_LOCAL_SERVICE_RID (0x00000013L)
#define SECURITY_NETWORK_SERVICE_RID (0x00000014L)
#define SECURITY_NT_NON_UNIQUE (0x00000015L)
#define SECURITY_NT_NON_UNIQUE_SUB_AUTH_COUNT (3L)
#define SECURITY_ENTERPRISE_READONLY_CONTROLLERS_RID (0x00000016L)
#define SECURITY_BUILTIN_DOMAIN_RID (0x00000020L)
#define SECURITY_WRITE_RESTRICTED_CODE_RID (0x00000021L)
#define SECURITY_PACKAGE_BASE_RID (0x00000040L)
#define SECURITY_PACKAGE_RID_COUNT (2L)
#define SECURITY_PACKAGE_NTLM_RID (0x0000000AL)
#define SECURITY_PACKAGE_SCHANNEL_RID (0x0000000EL)
#define SECURITY_PACKAGE_DIGEST_RID (0x00000015L)
#define SECURITY_CRED_TYPE_BASE_RID (0x00000041L)
#define SECURITY_CRED_TYPE_RID_COUNT (2L)
#define SECURITY_CRED_TYPE_THIS_ORG_CERT_RID (0x00000001L)
#define SECURITY_MIN_BASE_RID (0x00000050L)
#define SECURITY_SERVICE_ID_BASE_RID (0x00000050L)
#define SECURITY_SERVICE_ID_RID_COUNT (6L)
#define SECURITY_RESERVED_ID_BASE_RID (0x00000051L)
#define SECURITY_APPPOOL_ID_BASE_RID (0x00000052L)
#define SECURITY_APPPOOL_ID_RID_COUNT (6L)
#define SECURITY_VIRTUALSERVER_ID_BASE_RID (0x00000053L)
#define SECURITY_VIRTUALSERVER_ID_RID_COUNT (6L)
#define SECURITY_USERMODEDRIVERHOST_ID_BASE_RID (0x00000054L)
#define SECURITY_USERMODEDRIVERHOST_ID_RID_COUNT (6L)
#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_BASE_RID (0x00000055L)
#define SECURITY_CLOUD_INFRASTRUCTURE_SERVICES_ID_RID_COUNT (6L)
#define SECURITY_WMIHOST_ID_BASE_RID (0x00000056L)
#define SECURITY_WMIHOST_ID_RID_COUNT (6L)
#define SECURITY_TASK_ID_BASE_RID (0x00000057L)
#define SECURITY_NFS_ID_BASE_RID (0x00000058L)
#define SECURITY_COM_ID_BASE_RID (0x00000059L)
#define SECURITY_WINDOW_MANAGER_BASE_RID (0x0000005AL)
#define SECURITY_RDV_GFX_BASE_RID (0x0000005BL)
#define SECURITY_DASHOST_ID_BASE_RID (0x0000005CL)
#define SECURITY_DASHOST_ID_RID_COUNT (6L)
#define SECURITY_USERMANAGER_ID_BASE_RID (0x0000005DL)
#define SECURITY_USERMANAGER_ID_RID_COUNT (6L)
#define SECURITY_WINRM_ID_BASE_RID (0x0000005EL)
#define SECURITY_WINRM_ID_RID_COUNT (6L)
#define SECURITY_CCG_ID_BASE_RID (0x0000005FL)
#define SECURITY_UMFD_BASE_RID (0x00000060L)
#define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
#define SECURITY_MAX_BASE_RID (0x0000006FL)
#define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
#define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
#define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
#define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
#define SECURITY_INSTALLER_GROUP_CAPABILITY_BASE (0x20)
#define SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT (9)
#define SECURITY_INSTALLER_CAPABILITY_RID_COUNT (10)
#define SECURITY_LOCAL_ACCOUNT_RID (0x00000071L)
#define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID (0x00000072L)
#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED (0x000001F0L)
#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS (0x000001F1L)
#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
#define FOREST_USER_RID_MAX (0x000001F3L)
#define DOMAIN_USER_RID_ADMIN (0x000001F4L)
#define DOMAIN_USER_RID_GUEST (0x000001F5L)
#define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
#define DOMAIN_USER_RID_DEFAULT_ACCOUNT (0x000001F7L)
#define DOMAIN_USER_RID_WDAG_ACCOUNT (0x000001F8L)
#define DOMAIN_USER_RID_MAX (0x000003E7L)
#define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
#define DOMAIN_GROUP_RID_USERS (0x00000201L)
#define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
#define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
#define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
#define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
#define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS (0x0000020AL)
#define DOMAIN_GROUP_RID_CDC_RESERVED (0x0000020CL)
#define DOMAIN_GROUP_RID_PROTECTED_USERS (0x0000020DL)
#define DOMAIN_GROUP_RID_KEY_ADMINS (0x0000020EL)
#define DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS (0x0000020FL)
#define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
#define DOMAIN_ALIAS_RID_USERS (0x00000221L)
#define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
#define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
#define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
#define DOMAIN_ALIAS_RID_PRINT_OPS (0x00000226L)
#define DOMAIN_ALIAS_RID_BACKUP_OPS (0x00000227L)
#define DOMAIN_ALIAS_RID_REPLICATOR (0x00000228L)
#define DOMAIN_ALIAS_RID_RAS_SERVERS (0x00000229L)
#define DOMAIN_ALIAS_RID_PREW2KCOMPACCESS (0x0000022AL)
#define DOMAIN_ALIAS_RID_REMOTE_DESKTOP_USERS (0x0000022BL)
#define DOMAIN_ALIAS_RID_NETWORK_CONFIGURATION_OPS (0x0000022CL)
#define DOMAIN_ALIAS_RID_INCOMING_FOREST_TRUST_BUILDERS (0x0000022DL)
#define DOMAIN_ALIAS_RID_MONITORING_USERS (0x0000022EL)
#define DOMAIN_ALIAS_RID_LOGGING_USERS (0x0000022FL)
#define DOMAIN_ALIAS_RID_AUTHORIZATIONACCESS (0x00000230L)
#define DOMAIN_ALIAS_RID_TS_LICENSE_SERVERS (0x00000231L)
#define DOMAIN_ALIAS_RID_DCOM_USERS (0x00000232L)
#define DOMAIN_ALIAS_RID_IUSERS (0x00000238L)
#define DOMAIN_ALIAS_RID_CRYPTO_OPERATORS (0x00000239L)
#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
#define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS (0x0000023FL)
#define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS (0x00000240L)
#define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS (0x00000241L)
#define DOMAIN_ALIAS_RID_HYPER_V_ADMINS (0x00000242L)
#define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS (0x00000243L)
#define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS (0x00000244L)
#define DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT (0x00000245L)
#define DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS (0x00000246L)
#define DOMAIN_ALIAS_RID_DEVICE_OWNERS (0x00000247L)
#define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
#define SECURITY_APP_PACKAGE_BASE_RID (0x00000002L)
#define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT (2L)
#define SECURITY_APP_PACKAGE_RID_COUNT (8L)
#define SECURITY_CAPABILITY_BASE_RID (0x00000003L)
#define SECURITY_CAPABILITY_APP_RID (0x000000400)
#define SECURITY_BUILTIN_CAPABILITY_RID_COUNT (2L)
#define SECURITY_CAPABILITY_RID_COUNT (5L)
#define SECURITY_PARENT_PACKAGE_RID_COUNT (SECURITY_APP_PACKAGE_RID_COUNT)
#define SECURITY_CHILD_PACKAGE_RID_COUNT (12L)
#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE (0x00000001L)
#define SECURITY_BUILTIN_PACKAGE_ANY_RESTRICTED_PACKAGE (0x00000002L)
#define SECURITY_CAPABILITY_INTERNET_CLIENT (0x00000001L)
#define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER (0x00000002L)
#define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER (0x00000003L)
#define SECURITY_CAPABILITY_PICTURES_LIBRARY (0x00000004L)
#define SECURITY_CAPABILITY_VIDEOS_LIBRARY (0x00000005L)
#define SECURITY_CAPABILITY_MUSIC_LIBRARY (0x00000006L)
#define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY (0x00000007L)
#define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION (0x00000008L)
#define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES (0x00000009L)
#define SECURITY_CAPABILITY_REMOVABLE_STORAGE (0x0000000AL)
#define SECURITY_CAPABILITY_APPOINTMENTS (0x0000000BL)
#define SECURITY_CAPABILITY_CONTACTS (0x0000000CL)
#define SECURITY_CAPABILITY_INTERNET_EXPLORER (0x00001000L)
#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
#define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
#define SECURITY_MANDATORY_LOW_RID (0x00001000L)
#define SECURITY_MANDATORY_MEDIUM_RID (0x00002000L)
#define SECURITY_MANDATORY_MEDIUM_PLUS_RID (SECURITY_MANDATORY_MEDIUM_RID + 0x100)
#define SECURITY_MANDATORY_HIGH_RID (0x00003000L)
#define SECURITY_MANDATORY_SYSTEM_RID (0x00004000L)
#define SECURITY_MANDATORY_PROTECTED_PROCESS_RID (0x00005000L)
#define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
#define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0,0,0,0,0,17}
#define SECURITY_AUTHENTICATION_AUTHORITY {0,0,0,0,0,18}
#define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT (1L)
#define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (0x00000001L)
#define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID (0x00000002L)
#define SECURITY_AUTHENTICATION_FRESH_KEY_AUTH_RID (0x00000003L)
#define SECURITY_AUTHENTICATION_KEY_TRUST_RID (0x00000004L)
#define SECURITY_AUTHENTICATION_KEY_PROPERTY_MFA_RID (0x00000005L)
#define SECURITY_AUTHENTICATION_KEY_PROPERTY_ATTESTATION_RID (0x00000006L)
#define SECURITY_PROCESS_TRUST_AUTHORITY {0,0,0,0,0,19}
#define SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT (2L)
#define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID (0x00000400L)
#define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID (0x00000200L)
#define SECURITY_PROCESS_PROTECTION_TYPE_NONE_RID (0x00000000L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_WINTCB_RID (0x00002000L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_WINDOWS_RID (0x00001000L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_APP_RID (0x00000800L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_ANTIMALWARE_RID (0x00000600L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_AUTHENTICODE_RID (0x00000400L)
#define SECURITY_PROCESS_PROTECTION_LEVEL_NONE_RID (0x00000000L)
#define SECURITY_TRUSTED_INSTALLER_RID1 956008885
#define SECURITY_TRUSTED_INSTALLER_RID2 3418522649
#define SECURITY_TRUSTED_INSTALLER_RID3 1831038044
#define SECURITY_TRUSTED_INSTALLER_RID4 1853292631
#define SECURITY_TRUSTED_INSTALLER_RID5 2271478464
typedef
enum
{
=
0
,
=
1
,
=
2
,
=
3
,
=
4
,
=
5
,
=
6
,
=
7
,
=
8
,
=
9
,
=
10
,
=
11
,
=
12
,
=
13
,
=
14
,
=
15
,
=
16
,
=
17
,
=
18
,
=
19
,
=
20
,
=
21
,
=
22
,
=
23
,
=
24
,
=
25
,
=
26
,
=
27
,
=
28
,
=
29
,
=
30
,
=
31
,
=
32
,
=
33
,
=
34
,
WinBuiltinPreWindows2000CompatibleAccessSid
=
35
,
=
36
,
=
37
,
WinAccountAdministratorSid
=
38
,
=
39
,
=
40
,
WinAccountDomainAdminsSid
=
41
,
=
42
,
WinAccountDomainGuestsSid
=
43
,
=
44
,
=
45
,
=
46
,
WinAccountSchemaAdminsSid
=
47
,
WinAccountEnterpriseAdminsSid
=
48
,
WinAccountPolicyAdminsSid
=
49
,
WinAccountRasAndIasServersSid
=
50
,
=
51
,
WinDigestAuthenticationSid
=
52
,
WinSChannelAuthenticationSid
=
53
,
=
54
,
=
55
,
=
56
,
=
57
,
=
58
,
WinBuiltinAuthorizationAccessSid
=
59
,
=
60
,
=
61
,
=
62
,
=
63
,
=
64
,
=
65
,
=
66
,
=
67
,
=
68
,
=
69
,
WinWriteRestrictedCodeSid
=
70
,
=
71
,
WinCacheablePrincipalsGroupSid
=
72
,
WinNonCacheablePrincipalsGroupSid
=
73
,
=
74
,
=
75
,
WinBuiltinEventLogReadersGroup
=
76
,
=
77
,
WinBuiltinCertSvcDComAccessGroup
=
78
,
=
79
,
=
80
,
=
81
,
WinThisOrganizationCertificateSid
=
82
,
WinApplicationPackageAuthoritySid
=
83
,
=
84
,
WinCapabilityInternetClientSid
=
85
,
WinCapabilityInternetClientServerSid
=
86
,
WinCapabilityPrivateNetworkClientServerSid
=
87
,
WinCapabilityPicturesLibrarySid
=
88
,
WinCapabilityVideosLibrarySid
=
89
,
WinCapabilityMusicLibrarySid
=
90
,
WinCapabilityDocumentsLibrarySid
=
91
,
WinCapabilitySharedUserCertificatesSid
=
92
,
WinCapabilityEnterpriseAuthenticationSid
=
93
,
WinCapabilityRemovableStorageSid
=
94
,
=
95
,
=
96
,
=
97
,
=
98
,
WinBuiltinHyperVAdminsSid
=
99
,
=
100
,
=
101
,
=
102
,
WinAuthenticationAuthorityAssertedSid
=
103
,
WinAuthenticationServiceAssertedSid
=
104
,
=
105
,
WinLocalAccountAndAdministratorSid
=
106
,
=
107
,
WinCapabilityAppointmentsSid
=
108
,
=
109
,
WinAccountDefaultSystemManagedSid
=
110
,
WinBuiltinDefaultSystemManagedGroupSid
=
111
,
WinBuiltinStorageReplicaAdminsSid
=
112
,
=
113
,
WinAccountEnterpriseKeyAdminsSid
=
114
,
WinAuthenticationKeyTrustSid
=
115
,
WinAuthenticationKeyPropertyMFASid
=
116
,
WinAuthenticationKeyPropertyAttestationSid
=
117
,
WinAuthenticationFreshKeyAuthSid
=
118
,
=
119
,
}
;
#define SYSTEM_LUID { 0x3e7, 0x0 }
#define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
#define LOCALSERVICE_LUID { 0x3e5, 0x0 }
#define NETWORKSERVICE_LUID { 0x3e4, 0x0 }
#define IUSER_LUID { 0x3e3, 0x0 }
#define PROTECTED_TO_SYSTEM_LUID { 0x3e2, 0x0 }
#define SE_GROUP_MANDATORY (0x00000001L)
#define SE_GROUP_ENABLED_BY_DEFAULT (0x00000002L)
#define SE_GROUP_ENABLED (0x00000004L)
#define SE_GROUP_OWNER (0x00000008L)
#define SE_GROUP_USE_FOR_DENY_ONLY (0x00000010L)
#define SE_GROUP_INTEGRITY (0x00000020L)
#define SE_GROUP_INTEGRITY_ENABLED (0x00000040L)
#define SE_GROUP_LOGON_ID (0xC0000000L)
#define SE_GROUP_RESOURCE (0x20000000L)
#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)
#define ACL_REVISION (2)
#define ACL_REVISION_DS (4)
#define ACL_REVISION1 (1)
#define MIN_ACL_REVISION ACL_REVISION2
#define ACL_REVISION2 (2)
#define ACL_REVISION3 (3)
#define ACL_REVISION4 (4)
#define MAX_ACL_REVISION ACL_REVISION4
typedef
struct
{
;
;
;
;
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
} ;
typedef
*;
#define ACCESS_MIN_MS_ACE_TYPE (0x0)
#define ACCESS_ALLOWED_ACE_TYPE (0x0)
#define ACCESS_DENIED_ACE_TYPE (0x1)
#define SYSTEM_AUDIT_ACE_TYPE (0x2)
#define SYSTEM_ALARM_ACE_TYPE (0x3)
#define ACCESS_MAX_MS_V2_ACE_TYPE (0x3)
#define ACCESS_ALLOWED_COMPOUND_ACE_TYPE (0x4)
#define ACCESS_MAX_MS_V3_ACE_TYPE (0x4)
#define ACCESS_MIN_MS_OBJECT_ACE_TYPE (0x5)
#define ACCESS_ALLOWED_OBJECT_ACE_TYPE (0x5)
#define ACCESS_DENIED_OBJECT_ACE_TYPE (0x6)
#define SYSTEM_AUDIT_OBJECT_ACE_TYPE (0x7)
#define SYSTEM_ALARM_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_OBJECT_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_V4_ACE_TYPE (0x8)
#define ACCESS_MAX_MS_ACE_TYPE (0x8)
#define ACCESS_ALLOWED_CALLBACK_ACE_TYPE (0x9)
#define ACCESS_DENIED_CALLBACK_ACE_TYPE (0xA)
#define ACCESS_ALLOWED_CALLBACK_OBJECT_ACE_TYPE (0xB)
#define ACCESS_DENIED_CALLBACK_OBJECT_ACE_TYPE (0xC)
#define SYSTEM_AUDIT_CALLBACK_ACE_TYPE (0xD)
#define SYSTEM_ALARM_CALLBACK_ACE_TYPE (0xE)
#define SYSTEM_AUDIT_CALLBACK_OBJECT_ACE_TYPE (0xF)
#define SYSTEM_ALARM_CALLBACK_OBJECT_ACE_TYPE (0x10)
#define SYSTEM_MANDATORY_LABEL_ACE_TYPE (0x11)
#define SYSTEM_RESOURCE_ATTRIBUTE_ACE_TYPE (0x12)
#define SYSTEM_SCOPED_POLICY_ID_ACE_TYPE (0x13)
#define SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE (0x14)
#define SYSTEM_ACCESS_FILTER_ACE_TYPE (0x15)
#define ACCESS_MAX_MS_V5_ACE_TYPE (0x15)
#define OBJECT_INHERIT_ACE (0x1)
#define CONTAINER_INHERIT_ACE (0x2)
#define NO_PROPAGATE_INHERIT_ACE (0x4)
#define INHERIT_ONLY_ACE (0x8)
#define INHERITED_ACE (0x10)
#define VALID_INHERIT_FLAGS (0x1F)
#define CRITICAL_ACE_FLAG (0x20)
#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
#define FAILED_ACCESS_ACE_FLAG (0x80)
#define TRUST_PROTECTED_FILTER_ACE_FLAG (0x40)
typedef
struct
{
;
;
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
}
;
typedef
*
;
typedef
struct
_SYSTEM_RESOURCE_ATTRIBUTE_ACE
{
;
;
;
}
SYSTEM_RESOURCE_ATTRIBUTE_ACE
, *
PSYSTEM_RESOURCE_ATTRIBUTE_ACE
;
typedef
struct
_SYSTEM_SCOPED_POLICY_ID_ACE
{
;
;
;
}
SYSTEM_SCOPED_POLICY_ID_ACE
, *
PSYSTEM_SCOPED_POLICY_ID_ACE
;
typedef
struct
_SYSTEM_MANDATORY_LABEL_ACE
{
;
;
;
}
SYSTEM_MANDATORY_LABEL_ACE
, *
PSYSTEM_MANDATORY_LABEL_ACE
;
typedef
struct
_SYSTEM_PROCESS_TRUST_LABEL_ACE
{
;
;
;
}
SYSTEM_PROCESS_TRUST_LABEL_ACE
, *
PSYSTEM_PROCESS_TRUST_LABEL_ACE
;
typedef
struct
_SYSTEM_ACCESS_FILTER_ACE
{
;
;
;
}
, *
PSYSTEM_ACCESS_FILTER_ACE
;
#define SYSTEM_MANDATORY_LABEL_NO_WRITE_UP 0x1
#define SYSTEM_MANDATORY_LABEL_NO_READ_UP 0x2
#define SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP 0x4
#define SYSTEM_MANDATORY_LABEL_VALID_MASK (SYSTEM_MANDATORY_LABEL_NO_WRITE_UP | \
SYSTEM_MANDATORY_LABEL_NO_READ_UP | \
SYSTEM_MANDATORY_LABEL_NO_EXECUTE_UP)
#define SYSTEM_PROCESS_TRUST_LABEL_VALID_MASK 0x00ffffff
#define SYSTEM_PROCESS_TRUST_NOCONSTRAINT_MASK 0xffffffff
#define SYSTEM_ACCESS_FILTER_VALID_MASK 0x00ffffff
#define SYSTEM_ACCESS_FILTER_NOCONSTRAINT_MASK 0xffffffff
typedef
struct
_ACCESS_ALLOWED_OBJECT_ACE
{
;
;
;
;
;
;
}
ACCESS_ALLOWED_OBJECT_ACE
, *
PACCESS_ALLOWED_OBJECT_ACE
;
typedef
struct
_ACCESS_DENIED_OBJECT_ACE
{
;
;
;
;
;
;
}
, *
PACCESS_DENIED_OBJECT_ACE
;
typedef
struct
{
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
}
, *
;
typedef
struct
_ACCESS_ALLOWED_CALLBACK_ACE
{
;
;
;
}
ACCESS_ALLOWED_CALLBACK_ACE
, *
PACCESS_ALLOWED_CALLBACK_ACE
;
typedef
struct
_ACCESS_DENIED_CALLBACK_ACE
{
;
;
;
}
ACCESS_DENIED_CALLBACK_ACE
, *
PACCESS_DENIED_CALLBACK_ACE
;
typedef
struct
_SYSTEM_AUDIT_CALLBACK_ACE
{
;
;
;
}
SYSTEM_AUDIT_CALLBACK_ACE
, *
PSYSTEM_AUDIT_CALLBACK_ACE
;
typedef
struct
_SYSTEM_ALARM_CALLBACK_ACE
{
;
;
;
}
SYSTEM_ALARM_CALLBACK_ACE
, *
PSYSTEM_ALARM_CALLBACK_ACE
;
typedef
struct
_ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
{
;
;
;
;
;
;
}
ACCESS_ALLOWED_CALLBACK_OBJECT_ACE
, *
PACCESS_ALLOWED_CALLBACK_OBJECT_ACE
;
typedef
struct
_ACCESS_DENIED_CALLBACK_OBJECT_ACE
{
;
;
;
;
;
;
}
ACCESS_DENIED_CALLBACK_OBJECT_ACE
, *
PACCESS_DENIED_CALLBACK_OBJECT_ACE
;
typedef
struct
_SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
{
;
;
;
;
;
;
}
SYSTEM_AUDIT_CALLBACK_OBJECT_ACE
, *
PSYSTEM_AUDIT_CALLBACK_OBJECT_ACE
;
typedef
struct
_SYSTEM_ALARM_CALLBACK_OBJECT_ACE
{
;
;
;
;
;
;
}
SYSTEM_ALARM_CALLBACK_OBJECT_ACE
, *
PSYSTEM_ALARM_CALLBACK_OBJECT_ACE
;
#define ACE_OBJECT_TYPE_PRESENT 0x1
#define ACE_INHERITED_OBJECT_TYPE_PRESENT 0x2
typedef
enum
{
=
1
,
}
;
typedef
struct
{
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
}
;
typedef
*
;
#define SECURITY_DESCRIPTOR_REVISION (1)
#define SECURITY_DESCRIPTOR_REVISION1 (1)
#define SECURITY_DESCRIPTOR_MIN_LENGTH (sizeof(SECURITY_DESCRIPTOR))
typedef
SECURITY_DESCRIPTOR_CONTROL
, *
PSECURITY_DESCRIPTOR_CONTROL
;
#define SE_OWNER_DEFAULTED (0x0001)
#define SE_GROUP_DEFAULTED (0x0002)
#define SE_DACL_PRESENT (0x0004)
#define SE_DACL_DEFAULTED (0x0008)
#define SE_SACL_PRESENT (0x0010)
#define SE_SACL_DEFAULTED (0x0020)
#define SE_DACL_AUTO_INHERIT_REQ (0x0100)
#define SE_SACL_AUTO_INHERIT_REQ (0x0200)
#define SE_DACL_AUTO_INHERITED (0x0400)
#define SE_SACL_AUTO_INHERITED (0x0800)
#define SE_DACL_PROTECTED (0x1000)
#define SE_SACL_PROTECTED (0x2000)
#define SE_RM_CONTROL_VALID (0x4000)
#define SE_SELF_RELATIVE (0x8000)
typedef
struct
_SECURITY_DESCRIPTOR_RELATIVE
{
;
;
SECURITY_DESCRIPTOR_CONTROL
;
;
;
;
;
}
SECURITY_DESCRIPTOR_RELATIVE
, *
PISECURITY_DESCRIPTOR_RELATIVE
;
typedef
struct
{
;
;
SECURITY_DESCRIPTOR_CONTROL
;
;
;
;
;
}
, *
;
typedef
struct
_SECURITY_OBJECT_AI_PARAMS
{
;
;
}
SECURITY_OBJECT_AI_PARAMS
, *
PSECURITY_OBJECT_AI_PARAMS
;
typedef
struct
{
;
;
*
;
}
, *
;
#define ACCESS_OBJECT_GUID 0
#define ACCESS_PROPERTY_SET_GUID 1
#define ACCESS_PROPERTY_GUID 2
#define ACCESS_MAX_LEVEL 4
typedef
enum
{
,
AuditEventDirectoryServiceAccess
}
, *
;
#define AUDIT_ALLOW_NO_PRIVILEGE 0x1
#define ACCESS_DS_SOURCE_A "DS"
#define ACCESS_DS_SOURCE_W L"DS"
#define ACCESS_DS_OBJECT_TYPE_NAME_A "Directory Service Object"
#define ACCESS_DS_OBJECT_TYPE_NAME_W L"Directory Service Object"
#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x00000001L)
#define SE_PRIVILEGE_ENABLED (0x00000002L)
#define SE_PRIVILEGE_REMOVED (0X00000004L)
#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
#define SE_PRIVILEGE_VALID_ATTRIBUTES (SE_PRIVILEGE_ENABLED_BY_DEFAULT | \
SE_PRIVILEGE_ENABLED | \
SE_PRIVILEGE_REMOVED | \
SE_PRIVILEGE_USED_FOR_ACCESS)
#define PRIVILEGE_SET_ALL_NECESSARY (1)
typedef
struct
{
;
;
LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
}
, *
;
#define ACCESS_REASON_TYPE_MASK 0x00ff0000
#define ACCESS_REASON_DATA_MASK 0x0000ffff
#define ACCESS_REASON_STAGING_MASK 0x80000000
#define ACCESS_REASON_EXDATA_MASK 0x7f000000
typedef
enum
{
=
0x00000000
,
=
0x00010000
,
=
0x00020000
,
AccessReasonAllowedParentAce
=
0x00030000
,
AccessReasonDeniedParentAce
=
0x00040000
,
AccessReasonNotGrantedByCape
=
0x00050000
,
AccessReasonNotGrantedByParentCape
=
0x00060000
,
AccessReasonNotGrantedToAppContainer
=
0x00070000
,
AccessReasonMissingPrivilege
=
0x00100000
,
AccessReasonFromPrivilege
=
0x00200000
,
AccessReasonIntegrityLevel
=
0x00300000
,
=
0x00400000
,
=
0x00500000
,
=
0x00600000
,
=
0x00700000
,
=
0x00800000
,
=
0x00900000
,
=
0x00a00000
}
;
typedef
;
typedef
struct
{
[
32
];
}
, *
;
#define SE_SECURITY_DESCRIPTOR_FLAG_NO_OWNER_ACE 0x00000001
#define SE_SECURITY_DESCRIPTOR_FLAG_NO_LABEL_ACE 0x00000002
#define SE_SECURITY_DESCRIPTOR_FLAG_NO_ACCESS_FILTER_ACE 0x00000004
#define SE_SECURITY_DESCRIPTOR_VALID_FLAGS 0x00000007
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
*
;
}
, *
;
#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")
#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")
#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")
#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")
#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")
#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")
#define SE_TCB_NAME TEXT("SeTcbPrivilege")
#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")
#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")
#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")
#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")
#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")
#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")
#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")
#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")
#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")
#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")
#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")
#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")
#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")
#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")
#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")
#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")
#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")
#define SE_UNDOCK_NAME TEXT("SeUndockPrivilege")
#define SE_SYNC_AGENT_NAME TEXT("SeSyncAgentPrivilege")
#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege")
#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
#define SE_DELEGATE_SESSION_USER_IMPERSONATE_NAME TEXT("SeDelegateSessionUserImpersonatePrivilege")
#define SE_ACTIVATE_AS_USER_CAPABILITY L"activateAsUser"
#define SE_CONSTRAINED_IMPERSONATION_CAPABILITY L"constrainedImpersonation"
#define SE_SESSION_IMPERSONATION_CAPABILITY L"sessionImpersonation"
#define SE_MUMA_CAPABILITY L"muma"
#define SE_DEVELOPMENT_MODE_NETWORK_CAPABILITY L"developmentModeNetwork"
typedef
enum
_SECURITY_IMPERSONATION_LEVEL
{
,
,
,
}
SECURITY_IMPERSONATION_LEVEL
, *
PSECURITY_IMPERSONATION_LEVEL
;
#define SECURITY_MAX_IMPERSONATION_LEVEL SecurityDelegation
#define SECURITY_MIN_IMPERSONATION_LEVEL SecurityAnonymous
#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
#define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
#define TOKEN_ASSIGN_PRIMARY (0x0001)
#define TOKEN_DUPLICATE (0x0002)
#define TOKEN_IMPERSONATE (0x0004)
#define TOKEN_QUERY (0x0008)
#define TOKEN_QUERY_SOURCE (0x0010)
#define TOKEN_ADJUST_PRIVILEGES (0x0020)
#define TOKEN_ADJUST_GROUPS (0x0040)
#define TOKEN_ADJUST_DEFAULT (0x0080)
#define TOKEN_ADJUST_SESSIONID (0x0100)
#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 )
#if ((defined(_WIN32_WINNT) && (_WIN32_WINNT > 0x0400)) || (!defined(_WIN32_WINNT)))
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P |\
TOKEN_ADJUST_SESSIONID )
#else
#define TOKEN_ALL_ACCESS (TOKEN_ALL_ACCESS_P)
#endif
#define TOKEN_READ (STANDARD_RIGHTS_READ |\
TOKEN_QUERY)
#define TOKEN_WRITE (STANDARD_RIGHTS_WRITE |\
TOKEN_ADJUST_PRIVILEGES |\
TOKEN_ADJUST_GROUPS |\
TOKEN_ADJUST_DEFAULT)
#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
#define TOKEN_TRUST_CONSTRAINT_MASK (STANDARD_RIGHTS_READ | \
TOKEN_QUERY |\
TOKEN_QUERY_SOURCE )
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define TOKEN_ACCESS_PSEUDO_HANDLE_WIN8 (TOKEN_QUERY | TOKEN_QUERY_SOURCE)
#define TOKEN_ACCESS_PSEUDO_HANDLE TOKEN_ACCESS_PSEUDO_HANDLE_WIN8
#endif
typedef
enum
{
=
1
,
}
;
typedef
*
;
typedef
enum
{
TokenElevationTypeDefault
=
1
,
,
TokenElevationTypeLimited
,
}
, *
;
typedef
enum
{
=
1
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
}
, *
;
typedef
struct
{
;
}
, *
;
#ifndef MIDL_PASS
typedef
struct
{
union
{
;
;
union
{
;
BYTE Buffer[SECURITY_MAX_SID_SIZE];
[(
sizeof
(
) -
sizeof
(
) + ((
15
) *
sizeof
(
)))];
}
,
;
#define TOKEN_USER_MAX_SIZE (sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE)
#endif
typedef
struct
{
;
#ifdef MIDL_PASS
[size_is(GroupCount)] SID_AND_ATTRIBUTES Groups[*];
#else // MIDL_PASS
SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
#endif // MIDL_PASS
}
, *
;
typedef
struct
{
;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
}
, *
;
typedef
struct
{
;
}
, *
;
#ifndef MIDL_PASS
#define TOKEN_OWNER_MAX_SIZE (sizeof(TOKEN_OWNER) + SECURITY_MAX_SID_SIZE)
#endif
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
_TOKEN_GROUPS_AND_PRIVILEGES
{
;
;
;
;
;
;
;
;
;
;
}
TOKEN_GROUPS_AND_PRIVILEGES
, *
PTOKEN_GROUPS_AND_PRIVILEGES
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
#define TOKEN_MANDATORY_POLICY_OFF 0x0
#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
#define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_UP | \
TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN)
#ifndef MIDL_PASS
#define TOKEN_INTEGRITY_LEVEL_MAX_SIZE ((((DWORD)(sizeof(TOKEN_MANDATORY_LABEL)) + sizeof(PVOID) - 1) & ~(sizeof(PVOID)-1)) + SECURITY_MAX_SID_SIZE)
#endif
typedef
struct
{
;
}
, *
;
typedef
PSECURITY_ATTRIBUTES_OPAQUE
;
typedef
struct
{
;
;
;
;
;
SECURITY_IMPERSONATION_LEVEL
;
;
;
;
;
;
;
PSECURITY_ATTRIBUTES_OPAQUE
;
}
, *
;
#define POLICY_AUDIT_SUBCATEGORY_COUNT (59)
typedef
struct
{
BYTE PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
}
, *
;
#define TOKEN_SOURCE_LENGTH 8
typedef
struct
{
CHAR SourceName[TOKEN_SOURCE_LENGTH];
;
}
, *
;
typedef
struct
{
;
;
;
;
SECURITY_IMPERSONATION_LEVEL
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
enum
{
=
0
,
,
,
,
,
MandatoryLevelSecureProcess
,
}
, *
;
typedef
struct
{
;
}
, *
;
#ifndef MIDL_PASS
#define TOKEN_APPCONTAINER_SID_MAX_SIZE (sizeof(TOKEN_APPCONTAINER_INFORMATION) + SECURITY_MAX_SID_SIZE)
#endif
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INVALID 0x00
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_INT64 0x01
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_UINT64 0x02
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_STRING 0x03
typedef
struct
_CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE
{
;
;
}
CLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE
, *
PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE
;
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_FQBN 0x04
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_SID 0x05
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_BOOLEAN 0x06
typedef
struct
_CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
{
;
;
}
CLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
,
*
PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
;
#define CLAIM_SECURITY_ATTRIBUTE_TYPE_OCTET_STRING 0x10
#define CLAIM_SECURITY_ATTRIBUTE_NON_INHERITABLE 0x0001
#define CLAIM_SECURITY_ATTRIBUTE_VALUE_CASE_SENSITIVE 0x0002
#define CLAIM_SECURITY_ATTRIBUTE_USE_FOR_DENY_ONLY 0x0004
#define CLAIM_SECURITY_ATTRIBUTE_DISABLED_BY_DEFAULT 0x0008
#define CLAIM_SECURITY_ATTRIBUTE_DISABLED 0x0010
#define CLAIM_SECURITY_ATTRIBUTE_MANDATORY 0x0020
#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 )
#define CLAIM_SECURITY_ATTRIBUTE_CUSTOM_FLAGS 0xFFFF0000
typedef
struct
_CLAIM_SECURITY_ATTRIBUTE_V1
{
;
;
;
;
;
union
{
;
;
*
;
PCLAIM_SECURITY_ATTRIBUTE_FQBN_VALUE
;
PCLAIM_SECURITY_ATTRIBUTE_OCTET_STRING_VALUE
;
}
;
}
CLAIM_SECURITY_ATTRIBUTE_V1
, *
PCLAIM_SECURITY_ATTRIBUTE_V1
;
typedef
struct
_CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1
{
;
;
;
;
;
union
{
DWORD pInt64[ANYSIZE_ARRAY];
DWORD pUint64[ANYSIZE_ARRAY];
DWORD ppString[ANYSIZE_ARRAY];
DWORD pFqbn[ANYSIZE_ARRAY];
DWORD pOctetString[ANYSIZE_ARRAY];
}
;
}
CLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1
, *
PCLAIM_SECURITY_ATTRIBUTE_RELATIVE_V1
;
#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1 1
#define CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION \
CLAIM_SECURITY_ATTRIBUTES_INFORMATION_VERSION_V1
typedef
struct
{
;
;
;
union
{
PCLAIM_SECURITY_ATTRIBUTE_V1
;
}
;
}
, *
;
#define SECURITY_DYNAMIC_TRACKING (TRUE)
#define SECURITY_STATIC_TRACKING (FALSE)
typedef
SECURITY_CONTEXT_TRACKING_MODE
,
*
PSECURITY_CONTEXT_TRACKING_MODE
;
typedef
struct
_SECURITY_QUALITY_OF_SERVICE
{
;
SECURITY_IMPERSONATION_LEVEL
;
SECURITY_CONTEXT_TRACKING_MODE
;
;
}
SECURITY_QUALITY_OF_SERVICE
, *
PSECURITY_QUALITY_OF_SERVICE
;
typedef
struct
{
;
;
;
SECURITY_IMPERSONATION_LEVEL
;
}
, *
;
#define DISABLE_MAX_PRIVILEGE 0x1
#define SANDBOX_INERT 0x2
#define LUA_TOKEN 0x4
#define WRITE_RESTRICTED 0x8
typedef
, *
;
#define OWNER_SECURITY_INFORMATION (0x00000001L)
#define GROUP_SECURITY_INFORMATION (0x00000002L)
#define DACL_SECURITY_INFORMATION (0x00000004L)
#define SACL_SECURITY_INFORMATION (0x00000008L)
#define LABEL_SECURITY_INFORMATION (0x00000010L)
#define ATTRIBUTE_SECURITY_INFORMATION (0x00000020L)
#define SCOPE_SECURITY_INFORMATION (0x00000040L)
#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION (0x00000080L)
#define ACCESS_FILTER_SECURITY_INFORMATION (0x00000100L)
#define BACKUP_SECURITY_INFORMATION (0x00010000L)
#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
typedef
, *
;
#define SE_SIGNING_LEVEL_UNCHECKED 0x00000000
#define SE_SIGNING_LEVEL_UNSIGNED 0x00000001
#define SE_SIGNING_LEVEL_ENTERPRISE 0x00000002
#define SE_SIGNING_LEVEL_CUSTOM_1 0x00000003
#define SE_SIGNING_LEVEL_DEVELOPER SE_SIGNING_LEVEL_CUSTOM_1
#define SE_SIGNING_LEVEL_AUTHENTICODE 0x00000004
#define SE_SIGNING_LEVEL_CUSTOM_2 0x00000005
#define SE_SIGNING_LEVEL_STORE 0x00000006
#define SE_SIGNING_LEVEL_CUSTOM_3 0x00000007
#define SE_SIGNING_LEVEL_ANTIMALWARE SE_SIGNING_LEVEL_CUSTOM_3
#define SE_SIGNING_LEVEL_MICROSOFT 0x00000008
#define SE_SIGNING_LEVEL_CUSTOM_4 0x00000009
#define SE_SIGNING_LEVEL_CUSTOM_5 0x0000000A
#define SE_SIGNING_LEVEL_DYNAMIC_CODEGEN 0x0000000B
#define SE_SIGNING_LEVEL_WINDOWS 0x0000000C
#define SE_SIGNING_LEVEL_CUSTOM_7 0x0000000D
#define SE_SIGNING_LEVEL_WINDOWS_TCB 0x0000000E
#define SE_SIGNING_LEVEL_CUSTOM_6 0x0000000F
typedef
enum
{
=
0
,
,
,
SeImageSignatureCatalogCached
,
SeImageSignatureCatalogNotCached
,
SeImageSignatureCatalogHint
,
SeImageSignaturePackageCatalog
,
}
, *
;
typedef
enum
_SE_LEARNING_MODE_DATA_TYPE
{
SeLearningModeInvalidType
=
0
,
,
}
SE_LEARNING_MODE_DATA_TYPE
;
#define SE_LEARNING_MODE_FLAG_PERMISSIVE 0x00000001
typedef
struct
{
#ifdef MIDL_PASS
PISID AppContainerSid;
[size_is(CapabilityCount)] PSID_AND_ATTRIBUTES Capabilities;
#else // MIDL_PASS
;
;
#endif // MIDL_PASS
;
;
}
, *
, *
;
#define PROCESS_TERMINATE (0x0001)
#define PROCESS_CREATE_THREAD (0x0002)
#define PROCESS_SET_SESSIONID (0x0004)
#define PROCESS_VM_OPERATION (0x0008)
#define PROCESS_VM_READ (0x0010)
#define PROCESS_VM_WRITE (0x0020)
#define PROCESS_DUP_HANDLE (0x0040)
#define PROCESS_CREATE_PROCESS (0x0080)
#define PROCESS_SET_QUOTA (0x0100)
#define PROCESS_SET_INFORMATION (0x0200)
#define PROCESS_QUERY_INFORMATION (0x0400)
#define PROCESS_SUSPEND_RESUME (0x0800)
#define PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
#define PROCESS_SET_LIMITED_INFORMATION (0x2000)
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFFF)
#else
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFF)
#endif
#define THREAD_TERMINATE (0x0001)
#define THREAD_SUSPEND_RESUME (0x0002)
#define THREAD_GET_CONTEXT (0x0008)
#define THREAD_SET_CONTEXT (0x0010)
#define THREAD_QUERY_INFORMATION (0x0040)
#define THREAD_SET_INFORMATION (0x0020)
#define THREAD_SET_THREAD_TOKEN (0x0080)
#define THREAD_IMPERSONATE (0x0100)
#define THREAD_DIRECT_IMPERSONATION (0x0200)
#define THREAD_SET_LIMITED_INFORMATION (0x0400) // winnt
#define THREAD_QUERY_LIMITED_INFORMATION (0x0800) // winnt
#define THREAD_RESUME (0x1000) // winnt
#if (NTDDI_VERSION >= NTDDI_VISTA)
#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFFF)
#else
#define THREAD_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0x3FF)
#endif
#define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
#define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
#define JOB_OBJECT_QUERY (0x0004)
#define JOB_OBJECT_TERMINATE (0x0008)
#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
#define JOB_OBJECT_IMPERSONATE (0x0020)
#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0x3F )
typedef
struct
{
;
;
;
}
, *
;
#define FLS_MAXIMUM_AVAILABLE 128
#define TLS_MINIMUM_AVAILABLE 64
typedef
struct
_EXCEPTION_REGISTRATION_RECORD
{
struct
_EXCEPTION_REGISTRATION_RECORD
*
;
;
}
EXCEPTION_REGISTRATION_RECORD
;
typedef
EXCEPTION_REGISTRATION_RECORD
*
PEXCEPTION_REGISTRATION_RECORD
;
typedef
struct
{
struct
_EXCEPTION_REGISTRATION_RECORD
*
;
;
;
;
#if defined(_MSC_EXTENSIONS)
union
{
;
;
};
#else
PVOID FiberData;
#endif
;
struct
*
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
;
#if defined(_MSC_EXTENSIONS)
union
{
;
;
};
#else
DWORD FiberData;
#endif
;
;
}
, *
;
typedef
struct
{
;
;
;
;
#if defined(_MSC_EXTENSIONS)
union
{
;
;
};
#else
DWORD64 FiberData;
#endif
;
;
}
, *
;
#define THREAD_DYNAMIC_CODE_ALLOW 1 // Opt-out of dynamic code generation.
#define THREAD_BASE_PRIORITY_LOWRT 15 // value that gets a thread to LowRealtime-1
#define THREAD_BASE_PRIORITY_MAX 2 // maximum thread base priority boost
#define THREAD_BASE_PRIORITY_MIN (-2) // minimum thread base priority boost
#define THREAD_BASE_PRIORITY_IDLE (-15) // value that gets a thread to idle
typedef
struct
_UMS_CREATE_THREAD_ATTRIBUTES
{
;
;
;
}
UMS_CREATE_THREAD_ATTRIBUTES
, *
PUMS_CREATE_THREAD_ATTRIBUTES
;
typedef
struct
{
:
16
;
:
1
;
:
1
;
:
1
;
:
1
;
:
12
;
}
;
#define MEMORY_PRIORITY_LOWEST 0
#define MEMORY_PRIORITY_VERY_LOW 1
#define MEMORY_PRIORITY_LOW 2
#define MEMORY_PRIORITY_MEDIUM 3
#define MEMORY_PRIORITY_BELOW_NORMAL 4
#define MEMORY_PRIORITY_NORMAL 5
typedef
struct
{
;
;
;
;
;
;
}
, *
;
#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
#define QUOTA_LIMITS_HARDWS_MIN_DISABLE 0x00000002
#define QUOTA_LIMITS_HARDWS_MAX_ENABLE 0x00000004
#define QUOTA_LIMITS_HARDWS_MAX_DISABLE 0x00000008
#define QUOTA_LIMITS_USE_DEFAULT_LIMITS 0x00000010
typedef
union
{
;
struct
{
:
7
;
:
25
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
}
;
typedef
*
;
#define MAX_HW_COUNTERS 16
#define THREAD_PROFILING_FLAG_DISPATCH 0x00000001
typedef
enum
{
,
}
, *
;
typedef
enum
_PROCESS_MITIGATION_POLICY
{
,
,
,
ProcessStrictHandleCheckPolicy
,
ProcessSystemCallDisablePolicy
,
ProcessMitigationOptionsMask
,
ProcessExtensionPointDisablePolicy
,
ProcessControlFlowGuardPolicy
,
,
,
,
ProcessSystemCallFilterPolicy
,
ProcessPayloadRestrictionPolicy
,
ProcessChildProcessPolicy
,
ProcessSideChannelIsolationPolicy
,
MaxProcessMitigationPolicy
}
PROCESS_MITIGATION_POLICY
, *
PPROCESS_MITIGATION_POLICY
;
typedef
struct
_PROCESS_MITIGATION_ASLR_POLICY
{
union
{
;
struct
{
EnableBottomUpRandomization
:
1
;
EnableForceRelocateImages
:
1
;
:
1
;
:
1
;
:
28
;
}
PROCESS_MITIGATION_ASLR_POLICY
, *
PPROCESS_MITIGATION_ASLR_POLICY
;
typedef
struct
_PROCESS_MITIGATION_DEP_POLICY
{
union
{
;
struct
{
:
1
;
:
1
;
:
30
;
;
}
PROCESS_MITIGATION_DEP_POLICY
, *
PPROCESS_MITIGATION_DEP_POLICY
;
typedef
struct
_PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY
{
union
{
;
struct
{
RaiseExceptionOnInvalidHandleReference
:
1
;
HandleExceptionsPermanentlyEnabled
:
1
;
:
30
;
}
PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY
, *
PPROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY
;
typedef
struct
_PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY
{
union
{
;
struct
{
DisallowWin32kSystemCalls
:
1
;
AuditDisallowWin32kSystemCalls
:
1
;
:
30
;
}
PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY
, *
PPROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY
;
typedef
struct
_PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY
{
union
{
;
struct
{
:
1
;
:
31
;
}
PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY
, *
PPROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY
;
typedef
struct
_PROCESS_MITIGATION_DYNAMIC_CODE_POLICY
{
union
{
;
struct
{
:
1
;
:
1
;
:
1
;
:
1
;
:
28
;
}
PROCESS_MITIGATION_DYNAMIC_CODE_POLICY
, *
PPROCESS_MITIGATION_DYNAMIC_CODE_POLICY
;
typedef
struct
_PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY
{
union
{
;
struct
{
:
1
;
:
1
;
:
1
;
:
29
;
}
PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY
, *
PPROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY
;
typedef
struct
_PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY
{
union
{
;
struct
{
:
1
;
:
1
;
:
1
;
:
1
;
:
1
;
:
27
;
}
PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY
, *
PPROCESS_MITIGATION_BINARY_SIGNATURE_POLICY
;
typedef
struct
_PROCESS_MITIGATION_FONT_DISABLE_POLICY
{
union
{
;
struct
{
:
1
;
AuditNonSystemFontLoading
:
1
;
:
30
;
}
PROCESS_MITIGATION_FONT_DISABLE_POLICY
, *
PPROCESS_MITIGATION_FONT_DISABLE_POLICY
;
typedef
struct
_PROCESS_MITIGATION_IMAGE_LOAD_POLICY
{
union
{
;
struct
{
:
1
;
NoLowMandatoryLabelImages
:
1
;
:
1
;
:
1
;
AuditNoLowMandatoryLabelImages
:
1
;
:
27
;
}
PROCESS_MITIGATION_IMAGE_LOAD_POLICY
, *
PPROCESS_MITIGATION_IMAGE_LOAD_POLICY
;
typedef
struct
_PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY
{
union
{
;
struct
{
:
4
;
:
28
;
}
PROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY
, *
PPROCESS_MITIGATION_SYSTEM_CALL_FILTER_POLICY
;
typedef
struct
_PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY
{
union
{
;
struct
{
EnableExportAddressFilter
:
1
;
:
1
;
EnableExportAddressFilterPlus
:
1
;
AuditExportAddressFilterPlus
:
1
;
EnableImportAddressFilter
:
1
;
:
1
;
:
1
;
:
1
;
:
1
;
:
1
;
:
1
;
:
1
;
:
20
;
}
PROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY
, *
PPROCESS_MITIGATION_PAYLOAD_RESTRICTION_POLICY
;
typedef
struct
_PROCESS_MITIGATION_CHILD_PROCESS_POLICY
{
union
{
;
struct
{
:
1
;
AuditNoChildProcessCreation
:
1
;
AllowSecureProcessCreation
:
1
;
:
29
;
}
PROCESS_MITIGATION_CHILD_PROCESS_POLICY
, *
PPROCESS_MITIGATION_CHILD_PROCESS_POLICY
;
typedef
struct
_PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY
{
union
{
;
struct
{
:
1
;
:
1
;
:
1
;
SpeculativeStoreBypassDisable
:
1
;
:
28
;
}
PROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY
, *
PPROCESS_MITIGATION_SIDE_CHANNEL_ISOLATION_POLICY
;
typedef
struct
{
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
JOBOBJECT_BASIC_LIMIT_INFORMATION
;
;
;
;
;
;
}
, *
;
typedef
struct
_JOBOBJECT_BASIC_PROCESS_ID_LIST
{
NumberOfAssignedProcesses
;
;
[
1
];
}
JOBOBJECT_BASIC_PROCESS_ID_LIST
, *
PJOBOBJECT_BASIC_PROCESS_ID_LIST
;
typedef
struct
_JOBOBJECT_BASIC_UI_RESTRICTIONS
{
;
}
JOBOBJECT_BASIC_UI_RESTRICTIONS
, *
PJOBOBJECT_BASIC_UI_RESTRICTIONS
;
typedef
struct
{
;
;
;
;
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
_JOBOBJECT_ASSOCIATE_COMPLETION_PORT
{
;
;
}
JOBOBJECT_ASSOCIATE_COMPLETION_PORT
, *
PJOBOBJECT_ASSOCIATE_COMPLETION_PORT
;
typedef
struct
{
JOBOBJECT_BASIC_ACCOUNTING_INFORMATION
;
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
enum
_JOBOBJECT_RATE_CONTROL_TOLERANCE
{
=
1
,
,
}
JOBOBJECT_RATE_CONTROL_TOLERANCE
, *
PJOBOBJECT_RATE_CONTROL_TOLERANCE
;
typedef
enum
_JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
{
=
1
,
,
}
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
,
*
PJOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
typedef
struct
{
;
;
;
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
;
}
, *
;
typedef
struct
{
;
;
;
union
{
;
;
union
{
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
union
{
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
;
}
JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
union
{
;
;
union
{
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
union
{
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
JOBOBJECT_RATE_CONTROL_TOLERANCE
;
}
JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2
;
typedef
struct
{
;
union
{
;
;
struct
{
;
;
}
, *
;
typedef
enum
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
{
JOB_OBJECT_NET_RATE_CONTROL_ENABLE
=
0x1
,
JOB_OBJECT_NET_RATE_CONTROL_MAX_BANDWIDTH
=
0x2
,
JOB_OBJECT_NET_RATE_CONTROL_DSCP_TAG
=
0x4
,
JOB_OBJECT_NET_RATE_CONTROL_VALID_FLAGS
=
0x7
}
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
;
#if !defined(SORTPP_PASS) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
DEFINE_ENUM_FLAG_OPERATORS(JOB_OBJECT_NET_RATE_CONTROL_FLAGS)
extern
"C++"
{
inline
constexpr
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
) | ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
&)
) |= ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
) & ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
&)
) &= ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(~((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
) ^ ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
&)
) ^= ((
<
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
>::
)
)); } }
C_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));
typedef
char
[(
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
))?
1
:-
1
];
#endif
#define JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG 64
typedef
struct
{
;
JOB_OBJECT_NET_RATE_CONTROL_FLAGS
;
;
}
JOBOBJECT_NET_RATE_CONTROL_INFORMATION
;
typedef
enum
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
{
JOB_OBJECT_IO_RATE_CONTROL_ENABLE
=
0x1
,
JOB_OBJECT_IO_RATE_CONTROL_STANDALONE_VOLUME
=
0x2
,
JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ALL
=
0x4
,
JOB_OBJECT_IO_RATE_CONTROL_FORCE_UNIT_ACCESS_ON_SOFT_CAP
=
0x8
,
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
}
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
;
#if !defined(SORTPP_PASS) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
DEFINE_ENUM_FLAG_OPERATORS(JOB_OBJECT_IO_RATE_CONTROL_FLAGS)
extern
"C++"
{
inline
constexpr
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
) | ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
&)
) |= ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
) & ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
&)
) &= ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(~((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
constexpr
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
) ^ ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); }
inline
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&
,
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
)
throw
() {
return
(
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
&)(((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
&)
) ^= ((
<
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
>::
)
)); } }
#endif
typedef
struct
{
;
;
;
;
;
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
;
;
}
JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE
;
typedef
JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE
;
typedef
struct
{
;
;
;
;
;
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
;
;
;
;
;
;
;
;
}
JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V2
;
typedef
struct
{
;
;
;
;
;
JOB_OBJECT_IO_RATE_CONTROL_FLAGS
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE_V3
;
typedef
enum
JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS
{
JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE
=
0x1
,
JOBOBJECT_IO_ATTRIBUTION_CONTROL_DISABLE
=
0x2
,
JOBOBJECT_IO_ATTRIBUTION_CONTROL_VALID_FLAGS
=
0x3
}
JOBOBJECT_IO_ATTRIBUTION_CONTROL_FLAGS
;
typedef
struct
_JOBOBJECT_IO_ATTRIBUTION_STATS
{
;
TotalNonOverlappedQueueTime
;
TotalNonOverlappedServiceTime
;
;
}
JOBOBJECT_IO_ATTRIBUTION_STATS
, *
PJOBOBJECT_IO_ATTRIBUTION_STATS
;
typedef
struct
{
;
JOBOBJECT_IO_ATTRIBUTION_STATS
;
JOBOBJECT_IO_ATTRIBUTION_STATS
;
}
, *
;
#define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
#define JOB_OBJECT_POST_AT_END_OF_JOB 1
#define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
#define JOB_OBJECT_MSG_NEW_PROCESS 6
#define JOB_OBJECT_MSG_EXIT_PROCESS 7
#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
#define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 11
#define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 12
#define JOB_OBJECT_MSG_SILO_TERMINATED 13
#define JOB_OBJECT_MSG_MINIMUM 1
#define JOB_OBJECT_MSG_MAXIMUM 13
#define JOB_OBJECT_VALID_COMPLETION_FILTER \
(((1UL << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1) - \
((1UL << JOB_OBJECT_MSG_MINIMUM) - 1))
#define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
#define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
#define JOB_OBJECT_LIMIT_JOB_TIME 0x00000004
#define JOB_OBJECT_LIMIT_ACTIVE_PROCESS 0x00000008
#define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
#define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
#define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
#define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200
#define JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH JOB_OBJECT_LIMIT_JOB_MEMORY
#define JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
#define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
#define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
#define JOB_OBJECT_LIMIT_JOB_MEMORY_LOW 0x00008000
#define JOB_OBJECT_LIMIT_JOB_READ_BYTES 0x00010000
#define JOB_OBJECT_LIMIT_JOB_WRITE_BYTES 0x00020000
#define JOB_OBJECT_LIMIT_RATE_CONTROL 0x00040000
#define JOB_OBJECT_LIMIT_CPU_RATE_CONTROL JOB_OBJECT_LIMIT_RATE_CONTROL
#define JOB_OBJECT_LIMIT_IO_RATE_CONTROL 0x00080000
#define JOB_OBJECT_LIMIT_NET_RATE_CONTROL 0x00100000
#define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
#define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
#define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
#define JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS \
(JOB_OBJECT_LIMIT_JOB_READ_BYTES | \
JOB_OBJECT_LIMIT_JOB_WRITE_BYTES | \
JOB_OBJECT_LIMIT_JOB_TIME | \
JOB_OBJECT_LIMIT_JOB_MEMORY_LOW | \
JOB_OBJECT_LIMIT_JOB_MEMORY_HIGH | \
JOB_OBJECT_LIMIT_CPU_RATE_CONTROL | \
JOB_OBJECT_LIMIT_IO_RATE_CONTROL | \
JOB_OBJECT_LIMIT_NET_RATE_CONTROL)
#define JOB_OBJECT_UILIMIT_NONE 0x00000000
#define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
#define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
#define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
#define JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS 0x00000008
#define JOB_OBJECT_UILIMIT_DISPLAYSETTINGS 0x00000010
#define JOB_OBJECT_UILIMIT_GLOBALATOMS 0x00000020
#define JOB_OBJECT_UILIMIT_DESKTOP 0x00000040
#define JOB_OBJECT_UILIMIT_EXITWINDOWS 0x00000080
#define JOB_OBJECT_UILIMIT_ALL 0x000000FF
#define JOB_OBJECT_UI_VALID_FLAGS 0x000000FF
#define JOB_OBJECT_SECURITY_NO_ADMIN 0x00000001
#define JOB_OBJECT_SECURITY_RESTRICTED_TOKEN 0x00000002
#define JOB_OBJECT_SECURITY_ONLY_TOKEN 0x00000004
#define JOB_OBJECT_SECURITY_FILTER_TOKENS 0x00000008
#define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
#define JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x1
#define JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x2
#define JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x4
#define JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x8
#define JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE 0x10
#define JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS 0x1f
typedef
enum
{
=
1
,
,
JobObjectBasicProcessIdList
,
JobObjectBasicUIRestrictions
,
,
,
,
,
JobObjectExtendedLimitInformation
,
,
,
,
,
,
,
JobObjectCompletionFilter
,
JobObjectCompletionCounter
,
=
18
,
,
,
,
,
,
,
,
,
,
,
,
,
=
31
,
,
,
,
,
,
=
37
,
=
38
,
=
39
,
=
40
,
=
41
,
=
42
,
=
43
,
=
44
,
=
45
,
=
46
,
=
47
,
}
;
typedef
struct
{
;
;
;
;
[
3
];
}
, *
;
typedef
enum
{
=
0
,
,
,
,
,
}
, *
;
typedef
struct
{
;
;
;
}
, *
;
typedef
enum
{
,
,
,
}
, *
;
#define EVENT_MODIFY_STATE 0x0002
#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
#define MUTANT_QUERY_STATE 0x0001
#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\
MUTANT_QUERY_STATE)
#define SEMAPHORE_MODIFY_STATE 0x0002
#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
#define TIMER_QUERY_STATE 0x0001
#define TIMER_MODIFY_STATE 0x0002
#define TIMER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\
TIMER_QUERY_STATE|TIMER_MODIFY_STATE)
#define TIME_ZONE_ID_UNKNOWN 0
#define TIME_ZONE_ID_STANDARD 1
#define TIME_ZONE_ID_DAYLIGHT 2
typedef
enum
_LOGICAL_PROCESSOR_RELATIONSHIP
{
,
,
,
,
,
=
0xffff
}
LOGICAL_PROCESSOR_RELATIONSHIP
;
#define LTP_PC_SMT 0x1
typedef
enum
{
,
,
,
}
;
#define CACHE_FULLY_ASSOCIATIVE 0xFF
typedef
struct
{
;
;
;
;
;
}
, *
;
typedef
struct
{
;
LOGICAL_PROCESSOR_RELATIONSHIP
;
union
{
struct
{
;
}
;
struct
{
;
}
;
;
[
2
];
}
, *
;
typedef
struct
{
;
;
[
20
];
;
_Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
}
, *
;
typedef
struct
{
;
[
20
];
;
}
, *
;
typedef
struct
{
;
;
;
;
;
[
20
];
;
}
, *
;
typedef
struct
{
;
;
[
38
];
;
}
, *
;
typedef
struct
{
;
;
[
20
];
PROCESSOR_GROUP_INFO GroupInfo[ANYSIZE_ARRAY];
}
, *
;
_Struct_size_bytes_(Size) struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX {
LOGICAL_PROCESSOR_RELATIONSHIP
;
;
union
{
;
;
;
;
};
typedef
struct
_SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX
, *
;
typedef
enum
{
}
, *
;
_Struct_size_bytes_(Size) struct _SYSTEM_CPU_SET_INFORMATION {
;
;
union
{
struct
{
;
;
;
;
;
;
;
union
{
#define SYSTEM_CPU_SET_INFORMATION_PARKED 0x1
#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED 0x2
#define SYSTEM_CPU_SET_INFORMATION_ALLOCATED_TO_TARGET_PROCESS 0x4
#define SYSTEM_CPU_SET_INFORMATION_REALTIME 0x8
;
struct
{
:
1
;
:
1
;
:
1
;
:
1
;
:
4
;
union
{
;
;
};
;
}
;
};
typedef
struct
_SYSTEM_CPU_SET_INFORMATION
, *
;
typedef
struct
{
;
}
, *
;
#define PROCESSOR_INTEL_386 386
#define PROCESSOR_INTEL_486 486
#define PROCESSOR_INTEL_PENTIUM 586
#define PROCESSOR_INTEL_IA64 2200
#define PROCESSOR_AMD_X8664 8664
#define PROCESSOR_MIPS_R4000 4000 // incl R4101 & R3910 for Windows CE
#define PROCESSOR_ALPHA_21064 21064
#define PROCESSOR_PPC_601 601
#define PROCESSOR_PPC_603 603
#define PROCESSOR_PPC_604 604
#define PROCESSOR_PPC_620 620
#define PROCESSOR_HITACHI_SH3 10003 // Windows CE
#define PROCESSOR_HITACHI_SH3E 10004 // Windows CE
#define PROCESSOR_HITACHI_SH4 10005 // Windows CE
#define PROCESSOR_MOTOROLA_821 821 // Windows CE
#define PROCESSOR_SHx_SH3 103 // Windows CE
#define PROCESSOR_SHx_SH4 104 // Windows CE
#define PROCESSOR_STRONGARM 2577 // Windows CE - 0xA11
#define PROCESSOR_ARM720 1824 // Windows CE - 0x720
#define PROCESSOR_ARM820 2080 // Windows CE - 0x820
#define PROCESSOR_ARM920 2336 // Windows CE - 0x920
#define PROCESSOR_ARM_7TDMI 70001 // Windows CE
#define PROCESSOR_OPTIL 0x494f // MSIL
#define PROCESSOR_ARCHITECTURE_INTEL 0
#define PROCESSOR_ARCHITECTURE_MIPS 1
#define PROCESSOR_ARCHITECTURE_ALPHA 2
#define PROCESSOR_ARCHITECTURE_PPC 3
#define PROCESSOR_ARCHITECTURE_SHX 4
#define PROCESSOR_ARCHITECTURE_ARM 5
#define PROCESSOR_ARCHITECTURE_IA64 6
#define PROCESSOR_ARCHITECTURE_ALPHA64 7
#define PROCESSOR_ARCHITECTURE_MSIL 8
#define PROCESSOR_ARCHITECTURE_AMD64 9
#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
#define PROCESSOR_ARCHITECTURE_NEUTRAL 11
#define PROCESSOR_ARCHITECTURE_ARM64 12
#define PROCESSOR_ARCHITECTURE_ARM32_ON_WIN64 13
#define PROCESSOR_ARCHITECTURE_IA32_ON_ARM64 14
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
#define PF_FLOATING_POINT_PRECISION_ERRATA 0
#define PF_FLOATING_POINT_EMULATED 1
#define PF_COMPARE_EXCHANGE_DOUBLE 2
#define PF_MMX_INSTRUCTIONS_AVAILABLE 3
#define PF_PPC_MOVEMEM_64BIT_OK 4
#define PF_ALPHA_BYTE_INSTRUCTIONS 5
#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
#define PF_RDTSC_INSTRUCTION_AVAILABLE 8
#define PF_PAE_ENABLED 9
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
#define PF_SSE_DAZ_MODE_AVAILABLE 11
#define PF_NX_ENABLED 12
#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
#define PF_COMPARE_EXCHANGE128 14
#define PF_COMPARE64_EXCHANGE128 15
#define PF_CHANNELS_ENABLED 16
#define PF_XSAVE_ENABLED 17
#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
#define PF_VIRT_FIRMWARE_ENABLED 21
#define PF_RDWRFSGSBASE_AVAILABLE 22
#define PF_FASTFAIL_AVAILABLE 23
#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
#define PF_RDRAND_INSTRUCTION_AVAILABLE 28
#define PF_ARM_V8_INSTRUCTIONS_AVAILABLE 29
#define PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE 30
#define PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE 31
#define PF_RDTSCP_INSTRUCTION_AVAILABLE 32
#define PF_RDPID_INSTRUCTION_AVAILABLE 33
#define XSTATE_LEGACY_FLOATING_POINT (0)
#define XSTATE_LEGACY_SSE (1)
#define XSTATE_GSSE (2)
#define XSTATE_AVX (XSTATE_GSSE)
#define XSTATE_MPX_BNDREGS (3)
#define XSTATE_MPX_BNDCSR (4)
#define XSTATE_AVX512_KMASK (5)
#define XSTATE_AVX512_ZMM_H (6)
#define XSTATE_AVX512_ZMM (7)
#define XSTATE_IPT (8)
#define XSTATE_CET_U (11)
#define XSTATE_LWP (62)
#define MAXIMUM_XSTATE_FEATURES (64)
#define XSTATE_MASK_LEGACY_FLOATING_POINT (1ui64 << (XSTATE_LEGACY_FLOATING_POINT))
#define XSTATE_MASK_LEGACY_SSE (1ui64 << (XSTATE_LEGACY_SSE))
#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | \
XSTATE_MASK_LEGACY_SSE)
#define XSTATE_MASK_GSSE (1ui64 << (XSTATE_GSSE))
#define XSTATE_MASK_AVX (XSTATE_MASK_GSSE)
#define XSTATE_MASK_MPX ((1ui64 << (XSTATE_MPX_BNDREGS)) | \
(1ui64 << (XSTATE_MPX_BNDCSR)))
#define XSTATE_MASK_AVX512 ((1ui64 << (XSTATE_AVX512_KMASK)) | \
(1ui64 << (XSTATE_AVX512_ZMM_H)) | \
(1ui64 << (XSTATE_AVX512_ZMM)))
#define XSTATE_MASK_IPT (1ui64 << (XSTATE_IPT))
#define XSTATE_MASK_CET_U (1ui64 << (XSTATE_CET_U))
#define XSTATE_MASK_LWP (1ui64 << (XSTATE_LWP))
#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)
#define XSTATE_MASK_PERSISTENT ((1ui64 << (XSTATE_MPX_BNDCSR)) | \
XSTATE_MASK_LWP)
#define XSTATE_MASK_USER_VISIBLE_SUPERVISOR (XSTATE_MASK_CET_U)
#define XSTATE_COMPACTION_ENABLE (63)
#define XSTATE_COMPACTION_ENABLE_MASK (1ui64 << (XSTATE_COMPACTION_ENABLE))
#define XSTATE_ALIGN_BIT (1)
#define XSTATE_ALIGN_MASK (1ui64 << (XSTATE_ALIGN_BIT))
#define XSTATE_CONTROLFLAG_XSAVEOPT_MASK (1)
#define XSTATE_CONTROLFLAG_XSAVEC_MASK (2)
#define XSTATE_CONTROLFLAG_VALID_MASK (XSTATE_CONTROLFLAG_XSAVEOPT_MASK | \
XSTATE_CONTROLFLAG_XSAVEC_MASK)
typedef
struct
{
;
;
}
, *
;
typedef
struct
{
;
;
;
union
{
;
struct
{
:
1
;
:
1
;
};
};
XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
EnabledSupervisorFeatures
;
;
;
DWORD AllFeatures[MAXIMUM_XSTATE_FEATURES];
EnabledUserVisibleSupervisorFeatures
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
}
, *
;
typedef struct DECLSPEC_ALIGN(16) _MEMORY_BASIC_INFORMATION64 {
typedef
struct
__declspec
(align(
16
))
{
;
;
;
;
;
;
;
;
;
}
, *
;
#define CFG_CALL_TARGET_VALID (0x00000001)
#define CFG_CALL_TARGET_PROCESSED (0x00000002)
#define CFG_CALL_TARGET_CONVERT_EXPORT_SUPPRESSED_TO_VALID (0x00000004)
typedef
struct
{
;
;
}
, *
;
#define SECTION_QUERY 0x0001
#define SECTION_MAP_WRITE 0x0002
#define SECTION_MAP_READ 0x0004
#define SECTION_MAP_EXECUTE 0x0008
#define SECTION_EXTEND_SIZE 0x0010
#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 // not included in SECTION_ALL_ACCESS
#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
SECTION_MAP_WRITE | \
SECTION_MAP_READ | \
SECTION_MAP_EXECUTE | \
SECTION_EXTEND_SIZE)
#define SESSION_QUERY_ACCESS 0x0001
#define SESSION_MODIFY_ACCESS 0x0002
#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
SESSION_QUERY_ACCESS | \
SESSION_MODIFY_ACCESS)
#define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02
#define PAGE_READWRITE 0x04
#define PAGE_WRITECOPY 0x08
#define PAGE_EXECUTE 0x10
#define PAGE_EXECUTE_READ 0x20
#define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80
#define PAGE_GUARD 0x100
#define PAGE_NOCACHE 0x200
#define PAGE_WRITECOMBINE 0x400
#define PAGE_ENCLAVE_THREAD_CONTROL 0x80000000
#define PAGE_REVERT_TO_FILE_MAP 0x80000000
#define PAGE_TARGETS_NO_UPDATE 0x40000000
#define PAGE_TARGETS_INVALID 0x40000000
#define PAGE_ENCLAVE_UNVALIDATED 0x20000000
#define PAGE_ENCLAVE_DECOMMIT 0x10000000
#define MEM_COMMIT 0x00001000
#define MEM_RESERVE 0x00002000
#define MEM_REPLACE_PLACEHOLDER 0x00004000
#define MEM_RESERVE_PLACEHOLDER 0x00040000
#define MEM_RESET 0x00080000
#define MEM_TOP_DOWN 0x00100000
#define MEM_WRITE_WATCH 0x00200000
#define MEM_PHYSICAL 0x00400000
#define MEM_ROTATE 0x00800000
#define MEM_DIFFERENT_IMAGE_BASE_OK 0x00800000
#define MEM_RESET_UNDO 0x01000000
#define MEM_LARGE_PAGES 0x20000000
#define MEM_4MB_PAGES 0x80000000
#define MEM_64K_PAGES (MEM_LARGE_PAGES | MEM_PHYSICAL)
#define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x00000001
#define MEM_COALESCE_PLACEHOLDERS 0x00000001
#define MEM_PRESERVE_PLACEHOLDER 0x00000002
#define MEM_DECOMMIT 0x00004000
#define MEM_RELEASE 0x00008000
#define MEM_FREE 0x00010000
typedef
struct
_MEM_ADDRESS_REQUIREMENTS
{
;
;
;
}
, *
PMEM_ADDRESS_REQUIREMENTS
;
#define MEM_EXTENDED_PARAMETER_GRAPHICS 0x00000001
typedef
enum
MEM_EXTENDED_PARAMETER_TYPE
{
MemExtendedParameterInvalidType
=
0
,
MemExtendedParameterAddressRequirements
,
MemExtendedParameterNumaNode
,
MemExtendedParameterPartitionHandle
,
MemExtendedParameterUserPhysicalHandle
,
MemExtendedParameterAttributeFlags
,
}
MEM_EXTENDED_PARAMETER_TYPE
, *
PMEM_EXTENDED_PARAMETER_TYPE
;
#define MEM_EXTENDED_PARAMETER_TYPE_BITS 8
typedef struct DECLSPEC_ALIGN(8) MEM_EXTENDED_PARAMETER {
typedef
struct
__declspec
(align(
8
))
{
struct
{
DWORD64 Type : MEM_EXTENDED_PARAMETER_TYPE_BITS;
DWORD64 Reserved : 64 - MEM_EXTENDED_PARAMETER_TYPE_BITS;
union
{
;
;
;
;
;
}
, *
;
#define SEC_PARTITION_OWNER_HANDLE 0x00040000
#define SEC_64K_PAGES 0x00080000
#define SEC_FILE 0x00800000
#define SEC_IMAGE 0x01000000
#define SEC_PROTECTED_IMAGE 0x02000000
#define SEC_RESERVE 0x04000000
#define SEC_COMMIT 0x08000000
#define SEC_NOCACHE 0x10000000
#define SEC_WRITECOMBINE 0x40000000
#define SEC_LARGE_PAGES 0x80000000
#define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
typedef
enum
MEM_SECTION_EXTENDED_PARAMETER_TYPE
{
MemSectionExtendedParameterInvalidType
=
0
,
MemSectionExtendedParameterUserPhysicalFlags
,
MemSectionExtendedParameterNumaNode
,
MemSectionExtendedParameterMax
}
MEM_SECTION_EXTENDED_PARAMETER_TYPE
, *
PMEM_SECTION_EXTENDED_PARAMETER_TYPE
;
#define MEM_PRIVATE 0x00020000
#define MEM_MAPPED 0x00040000
#define MEM_IMAGE 0x01000000
#define WRITE_WATCH_FLAG_RESET 0x01
#define ENCLAVE_TYPE_SGX 0x00000001
#define ENCLAVE_TYPE_SGX2 0x00000002
typedef
struct
{
[
4096
];
}
, *
;
typedef
struct
{
[
1808
];
[
240
];
[
304
];
[
1744
];
}
, *
;
#define ENCLAVE_TYPE_VBS 0x00000010
typedef
struct
{
;
[
32
];
}
, *
;
#define ENCLAVE_VBS_FLAG_DEBUG 0x00000001
typedef
struct
{
;
;
}
, *
;
#if !defined(SORTPP_PASS) && !defined(MIDL_PASS) && !defined(RC_INVOKED)
typedef
(
)(
);
typedef
(*
);
typedef
LPENCLAVE_TARGET_FUNCTION
;
#endif
#define FILE_READ_DATA ( 0x0001 ) // file & pipe
#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory
#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe
#define FILE_ADD_FILE ( 0x0002 ) // directory
#define FILE_APPEND_DATA ( 0x0004 ) // file
#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory
#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe
#define FILE_READ_EA ( 0x0008 ) // file & directory
#define FILE_WRITE_EA ( 0x0010 ) // file & directory
#define FILE_EXECUTE ( 0x0020 ) // file
#define FILE_TRAVERSE ( 0x0020 ) // directory
#define FILE_DELETE_CHILD ( 0x0040 ) // directory
#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all
#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all
#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
FILE_READ_DATA |\
FILE_READ_ATTRIBUTES |\
FILE_READ_EA |\
SYNCHRONIZE)
#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
FILE_WRITE_DATA |\
FILE_WRITE_ATTRIBUTES |\
FILE_WRITE_EA |\
FILE_APPEND_DATA |\
SYNCHRONIZE)
#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
FILE_READ_ATTRIBUTES |\
FILE_EXECUTE |\
SYNCHRONIZE)
#define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002
#define FILE_SHARE_DELETE 0x00000004
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_DEVICE 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
#define FILE_ATTRIBUTE_ENCRYPTED 0x00004000
#define FILE_ATTRIBUTE_INTEGRITY_STREAM 0x00008000
#define FILE_ATTRIBUTE_VIRTUAL 0x00010000
#define FILE_ATTRIBUTE_NO_SCRUB_DATA 0x00020000
#define FILE_ATTRIBUTE_EA 0x00040000
#define FILE_ATTRIBUTE_PINNED 0x00080000
#define FILE_ATTRIBUTE_UNPINNED 0x00100000
#define FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000
#define FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000
#define TREE_CONNECT_ATTRIBUTE_PRIVACY 0x00004000
#define TREE_CONNECT_ATTRIBUTE_INTEGRITY 0x00008000
#define TREE_CONNECT_ATTRIBUTE_GLOBAL 0x00000004
#define TREE_CONNECT_ATTRIBUTE_PINNED 0x00000002
#define FILE_ATTRIBUTE_STRICTLY_SEQUENTIAL 0x20000000
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
#define FILE_ACTION_ADDED 0x00000001
#define FILE_ACTION_REMOVED 0x00000002
#define FILE_ACTION_MODIFIED 0x00000003
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
#define FILE_CASE_PRESERVED_NAMES 0x00000002
#define FILE_UNICODE_ON_DISK 0x00000004
#define FILE_PERSISTENT_ACLS 0x00000008
#define FILE_FILE_COMPRESSION 0x00000010
#define FILE_VOLUME_QUOTAS 0x00000020
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200
#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
#define FILE_SUPPORTS_ENCRYPTION 0x00020000
#define FILE_NAMED_STREAMS 0x00040000
#define FILE_READ_ONLY_VOLUME 0x00080000
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000
#define FILE_SUPPORTS_HARD_LINKS 0x00400000
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000
#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
#define FILE_SUPPORTS_SPARSE_VDL 0x10000000
#define FILE_DAX_VOLUME 0x20000000
#define FILE_SUPPORTS_GHOSTING 0x40000000
#define FILE_INVALID_FILE_ID ((LONGLONG)-1LL)
typedef
struct
{
[
16
];
}
, *
;
typedef
struct
{
;
;
;
[
1
];
}
, *
;
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS3)
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
[
1
];
}
, *
;
#endif
typedef
union
{
;
;
}
, *
;
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define FLUSH_FLAGS_FILE_DATA_ONLY 0x00000001
#define FLUSH_FLAGS_NO_SYNC 0x00000002
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
#define FLUSH_FLAGS_FILE_DATA_SYNC_ONLY 0x00000004
#endif // (NTDDI_VERSION >= NTDDI_WIN10_RS1)
typedef
struct
_REPARSE_GUID_DATA_BUFFER
{
;
;
;
;
struct
{
[
1
];
}
;
}
, *
PREPARSE_GUID_DATA_BUFFER
;
#define REPARSE_GUID_DATA_BUFFER_HEADER_SIZE UFIELD_OFFSET(REPARSE_GUID_DATA_BUFFER, GenericReparseBuffer)
#define MAXIMUM_REPARSE_DATA_BUFFER_SIZE ( 16 * 1024 )
#define IO_REPARSE_TAG_RESERVED_ZERO (0)
#define IO_REPARSE_TAG_RESERVED_ONE (1)
#define IO_REPARSE_TAG_RESERVED_TWO (2)
#define IO_REPARSE_TAG_RESERVED_RANGE IO_REPARSE_TAG_RESERVED_TWO
#define IsReparseTagMicrosoft(_tag) ( \
((_tag) & 0x80000000) \
)
#define IsReparseTagNameSurrogate(_tag) ( \
((_tag) & 0x20000000) \
)
#define IsReparseTagDirectory(_tag) ( \
((_tag) & 0x10000000) \
)
#define IO_REPARSE_TAG_MOUNT_POINT (0xA0000003L)
#define IO_REPARSE_TAG_HSM (0xC0000004L)
#define IO_REPARSE_TAG_HSM2 (0x80000006L)
#define IO_REPARSE_TAG_SIS (0x80000007L)
#define IO_REPARSE_TAG_WIM (0x80000008L)
#define IO_REPARSE_TAG_CSV (0x80000009L)
#define IO_REPARSE_TAG_DFS (0x8000000AL)
#define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
#define IO_REPARSE_TAG_DFSR (0x80000012L)
#define IO_REPARSE_TAG_DEDUP (0x80000013L)
#define IO_REPARSE_TAG_NFS (0x80000014L)
#define IO_REPARSE_TAG_FILE_PLACEHOLDER (0x80000015L)
#define IO_REPARSE_TAG_WOF (0x80000017L)
#define IO_REPARSE_TAG_WCI (0x80000018L)
#define IO_REPARSE_TAG_WCI_1 (0x90001018L)
#define IO_REPARSE_TAG_GLOBAL_REPARSE (0xA0000019L)
#define IO_REPARSE_TAG_CLOUD (0x9000001AL)
#define IO_REPARSE_TAG_CLOUD_1 (0x9000101AL)
#define IO_REPARSE_TAG_CLOUD_2 (0x9000201AL)
#define IO_REPARSE_TAG_CLOUD_3 (0x9000301AL)
#define IO_REPARSE_TAG_CLOUD_4 (0x9000401AL)
#define IO_REPARSE_TAG_CLOUD_5 (0x9000501AL)
#define IO_REPARSE_TAG_CLOUD_6 (0x9000601AL)
#define IO_REPARSE_TAG_CLOUD_7 (0x9000701AL)
#define IO_REPARSE_TAG_CLOUD_8 (0x9000801AL)
#define IO_REPARSE_TAG_CLOUD_9 (0x9000901AL)
#define IO_REPARSE_TAG_CLOUD_A (0x9000A01AL)
#define IO_REPARSE_TAG_CLOUD_B (0x9000B01AL)
#define IO_REPARSE_TAG_CLOUD_C (0x9000C01AL)
#define IO_REPARSE_TAG_CLOUD_D (0x9000D01AL)
#define IO_REPARSE_TAG_CLOUD_E (0x9000E01AL)
#define IO_REPARSE_TAG_CLOUD_F (0x9000F01AL)
#define IO_REPARSE_TAG_CLOUD_MASK (0x0000F000L)
#define IO_REPARSE_TAG_APPEXECLINK (0x8000001BL)
#define IO_REPARSE_TAG_PROJFS (0x9000001CL)
#define IO_REPARSE_TAG_STORAGE_SYNC (0x8000001EL)
#define IO_REPARSE_TAG_WCI_TOMBSTONE (0xA000001FL)
#define IO_REPARSE_TAG_UNHANDLED (0x80000020L)
#define IO_REPARSE_TAG_ONEDRIVE (0x80000021L)
#define IO_REPARSE_TAG_PROJFS_TOMBSTONE (0xA0000022L)
#define IO_REPARSE_TAG_AF_UNIX (0x80000023L)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
#define SCRUB_DATA_INPUT_FLAG_RESUME 0x00000001
#define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x00000002
#define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x00000004
#define SCRUB_DATA_INPUT_FLAG_IGNORE_REDUNDANCY 0x00000008
#define SCRUB_DATA_INPUT_FLAG_SKIP_DATA 0x00000010
#define SCRUB_DATA_INPUT_FLAG_SCRUB_BY_OBJECT_ID 0x00000020
#define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x00000001
#define SCRUB_DATA_OUTPUT_FLAG_NON_USER_DATA_RANGE 0x00010000
#if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
#define SCRUB_DATA_OUTPUT_FLAG_PARITY_EXTENT_DATA_RETURNED 0x00020000
#define SCRUB_DATA_OUTPUT_FLAG_RESUME_CONTEXT_LENGTH_SPECIFIED 0x00040000
#endif /* _WIN32_WINNT >= _WIN32_WINNT_WINBLUE */
typedef
struct
{
;
;
;
[
4
];
[
25
];
[
816
];
}
, *
;
#if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
typedef
struct
{
;
;
}
, *
;
typedef
struct
_SCRUB_PARITY_EXTENT_DATA
{
;
;
;
MaximumNumberOfParityExtents
;
SCRUB_PARITY_EXTENT ParityExtents[ANYSIZE_ARRAY];
}
, *
PSCRUB_PARITY_EXTENT_DATA
;
#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) */
typedef
struct
{
;
;
;
;
;
;
;
;
#if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
;
;
[
9
];
#else /* (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) */
//
// Reserved
//
DWORD Reserved[10];
#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE) */
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5)
;
NumberOfDataBytesProcessed
;
;
TotalNumberOfDataBytesInUse
;
#endif
[
816
];
}
, *
;
#endif /*_WIN32_WINNT >= _WIN32_WINNT_WIN8 */
#if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
typedef
enum
_SharedVirtualDiskSupportType
{
SharedVirtualDisksUnsupported
=
0
,
SharedVirtualDisksSupported
=
1
,
SharedVirtualDiskSnapshotsSupported
=
3
,
SharedVirtualDiskCDPSnapshotsSupported
=
7
}
SharedVirtualDiskSupportType
;
typedef
enum
_SharedVirtualDiskHandleState
{
SharedVirtualDiskHandleStateNone
=
0
,
SharedVirtualDiskHandleStateFileShared
=
1
,
SharedVirtualDiskHandleStateHandleShared
=
3
}
SharedVirtualDiskHandleState
;
typedef
struct
_SHARED_VIRTUAL_DISK_SUPPORT
{
SharedVirtualDiskSupportType
;
SharedVirtualDiskHandleState
;
}
SHARED_VIRTUAL_DISK_SUPPORT
, *
PSHARED_VIRTUAL_DISK_SUPPORT
;
#define IsVirtualDiskFileShared(HandleState) (((HandleState) & SharedVirtualDiskHandleStateFileShared) != 0)
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5)
typedef
struct
{
;
;
;
;
;
}
, *
;
#if defined(_WIN64)
//
// 32/64 Bit thunking support structure
//
typedef struct _REARRANGE_FILE_DATA32 {
ULONGLONG SourceStartingOffset;
ULONGLONG TargetOffset;
UINT32 SourceFileHandle;
DWORD Length;
DWORD Flags;
} REARRANGE_FILE_DATA32, *PREARRANGE_FILE_DATA32;
#endif // defined(_WIN64)
#endif /* (_WIN32_WINNT >= _WIN32_WINNT_WIN10_RS5) */
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
#define SHUFFLE_FILE_FLAG_SKIP_INITIALIZING_NEW_CLUSTERS (0x00000001)
typedef
struct
{
;
;
;
}
, *
;
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
#define IO_COMPLETION_MODIFY_STATE 0x0002
#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
#define IO_QOS_MAX_RESERVATION 1000000000ULL
#ifndef SMB_CCF_APP_INSTANCE_EA_NAME
#define SMB_CCF_APP_INSTANCE_EA_NAME "ClusteredApplicationInstance"
#endif //SMB_CCF_APP_INSTANCE_EA_NAME
#ifndef _NETWORK_APP_INSTANCE_EA_DEFINED
#define _NETWORK_APP_INSTANCE_EA_DEFINED
#if (NTDDI_VERSION >= NTDDI_WIN10)
#ifndef NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR
#define NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR 0x00000001
#endif //NETWORK_APP_INSTANCE_CSV_FLAGS_VALID_ONLY_IF_CSV_COORDINATOR
typedef
struct
{
;
;
}
, *
;
#endif // (NTDDI_VERSION >= NTDDI_WIN10)
#endif //_NETWORK_APP_INSTANCE_EA_DEFINED
#define DUPLICATE_CLOSE_SOURCE 0x00000001
#define DUPLICATE_SAME_ACCESS 0x00000002
DEFINE_GUID( GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, 0xF7, 0x15, 0x56, 0xF2, 0x0B, 0x4A );
DEFINE_GUID( GUID_MIN_POWER_SAVINGS, 0x8C5E7FDA, 0xE8BF, 0x4A96, 0x9A, 0x85, 0xA6, 0xE2, 0x3A, 0x8C, 0x63, 0x5C );
DEFINE_GUID( GUID_TYPICAL_POWER_SAVINGS, 0x381B4222, 0xF694, 0x41F0, 0x96, 0x85, 0xFF, 0x5B, 0xB2, 0x60, 0xDF, 0x2E );
extern
"C"
const
GUID_TYPICAL_POWER_SAVINGS
;
DEFINE_GUID( NO_SUBGROUP_GUID, 0xFEA3413E, 0x7E05, 0x4911, 0x9A, 0x71, 0x70, 0x03, 0x31, 0xF1, 0xC2, 0x94 );
DEFINE_GUID( ALL_POWERSCHEMES_GUID, 0x68A1E95E, 0x13EA, 0x41E1, 0x80, 0x11, 0x0C, 0x49, 0x6C, 0xA4, 0x90, 0xB0 );
DEFINE_GUID( GUID_POWERSCHEME_PERSONALITY, 0x245D8541, 0x3943, 0x4422, 0xB0, 0x25, 0x13, 0xA7, 0x84, 0xF6, 0x79, 0xB7 );
extern
"C"
const
GUID_POWERSCHEME_PERSONALITY
;
DEFINE_GUID( GUID_ACTIVE_POWERSCHEME, 0x31F9F286, 0x5084, 0x42FE, 0xB7, 0x20, 0x2B, 0x02, 0x64, 0x99, 0x37, 0x63 );
DEFINE_GUID(GUID_IDLE_RESILIENCY_SUBGROUP, 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4, 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54);
extern
"C"
const
GUID_IDLE_RESILIENCY_SUBGROUP
;
DEFINE_GUID(GUID_IDLE_RESILIENCY_PERIOD, 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28);
extern
"C"
const
GUID_IDLE_RESILIENCY_PERIOD
;
DEFINE_GUID(GUID_DEEP_SLEEP_ENABLED, 0xd502f7ee, 0x1dc7, 0x4efd, 0xa5, 0x5d, 0xf0, 0x4b, 0x6f, 0x5c, 0x5, 0x45);
DEFINE_GUID(GUID_DEEP_SLEEP_PLATFORM_STATE, 0xd23f2fb8, 0x9536, 0x4038, 0x9c, 0x94, 0x1c, 0xe0, 0x2e, 0x5c, 0x21, 0x52);
DEFINE_GUID(GUID_DISK_COALESCING_POWERDOWN_TIMEOUT, 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33);
extern
"C"
const
GUID_DISK_COALESCING_POWERDOWN_TIMEOUT
;
DEFINE_GUID(GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT, 0x3166bc41, 0x7e98, 0x4e03, 0xb3, 0x4e, 0xec, 0xf, 0x5f, 0x2b, 0x21, 0x8e);
extern
"C"
const
GUID_EXECUTION_REQUIRED_REQUEST_TIMEOUT
;
DEFINE_GUID( GUID_VIDEO_SUBGROUP, 0x7516B95F, 0xF776, 0x4464, 0x8C, 0x53, 0x06, 0x16, 0x7F, 0x40, 0xCC, 0x99 );
DEFINE_GUID( GUID_VIDEO_POWERDOWN_TIMEOUT, 0x3C0BC021, 0xC8A8, 0x4E07, 0xA9, 0x73, 0x6B, 0x14, 0xCB, 0xCB, 0x2B, 0x7E );
extern
"C"
const
GUID_VIDEO_POWERDOWN_TIMEOUT
;
DEFINE_GUID( GUID_VIDEO_ANNOYANCE_TIMEOUT, 0x82DBCF2D, 0xCD67, 0x40C5, 0xBF, 0xDC, 0x9F, 0x1A, 0x5C, 0xCD, 0x46, 0x63 );
extern
"C"
const
GUID_VIDEO_ANNOYANCE_TIMEOUT
;
DEFINE_GUID( GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE, 0xEED904DF, 0xB142, 0x4183, 0xB1, 0x0B, 0x5A, 0x11, 0x97, 0xA3, 0x78, 0x64 );
extern
"C"
const
GUID_VIDEO_ADAPTIVE_PERCENT_INCREASE
;
DEFINE_GUID( GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x35, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
DEFINE_GUID( GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
extern
"C"
const
GUID_VIDEO_ADAPTIVE_POWERDOWN
;
DEFINE_GUID( GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5, 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x4619, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
extern
"C"
const
GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS
;
DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS, 0xf1fbfde2, 0xa960, 0x4165, 0x9f, 0x88, 0x50, 0x66, 0x79, 0x11, 0xce, 0x96);
extern
"C"
const
GUID_DEVICE_POWER_POLICY_VIDEO_DIM_BRIGHTNESS
;
DEFINE_GUID(GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS, 0x8ffee2c6, 0x2d01, 0x46be, 0xad, 0xb9, 0x39, 0x8a, 0xdd, 0xc5, 0xb4, 0xff);
extern
"C"
const
GUID_VIDEO_CURRENT_MONITOR_BRIGHTNESS
;
DEFINE_GUID(GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS, 0xFBD9AA66, 0x9553, 0x4097, 0xBA, 0x44, 0xED, 0x6E, 0x9D, 0x65, 0xEA, 0xB8);
extern
"C"
const
GUID_VIDEO_ADAPTIVE_DISPLAY_BRIGHTNESS
;
DEFINE_GUID(GUID_CONSOLE_DISPLAY_STATE, 0x6fe69556, 0x704a, 0x47a0, 0x8f, 0x24, 0xc2, 0x8d, 0x93, 0x6f, 0xda, 0x47);
extern
"C"
const
GUID_CONSOLE_DISPLAY_STATE
;
DEFINE_GUID( GUID_ALLOW_DISPLAY_REQUIRED, 0xA9CEB8DA, 0xCD46, 0x44FB, 0xA9, 0x8B, 0x02, 0xAF, 0x69, 0xDE, 0x46, 0x23 );
extern
"C"
const
GUID_ALLOW_DISPLAY_REQUIRED
;
DEFINE_GUID(GUID_VIDEO_CONSOLE_LOCK_TIMEOUT, 0x8ec4b3a5, 0x6868, 0x48c2, 0xbe, 0x75, 0x4f, 0x30, 0x44, 0xbe, 0x88, 0xa7);
extern
"C"
const
GUID_VIDEO_CONSOLE_LOCK_TIMEOUT
;
DEFINE_GUID(GUID_ADVANCED_COLOR_QUALITY_BIAS, 0x684c3e69, 0xa4f7, 0x4014, 0x87, 0x54, 0xd4, 0x51, 0x79, 0xa5, 0x61, 0x67);
extern
"C"
const
GUID_ADVANCED_COLOR_QUALITY_BIAS
;
DEFINE_GUID(GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP, 0x8619b916, 0xe004, 0x4dd8, 0x9b, 0x66, 0xda, 0xe8, 0x6f, 0x80, 0x66, 0x98);
extern
"C"
const
GUID_ADAPTIVE_POWER_BEHAVIOR_SUBGROUP
;
DEFINE_GUID(GUID_NON_ADAPTIVE_INPUT_TIMEOUT, 0x5adbbfbc, 0x74e, 0x4da1, 0xba, 0x38, 0xdb, 0x8b, 0x36, 0xb2, 0xc8, 0xf3);
DEFINE_GUID(GUID_ADAPTIVE_INPUT_CONTROLLER_STATE, 0xe98fae9, 0xf45a, 0x4de1, 0xa7, 0x57, 0x60, 0x31, 0xf1, 0x97, 0xf6, 0xea);
DEFINE_GUID( GUID_DISK_SUBGROUP, 0x0012EE47, 0x9041, 0x4B5D, 0x9B, 0x77, 0x53, 0x5F, 0xBA, 0x8B, 0x14, 0x42 );
DEFINE_GUID(GUID_DISK_MAX_POWER, 0x51dea550, 0xbb38, 0x4bc4, 0x99, 0x1b, 0xea, 0xcf, 0x37, 0xbe, 0x5e, 0xc8);
DEFINE_GUID( GUID_DISK_POWERDOWN_TIMEOUT, 0x6738E2C4, 0xE8A5, 0x4A42, 0xB1, 0x6A, 0xE0, 0x40, 0xE7, 0x69, 0x75, 0x6E );
extern
"C"
const
GUID_DISK_POWERDOWN_TIMEOUT
;
DEFINE_GUID( GUID_DISK_IDLE_TIMEOUT, 0x58E39BA8, 0xB8E6, 0x4EF6, 0x90, 0xD0, 0x89, 0xAE, 0x32, 0xB2, 0x58, 0xD6 );
DEFINE_GUID( GUID_DISK_BURST_IGNORE_THRESHOLD, 0x80e3c60e, 0xbb94, 0x4ad8, 0xbb, 0xe0, 0x0d, 0x31, 0x95, 0xef, 0xc6, 0x63 );
extern
"C"
const
GUID_DISK_BURST_IGNORE_THRESHOLD
;
DEFINE_GUID( GUID_DISK_ADAPTIVE_POWERDOWN, 0x396A32E1, 0x499A, 0x40B2, 0x91, 0x24, 0xA9, 0x6A, 0xFE, 0x70, 0x76, 0x67 );
extern
"C"
const
GUID_DISK_ADAPTIVE_POWERDOWN
;
DEFINE_GUID( GUID_SLEEP_SUBGROUP, 0x238C9FA8, 0x0AAD, 0x41ED, 0x83, 0xF4, 0x97, 0xBE, 0x24, 0x2C, 0x8F, 0x20 );
DEFINE_GUID( GUID_SLEEP_IDLE_THRESHOLD, 0x81cd32e0, 0x7833, 0x44f3, 0x87, 0x37, 0x70, 0x81, 0xf3, 0x8d, 0x1f, 0x70 );
extern
"C"
const
GUID_SLEEP_IDLE_THRESHOLD
;
DEFINE_GUID( GUID_STANDBY_TIMEOUT, 0x29F6C1DB, 0x86DA, 0x48C5, 0x9F, 0xDB, 0xF2, 0xB6, 0x7B, 0x1F, 0x44, 0xDA );
DEFINE_GUID( GUID_UNATTEND_SLEEP_TIMEOUT, 0x7bc4a2f9, 0xd8fc, 0x4469, 0xb0, 0x7b, 0x33, 0xeb, 0x78, 0x5a, 0xac, 0xa0 );
extern
"C"
const
GUID_UNATTEND_SLEEP_TIMEOUT
;
DEFINE_GUID( GUID_HIBERNATE_TIMEOUT, 0x9D7815A6, 0x7EE4, 0x497E, 0x88, 0x88, 0x51, 0x5A, 0x05, 0xF0, 0x23, 0x64 );
DEFINE_GUID( GUID_HIBERNATE_FASTS4_POLICY, 0x94AC6D29, 0x73CE, 0x41A6, 0x80, 0x9F, 0x63, 0x63, 0xBA, 0x21, 0xB4, 0x7E );
extern
"C"
const
GUID_HIBERNATE_FASTS4_POLICY
;
DEFINE_GUID( GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
extern
"C"
const
GUID_CRITICAL_POWER_TRANSITION
;
DEFINE_GUID( GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
DEFINE_GUID( GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
DEFINE_GUID( GUID_USER_PRESENCE_PREDICTION, 0x82011705, 0xfb95, 0x4d46, 0x8d, 0x35, 0x40, 0x42, 0xb1, 0xd2, 0xd, 0xef );
extern
"C"
const
GUID_USER_PRESENCE_PREDICTION
;
DEFINE_GUID( GUID_STANDBY_BUDGET_GRACE_PERIOD, 0x60c07fe1, 0x0556, 0x45cf, 0x99, 0x03, 0xd5, 0x6e, 0x32, 0x21, 0x2, 0x42 );
extern
"C"
const
GUID_STANDBY_BUDGET_GRACE_PERIOD
;
DEFINE_GUID( GUID_STANDBY_BUDGET_PERCENT, 0x9fe527be, 0x1b70, 0x48da, 0x93, 0x0d, 0x7b, 0xcf, 0x17, 0xb4, 0x49, 0x90 );
extern
"C"
const
GUID_STANDBY_BUDGET_PERCENT
;
DEFINE_GUID( GUID_STANDBY_RESERVE_GRACE_PERIOD, 0xc763ee92, 0x71e8, 0x4127, 0x84, 0xeb, 0xf6, 0xed, 0x04, 0x3a, 0x3e, 0x3d );
extern
"C"
const
GUID_STANDBY_RESERVE_GRACE_PERIOD
;
DEFINE_GUID( GUID_STANDBY_RESERVE_TIME, 0x468FE7E5, 0x1158, 0x46EC, 0x88, 0xbc, 0x5b, 0x96, 0xc9, 0xe4, 0x4f, 0xd0 );
extern
"C"
const
GUID_STANDBY_RESERVE_TIME
;
DEFINE_GUID(GUID_STANDBY_RESET_PERCENT, 0x49cb11a5, 0x56e2, 0x4afb, 0x9d, 0x38, 0x3d, 0xf4, 0x78, 0x72, 0xe2, 0x1b);
extern
"C"
const
GUID_STANDBY_RESET_PERCENT
;
DEFINE_GUID( GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
extern
"C"
const
GUID_ALLOW_STANDBY_STATES
;
DEFINE_GUID( GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
DEFINE_GUID( GUID_LEGACY_RTC_MITIGATION, 0x1A34BDC3, 0x7E6B, 0x442E, 0xA9, 0xD0, 0x64, 0xB6, 0xEF, 0x37, 0x8E, 0x84 );
extern
"C"
const
GUID_LEGACY_RTC_MITIGATION
;
DEFINE_GUID( GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 );
extern
"C"
const
GUID_ALLOW_SYSTEM_REQUIRED
;
DEFINE_GUID( GUID_POWER_SAVING_STATUS, 0xe00958c0, 0xc213, 0x4ace, 0xac, 0x77, 0xfe, 0xcc, 0xed, 0x2e, 0xee, 0xa5);
DEFINE_GUID( GUID_ENERGY_SAVER_SUBGROUP, 0xDE830923, 0xA562, 0x41AF, 0xA0, 0x86, 0xE3, 0xA2, 0xC6, 0xBA, 0xD2, 0xDA );
extern
"C"
const
GUID_ENERGY_SAVER_SUBGROUP
;
DEFINE_GUID( GUID_ENERGY_SAVER_BATTERY_THRESHOLD, 0xE69653CA, 0xCF7F, 0x4F05, 0xAA, 0x73, 0xCB, 0x83, 0x3F, 0xA9, 0x0A, 0xD4 );
extern
"C"
const
GUID_ENERGY_SAVER_BATTERY_THRESHOLD
;
DEFINE_GUID( GUID_ENERGY_SAVER_BRIGHTNESS, 0x13D09884, 0xF74E, 0x474A, 0xA8, 0x52, 0xB6, 0xBD, 0xE8, 0xAD, 0x03, 0xA8 );
extern
"C"
const
GUID_ENERGY_SAVER_BRIGHTNESS
;
DEFINE_GUID( GUID_ENERGY_SAVER_POLICY, 0x5c5bb349, 0xad29, 0x4ee2, 0x9d, 0xb, 0x2b, 0x25, 0x27, 0xf, 0x7a, 0x81 );
DEFINE_GUID( GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE, 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 );
#define POWERBUTTON_ACTION_INDEX_NOTHING 0
#define POWERBUTTON_ACTION_INDEX_SLEEP 1
#define POWERBUTTON_ACTION_INDEX_HIBERNATE 2
#define POWERBUTTON_ACTION_INDEX_SHUTDOWN 3
#define POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY 4
#define POWERBUTTON_ACTION_VALUE_NOTHING 0
#define POWERBUTTON_ACTION_VALUE_SLEEP 2
#define POWERBUTTON_ACTION_VALUE_HIBERNATE 3
#define POWERBUTTON_ACTION_VALUE_SHUTDOWN 6
#define POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY 8
DEFINE_GUID( GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
DEFINE_GUID( GUID_SLEEPBUTTON_ACTION, 0x96996BC0, 0xAD50, 0x47EC, 0x92, 0x3B, 0x6F, 0x41, 0x87, 0x4D, 0xD9, 0xEB );
DEFINE_GUID( GUID_USERINTERFACEBUTTON_ACTION, 0xA7066653, 0x8D6C, 0x40A8, 0x91, 0x0E, 0xA1, 0xF5, 0x4B, 0x84, 0xC7, 0xE5 );
DEFINE_GUID( GUID_LIDCLOSE_ACTION, 0x5CA83367, 0x6E45, 0x459F, 0xA2, 0x7B, 0x47, 0x6B, 0x1D, 0x01, 0xC9, 0x36 );
DEFINE_GUID( GUID_LIDOPEN_POWERSTATE, 0x99FF10E7, 0x23B1, 0x4C07, 0xA9, 0xD1, 0x5C, 0x32, 0x06, 0xD7, 0x41, 0xB4 );
DEFINE_GUID( GUID_BATTERY_SUBGROUP, 0xE73A048D, 0xBF27, 0x4F12, 0x97, 0x31, 0x8B, 0x20, 0x76, 0xE8, 0x89, 0x1F );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_0, 0x637EA02F, 0xBBCB, 0x4015, 0x8E, 0x2C, 0xA1, 0xC7, 0xB9, 0xC0, 0xB5, 0x46 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_ACTION_0
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_0, 0x9A66D8D7, 0x4FF7, 0x4EF9, 0xB5, 0xA2, 0x5A, 0x32, 0x6C, 0xA2, 0xA4, 0x69 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_LEVEL_0
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_0, 0x5dbb7c9f, 0x38e9, 0x40d2, 0x97, 0x49, 0x4f, 0x8a, 0x0e, 0x9f, 0x64, 0x0f );
extern
"C"
const
GUID_BATTERY_DISCHARGE_FLAGS_0
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_1, 0xD8742DCB, 0x3E6A, 0x4B3C, 0xB3, 0xFE, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x06 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_ACTION_1
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_1, 0x8183BA9A, 0xE910, 0x48DA, 0x87, 0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0A );
extern
"C"
const
GUID_BATTERY_DISCHARGE_LEVEL_1
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_FLAGS_1
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_ACTION_2
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
extern
"C"
const
GUID_BATTERY_DISCHARGE_LEVEL_2
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_FLAGS_2
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_ACTION_3
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_LEVEL_3
;
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
extern
"C"
const
GUID_BATTERY_DISCHARGE_FLAGS_3
;
DEFINE_GUID( GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
extern
"C"
const
GUID_PROCESSOR_SETTINGS_SUBGROUP
;
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
extern
"C"
const
GUID_PROCESSOR_THROTTLE_POLICY
;
#define PERFSTATE_POLICY_CHANGE_IDEAL 0
#define PERFSTATE_POLICY_CHANGE_SINGLE 1
#define PERFSTATE_POLICY_CHANGE_ROCKET 2
#define PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE 3
#define PERFSTATE_POLICY_CHANGE_DECREASE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
#define PERFSTATE_POLICY_CHANGE_INCREASE_MAX PERFSTATE_POLICY_CHANGE_IDEAL_AGGRESSIVE
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
extern
"C"
const
GUID_PROCESSOR_THROTTLE_MAXIMUM
;
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM_1, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xED );
extern
"C"
const
GUID_PROCESSOR_THROTTLE_MAXIMUM_1
;
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
extern
"C"
const
GUID_PROCESSOR_THROTTLE_MINIMUM
;
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM_1, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4D );
extern
"C"
const
GUID_PROCESSOR_THROTTLE_MINIMUM_1
;
DEFINE_GUID(GUID_PROCESSOR_FREQUENCY_LIMIT,
0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x00);
extern
"C"
const
GUID_PROCESSOR_FREQUENCY_LIMIT
;
DEFINE_GUID(GUID_PROCESSOR_FREQUENCY_LIMIT_1,
0x75b0ae3f, 0xbce0, 0x45a7, 0x8c, 0x89, 0xc9, 0x61, 0x1c, 0x25, 0xe1, 0x01);
extern
"C"
const
GUID_PROCESSOR_FREQUENCY_LIMIT_1
;
DEFINE_GUID( GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb );
extern
"C"
const
GUID_PROCESSOR_ALLOW_THROTTLING
;
#define PROCESSOR_THROTTLE_DISABLED 0
#define PROCESSOR_THROTTLE_ENABLED 1
#define PROCESSOR_THROTTLE_AUTOMATIC 2
DEFINE_GUID( GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
extern
"C"
const
GUID_PROCESSOR_IDLESTATE_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_PERFSTATE_POLICY, 0xBBDC3814, 0x18E9, 0x4463, 0x8A, 0x55, 0xD1, 0x97, 0x32, 0x7C, 0x45, 0xC0);
extern
"C"
const
GUID_PROCESSOR_PERFSTATE_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d );
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_THRESHOLD_1, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5e );
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_THRESHOLD_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 );
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_THRESHOLD_1, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa7 );
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_THRESHOLD_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_POLICY_1, 0x465e1f50, 0xb610, 0x473a, 0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x19);
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_POLICY_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_POLICY_1, 0x40fbefc7, 0x2e9d, 0x4d25, 0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc7);
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_POLICY_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_TIME_1, 0x984cf492, 0x3bed, 0x4488, 0xa8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xab);
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_TIME_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_TIME_1, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc9);
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_TIME_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
extern
"C"
const
GUID_PROCESSOR_PERF_TIME_CHECK
;
DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_POLICY,
0x45bcc044, 0xd885, 0x43e2, 0x86, 0x5, 0xee, 0xe, 0xc6, 0xe9, 0x6b, 0x59);
extern
"C"
const
GUID_PROCESSOR_PERF_BOOST_POLICY
;
#define PROCESSOR_PERF_BOOST_POLICY_DISABLED 0
#define PROCESSOR_PERF_BOOST_POLICY_MAX 100
DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_MODE,
0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7);
extern
"C"
const
GUID_PROCESSOR_PERF_BOOST_MODE
;
#define PROCESSOR_PERF_BOOST_MODE_DISABLED 0
#define PROCESSOR_PERF_BOOST_MODE_ENABLED 1
#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 2
#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 3
#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 4
#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE_AT_GUARANTEED 5
#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED 6
#define PROCESSOR_PERF_BOOST_MODE_MAX PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED
DEFINE_GUID(GUID_PROCESSOR_PERF_AUTONOMOUS_MODE,
0x8baa4a8a, 0x14c6, 0x4451, 0x8e, 0x8b, 0x14, 0xbd, 0xbd, 0x19, 0x75, 0x37);
extern
"C"
const
GUID_PROCESSOR_PERF_AUTONOMOUS_MODE
;
#define PROCESSOR_PERF_AUTONOMOUS_MODE_DISABLED 0
#define PROCESSOR_PERF_AUTONOMOUS_MODE_ENABLED 1
DEFINE_GUID(GUID_PROCESSOR_PERF_ENERGY_PERFORMANCE_PREFERENCE,
0x36687f9e, 0xe3a5, 0x4dbf, 0xb1, 0xdc, 0x15, 0xeb, 0x38, 0x1c, 0x68, 0x63);
DEFINE_GUID(GUID_PROCESSOR_PERF_ENERGY_PERFORMANCE_PREFERENCE_1,
0x36687f9e, 0xe3a5, 0x4dbf, 0xb1, 0xdc, 0x15, 0xeb, 0x38, 0x1c, 0x68, 0x64);
#define PROCESSOR_PERF_PERFORMANCE_PREFERENCE 0xff
#define PROCESSOR_PERF_ENERGY_PREFERENCE 0
DEFINE_GUID(GUID_PROCESSOR_PERF_AUTONOMOUS_ACTIVITY_WINDOW,
0xcfeda3d0, 0x7697, 0x4566, 0xa9, 0x22, 0xa9, 0x8, 0x6c, 0xd4, 0x9d, 0xfa);
extern
"C"
const
GUID_PROCESSOR_PERF_AUTONOMOUS_ACTIVITY_WINDOW
;
#define PROCESSOR_PERF_MINIMUM_ACTIVITY_WINDOW 0
#define PROCESSOR_PERF_MAXIMUM_ACTIVITY_WINDOW 1270000000
DEFINE_GUID(GUID_PROCESSOR_DUTY_CYCLING,
0x4e4450b3, 0x6179, 0x4e91, 0xb8, 0xf1, 0x5b, 0xb9, 0x93, 0x8f, 0x81, 0xa1);
extern
"C"
const
GUID_PROCESSOR_DUTY_CYCLING
;
#define PROCESSOR_DUTY_CYCLING_DISABLED 0
#define PROCESSOR_DUTY_CYCLING_ENABLED 1
DEFINE_GUID( GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc, 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
extern
"C"
const
GUID_PROCESSOR_IDLE_ALLOW_SCALING
;
DEFINE_GUID( GUID_PROCESSOR_IDLE_DISABLE, 0x5d76a2ca, 0xe8c0, 0x402f, 0xa1, 0x33, 0x21, 0x58, 0x49, 0x2d, 0x58, 0xad);
extern
"C"
const
GUID_PROCESSOR_IDLE_DISABLE
;
DEFINE_GUID( GUID_PROCESSOR_IDLE_STATE_MAXIMUM, 0x9943e905, 0x9a30, 0x4ec1, 0x9b, 0x99, 0x44, 0xdd, 0x3b, 0x76, 0xf7, 0xa2);
extern
"C"
const
GUID_PROCESSOR_IDLE_STATE_MAXIMUM
;
DEFINE_GUID( GUID_PROCESSOR_IDLE_TIME_CHECK, 0xc4581c31, 0x89ab, 0x4597, 0x8e, 0x2b, 0x9c, 0x9c, 0xab, 0x44, 0xe, 0x6b);
extern
"C"
const
GUID_PROCESSOR_IDLE_TIME_CHECK
;
DEFINE_GUID( GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD, 0x4b92d758, 0x5a24, 0x4851, 0xa4, 0x70, 0x81, 0x5d, 0x78, 0xae, 0xe1, 0x19);
extern
"C"
const
GUID_PROCESSOR_IDLE_DEMOTE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 );
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY
;
#define CORE_PARKING_POLICY_CHANGE_IDEAL 0
#define CORE_PARKING_POLICY_CHANGE_SINGLE 1
#define CORE_PARKING_POLICY_CHANGE_ROCKET 2
#define CORE_PARKING_POLICY_CHANGE_MULTISTEP 3
#define CORE_PARKING_POLICY_CHANGE_MAX CORE_PARKING_POLICY_CHANGE_MULTISTEP
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_MAX_CORES
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MAX_CORES_1, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x29);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_MAX_CORES_1
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_MIN_CORES
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MIN_CORES_1, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x84);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_MIN_CORES_1
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x437e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME, 0xdfd10d17, 0xd5eb, 0x45dd, 0x87, 0x7a, 0x9a, 0x34, 0xdd, 0xd1, 0x5c, 0x82);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_DECREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR, 0x8f7b45e3, 0xc393, 0x480a, 0x87, 0x8c, 0xf6, 0x7a, 0xc3, 0xd0, 0x70, 0x82);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_DECREASE_FACTOR
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD, 0x5b33697b, 0xe89d, 0x4d38, 0xaa, 0x46, 0x9e, 0x7d, 0xfb, 0x7c, 0xd2, 0xf9);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_AFFINITY_HISTORY_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING, 0xe70867f1, 0xfa2f, 0x4f4e, 0xae, 0xa1, 0x4d, 0x8a, 0x0b, 0xa2, 0x3b, 0x20);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_AFFINITY_WEIGHTING
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR, 0x1299023c, 0xbc28, 0x4f0a, 0x81, 0xec, 0xd3, 0x29, 0x5a, 0x8d, 0x81, 0x5d);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_DECREASE_FACTOR
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD, 0x9ac18e92, 0xaa3c, 0x4e27, 0xb3, 0x07, 0x01, 0xae, 0x37, 0x30, 0x71, 0x29);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_HISTORY_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING, 0x8809c2d8, 0xb155, 0x42d4, 0xbc, 0xda, 0x0d, 0x34, 0x56, 0x51, 0xb1, 0xdb);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_WEIGHTING
;
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD, 0x943c8cb6, 0x6f93, 0x4227, 0xad, 0x87, 0xe9, 0xa3, 0xfe, 0xec, 0x08, 0xd1);
extern
"C"
const
GUID_PROCESSOR_CORE_PARKING_OVER_UTILIZATION_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_CORE_OVERRIDE, 0xa55612aa, 0xf624, 0x42c6, 0xa4, 0x43, 0x73, 0x97, 0xd0, 0x64, 0xc0, 0x4f);
extern
"C"
const
GUID_PROCESSOR_PARKING_CORE_OVERRIDE
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
extern
"C"
const
GUID_PROCESSOR_PARKING_PERF_STATE
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_PERF_STATE_1, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2c);
extern
"C"
const
GUID_PROCESSOR_PARKING_PERF_STATE_1
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD, 0x2430ab6f, 0xa520, 0x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1);
extern
"C"
const
GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD, 0xf735a673, 0x2066, 0x4f80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d);
extern
"C"
const
GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD, 0x4bdaf4e9, 0xd103, 0x46d7, 0xa5, 0xf0, 0x62, 0x80, 0x12, 0x16, 0x16, 0xef);
extern
"C"
const
GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
extern
"C"
const
GUID_PROCESSOR_PERF_HISTORY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_HISTORY_1, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x60);
extern
"C"
const
GUID_PROCESSOR_PERF_HISTORY_1
;
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_HISTORY, 0x99b3ef01, 0x752f, 0x46a1, 0x80, 0xfb, 0x77, 0x30, 0x1, 0x1f, 0x23, 0x54);
extern
"C"
const
GUID_PROCESSOR_PERF_INCREASE_HISTORY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_HISTORY, 0x300f6f8, 0xabd6, 0x45a9, 0xb7, 0x4f, 0x49, 0x8, 0x69, 0x1a, 0x40, 0xb5);
extern
"C"
const
GUID_PROCESSOR_PERF_DECREASE_HISTORY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY, 0x77d7f282, 0x8f1a, 0x42cd, 0x85, 0x37, 0x45, 0x45, 0xa, 0x83, 0x9b, 0xe8);
extern
"C"
const
GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY
;
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT, 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b);
extern
"C"
const
GUID_PROCESSOR_PERF_LATENCY_HINT
;
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT_PERF, 0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x71);
extern
"C"
const
GUID_PROCESSOR_PERF_LATENCY_HINT_PERF
;
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT_PERF_1, 0x619b7505, 0x3b, 0x4e82, 0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x72);
extern
"C"
const
GUID_PROCESSOR_PERF_LATENCY_HINT_PERF_1
;
DEFINE_GUID( GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK, 0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x88);
extern
"C"
const
GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK
;
DEFINE_GUID( GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK_1, 0x616cdaa5, 0x695e, 0x4545, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x89);
extern
"C"
const
GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK_1
;
DEFINE_GUID( GUID_PROCESSOR_DISTRIBUTE_UTILITY, 0xe0007330, 0xf589, 0x42ed, 0xa4, 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3);
extern
"C"
const
GUID_PROCESSOR_DISTRIBUTE_UTILITY
;
DEFINE_GUID( GUID_PROCESSOR_HETEROGENEOUS_POLICY, 0x7f2f5cfa, 0xf10c, 0x4823, 0xb5, 0xe1, 0xe9, 0x3a, 0xe8, 0x5f, 0x46, 0xb5);
extern
"C"
const
GUID_PROCESSOR_HETEROGENEOUS_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_HETERO_DECREASE_TIME, 0x7f2492b6, 0x60b1, 0x45e5, 0xae, 0x55, 0x77, 0x3f, 0x8c, 0xd5, 0xca, 0xec);
extern
"C"
const
GUID_PROCESSOR_HETERO_DECREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_HETERO_INCREASE_TIME, 0x4009efa7, 0xe72d, 0x4cba, 0x9e, 0xdf, 0x91, 0x08, 0x4e, 0xa8, 0xcb, 0xc3);
extern
"C"
const
GUID_PROCESSOR_HETERO_INCREASE_TIME
;
DEFINE_GUID( GUID_PROCESSOR_HETERO_DECREASE_THRESHOLD, 0xf8861c27, 0x95e7, 0x475c, 0x86, 0x5b, 0x13, 0xc0, 0xcb, 0x3f, 0x9d, 0x6b);
extern
"C"
const
GUID_PROCESSOR_HETERO_DECREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_HETERO_INCREASE_THRESHOLD, 0xb000397d, 0x9b0b, 0x483d, 0x98, 0xc9, 0x69, 0x2a, 0x60, 0x60, 0xcf, 0xbf);
extern
"C"
const
GUID_PROCESSOR_HETERO_INCREASE_THRESHOLD
;
DEFINE_GUID( GUID_PROCESSOR_CLASS0_FLOOR_PERF, 0xfddc842b, 0x8364, 0x4edc, 0x94, 0xcf, 0xc1, 0x7f, 0x60, 0xde, 0x1c, 0x80);
extern
"C"
const
GUID_PROCESSOR_CLASS0_FLOOR_PERF
;
DEFINE_GUID( GUID_PROCESSOR_CLASS1_INITIAL_PERF, 0x1facfc65, 0xa930, 0x4bc5, 0x9f, 0x38, 0x50, 0x4e, 0xc0, 0x97, 0xbb, 0xc0);
extern
"C"
const
GUID_PROCESSOR_CLASS1_INITIAL_PERF
;
DEFINE_GUID( GUID_PROCESSOR_THREAD_SCHEDULING_POLICY,
0x93b8b6dc, 0x698, 0x4d1c, 0x9e, 0xe4, 0x6, 0x44, 0xe9, 0x0, 0xc8, 0x5d);
extern
"C"
const
GUID_PROCESSOR_THREAD_SCHEDULING_POLICY
;
DEFINE_GUID( GUID_PROCESSOR_SHORT_THREAD_SCHEDULING_POLICY,
0xbae08b81, 0x2d5e, 0x4688, 0xad, 0x6a, 0x13, 0x24, 0x33, 0x56, 0x65, 0x4b);
extern
"C"
const
GUID_PROCESSOR_SHORT_THREAD_SCHEDULING_POLICY
;
DEFINE_GUID( GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
extern
"C"
const
GUID_SYSTEM_COOLING_POLICY
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_DISABLE_THRESHOLD,
0x38b8383d, 0xcce0, 0x4c79, 0x9e, 0x3e, 0x56, 0xa4, 0xf1, 0x7c, 0xc4, 0x80);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_DISABLE_THRESHOLD
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_DISABLE_THRESHOLD_1,
0x38b8383d, 0xcce0, 0x4c79, 0x9e, 0x3e, 0x56, 0xa4, 0xf1, 0x7c, 0xc4, 0x81);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_DISABLE_THRESHOLD_1
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_ENABLE_THRESHOLD,
0x3d44e256, 0x7222, 0x4415, 0xa9, 0xed, 0x9c, 0x45, 0xfa, 0x3d, 0xd8, 0x30);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_ENABLE_THRESHOLD
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_ENABLE_THRESHOLD_1,
0x3d44e256, 0x7222, 0x4415, 0xa9, 0xed, 0x9c, 0x45, 0xfa, 0x3d, 0xd8, 0x31);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_ENABLE_THRESHOLD_1
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_DISABLE_TIME,
0xf565999f, 0x3fb0, 0x411a, 0xa2, 0x26, 0x3f, 0x1, 0x98, 0xde, 0xc1, 0x30);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_DISABLE_TIME
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_DISABLE_TIME_1,
0xf565999f, 0x3fb0, 0x411a, 0xa2, 0x26, 0x3f, 0x1, 0x98, 0xde, 0xc1, 0x31);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_DISABLE_TIME_1
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_ENABLE_TIME,
0x3d915188, 0x7830, 0x49ae, 0xa7, 0x9a, 0xf, 0xb0, 0xa1, 0xe5, 0xa2, 0x0);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_ENABLE_TIME
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_ENABLE_TIME_1,
0x3d915188, 0x7830, 0x49ae, 0xa7, 0x9a, 0xf, 0xb0, 0xa1, 0xe5, 0xa2, 0x1);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_ENABLE_TIME_1
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_EPP_CEILING,
0x4427c73b, 0x9756, 0x4a5c, 0xb8, 0x4b, 0xc7, 0xbd, 0xa7, 0x9c, 0x73, 0x20);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_EPP_CEILING
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_EPP_CEILING_1,
0x4427c73b, 0x9756, 0x4a5c, 0xb8, 0x4b, 0xc7, 0xbd, 0xa7, 0x9c, 0x73, 0x21);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_EPP_CEILING_1
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_PERF_FLOOR,
0xce8e92ee, 0x6a86, 0x4572, 0xbf, 0xe0, 0x20, 0xc2, 0x1d, 0x3, 0xcd, 0x40);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_PERF_FLOOR
;
DEFINE_GUID(GUID_PROCESSOR_RESPONSIVENESS_PERF_FLOOR_1,
0xce8e92ee, 0x6a86, 0x4572, 0xbf, 0xe0, 0x20, 0xc2, 0x1d, 0x3, 0xcd, 0x41);
extern
"C"
const
GUID_PROCESSOR_RESPONSIVENESS_PERF_FLOOR_1
;
DEFINE_GUID( GUID_LOCK_CONSOLE_ON_WAKE, 0x0E796BDB, 0x100D, 0x47D6, 0xA2, 0xD5, 0xF7, 0xD2, 0xDA, 0xA5, 0x1F, 0x51 );
extern
"C"
const
GUID_LOCK_CONSOLE_ON_WAKE
;
DEFINE_GUID( GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x22, 0x45, 0x59, 0x67, 0x2d, 0x19 );
#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
DEFINE_GUID( GUID_CONNECTIVITY_IN_STANDBY, 0xF15576E8, 0x98B7, 0x4186, 0xB9, 0x44, 0xEA, 0xFA, 0x66, 0x44, 0x02, 0xD9 );
extern
"C"
const
GUID_CONNECTIVITY_IN_STANDBY
;
#define POWER_CONNECTIVITY_IN_STANDBY_DISABLED 0
#define POWER_CONNECTIVITY_IN_STANDBY_ENABLED 1
#define POWER_CONNECTIVITY_IN_STANDBY_SYSTEM_MANAGED 2
DEFINE_GUID( GUID_DISCONNECTED_STANDBY_MODE, 0x68AFB2D9, 0xEE95, 0x47A8, 0x8F, 0x50, 0x41, 0x15, 0x08, 0x80, 0x73, 0xB1 );
extern
"C"
const
GUID_DISCONNECTED_STANDBY_MODE
;
#define POWER_DISCONNECTED_STANDBY_MODE_NORMAL 0
#define POWER_DISCONNECTED_STANDBY_MODE_AGGRESSIVE 1
DEFINE_GUID( GUID_ACDC_POWER_SOURCE, 0x5D3E9A59, 0xE9D5, 0x4B00, 0xA6, 0xBD, 0xFF, 0x34, 0xFF, 0x51, 0x65, 0x48 );
DEFINE_GUID( GUID_LIDSWITCH_STATE_CHANGE, 0xBA3E0F4D, 0xB817, 0x4094, 0xA2, 0xD1, 0xD5, 0x63, 0x79, 0xE6, 0xA0, 0xF3 );
extern
"C"
const
GUID_LIDSWITCH_STATE_CHANGE
;
DEFINE_GUID( GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87, 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
extern
"C"
const
GUID_BATTERY_PERCENTAGE_REMAINING
;
DEFINE_GUID( GUID_BATTERY_COUNT, 0x7d263f15, 0xfca4, 0x49e5, 0x85, 0x4b, 0xa9, 0xf2, 0xbf, 0xbd, 0x5c, 0x24 );
DEFINE_GUID( GUID_GLOBAL_USER_PRESENCE, 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9 );
extern
"C"
const
GUID_GLOBAL_USER_PRESENCE
;
DEFINE_GUID( GUID_SESSION_DISPLAY_STATUS, 0x2b84c20e, 0xad23, 0x4ddf, 0x93, 0xdb, 0x5, 0xff, 0xbd, 0x7e, 0xfc, 0xa5 );
extern
"C"
const
GUID_SESSION_DISPLAY_STATUS
;
DEFINE_GUID( GUID_SESSION_USER_PRESENCE, 0x3c0f4548, 0xc03f, 0x4c4d, 0xb9, 0xf2, 0x23, 0x7e, 0xde, 0x68, 0x63, 0x76 );
extern
"C"
const
GUID_SESSION_USER_PRESENCE
;
DEFINE_GUID( GUID_IDLE_BACKGROUND_TASK, 0x515C31D8, 0xF734, 0x163D, 0xA0, 0xFD, 0x11, 0xA0, 0x8C, 0x91, 0xE8, 0xF1 );
extern
"C"
const
GUID_IDLE_BACKGROUND_TASK
;
DEFINE_GUID( GUID_BACKGROUND_TASK_NOTIFICATION, 0xCF23F240, 0x2A54, 0x48D8, 0xB1, 0x14, 0xDE, 0x15, 0x18, 0xFF, 0x05, 0x2E );
extern
"C"
const
GUID_BACKGROUND_TASK_NOTIFICATION
;
DEFINE_GUID( GUID_APPLAUNCH_BUTTON, 0x1A689231, 0x7399, 0x4E9A, 0x8F, 0x99, 0xB7, 0x1F, 0x99, 0x9D, 0xB3, 0xFA );
DEFINE_GUID( GUID_PCIEXPRESS_SETTINGS_SUBGROUP, 0x501a4d13, 0x42af,0x4429, 0x9f, 0xd1, 0xa8, 0x21, 0x8c, 0x26, 0x8e, 0x20 );
extern
"C"
const
GUID_PCIEXPRESS_SETTINGS_SUBGROUP
;
DEFINE_GUID( GUID_PCIEXPRESS_ASPM_POLICY, 0xee12f906, 0xd277, 0x404b, 0xb6, 0xda, 0xe5, 0xfa, 0x1a, 0x57, 0x6d, 0xf5 );
extern
"C"
const
GUID_PCIEXPRESS_ASPM_POLICY
;
DEFINE_GUID( GUID_ENABLE_SWITCH_FORCED_SHUTDOWN, 0x833a6b62, 0xdfa4, 0x46d1, 0x82, 0xf8, 0xe0, 0x9e, 0x34, 0xd0, 0x29, 0xd6 );
extern
"C"
const
GUID_ENABLE_SWITCH_FORCED_SHUTDOWN
;
DEFINE_GUID(GUID_INTSTEER_SUBGROUP,
0x48672f38, 0x7a9a, 0x4bb2, 0x8b, 0xf8, 0x3d, 0x85, 0xbe, 0x19, 0xde, 0x4e);
DEFINE_GUID(GUID_INTSTEER_MODE,
0x2bfc24f9, 0x5ea2, 0x4801, 0x82, 0x13, 0x3d, 0xba, 0xe0, 0x1a, 0xa3, 0x9d);
DEFINE_GUID(GUID_INTSTEER_LOAD_PER_PROC_TRIGGER,
0x73cde64d, 0xd720, 0x4bb2, 0xa8, 0x60, 0xc7, 0x55, 0xaf, 0xe7, 0x7e, 0xf2);
extern
"C"
const
GUID_INTSTEER_LOAD_PER_PROC_TRIGGER
;
DEFINE_GUID(GUID_INTSTEER_TIME_UNPARK_TRIGGER,
0xd6ba4903, 0x386f, 0x4c2c, 0x8a, 0xdb, 0x5c, 0x21, 0xb3, 0x32, 0x8d, 0x25);
extern
"C"
const
GUID_INTSTEER_TIME_UNPARK_TRIGGER
;
DEFINE_GUID(GUID_GRAPHICS_SUBGROUP, 0x5fb4938d, 0x1ee8, 0x4b0f, 0x9a, 0x3c, 0x50, 0x36, 0xb0, 0xab, 0x99, 0x5c);
DEFINE_GUID(GUID_GPU_PREFERENCE_POLICY, 0xdd848b2a, 0x8a5d, 0x4451, 0x9a, 0xe2, 0x39, 0xcd, 0x41, 0x65, 0x8f, 0x6c);
extern
"C"
const
GUID_GPU_PREFERENCE_POLICY
;
DEFINE_GUID(GUID_MIXED_REALITY_MODE,
0x1e626b4e, 0xcf04, 0x4f8d, 0x9c, 0xc7, 0xc9, 0x7c, 0x5b, 0xf, 0x23, 0x91);
DEFINE_GUID(GUID_SPR_ACTIVE_SESSION_CHANGE,
0xe24ce38, 0xc393, 0x4742, 0xbd, 0xb1, 0x74, 0x4f, 0x4b, 0x9e, 0xe0, 0x8e);
extern
"C"
const
GUID_SPR_ACTIVE_SESSION_CHANGE
;
typedef
enum
{
=
0
,
=
1
,
=
2
,
=
3
,
=
4
,
=
5
,
=
6
,
=
7
}
, *
;
#define POWER_SYSTEM_MAXIMUM 7
typedef
enum
{
=
0
,
,
,
,
,
,
,
,
}
, *
;
typedef
enum
{
=
0
,
,
,
,
,
}
, *
;
typedef
enum
{
=
0
,
,
}
, *
;
typedef
enum
{
=
0
,
,
,
,
=
}
, *
;
#define ES_SYSTEM_REQUIRED ((DWORD)0x00000001)
#define ES_DISPLAY_REQUIRED ((DWORD)0x00000002)
#define ES_USER_PRESENT ((DWORD)0x00000004)
#define ES_AWAYMODE_REQUIRED ((DWORD)0x00000040)
#define ES_CONTINUOUS ((DWORD)0x80000000)
typedef
, *
;
typedef
enum
{
,
}
;
#define DIAGNOSTIC_REASON_VERSION 0
#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
#define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000007)
#define POWER_REQUEST_CONTEXT_VERSION DIAGNOSTIC_REASON_VERSION
#define POWER_REQUEST_CONTEXT_SIMPLE_STRING DIAGNOSTIC_REASON_SIMPLE_STRING
#define POWER_REQUEST_CONTEXT_DETAILED_STRING DIAGNOSTIC_REASON_DETAILED_STRING
typedef
enum
{
PowerRequestDisplayRequired
,
PowerRequestSystemRequired
,
PowerRequestAwayModeRequired
,
PowerRequestExecutionRequired
}
, *
;
#if (NTDDI_VERSION >= NTDDI_WINXP)
#define PDCAP_D0_SUPPORTED 0x00000001
#define PDCAP_D1_SUPPORTED 0x00000002
#define PDCAP_D2_SUPPORTED 0x00000004
#define PDCAP_D3_SUPPORTED 0x00000008
#define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
#define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
#define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
#define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
#define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
typedef
struct
{
;
;
;
;
;
;
DEVICE_POWER_STATE PD_PowerStateMapping[POWER_SYSTEM_MAXIMUM];
;
}
, *
;
#endif // (NTDDI_VERSION >= NTDDI_WINXP)
typedef
enum
{
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
SystemPowerStateNotifyHandler
,
,
,
VerifyProcessorPowerPolicyAc
,
VerifyProcessorPowerPolicyDc
,
ProcessorPowerPolicyCurrent
,
,
,
,
,
,
SystemMonitorHiberBootPowerOff
,
,
TraceApplicationPowerMessage
,
TraceApplicationPowerMessageEnd
,
,
,
,
,
,
,
,
PowerShutdownNotification
,
,
,
,
,
,
,
,
NotifyUserModeLegacyPowerEvent
,
,
,
,
,
,
,
,
,
,
,
PowerSettingNotificationName
,
,
,
,
SessionConnectNotification
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
,
ExitLatencySamplingPercentage
,
,
,
,
,
SystemBatteryStatePrecise
,
,
PowerRequestActionInternal
,
,
,
,
,
,
QueryPotentialDripsConstraint
,
,
,
,
}
;
typedef
enum
{
=
0
,
=
1
,
=
0xff
}
, *
PPOWER_USER_PRESENCE_TYPE
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
enum
{
MonitorRequestReasonUnknown
,
,
MonitorRequestReasonRemoteConnection
,
MonitorRequestReasonScMonitorpower
,
,
MonitorRequestReasonAcDcDisplayBurst
,
MonitorRequestReasonUserDisplayBurst
,
MonitorRequestReasonPoSetSystemState
,
MonitorRequestReasonSetThreadExecutionState
,
MonitorRequestReasonFullWake
,
MonitorRequestReasonSessionUnlock
,
MonitorRequestReasonScreenOffRequest
,
MonitorRequestReasonIdleTimeout
,
MonitorRequestReasonPolicyChange
,
,
,
MonitorRequestReasonBatteryCountChange
,
MonitorRequestReasonGracePeriod
,
,
,
MonitorRequestReasonSxTransition
,
MonitorRequestReasonSystemIdle
,
MonitorRequestReasonNearProximity
,
MonitorRequestReasonThermalStandby
,
MonitorRequestReasonResumePdc
,
MonitorRequestReasonResumeS4
,
MonitorRequestReasonTerminal
,
MonitorRequestReasonPdcSignal
,
MonitorRequestReasonAcDcDisplayBurstSuppressed
,
MonitorRequestReasonSystemStateEntered
,
MonitorRequestReasonWinrt
,
,
,
,
,
,
,
,
,
,
MonitorRequestReasonPdcSignalWindowsMobilePwrNotif
,
MonitorRequestReasonPdcSignalWindowsMobileShell
,
MonitorRequestReasonPdcSignalHeyCortana
,
MonitorRequestReasonPdcSignalHolographicShell
,
MonitorRequestReasonPdcSignalFingerprint
,
MonitorRequestReasonDirectedDrips
,
}
POWER_MONITOR_REQUEST_REASON
;
typedef
enum
_POWER_MONITOR_REQUEST_TYPE
{
,
MonitorRequestTypeOnAndPresent
,
MonitorRequestTypeToggleOn
}
POWER_MONITOR_REQUEST_TYPE
;
typedef
struct
_POWER_MONITOR_INVOCATION
{
;
POWER_MONITOR_REQUEST_REASON
;
}
, *
PPOWER_MONITOR_INVOCATION
;
typedef
struct
{
;
;
;
}
, *
;
typedef
enum
{
,
,
,
}
;
typedef
struct
{
;
;
;
;
BYTE Data[ANYSIZE_ARRAY];
}
, *
;
#define POWER_SETTING_VALUE_VERSION (0x1)
typedef
struct
{
;
}
NOTIFY_USER_POWER_SETTING
, *
PNOTIFY_USER_POWER_SETTING
;
typedef
struct
_APPLICATIONLAUNCH_SETTING_VALUE
{
;
;
;
}
APPLICATIONLAUNCH_SETTING_VALUE
, *
PAPPLICATIONLAUNCH_SETTING_VALUE
;
typedef
enum
{
=
0
,
,
,
,
,
,
,
,
,
}
, *
;
#define POWER_PLATFORM_ROLE_V1 (0x00000001)
#define POWER_PLATFORM_ROLE_V1_MAX (PlatformRolePerformanceServer + 1)
#define POWER_PLATFORM_ROLE_V2 (0x00000002)
#define POWER_PLATFORM_ROLE_V2_MAX (PlatformRoleSlate + 1)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V2
#define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V2_MAX
#else
#define POWER_PLATFORM_ROLE_VERSION POWER_PLATFORM_ROLE_V1
#define POWER_PLATFORM_ROLE_VERSION_MAX POWER_PLATFORM_ROLE_V1_MAX
#endif
typedef
struct
{
;
}
, *
;
#if (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
typedef
struct
{
;
;
}
, *
;
#endif // (NTDDI_VERSION >= NTDDI_WINXP) || !defined(_BATCLASS_)
typedef
struct
{
;
;
;
}
, *
PPPM_WMI_LEGACY_PERFSTATE
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
}
, *
;
typedef
struct
{
;
;
;
;
;
PPM_WMI_IDLE_STATE State[ANYSIZE_ARRAY];
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
PPM_WMI_PERF_STATE State[ANYSIZE_ARRAY];
}
, *
;
#define PROC_IDLE_BUCKET_COUNT 6
typedef
struct
{
;
;
;
;
DWORD IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT];
}
PPM_IDLE_STATE_ACCOUNTING
, *
PPPM_IDLE_STATE_ACCOUNTING
;
typedef
struct
{
;
;
;
;
PPM_IDLE_STATE_ACCOUNTING State[ANYSIZE_ARRAY];
PPM_IDLE_STATE_ACCOUNTING
[
1
];
}
, *
;
#define PROC_IDLE_BUCKET_COUNT_EX 16
typedef
struct
{
;
;
;
;
}
, *
PPPM_IDLE_STATE_BUCKET_EX
;
typedef
struct
{
;
;
;
;
;
;
;
PPM_IDLE_STATE_BUCKET_EX IdleTimeBuckets[PROC_IDLE_BUCKET_COUNT_EX];
}
PPM_IDLE_STATE_ACCOUNTING_EX
, *
PPPM_IDLE_STATE_ACCOUNTING_EX
;
typedef
struct
{
;
;
;
;
;
_Field_size_(StateCount) PPM_IDLE_STATE_ACCOUNTING_EX State[ANYSIZE_ARRAY];
PPM_IDLE_STATE_ACCOUNTING_EX
[
1
];
}
, *
;
#define ACPI_PPM_SOFTWARE_ALL 0xFC
#define ACPI_PPM_SOFTWARE_ANY 0xFD
#define ACPI_PPM_HARDWARE_ALL 0xFE
#define MS_PPM_SOFTWARE_ALL 0x1
#define PPM_FIRMWARE_ACPI1C2 0x00000001
#define PPM_FIRMWARE_ACPI1C3 0x00000002
#define PPM_FIRMWARE_ACPI1TSTATES 0x00000004
#define PPM_FIRMWARE_CST 0x00000008
#define PPM_FIRMWARE_CSD 0x00000010
#define PPM_FIRMWARE_PCT 0x00000020
#define PPM_FIRMWARE_PSS 0x00000040
#define PPM_FIRMWARE_XPSS 0x00000080
#define PPM_FIRMWARE_PPC 0x00000100
#define PPM_FIRMWARE_PSD 0x00000200
#define PPM_FIRMWARE_PTC 0x00000400
#define PPM_FIRMWARE_TSS 0x00000800
#define PPM_FIRMWARE_TPC 0x00001000
#define PPM_FIRMWARE_TSD 0x00002000
#define PPM_FIRMWARE_PCCH 0x00004000
#define PPM_FIRMWARE_PCCP 0x00008000
#define PPM_FIRMWARE_OSC 0x00010000
#define PPM_FIRMWARE_PDC 0x00020000
#define PPM_FIRMWARE_CPC 0x00040000
#define PPM_FIRMWARE_LPI 0x00080000
#define PPM_PERFORMANCE_IMPLEMENTATION_NONE 0x00000000
#define PPM_PERFORMANCE_IMPLEMENTATION_PSTATES 0x00000001
#define PPM_PERFORMANCE_IMPLEMENTATION_PCCV1 0x00000002
#define PPM_PERFORMANCE_IMPLEMENTATION_CPPC 0x00000003
#define PPM_PERFORMANCE_IMPLEMENTATION_PEP 0x00000004
#define PPM_IDLE_IMPLEMENTATION_NONE 0x00000000
#define PPM_IDLE_IMPLEMENTATION_CSTATES 0x00000001
#define PPM_IDLE_IMPLEMENTATION_PEP 0x00000002
#define PPM_IDLE_IMPLEMENTATION_MICROPEP 0x00000003
#define PPM_IDLE_IMPLEMENTATION_LPISTATES 0x00000004
DEFINE_GUID(PPM_PERFSTATE_CHANGE_GUID,
0xa5b32ddd, 0x7f39, 0x4abc, 0xb8, 0x92, 0x90, 0xe, 0x43, 0xb5, 0x9e, 0xbb);
extern
"C"
const
PPM_PERFSTATE_CHANGE_GUID
;
DEFINE_GUID(PPM_PERFSTATE_DOMAIN_CHANGE_GUID,
0x995e6b7f, 0xd653, 0x497a, 0xb9, 0x78, 0x36, 0xa3, 0xc, 0x29, 0xbf, 0x1);
extern
"C"
const
PPM_PERFSTATE_DOMAIN_CHANGE_GUID
;
DEFINE_GUID(PPM_IDLESTATE_CHANGE_GUID,
0x4838fe4f, 0xf71c, 0x4e51, 0x9e, 0xcc, 0x84, 0x30, 0xa7, 0xac, 0x4c, 0x6c);
extern
"C"
const
PPM_IDLESTATE_CHANGE_GUID
;
DEFINE_GUID(PPM_PERFSTATES_DATA_GUID,
0x5708cc20, 0x7d40, 0x4bf4, 0xb4, 0xaa, 0x2b, 0x01, 0x33, 0x8d, 0x01, 0x26);
DEFINE_GUID(PPM_IDLESTATES_DATA_GUID,
0xba138e10, 0xe250, 0x4ad7, 0x86, 0x16, 0xcf, 0x1a, 0x7a, 0xd4, 0x10, 0xe7);
DEFINE_GUID(PPM_IDLE_ACCOUNTING_GUID,
0xe2a26f78, 0xae07, 0x4ee0, 0xa3, 0x0f, 0xce, 0x54, 0xf5, 0x5a, 0x94, 0xcd);
DEFINE_GUID(PPM_IDLE_ACCOUNTING_EX_GUID,
0xd67abd39, 0x81f8, 0x4a5e, 0x81, 0x52, 0x72, 0xe3, 0x1e, 0xc9, 0x12, 0xee);
extern
"C"
const
PPM_IDLE_ACCOUNTING_EX_GUID
;
DEFINE_GUID(PPM_THERMALCONSTRAINT_GUID,
0xa852c2c8, 0x1a4c, 0x423b, 0x8c, 0x2c, 0xf3, 0x0d, 0x82, 0x93, 0x1a, 0x88);
extern
"C"
const
PPM_THERMALCONSTRAINT_GUID
;
DEFINE_GUID(PPM_PERFMON_PERFSTATE_GUID,
0x7fd18652, 0xcfe, 0x40d2, 0xb0, 0xa1, 0xb, 0x6, 0x6a, 0x87, 0x75, 0x9e);
extern
"C"
const
PPM_PERFMON_PERFSTATE_GUID
;
DEFINE_GUID(PPM_THERMAL_POLICY_CHANGE_GUID,
0x48f377b8, 0x6880, 0x4c7b, 0x8b, 0xdc, 0x38, 0x1, 0x76, 0xc6, 0x65, 0x4d);
extern
"C"
const
PPM_THERMAL_POLICY_CHANGE_GUID
;
typedef
struct
{
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
}
PPM_PERFSTATE_DOMAIN_EVENT
, *
PPPM_PERFSTATE_DOMAIN_EVENT
;
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
#pragma warning(push)
#pragma warning(disable:
4121
)
typedef
struct
{
;
;
}
, *
PPPM_THERMAL_POLICY_EVENT
;
#pragma warning(pop)
typedef
struct
{
;
;
;
}
, *
;
#define POWER_ACTION_QUERY_ALLOWED 0x00000001
#define POWER_ACTION_UI_ALLOWED 0x00000002
#define POWER_ACTION_OVERRIDE_APPS 0x00000004
#define POWER_ACTION_HIBERBOOT 0x00000008
#define POWER_ACTION_USER_NOTIFY 0x00000010 // Indicate User-mode of an impending action.
#define POWER_ACTION_DOZE_TO_HIBERNATE 0x00000020
#define POWER_ACTION_ACPI_CRITICAL 0x01000000
#define POWER_ACTION_ACPI_USER_NOTIFY 0x02000000
#define POWER_ACTION_DIRECTED_DRIPS 0x04000000
#define POWER_ACTION_PSEUDO_TRANSITION 0x08000000
#define POWER_ACTION_LIGHTEST_FIRST 0x10000000
#define POWER_ACTION_LOCK_CONSOLE 0x20000000
#define POWER_ACTION_DISABLE_WAKES 0x40000000
#define POWER_ACTION_CRITICAL 0x80000000
#define POWER_LEVEL_USER_NOTIFY_TEXT 0x00000001
#define POWER_LEVEL_USER_NOTIFY_SOUND 0x00000002
#define POWER_LEVEL_USER_NOTIFY_EXEC 0x00000004
#define POWER_USER_NOTIFY_BUTTON 0x00000008
#define POWER_USER_NOTIFY_SHUTDOWN 0x00000010 // Application and Services are intimated of shutdown.
#define POWER_USER_NOTIFY_FORCED_SHUTDOWN 0x00000020 // Immediate shutdown - Application and Services are not intimated.
#define POWER_FORCE_TRIGGER_RESET 0x80000000
#define BATTERY_DISCHARGE_FLAGS_EVENTCODE_MASK 0x00000007
#define BATTERY_DISCHARGE_FLAGS_ENABLE 0x80000000
typedef
struct
{
;
[
3
];
;
;
;
}
, *
;
#define NUM_DISCHARGE_POLICIES 4
#define DISCHARGE_POLICY_CRITICAL 0
#define DISCHARGE_POLICY_LOW 1
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
[
2
];
;
;
;
;
;
;
BroadcastCapacityResolution
;
SYSTEM_POWER_LEVEL DischargePolicy[NUM_DISCHARGE_POLICIES];
;
;
[
3
];
;
;
;
;
;
;
}
, *
;
#define PROCESSOR_IDLESTATE_POLICY_COUNT 0x3
typedef
struct
{
;
;
;
[
2
];
}
, *
PPROCESSOR_IDLESTATE_INFO
;
typedef
struct
{
;
union
{
;
struct
{
:
1
;
:
1
;
:
14
;
}
;
;
PROCESSOR_IDLESTATE_INFO Policy[PROCESSOR_IDLESTATE_POLICY_COUNT];
}
PROCESSOR_IDLESTATE_POLICY
, *
PPROCESSOR_IDLESTATE_POLICY
;
#define PO_THROTTLE_NONE 0
#define PO_THROTTLE_CONSTANT 1
#define PO_THROTTLE_DEGRADE 2
#define PO_THROTTLE_ADAPTIVE 3
#define PO_THROTTLE_MAXIMUM 4 // not a policy, just a limit
typedef
struct
_PROCESSOR_POWER_POLICY_INFO
{
;
;
;
;
;
[
2
];
:
1
;
:
1
;
:
30
;
}
PROCESSOR_POWER_POLICY_INFO
, *
PPROCESSOR_POWER_POLICY_INFO
;
typedef
struct
{
;
;
[
3
];
:
1
;
:
31
;
;
PROCESSOR_POWER_POLICY_INFO
[
3
];
}
, *
;
typedef
struct
{
;
;
;
;
union
{
;
union
{
;
struct
{
:
1
;
:
2
;
:
2
;
:
3
;
}
;
;
;
;
;
;
}
PROCESSOR_PERFSTATE_POLICY
, *
PPROCESSOR_PERFSTATE_POLICY
;
typedef
struct
_ADMINISTRATOR_POWER_POLICY
{
;
;
;
;
;
;
}
ADMINISTRATOR_POWER_POLICY
, *
PADMINISTRATOR_POWER_POLICY
;
typedef
enum
{
=
0
,
,
,
,
,
,
,
}
, *
;
#define HIBERFILE_TYPE_NONE 0x00
#define HIBERFILE_TYPE_REDUCED 0x01
#define HIBERFILE_TYPE_FULL 0x02
#define HIBERFILE_TYPE_MAX 0x03
typedef
struct
{
;
DWORD PhysicalMemoryPercent[HIBERFILE_TYPE_MAX];
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
#if (NTDDI_VERSION < NTDDI_WINXP)
BYTE ProcessorThrottleScale;
BYTE spare2[4];
#else
;
;
;
;
;
#endif // (NTDDI_VERSION < NTDDI_WINXP)
;
#if (NTDDI_VERSION < NTDDI_WINTHRESHOLD)
BYTE spare3[8];
# else
;
AoAcConnectivitySupported
;
[
6
];
#endif // (NTDDI_VERSION < NTDDI_WINTHRESHOLD)
;
;
[
3
];
;
;
;
;
;
}
SYSTEM_POWER_CAPABILITIES
, *
PSYSTEM_POWER_CAPABILITIES
;
typedef
struct
{
;
;
;
;
[
3
];
;
;
;
;
;
;
;
}
, *
;
#ifndef _MAC
#include "pshpack4.h" // 4 byte packing is the default
#define IMAGE_DOS_SIGNATURE 0x5A4D // MZ
#define IMAGE_OS2_SIGNATURE 0x454E // NE
#define IMAGE_OS2_SIGNATURE_LE 0x454C // LE
#define IMAGE_VXD_SIGNATURE 0x454C // LE
#define IMAGE_NT_SIGNATURE 0x00004550 // PE00
#include "pshpack2.h" // 16 bit headers are 2 byte packed
#else
#include "pshpack1.h"
#define IMAGE_DOS_SIGNATURE 0x4D5A // MZ
#define IMAGE_OS2_SIGNATURE 0x4E45 // NE
#define IMAGE_OS2_SIGNATURE_LE 0x4C45 // LE
#define IMAGE_NT_SIGNATURE 0x50450000 // PE00
#endif
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
[
4
];
;
;
[
10
];
;
} , *;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
} , *;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
[
12
];
;
;
;
;
} , *;
#ifndef _MAC
#include "poppack.h" // Back to 4 byte packing
#endif
typedef
struct
{
;
;
;
;
;
;
;
} , *;
#define IMAGE_SIZEOF_FILE_HEADER 20
#define IMAGE_FILE_RELOCS_STRIPPED 0x0001 // Relocation info stripped from file.
#define IMAGE_FILE_EXECUTABLE_IMAGE 0x0002 // File is executable (i.e. no unresolved external references).
#define IMAGE_FILE_LINE_NUMS_STRIPPED 0x0004 // Line nunbers stripped from file.
#define IMAGE_FILE_LOCAL_SYMS_STRIPPED 0x0008 // Local symbols stripped from file.
#define IMAGE_FILE_AGGRESIVE_WS_TRIM 0x0010 // Aggressively trim working set
#define IMAGE_FILE_LARGE_ADDRESS_AWARE 0x0020 // App can handle >2gb addresses
#define IMAGE_FILE_BYTES_REVERSED_LO 0x0080 // Bytes of machine word are reversed.
#define IMAGE_FILE_32BIT_MACHINE 0x0100 // 32 bit word machine.
#define IMAGE_FILE_DEBUG_STRIPPED 0x0200 // Debugging info stripped from file in .DBG file
#define IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 0x0400 // If Image is on removable media, copy and run from the swap file.
#define IMAGE_FILE_NET_RUN_FROM_SWAP 0x0800 // If Image is on Net, copy and run from the swap file.
#define IMAGE_FILE_SYSTEM 0x1000 // System File.
#define IMAGE_FILE_DLL 0x2000 // File is a DLL.
#define IMAGE_FILE_UP_SYSTEM_ONLY 0x4000 // File should only be run on a UP machine
#define IMAGE_FILE_BYTES_REVERSED_HI 0x8000 // Bytes of machine word are reversed.
#define IMAGE_FILE_MACHINE_UNKNOWN 0
#define IMAGE_FILE_MACHINE_TARGET_HOST 0x0001 // Useful for indicating we want to interact with the host and not a WoW guest.
#define IMAGE_FILE_MACHINE_I386 0x014c // Intel 386.
#define IMAGE_FILE_MACHINE_R3000 0x0162 // MIPS little-endian, 0x160 big-endian
#define IMAGE_FILE_MACHINE_R4000 0x0166 // MIPS little-endian
#define IMAGE_FILE_MACHINE_R10000 0x0168 // MIPS little-endian
#define IMAGE_FILE_MACHINE_WCEMIPSV2 0x0169 // MIPS little-endian WCE v2
#define IMAGE_FILE_MACHINE_ALPHA 0x0184 // Alpha_AXP
#define IMAGE_FILE_MACHINE_SH3 0x01a2 // SH3 little-endian
#define IMAGE_FILE_MACHINE_SH3DSP 0x01a3
#define IMAGE_FILE_MACHINE_SH3E 0x01a4 // SH3E little-endian
#define IMAGE_FILE_MACHINE_SH4 0x01a6 // SH4 little-endian
#define IMAGE_FILE_MACHINE_SH5 0x01a8 // SH5
#define IMAGE_FILE_MACHINE_ARM 0x01c0 // ARM Little-Endian
#define IMAGE_FILE_MACHINE_THUMB 0x01c2 // ARM Thumb/Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_ARMNT 0x01c4 // ARM Thumb-2 Little-Endian
#define IMAGE_FILE_MACHINE_AM33 0x01d3
#define IMAGE_FILE_MACHINE_POWERPC 0x01F0 // IBM PowerPC Little-Endian
#define IMAGE_FILE_MACHINE_POWERPCFP 0x01f1
#define IMAGE_FILE_MACHINE_IA64 0x0200 // Intel 64
#define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_TRICORE 0x0520 // Infineon
#define IMAGE_FILE_MACHINE_CEF 0x0CEF
#define IMAGE_FILE_MACHINE_EBC 0x0EBC // EFI Byte Code
#define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8)
#define IMAGE_FILE_MACHINE_M32R 0x9041 // M32R little-endian
#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // ARM64 Little-Endian
#define IMAGE_FILE_MACHINE_CEE 0xC0EE
typedef
struct
{
;
;
}
, *
;
#define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} , *;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
[
4
];
;
} , *;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} , *;
#define IMAGE_NT_OPTIONAL_HDR32_MAGIC 0x10b
#define IMAGE_NT_OPTIONAL_HDR64_MAGIC 0x20b
#define IMAGE_ROM_OPTIONAL_HDR_MAGIC 0x107
#ifdef _WIN64
typedef IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER;
typedef PIMAGE_OPTIONAL_HEADER64 PIMAGE_OPTIONAL_HEADER;
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR64_MAGIC
#else
typedef
;
typedef
;
#define IMAGE_NT_OPTIONAL_HDR_MAGIC IMAGE_NT_OPTIONAL_HDR32_MAGIC
#endif
typedef
struct
{
;
;
;
} , *;
typedef
struct
{
;
;
;
} , *;
typedef
struct
{
;
IMAGE_ROM_OPTIONAL_HEADER
;
} , *;
#ifdef _WIN64
typedef IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS;
typedef PIMAGE_NT_HEADERS64 PIMAGE_NT_HEADERS;
#else
typedef
;
typedef
;
#endif
#define IMAGE_FIRST_SECTION( ntheader ) ((PIMAGE_SECTION_HEADER) \
((ULONG_PTR)(ntheader) + \
FIELD_OFFSET( IMAGE_NT_HEADERS, OptionalHeader ) + \
((ntheader))->FileHeader.SizeOfOptionalHeader \
))
#define IMAGE_SUBSYSTEM_UNKNOWN 0 // Unknown subsystem.
#define IMAGE_SUBSYSTEM_NATIVE 1 // Image doesn't require a subsystem.
#define IMAGE_SUBSYSTEM_WINDOWS_GUI 2 // Image runs in the Windows GUI subsystem.
#define IMAGE_SUBSYSTEM_WINDOWS_CUI 3 // Image runs in the Windows character subsystem.
#define IMAGE_SUBSYSTEM_OS2_CUI 5 // image runs in the OS/2 character subsystem.
#define IMAGE_SUBSYSTEM_POSIX_CUI 7 // image runs in the Posix character subsystem.
#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 // image is a native Win9x driver.
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 // Image runs in the Windows CE subsystem.
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 //
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 //
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 //
#define IMAGE_SUBSYSTEM_EFI_ROM 13
#define IMAGE_SUBSYSTEM_XBOX 14
#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 17
#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020 // Image can handle a high entropy 64-bit virtual address space.
#define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040 // DLL can move.
#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 // Code Integrity Image
#define IMAGE_DLLCHARACTERISTICS_NX_COMPAT 0x0100 // Image is NX compatible
#define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200 // Image understands isolation and doesn't want it
#define IMAGE_DLLCHARACTERISTICS_NO_SEH 0x0400 // Image does not use SEH. No SE handler may reside in this image
#define IMAGE_DLLCHARACTERISTICS_NO_BIND 0x0800 // Do not bind this image.
#define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000 // Image should execute in an AppContainer
#define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER 0x2000 // Driver uses WDM model
#define IMAGE_DLLCHARACTERISTICS_GUARD_CF 0x4000 // Image supports Control Flow Guard.
#define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE 0x8000
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor
typedef
struct
{
;
;
;
;
;
;
;
}
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
}
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
}
ANON_OBJECT_HEADER_BIGOBJ
;
#define IMAGE_SIZEOF_SHORT_NAME 8
typedef
struct
{
BYTE Name[IMAGE_SIZEOF_SHORT_NAME];
union
{
;
;
} ;
;
;
;
;
;
;
;
;
} , *;
#define IMAGE_SIZEOF_SECTION_HEADER 40
#define IMAGE_SCN_TYPE_NO_PAD 0x00000008 // Reserved.
#define IMAGE_SCN_CNT_CODE 0x00000020 // Section contains code.
#define IMAGE_SCN_CNT_INITIALIZED_DATA 0x00000040 // Section contains initialized data.
#define IMAGE_SCN_CNT_UNINITIALIZED_DATA 0x00000080 // Section contains uninitialized data.
#define IMAGE_SCN_LNK_OTHER 0x00000100 // Reserved.
#define IMAGE_SCN_LNK_INFO 0x00000200 // Section contains comments or some other type of information.
#define IMAGE_SCN_LNK_REMOVE 0x00000800 // Section contents will not become part of image.
#define IMAGE_SCN_LNK_COMDAT 0x00001000 // Section contents comdat.
#define IMAGE_SCN_NO_DEFER_SPEC_EXC 0x00004000 // Reset speculative exceptions handling bits in the TLB entries for this section.
#define IMAGE_SCN_GPREL 0x00008000 // Section content can be accessed relative to GP
#define IMAGE_SCN_MEM_FARDATA 0x00008000
#define IMAGE_SCN_MEM_PURGEABLE 0x00020000
#define IMAGE_SCN_MEM_16BIT 0x00020000
#define IMAGE_SCN_MEM_LOCKED 0x00040000
#define IMAGE_SCN_MEM_PRELOAD 0x00080000
#define IMAGE_SCN_ALIGN_1BYTES 0x00100000 //
#define IMAGE_SCN_ALIGN_2BYTES 0x00200000 //
#define IMAGE_SCN_ALIGN_4BYTES 0x00300000 //
#define IMAGE_SCN_ALIGN_8BYTES 0x00400000 //
#define IMAGE_SCN_ALIGN_16BYTES 0x00500000 // Default alignment if no others are specified.
#define IMAGE_SCN_ALIGN_32BYTES 0x00600000 //
#define IMAGE_SCN_ALIGN_64BYTES 0x00700000 //
#define IMAGE_SCN_ALIGN_128BYTES 0x00800000 //
#define IMAGE_SCN_ALIGN_256BYTES 0x00900000 //
#define IMAGE_SCN_ALIGN_512BYTES 0x00A00000 //
#define IMAGE_SCN_ALIGN_1024BYTES 0x00B00000 //
#define IMAGE_SCN_ALIGN_2048BYTES 0x00C00000 //
#define IMAGE_SCN_ALIGN_4096BYTES 0x00D00000 //
#define IMAGE_SCN_ALIGN_8192BYTES 0x00E00000 //
#define IMAGE_SCN_ALIGN_MASK 0x00F00000
#define IMAGE_SCN_LNK_NRELOC_OVFL 0x01000000 // Section contains extended relocations.
#define IMAGE_SCN_MEM_DISCARDABLE 0x02000000 // Section can be discarded.
#define IMAGE_SCN_MEM_NOT_CACHED 0x04000000 // Section is not cachable.
#define IMAGE_SCN_MEM_NOT_PAGED 0x08000000 // Section is not pageable.
#define IMAGE_SCN_MEM_SHARED 0x10000000 // Section is shareable.
#define IMAGE_SCN_MEM_EXECUTE 0x20000000 // Section is executable.
#define IMAGE_SCN_MEM_READ 0x40000000 // Section is readable.
#define IMAGE_SCN_MEM_WRITE 0x80000000 // Section is writeable.
#define IMAGE_SCN_SCALE_INDEX 0x00000001 // Tls index is scaled
#ifndef _MAC
#include "pshpack2.h" // Symbols, relocs, and linenumbers are 2 byte packed
#endif
typedef
struct
{
union
{
[
8
];
struct
{
;
;
}
;
[
2
];
}
;
;
;
;
;
;
}
;
typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
#define IMAGE_SIZEOF_SYMBOL 18
typedef
struct
{
union
{
[
8
];
struct
{
;
;
}
;
[
2
];
}
;
;
;
;
;
;
}
;
typedef IMAGE_SYMBOL_EX UNALIGNED *PIMAGE_SYMBOL_EX;
#define IMAGE_SYM_UNDEFINED (SHORT)0 // Symbol is undefined or is common.
#define IMAGE_SYM_ABSOLUTE (SHORT)-1 // Symbol is an absolute value.
#define IMAGE_SYM_DEBUG (SHORT)-2 // Symbol is a special debug item.
#define IMAGE_SYM_SECTION_MAX 0xFEFF // Values 0xFF00-0xFFFF are special
#define IMAGE_SYM_SECTION_MAX_EX MAXLONG
#define IMAGE_SYM_TYPE_NULL 0x0000 // no type.
#define IMAGE_SYM_TYPE_VOID 0x0001 //
#define IMAGE_SYM_TYPE_CHAR 0x0002 // type character.
#define IMAGE_SYM_TYPE_SHORT 0x0003 // type short integer.
#define IMAGE_SYM_TYPE_INT 0x0004 //
#define IMAGE_SYM_TYPE_LONG 0x0005 //
#define IMAGE_SYM_TYPE_FLOAT 0x0006 //
#define IMAGE_SYM_TYPE_DOUBLE 0x0007 //
#define IMAGE_SYM_TYPE_STRUCT 0x0008 //
#define IMAGE_SYM_TYPE_UNION 0x0009 //
#define IMAGE_SYM_TYPE_ENUM 0x000A // enumeration.
#define IMAGE_SYM_TYPE_MOE 0x000B // member of enumeration.
#define IMAGE_SYM_TYPE_BYTE 0x000C //
#define IMAGE_SYM_TYPE_WORD 0x000D //
#define IMAGE_SYM_TYPE_UINT 0x000E //
#define IMAGE_SYM_TYPE_DWORD 0x000F //
#define IMAGE_SYM_TYPE_PCODE 0x8000 //
#define IMAGE_SYM_DTYPE_NULL 0 // no derived type.
#define IMAGE_SYM_DTYPE_POINTER 1 // pointer.
#define IMAGE_SYM_DTYPE_FUNCTION 2 // function.
#define IMAGE_SYM_DTYPE_ARRAY 3 // array.
#define IMAGE_SYM_CLASS_END_OF_FUNCTION (BYTE )-1
#define IMAGE_SYM_CLASS_NULL 0x0000
#define IMAGE_SYM_CLASS_AUTOMATIC 0x0001
#define IMAGE_SYM_CLASS_EXTERNAL 0x0002
#define IMAGE_SYM_CLASS_STATIC 0x0003
#define IMAGE_SYM_CLASS_REGISTER 0x0004
#define IMAGE_SYM_CLASS_EXTERNAL_DEF 0x0005
#define IMAGE_SYM_CLASS_LABEL 0x0006
#define IMAGE_SYM_CLASS_UNDEFINED_LABEL 0x0007
#define IMAGE_SYM_CLASS_MEMBER_OF_STRUCT 0x0008
#define IMAGE_SYM_CLASS_ARGUMENT 0x0009
#define IMAGE_SYM_CLASS_STRUCT_TAG 0x000A
#define IMAGE_SYM_CLASS_MEMBER_OF_UNION 0x000B
#define IMAGE_SYM_CLASS_UNION_TAG 0x000C
#define IMAGE_SYM_CLASS_TYPE_DEFINITION 0x000D
#define IMAGE_SYM_CLASS_UNDEFINED_STATIC 0x000E
#define IMAGE_SYM_CLASS_ENUM_TAG 0x000F
#define IMAGE_SYM_CLASS_MEMBER_OF_ENUM 0x0010
#define IMAGE_SYM_CLASS_REGISTER_PARAM 0x0011
#define IMAGE_SYM_CLASS_BIT_FIELD 0x0012
#define IMAGE_SYM_CLASS_FAR_EXTERNAL 0x0044 //
#define IMAGE_SYM_CLASS_BLOCK 0x0064
#define IMAGE_SYM_CLASS_FUNCTION 0x0065
#define IMAGE_SYM_CLASS_END_OF_STRUCT 0x0066
#define IMAGE_SYM_CLASS_FILE 0x0067
#define IMAGE_SYM_CLASS_SECTION 0x0068
#define IMAGE_SYM_CLASS_WEAK_EXTERNAL 0x0069
#define IMAGE_SYM_CLASS_CLR_TOKEN 0x006B
#define N_BTMASK 0x000F
#define N_TMASK 0x0030
#define N_TMASK1 0x00C0
#define N_TMASK2 0x00F0
#define N_BTSHFT 4
#define N_TSHIFT 2
#define BTYPE(x) ((x) & N_BTMASK)
#ifndef ISPTR
#define ISPTR(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT))
#endif
#ifndef ISFCN
#define ISFCN(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT))
#endif
#ifndef ISARY
#define ISARY(x) (((x) & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT))
#endif
#ifndef ISTAG
#define ISTAG(x) ((x)==IMAGE_SYM_CLASS_STRUCT_TAG || (x)==IMAGE_SYM_CLASS_UNION_TAG || (x)==IMAGE_SYM_CLASS_ENUM_TAG)
#endif
#ifndef INCREF
#define INCREF(x) ((((x)&~N_BTMASK)<<N_TSHIFT)|(IMAGE_SYM_DTYPE_POINTER<<N_BTSHFT)|((x)&N_BTMASK))
#endif
#ifndef DECREF
#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))
#endif
#include <pshpack2.h>
typedef
struct
IMAGE_AUX_SYMBOL_TOKEN_DEF
{
;
;
;
[
12
];
}
IMAGE_AUX_SYMBOL_TOKEN_DEF
;
typedef IMAGE_AUX_SYMBOL_TOKEN_DEF UNALIGNED *PIMAGE_AUX_SYMBOL_TOKEN_DEF;
typedef
IMAGE_AUX_SYMBOL_TOKEN_DEF
*
PIMAGE_AUX_SYMBOL_TOKEN_DEF
;
#include <poppack.h>
typedef
union
{
struct
{
;
union
{
struct
{
;
;
}
;
;
}
;
union
{
struct
{
;
;
}
;
struct
{
[
4
];
}
;
}
;
;
}
;
struct
{
BYTE Name[IMAGE_SIZEOF_SYMBOL];
}
;
struct
{
;
;
;
;
;
;
;
;
}
;
IMAGE_AUX_SYMBOL_TOKEN_DEF
;
struct
{
;
[
14
];
}
;
}
;
typedef IMAGE_AUX_SYMBOL UNALIGNED *PIMAGE_AUX_SYMBOL;
typedef
union
{
struct
{
;
;
[
12
];
}
;
struct
{
[
sizeof
(
)];
}
;
struct
{
;
;
;
;
;
;
;
;
[
2
];
}
;
struct
{
IMAGE_AUX_SYMBOL_TOKEN_DEF
;
[
2
];
struct
{
;
[
16
];
}
;
}
;
typedef IMAGE_AUX_SYMBOL_EX UNALIGNED *PIMAGE_AUX_SYMBOL_EX;
typedef
enum
{
IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF
=
1
,
}
;
#define IMAGE_COMDAT_SELECT_NODUPLICATES 1
#define IMAGE_COMDAT_SELECT_ANY 2
#define IMAGE_COMDAT_SELECT_SAME_SIZE 3
#define IMAGE_COMDAT_SELECT_EXACT_MATCH 4
#define IMAGE_COMDAT_SELECT_ASSOCIATIVE 5
#define IMAGE_COMDAT_SELECT_LARGEST 6
#define IMAGE_COMDAT_SELECT_NEWEST 7
#define IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY 1
#define IMAGE_WEAK_EXTERN_SEARCH_LIBRARY 2
#define IMAGE_WEAK_EXTERN_SEARCH_ALIAS 3
#define IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY 4
typedef
struct
{
union
{
;
;
;
;
}
;
typedef IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;
#define IMAGE_REL_I386_ABSOLUTE 0x0000 // Reference is absolute, no relocation is necessary
#define IMAGE_REL_I386_DIR16 0x0001 // Direct 16-bit reference to the symbols virtual address
#define IMAGE_REL_I386_REL16 0x0002 // PC-relative 16-bit reference to the symbols virtual address
#define IMAGE_REL_I386_DIR32 0x0006 // Direct 32-bit reference to the symbols virtual address
#define IMAGE_REL_I386_DIR32NB 0x0007 // Direct 32-bit reference to the symbols virtual address, base not included
#define IMAGE_REL_I386_SEG12 0x0009 // Direct 16-bit reference to the segment-selector bits of a 32-bit virtual address
#define IMAGE_REL_I386_SECTION 0x000A
#define IMAGE_REL_I386_SECREL 0x000B
#define IMAGE_REL_I386_TOKEN 0x000C // clr token
#define IMAGE_REL_I386_SECREL7 0x000D // 7 bit offset from base of section containing target
#define IMAGE_REL_I386_REL32 0x0014 // PC-relative 32-bit reference to the symbols virtual address
#define IMAGE_REL_MIPS_ABSOLUTE 0x0000 // Reference is absolute, no relocation is necessary
#define IMAGE_REL_MIPS_REFHALF 0x0001
#define IMAGE_REL_MIPS_REFWORD 0x0002
#define IMAGE_REL_MIPS_JMPADDR 0x0003
#define IMAGE_REL_MIPS_REFHI 0x0004
#define IMAGE_REL_MIPS_REFLO 0x0005
#define IMAGE_REL_MIPS_GPREL 0x0006
#define IMAGE_REL_MIPS_LITERAL 0x0007
#define IMAGE_REL_MIPS_SECTION 0x000A
#define IMAGE_REL_MIPS_SECREL 0x000B
#define IMAGE_REL_MIPS_SECRELLO 0x000C // Low 16-bit section relative referemce (used for >32k TLS)
#define IMAGE_REL_MIPS_SECRELHI 0x000D // High 16-bit section relative reference (used for >32k TLS)
#define IMAGE_REL_MIPS_TOKEN 0x000E // clr token
#define IMAGE_REL_MIPS_JMPADDR16 0x0010
#define IMAGE_REL_MIPS_REFWORDNB 0x0022
#define IMAGE_REL_MIPS_PAIR 0x0025
#define IMAGE_REL_ALPHA_ABSOLUTE 0x0000
#define IMAGE_REL_ALPHA_REFLONG 0x0001
#define IMAGE_REL_ALPHA_REFQUAD 0x0002
#define IMAGE_REL_ALPHA_GPREL32 0x0003
#define IMAGE_REL_ALPHA_LITERAL 0x0004
#define IMAGE_REL_ALPHA_LITUSE 0x0005
#define IMAGE_REL_ALPHA_GPDISP 0x0006
#define IMAGE_REL_ALPHA_BRADDR 0x0007
#define IMAGE_REL_ALPHA_HINT 0x0008
#define IMAGE_REL_ALPHA_INLINE_REFLONG 0x0009
#define IMAGE_REL_ALPHA_REFHI 0x000A
#define IMAGE_REL_ALPHA_REFLO 0x000B
#define IMAGE_REL_ALPHA_PAIR 0x000C
#define IMAGE_REL_ALPHA_MATCH 0x000D
#define IMAGE_REL_ALPHA_SECTION 0x000E
#define IMAGE_REL_ALPHA_SECREL 0x000F
#define IMAGE_REL_ALPHA_REFLONGNB 0x0010
#define IMAGE_REL_ALPHA_SECRELLO 0x0011 // Low 16-bit section relative reference
#define IMAGE_REL_ALPHA_SECRELHI 0x0012 // High 16-bit section relative reference
#define IMAGE_REL_ALPHA_REFQ3 0x0013 // High 16 bits of 48 bit reference
#define IMAGE_REL_ALPHA_REFQ2 0x0014 // Middle 16 bits of 48 bit reference
#define IMAGE_REL_ALPHA_REFQ1 0x0015 // Low 16 bits of 48 bit reference
#define IMAGE_REL_ALPHA_GPRELLO 0x0016 // Low 16-bit GP relative reference
#define IMAGE_REL_ALPHA_GPRELHI 0x0017 // High 16-bit GP relative reference
#define IMAGE_REL_PPC_ABSOLUTE 0x0000 // NOP
#define IMAGE_REL_PPC_ADDR64 0x0001 // 64-bit address
#define IMAGE_REL_PPC_ADDR32 0x0002 // 32-bit address
#define IMAGE_REL_PPC_ADDR24 0x0003 // 26-bit address, shifted left 2 (branch absolute)
#define IMAGE_REL_PPC_ADDR16 0x0004 // 16-bit address
#define IMAGE_REL_PPC_ADDR14 0x0005 // 16-bit address, shifted left 2 (load doubleword)
#define IMAGE_REL_PPC_REL24 0x0006 // 26-bit PC-relative offset, shifted left 2 (branch relative)
#define IMAGE_REL_PPC_REL14 0x0007 // 16-bit PC-relative offset, shifted left 2 (br cond relative)
#define IMAGE_REL_PPC_TOCREL16 0x0008 // 16-bit offset from TOC base
#define IMAGE_REL_PPC_TOCREL14 0x0009 // 16-bit offset from TOC base, shifted left 2 (load doubleword)
#define IMAGE_REL_PPC_ADDR32NB 0x000A // 32-bit addr w/o image base
#define IMAGE_REL_PPC_SECREL 0x000B // va of containing section (as in an image sectionhdr)
#define IMAGE_REL_PPC_SECTION 0x000C // sectionheader number
#define IMAGE_REL_PPC_IFGLUE 0x000D // substitute TOC restore instruction iff symbol is glue code
#define IMAGE_REL_PPC_IMGLUE 0x000E // symbol is glue code; virtual address is TOC restore instruction
#define IMAGE_REL_PPC_SECREL16 0x000F // va of containing section (limited to 16 bits)
#define IMAGE_REL_PPC_REFHI 0x0010
#define IMAGE_REL_PPC_REFLO 0x0011
#define IMAGE_REL_PPC_PAIR 0x0012
#define IMAGE_REL_PPC_SECRELLO 0x0013 // Low 16-bit section relative reference (used for >32k TLS)
#define IMAGE_REL_PPC_SECRELHI 0x0014 // High 16-bit section relative reference (used for >32k TLS)
#define IMAGE_REL_PPC_GPREL 0x0015
#define IMAGE_REL_PPC_TOKEN 0x0016 // clr token
#define IMAGE_REL_PPC_TYPEMASK 0x00FF // mask to isolate above values in IMAGE_RELOCATION.Type
#define IMAGE_REL_PPC_NEG 0x0100 // subtract reloc value rather than adding it
#define IMAGE_REL_PPC_BRTAKEN 0x0200 // fix branch prediction bit to predict branch taken
#define IMAGE_REL_PPC_BRNTAKEN 0x0400 // fix branch prediction bit to predict branch not taken
#define IMAGE_REL_PPC_TOCDEFN 0x0800 // toc slot defined in file (or, data in toc)
#define IMAGE_REL_SH3_ABSOLUTE 0x0000 // No relocation
#define IMAGE_REL_SH3_DIRECT16 0x0001 // 16 bit direct
#define IMAGE_REL_SH3_DIRECT32 0x0002 // 32 bit direct
#define IMAGE_REL_SH3_DIRECT8 0x0003 // 8 bit direct, -128..255
#define IMAGE_REL_SH3_DIRECT8_WORD 0x0004 // 8 bit direct .W (0 ext.)
#define IMAGE_REL_SH3_DIRECT8_LONG 0x0005 // 8 bit direct .L (0 ext.)
#define IMAGE_REL_SH3_DIRECT4 0x0006 // 4 bit direct (0 ext.)
#define IMAGE_REL_SH3_DIRECT4_WORD 0x0007 // 4 bit direct .W (0 ext.)
#define IMAGE_REL_SH3_DIRECT4_LONG 0x0008 // 4 bit direct .L (0 ext.)
#define IMAGE_REL_SH3_PCREL8_WORD 0x0009 // 8 bit PC relative .W
#define IMAGE_REL_SH3_PCREL8_LONG 0x000A // 8 bit PC relative .L
#define IMAGE_REL_SH3_PCREL12_WORD 0x000B // 12 LSB PC relative .W
#define IMAGE_REL_SH3_STARTOF_SECTION 0x000C // Start of EXE section
#define IMAGE_REL_SH3_SIZEOF_SECTION 0x000D // Size of EXE section
#define IMAGE_REL_SH3_SECTION 0x000E // Section table index
#define IMAGE_REL_SH3_SECREL 0x000F // Offset within section
#define IMAGE_REL_SH3_DIRECT32_NB 0x0010 // 32 bit direct not based
#define IMAGE_REL_SH3_GPREL4_LONG 0x0011 // GP-relative addressing
#define IMAGE_REL_SH3_TOKEN 0x0012 // clr token
#define IMAGE_REL_SHM_PCRELPT 0x0013 // Offset from current
#define IMAGE_REL_SHM_REFLO 0x0014 // Low bits of 32-bit address
#define IMAGE_REL_SHM_REFHALF 0x0015 // High bits of 32-bit address
#define IMAGE_REL_SHM_RELLO 0x0016 // Low bits of relative reference
#define IMAGE_REL_SHM_RELHALF 0x0017 // High bits of relative reference
#define IMAGE_REL_SHM_PAIR 0x0018 // offset operand for relocation
#define IMAGE_REL_SH_NOMODE 0x8000 // relocation ignores section mode
#define IMAGE_REL_ARM_ABSOLUTE 0x0000 // No relocation required
#define IMAGE_REL_ARM_ADDR32 0x0001 // 32 bit address
#define IMAGE_REL_ARM_ADDR32NB 0x0002 // 32 bit address w/o image base
#define IMAGE_REL_ARM_BRANCH24 0x0003 // 24 bit offset << 2 & sign ext.
#define IMAGE_REL_ARM_BRANCH11 0x0004 // Thumb: 2 11 bit offsets
#define IMAGE_REL_ARM_TOKEN 0x0005 // clr token
#define IMAGE_REL_ARM_GPREL12 0x0006 // GP-relative addressing (ARM)
#define IMAGE_REL_ARM_GPREL7 0x0007 // GP-relative addressing (Thumb)
#define IMAGE_REL_ARM_BLX24 0x0008
#define IMAGE_REL_ARM_BLX11 0x0009
#define IMAGE_REL_ARM_SECTION 0x000E // Section table index
#define IMAGE_REL_ARM_SECREL 0x000F // Offset within section
#define IMAGE_REL_ARM_MOV32A 0x0010 // ARM: MOVW/MOVT
#define IMAGE_REL_ARM_MOV32 0x0010 // ARM: MOVW/MOVT (deprecated)
#define IMAGE_REL_ARM_MOV32T 0x0011 // Thumb: MOVW/MOVT
#define IMAGE_REL_THUMB_MOV32 0x0011 // Thumb: MOVW/MOVT (deprecated)
#define IMAGE_REL_ARM_BRANCH20T 0x0012 // Thumb: 32-bit conditional B
#define IMAGE_REL_THUMB_BRANCH20 0x0012 // Thumb: 32-bit conditional B (deprecated)
#define IMAGE_REL_ARM_BRANCH24T 0x0014 // Thumb: 32-bit B or BL
#define IMAGE_REL_THUMB_BRANCH24 0x0014 // Thumb: 32-bit B or BL (deprecated)
#define IMAGE_REL_ARM_BLX23T 0x0015 // Thumb: BLX immediate
#define IMAGE_REL_THUMB_BLX23 0x0015 // Thumb: BLX immediate (deprecated)
#define IMAGE_REL_AM_ABSOLUTE 0x0000
#define IMAGE_REL_AM_ADDR32 0x0001
#define IMAGE_REL_AM_ADDR32NB 0x0002
#define IMAGE_REL_AM_CALL32 0x0003
#define IMAGE_REL_AM_FUNCINFO 0x0004
#define IMAGE_REL_AM_REL32_1 0x0005
#define IMAGE_REL_AM_REL32_2 0x0006
#define IMAGE_REL_AM_SECREL 0x0007
#define IMAGE_REL_AM_SECTION 0x0008
#define IMAGE_REL_AM_TOKEN 0x0009
#define IMAGE_REL_ARM64_ABSOLUTE 0x0000 // No relocation required
#define IMAGE_REL_ARM64_ADDR32 0x0001 // 32 bit address. Review! do we need it?
#define IMAGE_REL_ARM64_ADDR32NB 0x0002 // 32 bit address w/o image base (RVA: for Data/PData/XData)
#define IMAGE_REL_ARM64_BRANCH26 0x0003 // 26 bit offset << 2 & sign ext. for B & BL
#define IMAGE_REL_ARM64_PAGEBASE_REL21 0x0004 // ADRP
#define IMAGE_REL_ARM64_REL21 0x0005 // ADR
#define IMAGE_REL_ARM64_PAGEOFFSET_12A 0x0006 // ADD/ADDS (immediate) with zero shift, for page offset
#define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007 // LDR (indexed, unsigned immediate), for page offset
#define IMAGE_REL_ARM64_SECREL 0x0008 // Offset within section
#define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009 // ADD/ADDS (immediate) with zero shift, for bit 0:11 of section offset
#define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A // ADD/ADDS (immediate) with zero shift, for bit 12:23 of section offset
#define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B // LDR (indexed, unsigned immediate), for bit 0:11 of section offset
#define IMAGE_REL_ARM64_TOKEN 0x000C
#define IMAGE_REL_ARM64_SECTION 0x000D // Section table index
#define IMAGE_REL_ARM64_ADDR64 0x000E // 64 bit address
#define IMAGE_REL_ARM64_BRANCH19 0x000F // 19 bit offset << 2 & sign ext. for conditional B
#define IMAGE_REL_AMD64_ABSOLUTE 0x0000 // Reference is absolute, no relocation is necessary
#define IMAGE_REL_AMD64_ADDR64 0x0001 // 64-bit address (VA).
#define IMAGE_REL_AMD64_ADDR32 0x0002 // 32-bit address (VA).
#define IMAGE_REL_AMD64_ADDR32NB 0x0003 // 32-bit address w/o image base (RVA).
#define IMAGE_REL_AMD64_REL32 0x0004 // 32-bit relative address from byte following reloc
#define IMAGE_REL_AMD64_REL32_1 0x0005 // 32-bit relative address from byte distance 1 from reloc
#define IMAGE_REL_AMD64_REL32_2 0x0006 // 32-bit relative address from byte distance 2 from reloc
#define IMAGE_REL_AMD64_REL32_3 0x0007 // 32-bit relative address from byte distance 3 from reloc
#define IMAGE_REL_AMD64_REL32_4 0x0008 // 32-bit relative address from byte distance 4 from reloc
#define IMAGE_REL_AMD64_REL32_5 0x0009 // 32-bit relative address from byte distance 5 from reloc
#define IMAGE_REL_AMD64_SECTION 0x000A // Section index
#define IMAGE_REL_AMD64_SECREL 0x000B // 32 bit offset from base of section containing target
#define IMAGE_REL_AMD64_SECREL7 0x000C // 7 bit unsigned offset from base of section containing target
#define IMAGE_REL_AMD64_TOKEN 0x000D // 32 bit metadata token
#define IMAGE_REL_AMD64_SREL32 0x000E // 32 bit signed span-dependent value emitted into object
#define IMAGE_REL_AMD64_PAIR 0x000F
#define IMAGE_REL_AMD64_SSPAN32 0x0010 // 32 bit signed span-dependent value applied at link time
#define IMAGE_REL_AMD64_EHANDLER 0x0011
#define IMAGE_REL_AMD64_IMPORT_BR 0x0012 // Indirect branch to an import
#define IMAGE_REL_AMD64_IMPORT_CALL 0x0013 // Indirect call to an import
#define IMAGE_REL_AMD64_CFG_BR 0x0014 // Indirect branch to a CFG check
#define IMAGE_REL_AMD64_CFG_BR_REX 0x0015 // Indirect branch to a CFG check, with REX.W prefix
#define IMAGE_REL_AMD64_CFG_CALL 0x0016 // Indirect call to a CFG check
#define IMAGE_REL_AMD64_INDIR_BR 0x0017 // Indirect branch to a target in RAX (no CFG)
#define IMAGE_REL_AMD64_INDIR_BR_REX 0x0018 // Indirect branch to a target in RAX, with REX.W prefix (no CFG)
#define IMAGE_REL_AMD64_INDIR_CALL 0x0019 // Indirect call to a target in RAX (no CFG)
#define IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_FIRST 0x0020 // Indirect branch for a switch table using Reg 0 (RAX)
#define IMAGE_REL_AMD64_INDIR_BR_SWITCHTABLE_LAST 0x002F // Indirect branch for a switch table using Reg 15 (R15)
#define IMAGE_REL_IA64_ABSOLUTE 0x0000
#define IMAGE_REL_IA64_IMM14 0x0001
#define IMAGE_REL_IA64_IMM22 0x0002
#define IMAGE_REL_IA64_IMM64 0x0003
#define IMAGE_REL_IA64_DIR32 0x0004
#define IMAGE_REL_IA64_DIR64 0x0005
#define IMAGE_REL_IA64_PCREL21B 0x0006
#define IMAGE_REL_IA64_PCREL21M 0x0007
#define IMAGE_REL_IA64_PCREL21F 0x0008
#define IMAGE_REL_IA64_GPREL22 0x0009
#define IMAGE_REL_IA64_LTOFF22 0x000A
#define IMAGE_REL_IA64_SECTION 0x000B
#define IMAGE_REL_IA64_SECREL22 0x000C
#define IMAGE_REL_IA64_SECREL64I 0x000D
#define IMAGE_REL_IA64_SECREL32 0x000E
#define IMAGE_REL_IA64_DIR32NB 0x0010
#define IMAGE_REL_IA64_SREL14 0x0011
#define IMAGE_REL_IA64_SREL22 0x0012
#define IMAGE_REL_IA64_SREL32 0x0013
#define IMAGE_REL_IA64_UREL32 0x0014
#define IMAGE_REL_IA64_PCREL60X 0x0015 // This is always a BRL and never converted
#define IMAGE_REL_IA64_PCREL60B 0x0016 // If possible, convert to MBB bundle with NOP.B in slot 1
#define IMAGE_REL_IA64_PCREL60F 0x0017 // If possible, convert to MFB bundle with NOP.F in slot 1
#define IMAGE_REL_IA64_PCREL60I 0x0018 // If possible, convert to MIB bundle with NOP.I in slot 1
#define IMAGE_REL_IA64_PCREL60M 0x0019 // If possible, convert to MMB bundle with NOP.M in slot 1
#define IMAGE_REL_IA64_IMMGPREL64 0x001A
#define IMAGE_REL_IA64_TOKEN 0x001B // clr token
#define IMAGE_REL_IA64_GPREL32 0x001C
#define IMAGE_REL_IA64_ADDEND 0x001F
#define IMAGE_REL_CEF_ABSOLUTE 0x0000 // Reference is absolute, no relocation is necessary
#define IMAGE_REL_CEF_ADDR32 0x0001 // 32-bit address (VA).
#define IMAGE_REL_CEF_ADDR64 0x0002 // 64-bit address (VA).
#define IMAGE_REL_CEF_ADDR32NB 0x0003 // 32-bit address w/o image base (RVA).
#define IMAGE_REL_CEF_SECTION 0x0004 // Section index
#define IMAGE_REL_CEF_SECREL 0x0005 // 32 bit offset from base of section containing target
#define IMAGE_REL_CEF_TOKEN 0x0006 // 32 bit metadata token
#define IMAGE_REL_CEE_ABSOLUTE 0x0000 // Reference is absolute, no relocation is necessary
#define IMAGE_REL_CEE_ADDR32 0x0001 // 32-bit address (VA).
#define IMAGE_REL_CEE_ADDR64 0x0002 // 64-bit address (VA).
#define IMAGE_REL_CEE_ADDR32NB 0x0003 // 32-bit address w/o image base (RVA).
#define IMAGE_REL_CEE_SECTION 0x0004 // Section index
#define IMAGE_REL_CEE_SECREL 0x0005 // 32 bit offset from base of section containing target
#define IMAGE_REL_CEE_TOKEN 0x0006 // 32 bit metadata token
#define IMAGE_REL_M32R_ABSOLUTE 0x0000 // No relocation required
#define IMAGE_REL_M32R_ADDR32 0x0001 // 32 bit address
#define IMAGE_REL_M32R_ADDR32NB 0x0002 // 32 bit address w/o image base
#define IMAGE_REL_M32R_ADDR24 0x0003 // 24 bit address
#define IMAGE_REL_M32R_GPREL16 0x0004 // GP relative addressing
#define IMAGE_REL_M32R_PCREL24 0x0005 // 24 bit offset << 2 & sign ext.
#define IMAGE_REL_M32R_PCREL16 0x0006 // 16 bit offset << 2 & sign ext.
#define IMAGE_REL_M32R_PCREL8 0x0007 // 8 bit offset << 2 & sign ext.
#define IMAGE_REL_M32R_REFHALF 0x0008 // 16 MSBs
#define IMAGE_REL_M32R_REFHI 0x0009 // 16 MSBs; adj for LSB sign ext.
#define IMAGE_REL_M32R_REFLO 0x000A // 16 LSBs
#define IMAGE_REL_M32R_PAIR 0x000B // Link HI and LO
#define IMAGE_REL_M32R_SECTION 0x000C // Section table index
#define IMAGE_REL_M32R_SECREL32 0x000D // 32 bit section relative reference
#define IMAGE_REL_M32R_TOKEN 0x000E // clr token
#define IMAGE_REL_EBC_ABSOLUTE 0x0000 // No relocation required
#define IMAGE_REL_EBC_ADDR32NB 0x0001 // 32 bit address w/o image base
#define IMAGE_REL_EBC_REL32 0x0002 // 32-bit relative address from byte following reloc
#define IMAGE_REL_EBC_SECTION 0x0003 // Section table index
#define IMAGE_REL_EBC_SECREL 0x0004 // Offset within section
#define EXT_IMM64(Value, Address, Size, InstPos, ValPos) /* Intel-IA64-Filler */ \
Value |= (((ULONGLONG)((*(Address) >> InstPos) & (((ULONGLONG)1 << Size) - 1))) << ValPos) // Intel-IA64-Filler
#define INS_IMM64(Value, Address, Size, InstPos, ValPos) /* Intel-IA64-Filler */\
*(PDWORD)Address = (*(PDWORD)Address & ~(((1 << Size) - 1) << InstPos)) | /* Intel-IA64-Filler */\
((DWORD)((((ULONGLONG)Value >> ValPos) & (((ULONGLONG)1 << Size) - 1))) << InstPos) // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM7B_INST_WORD_X 3 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM7B_SIZE_X 7 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM7B_INST_WORD_POS_X 4 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM7B_VAL_POS_X 0 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM9D_INST_WORD_X 3 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM9D_SIZE_X 9 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM9D_INST_WORD_POS_X 18 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM9D_VAL_POS_X 7 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM5C_INST_WORD_X 3 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM5C_SIZE_X 5 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM5C_INST_WORD_POS_X 13 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM5C_VAL_POS_X 16 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IC_INST_WORD_X 3 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IC_SIZE_X 1 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IC_INST_WORD_POS_X 12 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IC_VAL_POS_X 21 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41a_INST_WORD_X 1 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41a_SIZE_X 10 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41a_INST_WORD_POS_X 14 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41a_VAL_POS_X 22 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41b_INST_WORD_X 1 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41b_SIZE_X 8 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41b_INST_WORD_POS_X 24 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41b_VAL_POS_X 32 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41c_INST_WORD_X 2 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41c_SIZE_X 23 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41c_INST_WORD_POS_X 0 // Intel-IA64-Filler
#define EMARCH_ENC_I17_IMM41c_VAL_POS_X 40 // Intel-IA64-Filler
#define EMARCH_ENC_I17_SIGN_INST_WORD_X 3 // Intel-IA64-Filler
#define EMARCH_ENC_I17_SIGN_SIZE_X 1 // Intel-IA64-Filler
#define EMARCH_ENC_I17_SIGN_INST_WORD_POS_X 27 // Intel-IA64-Filler
#define EMARCH_ENC_I17_SIGN_VAL_POS_X 63 // Intel-IA64-Filler
#define X3_OPCODE_INST_WORD_X 3 // Intel-IA64-Filler
#define X3_OPCODE_SIZE_X 4 // Intel-IA64-Filler
#define X3_OPCODE_INST_WORD_POS_X 28 // Intel-IA64-Filler
#define X3_OPCODE_SIGN_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_I_INST_WORD_X 3 // Intel-IA64-Filler
#define X3_I_SIZE_X 1 // Intel-IA64-Filler
#define X3_I_INST_WORD_POS_X 27 // Intel-IA64-Filler
#define X3_I_SIGN_VAL_POS_X 59 // Intel-IA64-Filler
#define X3_D_WH_INST_WORD_X 3 // Intel-IA64-Filler
#define X3_D_WH_SIZE_X 3 // Intel-IA64-Filler
#define X3_D_WH_INST_WORD_POS_X 24 // Intel-IA64-Filler
#define X3_D_WH_SIGN_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_IMM20_INST_WORD_X 3 // Intel-IA64-Filler
#define X3_IMM20_SIZE_X 20 // Intel-IA64-Filler
#define X3_IMM20_INST_WORD_POS_X 4 // Intel-IA64-Filler
#define X3_IMM20_SIGN_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_IMM39_1_INST_WORD_X 2 // Intel-IA64-Filler
#define X3_IMM39_1_SIZE_X 23 // Intel-IA64-Filler
#define X3_IMM39_1_INST_WORD_POS_X 0 // Intel-IA64-Filler
#define X3_IMM39_1_SIGN_VAL_POS_X 36 // Intel-IA64-Filler
#define X3_IMM39_2_INST_WORD_X 1 // Intel-IA64-Filler
#define X3_IMM39_2_SIZE_X 16 // Intel-IA64-Filler
#define X3_IMM39_2_INST_WORD_POS_X 16 // Intel-IA64-Filler
#define X3_IMM39_2_SIGN_VAL_POS_X 20 // Intel-IA64-Filler
#define X3_P_INST_WORD_X 3 // Intel-IA64-Filler
#define X3_P_SIZE_X 4 // Intel-IA64-Filler
#define X3_P_INST_WORD_POS_X 0 // Intel-IA64-Filler
#define X3_P_SIGN_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_TMPLT_INST_WORD_X 0 // Intel-IA64-Filler
#define X3_TMPLT_SIZE_X 4 // Intel-IA64-Filler
#define X3_TMPLT_INST_WORD_POS_X 0 // Intel-IA64-Filler
#define X3_TMPLT_SIGN_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_BTYPE_QP_INST_WORD_X 2 // Intel-IA64-Filler
#define X3_BTYPE_QP_SIZE_X 9 // Intel-IA64-Filler
#define X3_BTYPE_QP_INST_WORD_POS_X 23 // Intel-IA64-Filler
#define X3_BTYPE_QP_INST_VAL_POS_X 0 // Intel-IA64-Filler
#define X3_EMPTY_INST_WORD_X 1 // Intel-IA64-Filler
#define X3_EMPTY_SIZE_X 2 // Intel-IA64-Filler
#define X3_EMPTY_INST_WORD_POS_X 14 // Intel-IA64-Filler
#define X3_EMPTY_INST_VAL_POS_X 0 // Intel-IA64-Filler
typedef
struct
{
union
{
;
;
}
;
;
}
;
typedef IMAGE_LINENUMBER UNALIGNED *PIMAGE_LINENUMBER;
#ifndef _MAC
#include "poppack.h" // Back to 4 byte packing
#endif
typedef
struct
{
;
;
}
;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;
#define IMAGE_REL_BASED_ABSOLUTE 0
#define IMAGE_REL_BASED_HIGH 1
#define IMAGE_REL_BASED_LOW 2
#define IMAGE_REL_BASED_HIGHLOW 3
#define IMAGE_REL_BASED_HIGHADJ 4
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_5 5
#define IMAGE_REL_BASED_RESERVED 6
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_7 7
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_8 8
#define IMAGE_REL_BASED_MACHINE_SPECIFIC_9 9
#define IMAGE_REL_BASED_DIR64 10
#define IMAGE_REL_BASED_IA64_IMM64 9
#define IMAGE_REL_BASED_MIPS_JMPADDR 5
#define IMAGE_REL_BASED_MIPS_JMPADDR16 9
#define IMAGE_REL_BASED_ARM_MOV32 5
#define IMAGE_REL_BASED_THUMB_MOV32 7
#define IMAGE_ARCHIVE_START_SIZE 8
#define IMAGE_ARCHIVE_START "!<arch>\n"
#define IMAGE_ARCHIVE_END "`\n"
#define IMAGE_ARCHIVE_PAD "\n"
#define IMAGE_ARCHIVE_LINKER_MEMBER "/ "
#define IMAGE_ARCHIVE_LONGNAMES_MEMBER "// "
#define IMAGE_ARCHIVE_HYBRIDMAP_MEMBER "/<HYBRIDMAP>/ "
typedef
struct
{
[
16
];
[
12
];
[
6
];
[
6
];
[
8
];
[
10
];
[
2
];
} , *;
#define IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR 60
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
[
1
];
}
, *
;
#include "pshpack8.h" // Use align 8 for the 64-bit IAT.
typedef
struct
{
union
{
;
;
;
;
}
;
}
;
typedef
*
;
#include "poppack.h" // Back to 4 byte packing
typedef
struct
{
union
{
;
;
;
;
}
;
}
;
typedef
*
;
#define IMAGE_ORDINAL_FLAG64 0x8000000000000000
#define IMAGE_ORDINAL_FLAG32 0x80000000
#define IMAGE_ORDINAL64(Ordinal) (Ordinal & 0xffff)
#define IMAGE_ORDINAL32(Ordinal) (Ordinal & 0xffff)
#define IMAGE_SNAP_BY_ORDINAL64(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG64) != 0)
#define IMAGE_SNAP_BY_ORDINAL32(Ordinal) ((Ordinal & IMAGE_ORDINAL_FLAG32) != 0)
(NTAPI *PIMAGE_TLS_CALLBACK) (
DllHandle,
Reason,
Reserved
);
typedef
struct
{
;
;
;
;
;
union
{
;
struct
{
:
20
;
:
4
;
:
8
;
}
;
typedef
*
;
typedef
struct
{
;
;
;
;
;
union
{
;
struct
{
:
20
;
:
4
;
:
8
;
}
;
typedef
*
;
#ifdef _WIN64
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG64
#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL64(Ordinal)
typedef IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA;
typedef PIMAGE_THUNK_DATA64 PIMAGE_THUNK_DATA;
#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL64(Ordinal)
typedef IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY;
typedef PIMAGE_TLS_DIRECTORY64 PIMAGE_TLS_DIRECTORY;
#else
#define IMAGE_ORDINAL_FLAG IMAGE_ORDINAL_FLAG32
#define IMAGE_ORDINAL(Ordinal) IMAGE_ORDINAL32(Ordinal)
typedef
;
typedef
;
#define IMAGE_SNAP_BY_ORDINAL(Ordinal) IMAGE_SNAP_BY_ORDINAL32(Ordinal)
typedef
;
typedef
;
#endif
typedef
struct
{
union
{
;
;
;
;
;
;
}
;
typedef IMAGE_IMPORT_DESCRIPTOR UNALIGNED *PIMAGE_IMPORT_DESCRIPTOR;
typedef
struct
_IMAGE_BOUND_IMPORT_DESCRIPTOR
{
;
;
NumberOfModuleForwarderRefs
;
}
IMAGE_BOUND_IMPORT_DESCRIPTOR
, *
PIMAGE_BOUND_IMPORT_DESCRIPTOR
;
typedef
struct
_IMAGE_BOUND_FORWARDER_REF
{
;
;
;
}
IMAGE_BOUND_FORWARDER_REF
, *
PIMAGE_BOUND_FORWARDER_REF
;
typedef
struct
_IMAGE_DELAYLOAD_DESCRIPTOR
{
union
{
;
struct
{
:
1
;
:
31
;
}
;
;
;
;
;
BoundImportAddressTableRVA
;
;
;
}
IMAGE_DELAYLOAD_DESCRIPTOR
, *
PIMAGE_DELAYLOAD_DESCRIPTOR
;
typedef
const
IMAGE_DELAYLOAD_DESCRIPTOR
*
PCIMAGE_DELAYLOAD_DESCRIPTOR
;
typedef
struct
_IMAGE_RESOURCE_DIRECTORY
{
;
;
;
;
;
;
}
, *
PIMAGE_RESOURCE_DIRECTORY
;
#define IMAGE_RESOURCE_NAME_IS_STRING 0x80000000
#define IMAGE_RESOURCE_DATA_IS_DIRECTORY 0x80000000
typedef
struct
_IMAGE_RESOURCE_DIRECTORY_ENTRY
{
union
{
struct
{
:
31
;
:
1
;
;
;
union
{
;
struct
{
:
31
;
:
1
;
}
IMAGE_RESOURCE_DIRECTORY_ENTRY
, *
PIMAGE_RESOURCE_DIRECTORY_ENTRY
;
typedef
struct
_IMAGE_RESOURCE_DIRECTORY_STRING
{
;
[
1
];
}
IMAGE_RESOURCE_DIRECTORY_STRING
, *
PIMAGE_RESOURCE_DIRECTORY_STRING
;
typedef
struct
_IMAGE_RESOURCE_DIR_STRING_U
{
;
[
1
];
}
IMAGE_RESOURCE_DIR_STRING_U
, *
PIMAGE_RESOURCE_DIR_STRING_U
;
typedef
struct
_IMAGE_RESOURCE_DATA_ENTRY
{
;
;
;
;
}
IMAGE_RESOURCE_DATA_ENTRY
, *
PIMAGE_RESOURCE_DATA_ENTRY
;
typedef
struct
_IMAGE_LOAD_CONFIG_CODE_INTEGRITY
{
;
;
;
;
}
IMAGE_LOAD_CONFIG_CODE_INTEGRITY
, *
PIMAGE_LOAD_CONFIG_CODE_INTEGRITY
;
typedef
struct
_IMAGE_DYNAMIC_RELOCATION_TABLE
{
;
;
}
IMAGE_DYNAMIC_RELOCATION_TABLE
, *
PIMAGE_DYNAMIC_RELOCATION_TABLE
;
#include "pshpack1.h"
typedef
struct
_IMAGE_DYNAMIC_RELOCATION32
{
;
;
}
IMAGE_DYNAMIC_RELOCATION32
, *
PIMAGE_DYNAMIC_RELOCATION32
;
typedef
struct
_IMAGE_DYNAMIC_RELOCATION64
{
;
;
}
IMAGE_DYNAMIC_RELOCATION64
, *
PIMAGE_DYNAMIC_RELOCATION64
;
typedef
struct
_IMAGE_DYNAMIC_RELOCATION32_V2
{
;
;
;
;
;
}
IMAGE_DYNAMIC_RELOCATION32_V2
, *
PIMAGE_DYNAMIC_RELOCATION32_V2
;
typedef
struct
_IMAGE_DYNAMIC_RELOCATION64_V2
{
;
;
;
;
;
}
IMAGE_DYNAMIC_RELOCATION64_V2
, *
PIMAGE_DYNAMIC_RELOCATION64_V2
;
#include "poppack.h" // Back to 4 byte packing
#ifdef _WIN64
typedef IMAGE_DYNAMIC_RELOCATION64 IMAGE_DYNAMIC_RELOCATION;
typedef PIMAGE_DYNAMIC_RELOCATION64 PIMAGE_DYNAMIC_RELOCATION;
typedef IMAGE_DYNAMIC_RELOCATION64_V2 IMAGE_DYNAMIC_RELOCATION_V2;
typedef PIMAGE_DYNAMIC_RELOCATION64_V2 PIMAGE_DYNAMIC_RELOCATION_V2;
#else
typedef
IMAGE_DYNAMIC_RELOCATION32
;
typedef
PIMAGE_DYNAMIC_RELOCATION32
PIMAGE_DYNAMIC_RELOCATION
;
typedef
IMAGE_DYNAMIC_RELOCATION32_V2
IMAGE_DYNAMIC_RELOCATION_V2
;
typedef
PIMAGE_DYNAMIC_RELOCATION32_V2
PIMAGE_DYNAMIC_RELOCATION_V2
;
#endif
#define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_PROLOGUE 0x00000001
#define IMAGE_DYNAMIC_RELOCATION_GUARD_RF_EPILOGUE 0x00000002
#define IMAGE_DYNAMIC_RELOCATION_GUARD_IMPORT_CONTROL_TRANSFER 0x00000003
#define IMAGE_DYNAMIC_RELOCATION_GUARD_INDIR_CONTROL_TRANSFER 0x00000004
#define IMAGE_DYNAMIC_RELOCATION_GUARD_SWITCHTABLE_BRANCH 0x00000005
#include "pshpack1.h"
typedef
struct
{
;
} ;
typedef IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER UNALIGNED * PIMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER;
typedef
IMAGE_PROLOGUE_DYNAMIC_RELOCATION_HEADER
* ;
typedef
struct
{
;
;
;
;
} ;
typedef IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER UNALIGNED * PIMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER;
typedef
IMAGE_EPILOGUE_DYNAMIC_RELOCATION_HEADER
* ;
typedef
struct
_IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION
{
:
12
;
:
1
;
:
19
;
}
IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION
;
typedef IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION UNALIGNED * PIMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION;
typedef
IMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION
*
PIMAGE_IMPORT_CONTROL_TRANSFER_DYNAMIC_RELOCATION
;
typedef
struct
_IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION
{
:
12
;
:
1
;
:
1
;
:
1
;
:
1
;
}
IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION
;
typedef IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION UNALIGNED * PIMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION;
typedef
IMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION
*
PIMAGE_INDIR_CONTROL_TRANSFER_DYNAMIC_RELOCATION
;
typedef
struct
_IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION
{
:
12
;
:
4
;
}
IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION
;
typedef IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION UNALIGNED * PIMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION;
typedef
IMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION
*
PIMAGE_SWITCHTABLE_BRANCH_DYNAMIC_RELOCATION
;
#include "poppack.h" // Back to 4 byte packing
typedef
struct
_IMAGE_LOAD_CONFIG_DIRECTORY32
{
;
;
;
;
;
;
CriticalSectionDefaultTimeout
;
DeCommitFreeBlockThreshold
;
DeCommitTotalFreeThreshold
;
;
;
;
;
;
;
;
;
;
;
;
GuardCFCheckFunctionPointer
;
GuardCFDispatchFunctionPointer
;
;
;
;
IMAGE_LOAD_CONFIG_CODE_INTEGRITY
;
GuardAddressTakenIatEntryTable
;
GuardAddressTakenIatEntryCount
;
;
;
;
;
;
GuardRFFailureRoutineFunctionPointer
;
DynamicValueRelocTableOffset
;
DynamicValueRelocTableSection
;
;
GuardRFVerifyStackPointerFunctionPointer
;
;
;
EnclaveConfigurationPointer
;
;
}
IMAGE_LOAD_CONFIG_DIRECTORY32
, *
PIMAGE_LOAD_CONFIG_DIRECTORY32
;
typedef
struct
_IMAGE_LOAD_CONFIG_DIRECTORY64
{
;
;
;
;
;
;
CriticalSectionDefaultTimeout
;
DeCommitFreeBlockThreshold
;
DeCommitTotalFreeThreshold
;
;
;
;
;
;
;
;
;
;
;
;
GuardCFCheckFunctionPointer
;
GuardCFDispatchFunctionPointer
;
;
;
;
IMAGE_LOAD_CONFIG_CODE_INTEGRITY
;
GuardAddressTakenIatEntryTable
;
GuardAddressTakenIatEntryCount
;
;
;
;
;
;
GuardRFFailureRoutineFunctionPointer
;
DynamicValueRelocTableOffset
;
DynamicValueRelocTableSection
;
;
GuardRFVerifyStackPointerFunctionPointer
;
;
;
EnclaveConfigurationPointer
;
;
}
IMAGE_LOAD_CONFIG_DIRECTORY64
, *
PIMAGE_LOAD_CONFIG_DIRECTORY64
;
#ifdef _WIN64
typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
#else
typedef
IMAGE_LOAD_CONFIG_DIRECTORY32
IMAGE_LOAD_CONFIG_DIRECTORY
;
typedef
PIMAGE_LOAD_CONFIG_DIRECTORY32
PIMAGE_LOAD_CONFIG_DIRECTORY
;
#endif
typedef
struct
{
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
}
, *
;
typedef
struct
{
[
32
];
[
20
];
}
, *
;
#define IMAGE_HOT_PATCH_BASE_OBLIGATORY 0x00000001
#define IMAGE_HOT_PATCH_BASE_CAN_ROLL_BACK 0x00000002
#define IMAGE_HOT_PATCH_CHUNK_INVERSE 0x80000000
#define IMAGE_HOT_PATCH_CHUNK_OBLIGATORY 0x40000000
#define IMAGE_HOT_PATCH_CHUNK_RESERVED 0x3FF03000
#define IMAGE_HOT_PATCH_CHUNK_TYPE 0x000FC000
#define IMAGE_HOT_PATCH_CHUNK_SOURCE_RVA 0x00008000
#define IMAGE_HOT_PATCH_CHUNK_TARGET_RVA 0x00004000
#define IMAGE_HOT_PATCH_CHUNK_SIZE 0x00000FFF
#define IMAGE_HOT_PATCH_NONE 0x00000000
#define IMAGE_HOT_PATCH_FUNCTION 0x0001C000
#define IMAGE_HOT_PATCH_ABSOLUTE 0x0002C000
#define IMAGE_HOT_PATCH_REL32 0x0003C000
#define IMAGE_HOT_PATCH_CALL_TARGET 0x00044000
#define IMAGE_HOT_PATCH_INDIRECT 0x0005C000
#define IMAGE_HOT_PATCH_NO_CALL_TARGET 0x00064000
#define IMAGE_HOT_PATCH_DYNAMIC_VALUE 0x00078000
#define IMAGE_GUARD_CF_INSTRUMENTED 0x00000100 // Module performs control flow integrity checks using system-supplied support
#define IMAGE_GUARD_CFW_INSTRUMENTED 0x00000200 // Module performs control flow and write integrity checks
#define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x00000400 // Module contains valid control flow target metadata
#define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x00000800 // Module does not make use of the /GS security cookie
#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x00001000 // Module supports read only delay load IAT
#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x00002000 // Delayload import table in its own .didat section (with nothing else in it) that can be freely reprotected
#define IMAGE_GUARD_CF_EXPORT_SUPPRESSION_INFO_PRESENT 0x00004000 // Module contains suppressed export information. This also infers that the address taken
#define IMAGE_GUARD_CF_ENABLE_EXPORT_SUPPRESSION 0x00008000 // Module enables suppression of exports
#define IMAGE_GUARD_CF_LONGJUMP_TABLE_PRESENT 0x00010000 // Module contains longjmp target information
#define IMAGE_GUARD_RF_INSTRUMENTED 0x00020000 // Module contains return flow instrumentation and metadata
#define IMAGE_GUARD_RF_ENABLE 0x00040000 // Module requests that the OS enable return flow protection
#define IMAGE_GUARD_RF_STRICT 0x00080000 // Module requests that the OS enable return flow protection in strict mode
#define IMAGE_GUARD_RETPOLINE_PRESENT 0x00100000 // Module was built with retpoline support
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xF0000000 // Stride of Guard CF function table encoded in these bits (additional count of bytes per element)
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 28 // Shift to right-justify Guard CF function table stride
#define IMAGE_GUARD_FLAG_FID_SUPPRESSED 0x01 // The containing GFID entry is suppressed
#define IMAGE_GUARD_FLAG_EXPORT_SUPPRESSED 0x02 // The containing GFID entry is export suppressed
typedef
struct
_IMAGE_CE_RUNTIME_FUNCTION_ENTRY
{
;
:
8
;
:
22
;
:
1
;
:
1
;
}
IMAGE_CE_RUNTIME_FUNCTION_ENTRY
, *
PIMAGE_CE_RUNTIME_FUNCTION_ENTRY
;
typedef
struct
_IMAGE_ARM_RUNTIME_FUNCTION_ENTRY
{
;
union
{
;
struct
{
:
2
;
:
11
;
:
2
;
:
1
;
:
3
;
:
1
;
:
1
;
:
1
;
:
10
;
}
IMAGE_ARM_RUNTIME_FUNCTION_ENTRY
, *
PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY
;
typedef
struct
_IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
{
;
union
{
;
struct
{
:
2
;
:
11
;
:
3
;
:
4
;
:
1
;
:
2
;
:
9
;
}
IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
, *
PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
;
typedef
struct
_IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
{
;
;
;
;
;
}
IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
, *
PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY
;
typedef
struct
_IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
{
;
;
;
;
;
}
IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
, *
PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY
;
typedef
struct
_IMAGE_RUNTIME_FUNCTION_ENTRY
{
;
;
union
{
;
;
}
_IMAGE_RUNTIME_FUNCTION_ENTRY
, *
_PIMAGE_RUNTIME_FUNCTION_ENTRY
;
typedef
_IMAGE_RUNTIME_FUNCTION_ENTRY
IMAGE_IA64_RUNTIME_FUNCTION_ENTRY
;
typedef
_PIMAGE_RUNTIME_FUNCTION_ENTRY
PIMAGE_IA64_RUNTIME_FUNCTION_ENTRY
;
#if defined(_AXP64_)
typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTRY;
typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#elif defined(_ALPHA_)
typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#elif defined(_ARM64_)
typedef IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#elif defined(_ARM_)
typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#else
typedef
_IMAGE_RUNTIME_FUNCTION_ENTRY
IMAGE_RUNTIME_FUNCTION_ENTRY
;
typedef
_PIMAGE_RUNTIME_FUNCTION_ENTRY
PIMAGE_RUNTIME_FUNCTION_ENTRY
;
#endif
#define IMAGE_ENCLAVE_LONG_ID_LENGTH 32
#define IMAGE_ENCLAVE_SHORT_ID_LENGTH 16
typedef
struct
{
;
MinimumRequiredConfigSize
;
;
;
;
;
BYTE FamilyID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
BYTE ImageID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
;
;
;
;
;
}
, *
;
typedef
struct
{
;
MinimumRequiredConfigSize
;
;
;
;
;
BYTE FamilyID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
BYTE ImageID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
;
;
;
;
;
}
, *
;
#ifdef _WIN64
typedef IMAGE_ENCLAVE_CONFIG64 IMAGE_ENCLAVE_CONFIG;
typedef PIMAGE_ENCLAVE_CONFIG64 PIMAGE_ENCLAVE_CONFIG;
#else
typedef
;
typedef
;
#endif
#define IMAGE_ENCLAVE_MINIMUM_CONFIG_SIZE FIELD_OFFSET(IMAGE_ENCLAVE_CONFIG, EnclaveFlags)
#define IMAGE_ENCLAVE_POLICY_DEBUGGABLE 0x00000001
#define IMAGE_ENCLAVE_FLAG_PRIMARY_IMAGE 0x00000001
typedef
struct
{
;
;
BYTE UniqueOrAuthorID[IMAGE_ENCLAVE_LONG_ID_LENGTH];
BYTE FamilyID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
BYTE ImageID[IMAGE_ENCLAVE_SHORT_ID_LENGTH];
;
;
}
, *
;
#define IMAGE_ENCLAVE_IMPORT_MATCH_NONE 0x00000000
#define IMAGE_ENCLAVE_IMPORT_MATCH_UNIQUE_ID 0x00000001
#define IMAGE_ENCLAVE_IMPORT_MATCH_AUTHOR_ID 0x00000002
#define IMAGE_ENCLAVE_IMPORT_MATCH_FAMILY_ID 0x00000003
#define IMAGE_ENCLAVE_IMPORT_MATCH_IMAGE_ID 0x00000004
typedef
struct
{
;
;
;
;
;
;
;
;
}
, *
;
#define IMAGE_DEBUG_TYPE_UNKNOWN 0
#define IMAGE_DEBUG_TYPE_COFF 1
#define IMAGE_DEBUG_TYPE_CODEVIEW 2
#define IMAGE_DEBUG_TYPE_FPO 3
#define IMAGE_DEBUG_TYPE_MISC 4
#define IMAGE_DEBUG_TYPE_EXCEPTION 5
#define IMAGE_DEBUG_TYPE_FIXUP 6
#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
#define IMAGE_DEBUG_TYPE_BORLAND 9
#define IMAGE_DEBUG_TYPE_RESERVED10 10
#define IMAGE_DEBUG_TYPE_CLSID 11
#define IMAGE_DEBUG_TYPE_VC_FEATURE 12
#define IMAGE_DEBUG_TYPE_POGO 13
#define IMAGE_DEBUG_TYPE_ILTCG 14
#define IMAGE_DEBUG_TYPE_MPX 15
#define IMAGE_DEBUG_TYPE_REPRO 16
typedef
struct
{
;
;
;
;
;
;
;
;
} , *;
#define FRAME_FPO 0
#define FRAME_TRAP 1
#define FRAME_TSS 2
#define FRAME_NONFPO 3
typedef
struct
{
;
;
;
;
:
8
;
:
3
;
:
1
;
:
1
;
:
1
;
:
2
;
}
, *
;
#define SIZEOF_RFPO_DATA 16
#define IMAGE_DEBUG_MISC_EXENAME 1
typedef
struct
{
;
;
;
[
3
];
[
1
];
}
, *
;
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
union
{
;
;
}
, *
;
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
[
2
];
} , *;
typedef
struct
{
;
;
;
;
;
;
;
;
;
}
, *
;
#ifndef _MAC
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
#define NON_PAGED_DEBUG_SIGNATURE 0x494E
#else
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4449 // DI
#define NON_PAGED_DEBUG_SIGNATURE 0x4E49 // NI
#endif
#define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
#define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000 // when DBG was updated, the
typedef
struct
{
unsigned
int
:
1
;
int
:
7
;
unsigned
int
:
8
;
int
:
16
;
;
} , *;
typedef
struct
{
;
;
}
, *
PIMAGE_ARCHITECTURE_ENTRY
;
#include "poppack.h" // Back to the initial value
#define IMPORT_OBJECT_HDR_SIG2 0xffff
typedef
struct
{
;
;
;
;
;
;
union
{
;
;
:
2
;
:
3
;
:
11
;
}
;
typedef
enum
{
=
0
,
=
1
,
=
2
,
}
;
typedef
enum
{
=
0
,
=
1
,
IMPORT_OBJECT_NAME_NO_PREFIX
=
2
,
IMPORT_OBJECT_NAME_UNDECORATE
=
3
,
IMPORT_OBJECT_NAME_EXPORTAS
=
4
,
}
;
#ifndef __IMAGE_COR20_HEADER_DEFINED__
#define __IMAGE_COR20_HEADER_DEFINED__
typedef
enum
ReplacesCorHdrNumericDefines
{
=
0x00000001
,
COMIMAGE_FLAGS_32BITREQUIRED
=
0x00000002
,
COMIMAGE_FLAGS_IL_LIBRARY
=
0x00000004
,
COMIMAGE_FLAGS_STRONGNAMESIGNED
=
0x00000008
,
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT
=
0x00000010
,
COMIMAGE_FLAGS_TRACKDEBUGDATA
=
0x00010000
,
COMIMAGE_FLAGS_32BITPREFERRED
=
0x00020000
,
=
2
,
=
,
=
5
,
=
8
,
COR_VTABLEGAP_NAME_LENGTH
=
8
,
=
1
,
COR_ILMETHOD_SECT_SMALL_MAX_DATASIZE
=
0xFF
,
=
0x01
,
=
0x02
,
=
0x08
,
=
0x01
,
=
0x02
,
COR_VTABLE_FROM_UNMANAGED
=
0x04
,
COR_VTABLE_FROM_UNMANAGED_RETAIN_APPDOMAIN
=
0x08
,
COR_VTABLE_CALL_MOST_DERIVED
=
0x10
,
IMAGE_COR_EATJ_THUNK_SIZE
=
32
,
=
1024
,
=
1024
,
}
ReplacesCorHdrNumericDefines
;
typedef
struct
{
;
;
;
;
;
union
{
;
;
;
;
;
;
;
;
}
, *;
#endif // __IMAGE_COR20_HEADER_DEFINED__
#include <apiset.h>
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION > NTDDI_WINXP)
_Success_(return != 0)
(
_In_ DWORD FramesToCapture,
_Out_writes_to_(FramesToCapture,return) PVOID* BackTrace,
_Out_opt_ PDWORD BackTraceHash
);
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION > NTDDI_WIN2K)
(
_Out_ PCONTEXT ContextRecord
);
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
(
_In_opt_ PVOID TargetFrame,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#if defined(_AMD64_)
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
BOOLEAN
__cdecl
RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ DWORD64 BaseAddress
);
NTSYSAPI
BOOLEAN
__cdecl
RtlDeleteFunctionTable(
_In_ PRUNTIME_FUNCTION FunctionTable
);
NTSYSAPI
BOOLEAN
__cdecl
RtlInstallFunctionTableCallback(
_In_ DWORD64 TableIdentifier,
_In_ DWORD64 BaseAddress,
_In_ DWORD Length,
_In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback,
_In_opt_ PVOID Context,
_In_opt_ PCWSTR OutOfProcessCallbackDll
);
#if (NTDDI_VERSION >= NTDDI_WIN8)
NTSYSAPI
DWORD
NTAPI
RtlAddGrowableFunctionTable(
_Out_ PVOID* DynamicTable,
_In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ DWORD MaximumEntryCount,
_In_ ULONG_PTR RangeBase,
_In_ ULONG_PTR RangeEnd
);
NTSYSAPI
VOID
NTAPI
RtlGrowFunctionTable(
_Inout_ PVOID DynamicTable,
_In_ DWORD NewEntryCount
);
NTSYSAPI
VOID
NTAPI
RtlDeleteGrowableFunctionTable(
_In_ PVOID DynamicTable
);
#endif// (NTDDI_VERSION >= NTDDI_WIN8)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
PRUNTIME_FUNCTION
NTAPI
RtlLookupFunctionEntry(
_In_ DWORD64 ControlPc,
_Out_ PDWORD64 ImageBase,
_Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
__cdecl
RtlRestoreContext(
_In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD* ExceptionRecord
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
NTAPI
RtlUnwindEx(
_In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
NTSYSAPI
PEXCEPTION_ROUTINE
NTAPI
RtlVirtualUnwind(
_In_ DWORD HandlerType,
_In_ DWORD64 ImageBase,
_In_ DWORD64 ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord,
_Out_ PVOID* HandlerData,
_Out_ PDWORD64 EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // _AMD64_
#if defined(_ARM_)
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
BOOLEAN
__cdecl
RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ DWORD BaseAddress
);
NTSYSAPI
BOOLEAN
__cdecl
RtlDeleteFunctionTable(
_In_ PRUNTIME_FUNCTION FunctionTable
);
NTSYSAPI
BOOLEAN
__cdecl
RtlInstallFunctionTableCallback(
_In_ DWORD TableIdentifier,
_In_ DWORD BaseAddress,
_In_ DWORD Length,
_In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback,
_In_opt_ PVOID Context,
_In_opt_ PCWSTR OutOfProcessCallbackDll
);
#if (NTDDI_VERSION >= NTDDI_WIN8)
NTSYSAPI
DWORD
NTAPI
RtlAddGrowableFunctionTable(
_Out_ PVOID* DynamicTable,
_In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ DWORD MaximumEntryCount,
_In_ ULONG_PTR RangeBase,
_In_ ULONG_PTR RangeEnd
);
NTSYSAPI
VOID
NTAPI
RtlGrowFunctionTable(
_Inout_ PVOID DynamicTable,
_In_ DWORD NewEntryCount
);
NTSYSAPI
VOID
NTAPI
RtlDeleteGrowableFunctionTable(
_In_ PVOID DynamicTable
);
#endif// (NTDDI_VERSION >= NTDDI_WIN8)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
PRUNTIME_FUNCTION
NTAPI
RtlLookupFunctionEntry(
_In_ ULONG_PTR ControlPc,
_Out_ PDWORD ImageBase,
_Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
__cdecl
RtlRestoreContext(
_In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD* ExceptionRecord
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
NTAPI
RtlUnwindEx(
_In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
NTSYSAPI
PEXCEPTION_ROUTINE
NTAPI
RtlVirtualUnwind(
_In_ DWORD HandlerType,
_In_ DWORD ImageBase,
_In_ DWORD ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord,
_Out_ PVOID* HandlerData,
_Out_ PDWORD EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // _ARM_
#if defined(_ARM64_)
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
BOOLEAN
__cdecl
RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ ULONG_PTR BaseAddress
);
NTSYSAPI
BOOLEAN
__cdecl
RtlDeleteFunctionTable(
_In_ PRUNTIME_FUNCTION FunctionTable
);
NTSYSAPI
BOOLEAN
__cdecl
RtlInstallFunctionTableCallback(
_In_ ULONG_PTR TableIdentifier,
_In_ ULONG_PTR BaseAddress,
_In_ DWORD Length,
_In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback,
_In_opt_ PVOID Context,
_In_opt_ PCWSTR OutOfProcessCallbackDll
);
#if (NTDDI_VERSION >= NTDDI_WIN8)
NTSYSAPI
DWORD
NTAPI
RtlAddGrowableFunctionTable(
_Out_ PVOID* DynamicTable,
_In_reads_(MaximumEntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount,
_In_ DWORD MaximumEntryCount,
_In_ ULONG_PTR RangeBase,
_In_ ULONG_PTR RangeEnd
);
NTSYSAPI
VOID
NTAPI
RtlGrowFunctionTable(
_Inout_ PVOID DynamicTable,
_In_ DWORD NewEntryCount
);
NTSYSAPI
VOID
NTAPI
RtlDeleteGrowableFunctionTable(
_In_ PVOID DynamicTable
);
#endif// (NTDDI_VERSION >= NTDDI_WIN8)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
PRUNTIME_FUNCTION
NTAPI
RtlLookupFunctionEntry(
_In_ ULONG_PTR ControlPc,
_Out_ PULONG_PTR ImageBase,
_Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
__cdecl
RtlRestoreContext(
_In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD* ExceptionRecord
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
NTAPI
RtlUnwindEx(
_In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
);
NTSYSAPI
PEXCEPTION_ROUTINE
NTAPI
RtlVirtualUnwind(
_In_ DWORD HandlerType,
_In_ ULONG_PTR ImageBase,
_In_ ULONG_PTR ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord,
_Out_ PVOID* HandlerData,
_Out_ PULONG_PTR EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // _ARM64_
#if defined(_CHPE_X86_ARM64_)
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
VOID
NTAPI
RtlUnwindEx(
_In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord,
_In_opt_ PVOID HistoryTable
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI
PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY
NTAPI
RtlLookupFunctionEntryCHPE(
_In_ ULONG_PTR ControlPc,
_Out_ PULONG_PTR ImageBase,
_Inout_opt_ PVOID HistoryTable
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // _X86_
#pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
(
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION >= NTDDI_WIN2K)
_Check_return_
(
_In_ const VOID* Source1,
_In_ const VOID* Source2,
);
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#ifdef _MAC
#ifndef _INC_STRING
#include <string.h>
#endif /* _INC_STRING */
#else
#include <string.h>
#endif // _MAC
#ifndef _SLIST_HEADER_
#define _SLIST_HEADER_
#if defined(_WIN64)
//
// The type SINGLE_LIST_ENTRY is not suitable for use with SLISTs. For
// WIN64, an entry on an SLIST is required to be 16-byte aligned, while a
// SINGLE_LIST_ENTRY structure has only 8 byte alignment.
//
// Therefore, all SLIST code should use the SLIST_ENTRY type instead of the
// SINGLE_LIST_ENTRY type.
//
#pragma warning(push)
#pragma warning(disable:4324) // structure padded due to align()
typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
struct _SLIST_ENTRY *Next;
} SLIST_ENTRY, *PSLIST_ENTRY;
#pragma warning(pop)
#else
typedef
struct
, *
;
#endif // _WIN64
#if defined(_AMD64_)
typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
struct { // original struct
ULONGLONG Alignment;
ULONGLONG Region;
} DUMMYSTRUCTNAME;
struct { // x64 16-byte header
ULONGLONG Depth:16;
ULONGLONG Sequence:48;
ULONGLONG Reserved:4;
ULONGLONG NextEntry:60; // last 4 bits are always 0's
} HeaderX64;
} SLIST_HEADER, *PSLIST_HEADER;
#elif defined(_ARM64_)
// ARM64_WORKITEM: should this be merged with AMD64 above?
typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER {
struct { // original struct
ULONGLONG Alignment;
ULONGLONG Region;
} DUMMYSTRUCTNAME;
struct { // ARM64 16-byte header
ULONGLONG Depth:16;
ULONGLONG Sequence:48;
ULONGLONG Reserved:4;
ULONGLONG NextEntry:60; // last 4 bits are always 0's
} HeaderArm64;
} SLIST_HEADER, *PSLIST_HEADER;
#elif defined(_X86_)
typedef
union
{
;
struct
{
;
;
;
} , *;
#elif defined(_ARM_)
typedef union _SLIST_HEADER {
ULONGLONG Alignment;
struct {
SLIST_ENTRY Next;
WORD Depth;
WORD Reserved;
} DUMMYSTRUCTNAME;
} SLIST_HEADER, *PSLIST_HEADER;
#endif
#endif // _SLIST_HEADER_
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
(
_Out_ PSLIST_HEADER ListHead
);
_Must_inspect_result_
(
_In_ const SLIST_HEADER *ListHead
);
(
_Inout_ PSLIST_HEADER ListHead
);
(
_Inout_ PSLIST_HEADER ListHead,
_Inout_ __drv_aliasesMem PSLIST_ENTRY ListEntry
);
(
_Inout_ PSLIST_HEADER ListHead,
_Inout_ __drv_aliasesMem PSLIST_ENTRY List,
_Inout_ PSLIST_ENTRY ListEnd,
);
(
_Inout_ PSLIST_HEADER ListHead
);
(
_In_ PSLIST_HEADER ListHead
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#ifndef _RTL_RUN_ONCE_DEF
#define _RTL_RUN_ONCE_DEF
#define RTL_RUN_ONCE_INIT {0} // Static initializer
#define RTL_RUN_ONCE_CHECK_ONLY 0x00000001UL
#define RTL_RUN_ONCE_ASYNC 0x00000002UL
#define RTL_RUN_ONCE_INIT_FAILED 0x00000004UL
#define RTL_RUN_ONCE_CTX_RESERVED_BITS 2
typedef
union
{
;
}
, *
;
#endif // _RTL_RUN_ONCE_DEF
typedef
struct
{
;
;
[
2
];
;
;
}
, *
;
#include <specstrings.h>
#define FAST_FAIL_LEGACY_GS_VIOLATION 0
#define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
#define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
#define FAST_FAIL_CORRUPT_LIST_ENTRY 3
#define FAST_FAIL_INCORRECT_STACK 4
#define FAST_FAIL_INVALID_ARG 5
#define FAST_FAIL_GS_COOKIE_INIT 6
#define FAST_FAIL_FATAL_APP_EXIT 7
#define FAST_FAIL_RANGE_CHECK_FAILURE 8
#define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
#define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
#define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
#define FAST_FAIL_INVALID_FIBER_SWITCH 12
#define FAST_FAIL_INVALID_SET_OF_CONTEXT 13
#define FAST_FAIL_INVALID_REFERENCE_COUNT 14
#define FAST_FAIL_INVALID_JUMP_BUFFER 18
#define FAST_FAIL_MRDATA_MODIFIED 19
#define FAST_FAIL_CERTIFICATION_FAILURE 20
#define FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
#define FAST_FAIL_CRYPTO_LIBRARY 22
#define FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
#define FAST_FAIL_INVALID_IMAGE_BASE 24
#define FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
#define FAST_FAIL_UNSAFE_EXTENSION_CALL 26
#define FAST_FAIL_DEPRECATED_SERVICE_INVOKED 27
#define FAST_FAIL_INVALID_BUFFER_ACCESS 28
#define FAST_FAIL_INVALID_BALANCED_TREE 29
#define FAST_FAIL_INVALID_NEXT_THREAD 30
#define FAST_FAIL_GUARD_ICALL_CHECK_SUPPRESSED 31 // Telemetry, nonfatal
#define FAST_FAIL_APCS_DISABLED 32
#define FAST_FAIL_INVALID_IDLE_STATE 33
#define FAST_FAIL_MRDATA_PROTECTION_FAILURE 34
#define FAST_FAIL_UNEXPECTED_HEAP_EXCEPTION 35
#define FAST_FAIL_INVALID_LOCK_STATE 36
#define FAST_FAIL_GUARD_JUMPTABLE 37 // Known to compiler, must retain value 37
#define FAST_FAIL_INVALID_LONGJUMP_TARGET 38
#define FAST_FAIL_INVALID_DISPATCH_CONTEXT 39
#define FAST_FAIL_INVALID_THREAD 40
#define FAST_FAIL_INVALID_SYSCALL_NUMBER 41 // Telemetry, nonfatal
#define FAST_FAIL_INVALID_FILE_OPERATION 42 // Telemetry, nonfatal
#define FAST_FAIL_LPAC_ACCESS_DENIED 43 // Telemetry, nonfatal
#define FAST_FAIL_GUARD_SS_FAILURE 44
#define FAST_FAIL_LOADER_CONTINUITY_FAILURE 45 // Telemetry, nonfatal
#define FAST_FAIL_GUARD_EXPORT_SUPPRESSION_FAILURE 46
#define FAST_FAIL_INVALID_CONTROL_STACK 47
#define FAST_FAIL_SET_CONTEXT_DENIED 48
#define FAST_FAIL_INVALID_IAT 49
#define FAST_FAIL_HEAP_METADATA_CORRUPTION 50
#define FAST_FAIL_PAYLOAD_RESTRICTION_VIOLATION 51
#define FAST_FAIL_LOW_LABEL_ACCESS_DENIED 52 // Telemetry, nonfatal
#define FAST_FAIL_ENCLAVE_CALL_FAILURE 53
#define FAST_FAIL_UNHANDLED_LSS_EXCEPTON 54
#define FAST_FAIL_ADMINLESS_ACCESS_DENIED 55 // Telemetry, nonfatal
#define FAST_FAIL_UNEXPECTED_CALL 56
#define FAST_FAIL_CONTROL_INVALID_RETURN_ADDRESS 57
#define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF
#if _MSC_VER >= 1610
(
);
#pragma intrinsic(__fastfail)
#endif
#define HEAP_NO_SERIALIZE 0x00000001
#define HEAP_GROWABLE 0x00000002
#define HEAP_GENERATE_EXCEPTIONS 0x00000004
#define HEAP_ZERO_MEMORY 0x00000008
#define HEAP_REALLOC_IN_PLACE_ONLY 0x00000010
#define HEAP_TAIL_CHECKING_ENABLED 0x00000020
#define HEAP_FREE_CHECKING_ENABLED 0x00000040
#define HEAP_DISABLE_COALESCE_ON_FREE 0x00000080
#define HEAP_CREATE_ALIGN_16 0x00010000
#define HEAP_CREATE_ENABLE_TRACING 0x00020000
#define HEAP_CREATE_ENABLE_EXECUTE 0x00040000
#define HEAP_MAXIMUM_TAG 0x0FFF
#define HEAP_PSEUDO_TAG_FLAG 0x8000
#define HEAP_TAG_SHIFT 18
#define HEAP_CREATE_SEGMENT_HEAP 0x00000100
#define HEAP_CREATE_HARDENED 0x00000200
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#if !defined(MIDL_PASS)
(
)
{
return ((DWORD)((TagBase) + ((Tag) << HEAP_TAG_SHIFT)));
return
((
)((
) + ((
) <<
18
)));
}
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#define IS_TEXT_UNICODE_ASCII16 0x0001
#define IS_TEXT_UNICODE_REVERSE_ASCII16 0x0010
#define IS_TEXT_UNICODE_STATISTICS 0x0002
#define IS_TEXT_UNICODE_REVERSE_STATISTICS 0x0020
#define IS_TEXT_UNICODE_CONTROLS 0x0004
#define IS_TEXT_UNICODE_REVERSE_CONTROLS 0x0040
#define IS_TEXT_UNICODE_SIGNATURE 0x0008
#define IS_TEXT_UNICODE_REVERSE_SIGNATURE 0x0080
#define IS_TEXT_UNICODE_ILLEGAL_CHARS 0x0100
#define IS_TEXT_UNICODE_ODD_LENGTH 0x0200
#define IS_TEXT_UNICODE_DBCS_LEADBYTE 0x0400
#define IS_TEXT_UNICODE_NULL_BYTES 0x1000
#define IS_TEXT_UNICODE_UNICODE_MASK 0x000F
#define IS_TEXT_UNICODE_REVERSE_MASK 0x00F0
#define IS_TEXT_UNICODE_NOT_UNICODE_MASK 0x0F00
#define IS_TEXT_UNICODE_NOT_ASCII_MASK 0xF000
#define COMPRESSION_FORMAT_NONE (0x0000)
#define COMPRESSION_FORMAT_DEFAULT (0x0001)
#define COMPRESSION_FORMAT_LZNT1 (0x0002)
#define COMPRESSION_FORMAT_XPRESS (0x0003)
#define COMPRESSION_FORMAT_XPRESS_HUFF (0x0004)
#define COMPRESSION_ENGINE_STANDARD (0x0000)
#define COMPRESSION_ENGINE_MAXIMUM (0x0100)
#define COMPRESSION_ENGINE_HIBER (0x0200)
#if defined(_DBG_MEMCPY_INLINE_) && !defined(MIDL_PASS) && !defined(_MEMCPY_INLINE_) && !defined(_CRTBLD)
#define _MEMCPY_INLINE_
FORCEINLINE
PVOID
__cdecl
memcpy_inline (
_Out_writes_bytes_all_(size) void *dst,
_In_reads_bytes_(size) const void *src,
_In_ size_t size
)
{
//
// Make sure the source and destination do not overlap such that the
// move destroys the destination.
//
if (((char *)dst > (char *)src) &&
((char *)dst < ((char *)src + size))) {
__debugbreak();
}
return memcpy(dst, src, size);
}
#define memcpy memcpy_inline
#endif
#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
#if !defined(MIDL_PASS)
(
_Out_writes_bytes_all_(cnt) PVOID ptr,
)
{
volatile
char
*
= (
volatile
char
*)
;
#if defined(_M_AMD64)
__stosb((PBYTE )((DWORD64)vptr), 0, cnt);
#else
while
(
) {
#if !defined(_M_CEE) && (defined(_M_ARM) || defined(_M_ARM64))
__iso_volatile_store8(vptr, 0);
#else
*
vptr
=
0
;
#endif
vptr
++;
--;
}
#endif // _M_AMD64
return
;
}
#endif
#define SEF_DACL_AUTO_INHERIT 0x01
#define SEF_SACL_AUTO_INHERIT 0x02
#define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
#define SEF_AVOID_PRIVILEGE_CHECK 0x08
#define SEF_AVOID_OWNER_CHECK 0x10
#define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
#define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
#define SEF_MACL_NO_WRITE_UP 0x100
#define SEF_MACL_NO_READ_UP 0x200
#define SEF_MACL_NO_EXECUTE_UP 0x400
#define SEF_AI_USE_EXTRA_PARAMS 0x800
#define SEF_AVOID_OWNER_RESTRICTION 0x1000
#define SEF_FORCE_USER_MODE 0x2000
#define SEF_MACL_VALID_FLAGS (SEF_MACL_NO_WRITE_UP | \
SEF_MACL_NO_READ_UP | \
SEF_MACL_NO_EXECUTE_UP)
typedef
struct
{
;
;
[
1
];
}
, *
;
#define MESSAGE_RESOURCE_UNICODE 0x0001
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
[
1
];
}
, *
;
typedef
struct
{
;
;
;
;
;
[
128
];
}
, *
, *
;
typedef
struct
{
;
;
;
;
;
[
128
];
}
, *
, *
,
, *
;
#ifdef UNICODE
typedef
;
typedef
;
typedef
;
#else
typedef OSVERSIONINFOA OSVERSIONINFO;
typedef POSVERSIONINFOA POSVERSIONINFO;
typedef LPOSVERSIONINFOA LPOSVERSIONINFO;
#endif // UNICODE
typedef
struct
{
;
;
;
;
;
[
128
];
;
;
;
;
;
}
, *
, *
;
typedef
struct
{
;
;
;
;
;
[
128
];
;
;
;
;
;
}
, *
, *
,
, *
;
#ifdef UNICODE
typedef
;
typedef
;
typedef
;
#else
typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
#endif // UNICODE
#define VER_EQUAL 1
#define VER_GREATER 2
#define VER_GREATER_EQUAL 3
#define VER_LESS 4
#define VER_LESS_EQUAL 5
#define VER_AND 6
#define VER_OR 7
#define VER_CONDITION_MASK 7
#define VER_NUM_BITS_PER_CONDITION_MASK 3
#define VER_MINORVERSION 0x0000001
#define VER_MAJORVERSION 0x0000002
#define VER_BUILDNUMBER 0x0000004
#define VER_PLATFORMID 0x0000008
#define VER_SERVICEPACKMINOR 0x0000010
#define VER_SERVICEPACKMAJOR 0x0000020
#define VER_SUITENAME 0x0000040
#define VER_PRODUCT_TYPE 0x0000080
#define VER_NT_WORKSTATION 0x0000001
#define VER_NT_DOMAIN_CONTROLLER 0x0000002
#define VER_NT_SERVER 0x0000003
#define VER_PLATFORM_WIN32s 0
#define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#define VER_SET_CONDITION(_m_,_t_,_c_) \
((_m_)=VerSetConditionMask((_m_),(_t_),(_c_)))
#if !defined(_WINBASE_) && !defined(MIDL_PASS)
#if (NTDDI_VERSION >= NTDDI_WIN2K)
(
_In_ ULONGLONG ConditionMask,
);
#endif
#endif // !defined(_WINBASE_) && !defined(MIDL_PASS)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION >= NTDDI_VISTA)
(
_In_ DWORD OSMajorVersion,
_In_ DWORD OSMinorVersion,
_In_ DWORD SpMajorVersion,
_In_ DWORD SpMinorVersion,
_Out_ PDWORD ReturnedProductType
);
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#define RTL_UMS_VERSION (0x0100)
typedef
enum
_RTL_UMS_THREAD_INFO_CLASS
{
UmsThreadInvalidInfoClass
=
0
,
,
,
,
,
,
,
}
RTL_UMS_THREAD_INFO_CLASS
, *
PRTL_UMS_THREAD_INFO_CLASS
;
typedef
enum
_RTL_UMS_SCHEDULER_REASON
{
=
0
,
UmsSchedulerThreadBlocked
,
,
}
, *
PRTL_UMS_SCHEDULER_REASON
;
typedef
_Function_class_(RTL_UMS_SCHEDULER_ENTRY_POINT)
RTL_UMS_SCHEDULER_ENTRY_POINT
(
_In_ RTL_UMS_SCHEDULER_REASON Reason,
_In_ ULONG_PTR ActivationPayload,
_In_ PVOID SchedulerParam
);
typedef
RTL_UMS_SCHEDULER_ENTRY_POINT
*
PRTL_UMS_SCHEDULER_ENTRY_POINT
;
#if !defined(IS_VALIDATION_ENABLED)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define IS_VALIDATION_ENABLED(C,L) ((L) & (C))
#define VRL_PREDEFINED_CLASS_BEGIN (1 << 0)
#define VRL_CUSTOM_CLASS_BEGIN (1 << 8)
#define VRL_CLASS_CONSISTENCY (VRL_PREDEFINED_CLASS_BEGIN << 0)
#define VRL_ENABLE_KERNEL_BREAKS (1 << 31)
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#endif // !defined(IS_VALIDATION_ENABLED)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#define CTMF_INCLUDE_APPCONTAINER 0x00000001UL
#define CTMF_INCLUDE_LPAC 0x00000002UL
#define CTMF_VALID_FLAGS (CTMF_INCLUDE_APPCONTAINER | CTMF_INCLUDE_LPAC)
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#if (NTDDI_VERSION >= NTDDI_WIN8)
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
(
_In_reads_bytes_(Size) const void *Buffer,
);
(
_In_reads_bytes_(Size) const void *Buffer,
_In_ ULONGLONG InitialCrc
);
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // (NTDDI_VERSION >= NTDDI_WIN8)
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
typedef
enum
_OS_DEPLOYEMENT_STATE_VALUES
{
=
1
,
}
OS_DEPLOYEMENT_STATE_VALUES
;
OS_DEPLOYEMENT_STATE_VALUES
(
_In_ DWORD Flags /* No flags currently defined, passed 0 */
);
#endif // NTDDI_VERSION >= NTDDI_WINTHRESHOLD
#if (NTDDI_VERSION >= NTDDI_WIN10_RS2)
typedef
struct
{
;
}
, *
;
#define FLUSH_NV_MEMORY_IN_FLAG_NO_DRAIN (0x00000001)
#define FLUSH_NV_MEMORY_DEFAULT_TOKEN (ULONG_PTR)(-1)
#define WRITE_NV_MEMORY_FLAG_FLUSH (0x00000001)
#define WRITE_NV_MEMORY_FLAG_NON_TEMPORAL (0x00000002)
#define WRITE_NV_MEMORY_FLAG_PERSIST (WRITE_NV_MEMORY_FLAG_FLUSH \
| WRITE_NV_MEMORY_FLAG_NON_TEMPORAL)
#define WRITE_NV_MEMORY_FLAG_NO_DRAIN (0x00000100)
#if defined(_WIN64)
_IRQL_requires_max_(APC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlGetNonVolatileToken (
_In_reads_bytes_(Size) PVOID NvBuffer,
_In_ SIZE_T Size,
_Outptr_ PVOID *NvToken
);
_IRQL_requires_max_(DPC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlFreeNonVolatileToken (
_In_ PVOID NvToken
);
_IRQL_requires_max_(DPC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlFlushNonVolatileMemory (
_In_ PVOID NvToken,
_In_reads_bytes_(Size) PVOID NvBuffer,
_In_ SIZE_T Size,
_In_ DWORD Flags
);
_IRQL_requires_max_(DPC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlDrainNonVolatileFlush (
_In_ PVOID NvToken
);
_IRQL_requires_max_(DPC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlWriteNonVolatileMemory (
_In_ PVOID NvToken,
_Out_writes_bytes_(Size) VOID UNALIGNED *NvDestination,
_In_reads_bytes_(Size) CONST VOID UNALIGNED *Source,
_In_ SIZE_T Size,
_In_ DWORD Flags
);
_IRQL_requires_max_(DPC_LEVEL)
NTSYSAPI
DWORD
NTAPI
RtlFlushNonVolatileMemoryRanges (
_In_ PVOID NvToken,
_In_reads_(NumRanges) PNV_MEMORY_RANGE NvRanges,
_In_ SIZE_T NumRanges,
_In_ DWORD Flags
);
#else // defined(_WIN64)
#define RtlGetNonVolatileToken() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#define RtlFreeNonVolatileToken() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#define RtlFlushNonVolatileMemory() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#define RtlDrainNonVolatileFlush() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#define RtlWriteNonVolatileMemory() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#define RtlFlushNonVolatileMemoryRanges() \
(ASSERT(!"Call not expected in 32-bit architecture"), STATUS_NOT_IMPLEMENTED)
#endif // defined(_WIN64)
#endif // (NTDDI_VERSION >= NTDDI_RS2)
#if (NTDDI_VERSION >= NTDDI_WIN10_RS2)
#define RTL_CORRELATION_VECTOR_STRING_LENGTH 129
#define RTL_CORRELATION_VECTOR_VERSION_1 ((CHAR)1)
#define RTL_CORRELATION_VECTOR_VERSION_2 ((CHAR)2)
#define RTL_CORRELATION_VECTOR_VERSION_CURRENT RTL_CORRELATION_VECTOR_VERSION_2
#define RTL_CORRELATION_VECTOR_V1_PREFIX_LENGTH (16)
#define RTL_CORRELATION_VECTOR_V1_LENGTH (64)
#define RTL_CORRELATION_VECTOR_V2_PREFIX_LENGTH (22)
#define RTL_CORRELATION_VECTOR_V2_LENGTH (128)
typedef
struct
{
;
CHAR Vector[RTL_CORRELATION_VECTOR_STRING_LENGTH];
}
;
typedef
*
;
#define TraceLoggingCORRELATION_VECTOR(cv) TraceLoggingString((cv).Vector, "__TlgCV__")
RtlInitializeCorrelationVector
(
_Out_ PCORRELATION_VECTOR CorrelationVector,
_In_opt_ const GUID * Guid
);
RtlIncrementCorrelationVector
(
_Inout_ PCORRELATION_VECTOR CorrelationVector
);
RtlExtendCorrelationVector
(
_Inout_ PCORRELATION_VECTOR CorrelationVector
);
RtlValidateCorrelationVector
(
_In_ PCORRELATION_VECTOR Vector
);
#endif // NTDDI_VERSION >= NTDDI_RS2
#if (NTDDI_VERSION >= NTDDI_WIN10_RS4)
typedef
struct
_CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
{
;
;
}
CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
, *
PCUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
;
#if !defined(MIDL_PASS)
CUSTOM_SYSTEM_EVENT_TRIGGER_INIT
(
_Out_ PCUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG Config,
PCUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
,
_In_opt_ PCWSTR TriggerId
)
{
RtlZeroMemory(Config, sizeof(CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG));
((
),
0
,(
sizeof
(
CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
)));
->
=
sizeof
(
CUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
);
->
=
;
}
#endif // !defined(MIDL_PASS)
_Must_inspect_result_
_IRQL_requires_max_(PASSIVE_LEVEL)
RtlRaiseCustomSystemEventTrigger
(
_In_ PCUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG TriggerConfig
PCUSTOM_SYSTEM_EVENT_TRIGGER_CONFIG
);
#endif // NTDDI_VERSION >= NTDDI_WIN10_RS4
#define IMAGE_POLICY_METADATA_VERSION 1
#define IMAGE_POLICY_SECTION_NAME ".tPolicy"
#define IMAGE_POLICY_METADATA_NAME __ImagePolicyMetadata
typedef
enum
{
=
0
,
,
,
ImagePolicyEntryTypeUInt8
,
ImagePolicyEntryTypeInt16
,
ImagePolicyEntryTypeUInt16
,
ImagePolicyEntryTypeInt32
,
ImagePolicyEntryTypeUInt32
,
ImagePolicyEntryTypeInt64
,
ImagePolicyEntryTypeUInt64
,
ImagePolicyEntryTypeAnsiString
,
ImagePolicyEntryTypeUnicodeString
,
ImagePolicyEntryTypeOverride
,
ImagePolicyEntryTypeMaximum
}
;
typedef
enum
{
=
0
,
,
,
,
ImagePolicyIdCrashDumpKey
,
ImagePolicyIdCrashDumpKeyGuid
,
,
,
,
,
,
,
}
;
typedef
struct
{
;
;
union
{
;
;
;
;
;
;
;
;
;
;
;
}
;
}
;
typedef
const
*
;
#pragma warning(push)
#pragma warning(disable:4200) // zero-sized array in struct/union
#pragma warning(disable:
4200
)
typedef
struct
{
;
[
7
];
;
[];
}
;
typedef
const
*
;
#pragma warning(pop)
#define IMAGE_POLICY_START(_ApplicationId_) \
__pragma(const_seg(push, IMAGE_POLICY_SECTION_NAME)); \
EXTERN_C __declspec(dllexport) const \
IMAGE_POLICY_METADATA IMAGE_POLICY_METADATA_NAME = { \
IMAGE_POLICY_METADATA_VERSION, \
{0}, \
_ApplicationId_, \
{
#define IMAGE_POLICY_END() \
{ImagePolicyEntryTypeNone, ImagePolicyIdNone, NULL} \
} \
}; \
__pragma(const_seg(pop))
#define IMAGE_POLICY_BOOL(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeBool, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_INT8(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeInt8, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_UINT8(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeUInt8, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_INT16(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeInt16, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_UINT16(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeUInt16, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_INT32(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeInt32, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_UINT32(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeUInt32, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_INT64(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeInt64, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_UINT64(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeUInt64, _PolicyId_, (const VOID*)_Value_},
#define IMAGE_POLICY_ANSI_STRING(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeAnsiString, _PolicyId_, _Value_},
#define IMAGE_POLICY_UNICODE_STRING(_PolicyId_, _Value_) \
{ImagePolicyEntryTypeUnicodeString, _PolicyId_, _Value_},
#define IMAGE_POLICY_OVERRIDE(_PolicyId_) \
{ImagePolicyEntryTypeOverride, _PolicyId_, 0},
typedef
struct
_RTL_CRITICAL_SECTION_DEBUG
{
;
;
struct
*
;
;
;
;
;
CreatorBackTraceIndexHigh
;
;
}
RTL_CRITICAL_SECTION_DEBUG
, *
PRTL_CRITICAL_SECTION_DEBUG
,
, *
;
#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000
#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000
#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000
#define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000
#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
#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)))
#define RTL_CRITICAL_SECTION_DEBUG_FLAG_STATIC_INIT 0x00000001
#pragma pack(push,
8
)
typedef
struct
{
PRTL_CRITICAL_SECTION_DEBUG
;
;
;
;
;
;
}
, *
;
#pragma pack(pop)
typedef
struct
{
;
}
, *
;
#define RTL_SRWLOCK_INIT {0}
typedef
struct
{
;
}
, *
;
#define RTL_CONDITION_VARIABLE_INIT {0}
#define RTL_CONDITION_VARIABLE_LOCKMODE_SHARED 0x1
typedef
);
typedef LONG (NTAPI *PVECTORED_EXCEPTION_HANDLER)(
typedef
(
__stdcall
*
PVECTORED_EXCEPTION_HANDLER
)(
struct
*ExceptionInfo
);
typedef
enum
{
=
0
,
=
1
#if ((NTDDI_VERSION > NTDDI_WINBLUE) || \
(NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14)))
,
,
HeapOptimizeResources = 3
#endif
}
;
#if ((NTDDI_VERSION > NTDDI_WINBLUE) || \
(NTDDI_VERSION == NTDDI_WINBLUE && defined(WINBLUE_KBSPRING14)))
#define HEAP_OPTIMIZE_RESOURCES_CURRENT_VERSION 1
typedef struct _HEAP_OPTIMIZE_RESOURCES_INFORMATION {
} HEAP_OPTIMIZE_RESOURCES_INFORMATION, *PHEAP_OPTIMIZE_RESOURCES_INFORMATION;
#endif
#define WT_EXECUTEDEFAULT 0x00000000
#define WT_EXECUTEINIOTHREAD 0x00000001
#define WT_EXECUTEINUITHREAD 0x00000002
#define WT_EXECUTEINWAITTHREAD 0x00000004
#define WT_EXECUTEONLYONCE 0x00000008
#define WT_EXECUTEINTIMERTHREAD 0x00000020
#define WT_EXECUTELONGFUNCTION 0x00000010
#define WT_EXECUTEINPERSISTENTIOTHREAD 0x00000040
#define WT_EXECUTEINPERSISTENTTHREAD 0x00000080
#define WT_TRANSFER_IMPERSONATION 0x00000100
#define WT_SET_MAX_THREADPOOL_THREADS(Flags, Limit) ((Flags) |= (Limit)<<16)
typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
typedef
void
(
__stdcall
*
) (
,
);
typedef VOID (NTAPI * WORKERCALLBACKFUNC) (PVOID );
typedef
void
(
__stdcall
*
) (
);
typedef VOID (NTAPI * APC_CALLBACK_FUNCTION) (DWORD , PVOID, PVOID);
typedef
void
(
__stdcall
*
) (
,
,
);
typedef
;
typedef
(NTAPI *PFLS_CALLBACK_FUNCTION) (
);
typedef
(NTAPI *PSECURE_MEMORY_CACHE_CALLBACK) (
(
__stdcall
*
PSECURE_MEMORY_CACHE_CALLBACK
) (
_In_reads_bytes_(Range) PVOID Addr,
);
#define WT_EXECUTEINLONGTHREAD 0x00000010
#define WT_EXECUTEDELETEWAIT 0x00000008
typedef
enum
_ACTIVATION_CONTEXT_INFO_CLASS
{
ActivationContextBasicInformation
=
1
,
ActivationContextDetailedInformation
=
2
,
AssemblyDetailedInformationInActivationContext
=
3
,
FileInformationInAssemblyOfAssemblyInActivationContext
=
4
,
RunlevelInformationInActivationContext
=
5
,
CompatibilityInformationInActivationContext
=
6
,
ActivationContextManifestResourceName
=
7
,
MaxActivationContextInfoClass
,
AssemblyDetailedInformationInActivationContxt
=
3
,
FileInformationInAssemblyOfAssemblyInActivationContxt
=
4
}
ACTIVATION_CONTEXT_INFO_CLASS
;
#define ACTIVATIONCONTEXTINFOCLASS ACTIVATION_CONTEXT_INFO_CLASS
typedef
struct
_ACTIVATION_CONTEXT_QUERY_INDEX
{
;
;
}
ACTIVATION_CONTEXT_QUERY_INDEX
, *
PACTIVATION_CONTEXT_QUERY_INDEX
;
typedef
const
struct
_ACTIVATION_CONTEXT_QUERY_INDEX
*
PCACTIVATION_CONTEXT_QUERY_INDEX
;
#define ACTIVATION_CONTEXT_PATH_TYPE_NONE (1)
#define ACTIVATION_CONTEXT_PATH_TYPE_WIN32_FILE (2)
#define ACTIVATION_CONTEXT_PATH_TYPE_URL (3)
#define ACTIVATION_CONTEXT_PATH_TYPE_ASSEMBLYREF (4)
typedef
struct
{
;
;
;
;
;
}
, *
;
typedef
const
ASSEMBLY_FILE_DETAILED_INFORMATION
*
;
#define _ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION _ASSEMBLY_FILE_DETAILED_INFORMATION
#define ASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION ASSEMBLY_FILE_DETAILED_INFORMATION
#define PASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PASSEMBLY_FILE_DETAILED_INFORMATION
#define PCASSEMBLY_DLL_REDIRECTION_DETAILED_INFORMATION PCASSEMBLY_FILE_DETAILED_INFORMATION
typedef
struct
_ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
{
;
ulEncodedAssemblyIdentityLength
;
;
;
;
;
;
;
ulMetadataSatelliteRosterIndex
;
;
;
;
;
ulAssemblyDirectoryNameLength
;
lpAssemblyEncodedAssemblyIdentity
;
;
;
;
;
}
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
, *
PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
typedef
const
struct
_ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
*
PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION
;
typedef
enum
{
ACTCTX_RUN_LEVEL_UNSPECIFIED
=
0
,
ACTCTX_RUN_LEVEL_AS_INVOKER
,
ACTCTX_RUN_LEVEL_HIGHEST_AVAILABLE
,
ACTCTX_RUN_LEVEL_REQUIRE_ADMIN
,
}
ACTCTX_REQUESTED_RUN_LEVEL
;
typedef
struct
_ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
{
;
ACTCTX_REQUESTED_RUN_LEVEL
;
;
}
ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
, *
PACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
typedef
const
struct
_ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
*
PCACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION
;
typedef
enum
{
ACTCTX_COMPATIBILITY_ELEMENT_TYPE_UNKNOWN
=
0
,
ACTCTX_COMPATIBILITY_ELEMENT_TYPE_OS
,
ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
}
ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
typedef
struct
_COMPATIBILITY_CONTEXT_ELEMENT
{
;
ACTCTX_COMPATIBILITY_ELEMENT_TYPE
;
}
COMPATIBILITY_CONTEXT_ELEMENT
, *
PCOMPATIBILITY_CONTEXT_ELEMENT
;
typedef
const
struct
_COMPATIBILITY_CONTEXT_ELEMENT
*
PCCOMPATIBILITY_CONTEXT_ELEMENT
;
#ifdef _MSC_EXTENSIONS
#if _MSC_VER >= 1200
#pragma warning(push)
#pragma warning(disable:4200) // zero length array
#endif
#pragma warning(disable:
4200
)
typedef
struct
_ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
{
;
COMPATIBILITY_CONTEXT_ELEMENT
[];
}
ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
, *
PACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
typedef
const
struct
_ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
*
PCACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION
;
#endif
typedef
struct
{
;
;
}
, *
;
typedef
struct
_ACTIVATION_CONTEXT_DETAILED_INFORMATION
{
;
;
;
;
;
ulRootConfigurationPathType
;
ulRootConfigurationPathChars
;
;
;
;
;
;
}
ACTIVATION_CONTEXT_DETAILED_INFORMATION
, *
PACTIVATION_CONTEXT_DETAILED_INFORMATION
;
typedef
const
struct
_ACTIVATION_CONTEXT_DETAILED_INFORMATION
*
PCACTIVATION_CONTEXT_DETAILED_INFORMATION
;
#define CREATE_BOUNDARY_DESCRIPTOR_ADD_APPCONTAINER_SID 0x1
typedef
struct
{
;
;
;
}
, *
;
#define PERFORMANCE_DATA_VERSION 1
typedef
struct
{
;
;
;
;
;
;
;
;
HARDWARE_COUNTER_DATA HwCounters[MAX_HW_COUNTERS];
}
, *
;
#define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x00000001
#define READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS 0x00000002
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#define UNIFIEDBUILDREVISION_KEY L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion"
#define UNIFIEDBUILDREVISION_VALUE L"UBR"
#define UNIFIEDBUILDREVISION_MIN 0x00000000
#define DEVICEFAMILYDEVICEFORM_KEY L"\\Registry\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\OEM"
#define DEVICEFAMILYDEVICEFORM_VALUE L"DeviceForm"
#define DEVICEFAMILYINFOENUM_UAP 0x00000000
#define DEVICEFAMILYINFOENUM_WINDOWS_8X 0x00000001
#define DEVICEFAMILYINFOENUM_WINDOWS_PHONE_8X 0x00000002
#define DEVICEFAMILYINFOENUM_DESKTOP 0x00000003
#define DEVICEFAMILYINFOENUM_MOBILE 0x00000004
#define DEVICEFAMILYINFOENUM_XBOX 0x00000005
#define DEVICEFAMILYINFOENUM_TEAM 0x00000006
#define DEVICEFAMILYINFOENUM_IOT 0x00000007
#define DEVICEFAMILYINFOENUM_IOT_HEADLESS 0x00000008
#define DEVICEFAMILYINFOENUM_SERVER 0x00000009
#define DEVICEFAMILYINFOENUM_HOLOGRAPHIC 0x0000000A
#define DEVICEFAMILYINFOENUM_XBOXSRA 0x0000000B
#define DEVICEFAMILYINFOENUM_XBOXERA 0x0000000C
#define DEVICEFAMILYINFOENUM_SERVER_NANO 0x0000000D
#define DEVICEFAMILYINFOENUM_8828080 0x0000000E
#define DEVICEFAMILYINFOENUM_7067329 0x0000000F
#define DEVICEFAMILYINFOENUM_WINDOWS_CORE 0x00000010
#define DEVICEFAMILYINFOENUM_MAX 0x00000010
#define DEVICEFAMILYDEVICEFORM_UNKNOWN 0x00000000
#define DEVICEFAMILYDEVICEFORM_PHONE 0x00000001
#define DEVICEFAMILYDEVICEFORM_TABLET 0x00000002
#define DEVICEFAMILYDEVICEFORM_DESKTOP 0x00000003
#define DEVICEFAMILYDEVICEFORM_NOTEBOOK 0x00000004
#define DEVICEFAMILYDEVICEFORM_CONVERTIBLE 0x00000005
#define DEVICEFAMILYDEVICEFORM_DETACHABLE 0x00000006
#define DEVICEFAMILYDEVICEFORM_ALLINONE 0x00000007
#define DEVICEFAMILYDEVICEFORM_STICKPC 0x00000008
#define DEVICEFAMILYDEVICEFORM_PUCK 0x00000009
#define DEVICEFAMILYDEVICEFORM_LARGESCREEN 0x0000000A
#define DEVICEFAMILYDEVICEFORM_HMD 0x0000000B
#define DEVICEFAMILYDEVICEFORM_INDUSTRY_HANDHELD 0x0000000C
#define DEVICEFAMILYDEVICEFORM_INDUSTRY_TABLET 0x0000000D
#define DEVICEFAMILYDEVICEFORM_BANKING 0x0000000E
#define DEVICEFAMILYDEVICEFORM_BUILDING_AUTOMATION 0x0000000F
#define DEVICEFAMILYDEVICEFORM_DIGITAL_SIGNAGE 0x00000010
#define DEVICEFAMILYDEVICEFORM_GAMING 0x00000011
#define DEVICEFAMILYDEVICEFORM_HOME_AUTOMATION 0x00000012
#define DEVICEFAMILYDEVICEFORM_INDUSTRIAL_AUTOMATION 0x00000013
#define DEVICEFAMILYDEVICEFORM_KIOSK 0x00000014
#define DEVICEFAMILYDEVICEFORM_MAKER_BOARD 0x00000015
#define DEVICEFAMILYDEVICEFORM_MEDICAL 0x00000016
#define DEVICEFAMILYDEVICEFORM_NETWORKING 0x00000017
#define DEVICEFAMILYDEVICEFORM_POINT_OF_SERVICE 0x00000018
#define DEVICEFAMILYDEVICEFORM_PRINTING 0x00000019
#define DEVICEFAMILYDEVICEFORM_THIN_CLIENT 0x0000001A
#define DEVICEFAMILYDEVICEFORM_TOY 0x0000001B
#define DEVICEFAMILYDEVICEFORM_VENDING 0x0000001C
#define DEVICEFAMILYDEVICEFORM_INDUSTRY_OTHER 0x0000001D
#define DEVICEFAMILYDEVICEFORM_XBOX_ONE 0x0000001E
#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_S 0x0000001F
#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X 0x00000020
#define DEVICEFAMILYDEVICEFORM_XBOX_ONE_X_DEVKIT 0x00000021
#define DEVICEFAMILYDEVICEFORM_MAX 0x00000021
RtlGetDeviceFamilyInfoEnum
(
_Out_opt_ ULONGLONG *pullUAPInfo,
_Out_opt_ DWORD *pulDeviceFamily,
_Out_opt_ DWORD *pulDeviceForm
);
RtlConvertDeviceFamilyInfoToString
(
_Inout_ PDWORD pulDeviceFamilyBufferSize,
pulDeviceFamilyBufferSize
,
_Inout_ PDWORD pulDeviceFormBufferSize,
_Out_writes_bytes_(*pulDeviceFamilyBufferSize) PWSTR DeviceFamily,
_Out_writes_bytes_(*pulDeviceFormBufferSize) PWSTR DeviceForm
);
(
_In_ PRTL_OSVERSIONINFOEXW VersionInfo,
_In_ ULONGLONG ConditionMask
);
#endif // (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#pragma endregion
#define DLL_PROCESS_ATTACH 1
#define DLL_THREAD_ATTACH 2
#define DLL_THREAD_DETACH 3
#define DLL_PROCESS_DETACH 0
#define EVENTLOG_SEQUENTIAL_READ 0x0001
#define EVENTLOG_SEEK_READ 0x0002
#define EVENTLOG_FORWARDS_READ 0x0004
#define EVENTLOG_BACKWARDS_READ 0x0008
#define EVENTLOG_SUCCESS 0x0000
#define EVENTLOG_ERROR_TYPE 0x0001
#define EVENTLOG_WARNING_TYPE 0x0002
#define EVENTLOG_INFORMATION_TYPE 0x0004
#define EVENTLOG_AUDIT_SUCCESS 0x0008
#define EVENTLOG_AUDIT_FAILURE 0x0010
#define EVENTLOG_START_PAIRED_EVENT 0x0001
#define EVENTLOG_END_PAIRED_EVENT 0x0002
#define EVENTLOG_END_ALL_PAIRED_EVENTS 0x0004
#define EVENTLOG_PAIRED_EVENT_ACTIVE 0x0008
#define EVENTLOG_PAIRED_EVENT_INACTIVE 0x0010
typedef
struct
{
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
}
, *
;
#define MAXLOGICALLOGNAMESIZE 256
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable : 4200) /* nonstandard extension used : zero-sized array in struct/union */
#pragma warning(disable :
4200
)
struct
;
typedef
struct
, *
;
struct
;
typedef
struct
, *
;
#if defined(_MSC_EXTENSIONS)
struct
{
;
WCHAR szLogicalLogFile[MAXLOGICALLOGNAMESIZE]; //name of the logical file-security/application/system
;
[];
};
struct
{
;
;
[];
};
#endif
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning(default : 4200) /* nonstandard extension used : zero-sized array in struct/union */
#endif
#define KEY_QUERY_VALUE (0x0001)
#define KEY_SET_VALUE (0x0002)
#define KEY_CREATE_SUB_KEY (0x0004)
#define KEY_ENUMERATE_SUB_KEYS (0x0008)
#define KEY_NOTIFY (0x0010)
#define KEY_CREATE_LINK (0x0020)
#define KEY_WOW64_32KEY (0x0200)
#define KEY_WOW64_64KEY (0x0100)
#define KEY_WOW64_RES (0x0300)
#define KEY_READ ((STANDARD_RIGHTS_READ |\
KEY_QUERY_VALUE |\
KEY_ENUMERATE_SUB_KEYS |\
KEY_NOTIFY) \
& \
(~SYNCHRONIZE))
#define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
KEY_SET_VALUE |\
KEY_CREATE_SUB_KEY) \
& \
(~SYNCHRONIZE))
#define KEY_EXECUTE ((KEY_READ) \
& \
(~SYNCHRONIZE))
#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))
#define REG_OPTION_RESERVED (0x00000000L) // Parameter is reserved
#define REG_OPTION_NON_VOLATILE (0x00000000L) // Key is preserved
#define REG_OPTION_VOLATILE (0x00000001L) // Key is not preserved
#define REG_OPTION_CREATE_LINK (0x00000002L) // Created key is a
#define REG_OPTION_BACKUP_RESTORE (0x00000004L) // open for backup or restore
#define REG_OPTION_OPEN_LINK (0x00000008L) // Open symbolic link
#define REG_OPTION_DONT_VIRTUALIZE (0x00000010L) // Disable Open/Read/Write
#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 |\
REG_OPTION_DONT_VIRTUALIZE)
#define REG_OPEN_LEGAL_OPTION \
(REG_OPTION_RESERVED |\
REG_OPTION_BACKUP_RESTORE |\
REG_OPTION_OPEN_LINK |\
REG_OPTION_DONT_VIRTUALIZE)
#define REG_CREATED_NEW_KEY (0x00000001L) // New Registry Key created
#define REG_OPENED_EXISTING_KEY (0x00000002L) // Existing Key opened
#define REG_STANDARD_FORMAT 1
#define REG_LATEST_FORMAT 2
#define REG_NO_COMPRESSION 4
#define REG_WHOLE_HIVE_VOLATILE (0x00000001L) // Restore whole hive volatile
#define REG_REFRESH_HIVE (0x00000002L) // Unwind changes to last flush
#define REG_NO_LAZY_FLUSH (0x00000004L) // Never lazy flush this hive
#define REG_FORCE_RESTORE (0x00000008L) // Force the restore process even when we have open handles on subkeys
#define REG_APP_HIVE (0x00000010L) // Loads the hive visible to the calling process
#define REG_PROCESS_PRIVATE (0x00000020L) // Hive cannot be mounted by any other process while in use
#define REG_START_JOURNAL (0x00000040L) // Starts Hive Journal
#define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) // Grow hive file in exact 4k increments
#define REG_HIVE_NO_RM (0x00000100L) // No RM is started for this hive (no transactions)
#define REG_HIVE_SINGLE_LOG (0x00000200L) // Legacy single logging is used for this hive
#define REG_BOOT_HIVE (0x00000400L) // This hive might be used by the OS loader
#define REG_LOAD_HIVE_OPEN_HANDLE (0x00000800L) // Load the hive and return a handle to its root kcb
#define REG_FLUSH_HIVE_FILE_GROWTH (0x00001000L) // Flush changes to primary hive file size as part of all flushes
#define REG_OPEN_READ_ONLY (0x00002000L) // Open a hive's files in read-only mode
#define REG_IMMUTABLE (0x00004000L) // Load the hive, but don't allow any modification of it
#define REG_APP_HIVE_OPEN_READ_ONLY (REG_OPEN_READ_ONLY) // Open an app hive's files in read-only mode (if the hive was not previously loaded)
#define REG_FORCE_UNLOAD 1
#define REG_UNLOAD_LEGAL_FLAGS (REG_FORCE_UNLOAD)
#define REG_NOTIFY_CHANGE_NAME (0x00000001L) // Create or delete (child)
#define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
#define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L) // time stamp
#define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
#define REG_NOTIFY_THREAD_AGNOSTIC (0x10000000L) // Not associated with a calling thread, can only be used
#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)
#define REG_NONE ( 0ul ) // No value type
#define REG_SZ ( 1ul ) // Unicode nul terminated string
#define REG_EXPAND_SZ ( 2ul ) // Unicode nul terminated string
#define REG_BINARY ( 3ul ) // Free form binary
#define REG_DWORD ( 4ul ) // 32-bit number
#define REG_DWORD_LITTLE_ENDIAN ( 4ul ) // 32-bit number (same as REG_DWORD)
#define REG_DWORD_BIG_ENDIAN ( 5ul ) // 32-bit number
#define REG_LINK ( 6ul ) // Symbolic Link (unicode)
#define REG_MULTI_SZ ( 7ul ) // Multiple Unicode strings
#define REG_RESOURCE_LIST ( 8ul ) // Resource list in the resource map
#define REG_FULL_RESOURCE_DESCRIPTOR ( 9ul ) // Resource list in the hardware description
#define REG_RESOURCE_REQUIREMENTS_LIST ( 10ul )
#define REG_QWORD ( 11ul ) // 64-bit number
#define REG_QWORD_LITTLE_ENDIAN ( 11ul ) // 64-bit number (same as REG_QWORD)
#define SERVICE_KERNEL_DRIVER 0x00000001
#define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
#define SERVICE_ADAPTER 0x00000004
#define SERVICE_RECOGNIZER_DRIVER 0x00000008
#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
SERVICE_FILE_SYSTEM_DRIVER | \
SERVICE_RECOGNIZER_DRIVER)
#define SERVICE_WIN32_OWN_PROCESS 0x00000010
#define SERVICE_WIN32_SHARE_PROCESS 0x00000020
#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
SERVICE_WIN32_SHARE_PROCESS)
#define SERVICE_USER_SERVICE 0x00000040
#define SERVICE_USERSERVICE_INSTANCE 0x00000080
#define SERVICE_USER_SHARE_PROCESS (SERVICE_USER_SERVICE | \
SERVICE_WIN32_SHARE_PROCESS)
#define SERVICE_USER_OWN_PROCESS (SERVICE_USER_SERVICE | \
SERVICE_WIN32_OWN_PROCESS)
#define SERVICE_INTERACTIVE_PROCESS 0x00000100
#define SERVICE_PKG_SERVICE 0x00000200
#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
SERVICE_ADAPTER | \
SERVICE_DRIVER | \
SERVICE_INTERACTIVE_PROCESS | \
SERVICE_USER_SERVICE | \
SERVICE_USERSERVICE_INSTANCE | \
SERVICE_PKG_SERVICE)
#define SERVICE_BOOT_START 0x00000000
#define SERVICE_SYSTEM_START 0x00000001
#define SERVICE_AUTO_START 0x00000002
#define SERVICE_DEMAND_START 0x00000003
#define SERVICE_DISABLED 0x00000004
#define SERVICE_ERROR_IGNORE 0x00000000
#define SERVICE_ERROR_NORMAL 0x00000001
#define SERVICE_ERROR_SEVERE 0x00000002
#define SERVICE_ERROR_CRITICAL 0x00000003
typedef
enum
{
DriverType = SERVICE_KERNEL_DRIVER,
FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
AdapterType = SERVICE_ADAPTER,
RecognizerType = SERVICE_RECOGNIZER_DRIVER
}
;
typedef
enum
{
BootLoad = SERVICE_BOOT_START,
SystemLoad = SERVICE_SYSTEM_START,
AutoLoad = SERVICE_AUTO_START,
DemandLoad = SERVICE_DEMAND_START,
DisableLoad = SERVICE_DISABLED
}
;
typedef
enum
{
IgnoreError = SERVICE_ERROR_IGNORE,
NormalError = SERVICE_ERROR_NORMAL,
SevereError = SERVICE_ERROR_SEVERE,
CriticalError = SERVICE_ERROR_CRITICAL
}
;
#define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
#define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
#define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
#define CM_SERVICE_SD_DISK_BOOT_LOAD 0x00000008
#define CM_SERVICE_USB3_DISK_BOOT_LOAD 0x00000010
#define CM_SERVICE_MEASURED_BOOT_LOAD 0x00000020
#define CM_SERVICE_VERIFIER_BOOT_LOAD 0x00000040
#define CM_SERVICE_WINPE_BOOT_LOAD 0x00000080
#define CM_SERVICE_RAM_DISK_BOOT_LOAD 0x00000100
#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 | \
CM_SERVICE_RAM_DISK_BOOT_LOAD)
#ifndef _NTDDTAPE_WINNT_
#define _NTDDTAPE_WINNT_
#define TAPE_ERASE_SHORT 0L
#define TAPE_ERASE_LONG 1L
typedef
struct
{
;
;
}
, *
;
#define TAPE_LOAD 0L
#define TAPE_UNLOAD 1L
#define TAPE_TENSION 2L
#define TAPE_LOCK 3L
#define TAPE_UNLOCK 4L
#define TAPE_FORMAT 5L
typedef
struct
{
;
;
}
, *
;
#define TAPE_SETMARKS 0L
#define TAPE_FILEMARKS 1L
#define TAPE_SHORT_FILEMARKS 2L
#define TAPE_LONG_FILEMARKS 3L
typedef
struct
{
;
;
;
}
, *
;
#define TAPE_ABSOLUTE_POSITION 0L
#define TAPE_LOGICAL_POSITION 1L
#define TAPE_PSEUDO_LOGICAL_POSITION 2L
typedef
struct
{
;
;
;
}
, *
;
#define TAPE_REWIND 0L
#define TAPE_ABSOLUTE_BLOCK 1L
#define TAPE_LOGICAL_BLOCK 2L
#define TAPE_PSEUDO_LOGICAL_BLOCK 3L
#define TAPE_SPACE_END_OF_DATA 4L
#define TAPE_SPACE_RELATIVE_BLOCKS 5L
#define TAPE_SPACE_FILEMARKS 6L
#define TAPE_SPACE_SEQUENTIAL_FMKS 7L
#define TAPE_SPACE_SETMARKS 8L
#define TAPE_SPACE_SEQUENTIAL_SMKS 9L
typedef
struct
{
;
;
;
;
}
, *
;
#define TAPE_DRIVE_FIXED 0x00000001
#define TAPE_DRIVE_SELECT 0x00000002
#define TAPE_DRIVE_INITIATOR 0x00000004
#define TAPE_DRIVE_ERASE_SHORT 0x00000010
#define TAPE_DRIVE_ERASE_LONG 0x00000020
#define TAPE_DRIVE_ERASE_BOP_ONLY 0x00000040
#define TAPE_DRIVE_ERASE_IMMEDIATE 0x00000080
#define TAPE_DRIVE_TAPE_CAPACITY 0x00000100
#define TAPE_DRIVE_TAPE_REMAINING 0x00000200
#define TAPE_DRIVE_FIXED_BLOCK 0x00000400
#define TAPE_DRIVE_VARIABLE_BLOCK 0x00000800
#define TAPE_DRIVE_WRITE_PROTECT 0x00001000
#define TAPE_DRIVE_EOT_WZ_SIZE 0x00002000
#define TAPE_DRIVE_ECC 0x00010000
#define TAPE_DRIVE_COMPRESSION 0x00020000
#define TAPE_DRIVE_PADDING 0x00040000
#define TAPE_DRIVE_REPORT_SMKS 0x00080000
#define TAPE_DRIVE_GET_ABSOLUTE_BLK 0x00100000
#define TAPE_DRIVE_GET_LOGICAL_BLK 0x00200000
#define TAPE_DRIVE_SET_EOT_WZ_SIZE 0x00400000
#define TAPE_DRIVE_EJECT_MEDIA 0x01000000
#define TAPE_DRIVE_CLEAN_REQUESTS 0x02000000
#define TAPE_DRIVE_SET_CMP_BOP_ONLY 0x04000000
#define TAPE_DRIVE_RESERVED_BIT 0x80000000 //don't use this bit!
#define TAPE_DRIVE_LOAD_UNLOAD 0x80000001
#define TAPE_DRIVE_TENSION 0x80000002
#define TAPE_DRIVE_LOCK_UNLOCK 0x80000004
#define TAPE_DRIVE_REWIND_IMMEDIATE 0x80000008
#define TAPE_DRIVE_SET_BLOCK_SIZE 0x80000010
#define TAPE_DRIVE_LOAD_UNLD_IMMED 0x80000020
#define TAPE_DRIVE_TENSION_IMMED 0x80000040
#define TAPE_DRIVE_LOCK_UNLK_IMMED 0x80000080
#define TAPE_DRIVE_SET_ECC 0x80000100
#define TAPE_DRIVE_SET_COMPRESSION 0x80000200
#define TAPE_DRIVE_SET_PADDING 0x80000400
#define TAPE_DRIVE_SET_REPORT_SMKS 0x80000800
#define TAPE_DRIVE_ABSOLUTE_BLK 0x80001000
#define TAPE_DRIVE_ABS_BLK_IMMED 0x80002000
#define TAPE_DRIVE_LOGICAL_BLK 0x80004000
#define TAPE_DRIVE_LOG_BLK_IMMED 0x80008000
#define TAPE_DRIVE_END_OF_DATA 0x80010000
#define TAPE_DRIVE_RELATIVE_BLKS 0x80020000
#define TAPE_DRIVE_FILEMARKS 0x80040000
#define TAPE_DRIVE_SEQUENTIAL_FMKS 0x80080000
#define TAPE_DRIVE_SETMARKS 0x80100000
#define TAPE_DRIVE_SEQUENTIAL_SMKS 0x80200000
#define TAPE_DRIVE_REVERSE_POSITION 0x80400000
#define TAPE_DRIVE_SPACE_IMMEDIATE 0x80800000
#define TAPE_DRIVE_WRITE_SETMARKS 0x81000000
#define TAPE_DRIVE_WRITE_FILEMARKS 0x82000000
#define TAPE_DRIVE_WRITE_SHORT_FMKS 0x84000000
#define TAPE_DRIVE_WRITE_LONG_FMKS 0x88000000
#define TAPE_DRIVE_WRITE_MARK_IMMED 0x90000000
#define TAPE_DRIVE_FORMAT 0xA0000000
#define TAPE_DRIVE_FORMAT_IMMEDIATE 0xC0000000
#define TAPE_DRIVE_HIGH_FEATURES 0x80000000 //mask for high features flag
typedef
struct
_TAPE_GET_DRIVE_PARAMETERS
{
;
;
;
;
;
;
;
;
;
;
;
}
TAPE_GET_DRIVE_PARAMETERS
, *
PTAPE_GET_DRIVE_PARAMETERS
;
typedef
struct
_TAPE_SET_DRIVE_PARAMETERS
{
;
;
;
;
;
}
TAPE_SET_DRIVE_PARAMETERS
, *
PTAPE_SET_DRIVE_PARAMETERS
;
typedef
struct
{
;
;
;
;
;
}
, *
;
typedef
struct
{
;
}
, *
;
#define TAPE_FIXED_PARTITIONS 0L
#define TAPE_SELECT_PARTITIONS 1L
#define TAPE_INITIATOR_PARTITIONS 2L
typedef
struct
{
;
;
;
}
, *
;
#define TAPE_QUERY_DRIVE_PARAMETERS 0L
#define TAPE_QUERY_MEDIA_CAPACITY 1L
#define TAPE_CHECK_FOR_DRIVE_PROBLEM 2L
#define TAPE_QUERY_IO_ERROR_DATA 3L
#define TAPE_QUERY_DEVICE_ERROR_DATA 4L
typedef
struct
{
;
;
;
}
, *
;
typedef
enum
{
,
TapeDriveReadWriteWarning
,
,
,
,
,
,
,
,
TapeDriveScsiConnectionError
,
,
,
,
}
;
#endif
#ifndef _NTTMAPI_
#define _NTTMAPI_
#ifdef __cplusplus
extern
"C"
{
#endif
#include <ktmtypes.h>
#if _MSC_VER >= 1200
#pragma warning(push)
#pragma warning(disable:4820) // padding added after data member
#endif
#pragma warning(disable:
4820
)
#define TRANSACTIONMANAGER_QUERY_INFORMATION ( 0x0001 )
#define TRANSACTIONMANAGER_SET_INFORMATION ( 0x0002 )
#define TRANSACTIONMANAGER_RECOVER ( 0x0004 )
#define TRANSACTIONMANAGER_RENAME ( 0x0008 )
#define TRANSACTIONMANAGER_CREATE_RM ( 0x0010 )
#define TRANSACTIONMANAGER_BIND_TRANSACTION ( 0x0020 )
#define TRANSACTIONMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
TRANSACTIONMANAGER_QUERY_INFORMATION)
#define TRANSACTIONMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
TRANSACTIONMANAGER_SET_INFORMATION |\
TRANSACTIONMANAGER_RECOVER |\
TRANSACTIONMANAGER_RENAME |\
TRANSACTIONMANAGER_CREATE_RM)
#define TRANSACTIONMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE)
#define TRANSACTIONMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
TRANSACTIONMANAGER_GENERIC_READ |\
TRANSACTIONMANAGER_GENERIC_WRITE |\
TRANSACTIONMANAGER_GENERIC_EXECUTE |\
TRANSACTIONMANAGER_BIND_TRANSACTION)
#define TRANSACTION_QUERY_INFORMATION ( 0x0001 )
#define TRANSACTION_SET_INFORMATION ( 0x0002 )
#define TRANSACTION_ENLIST ( 0x0004 )
#define TRANSACTION_COMMIT ( 0x0008 )
#define TRANSACTION_ROLLBACK ( 0x0010 )
#define TRANSACTION_PROPAGATE ( 0x0020 )
#define TRANSACTION_RIGHT_RESERVED1 ( 0x0040 )
#define TRANSACTION_GENERIC_READ (STANDARD_RIGHTS_READ |\
TRANSACTION_QUERY_INFORMATION |\
SYNCHRONIZE)
#define TRANSACTION_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
TRANSACTION_SET_INFORMATION |\
TRANSACTION_COMMIT |\
TRANSACTION_ENLIST |\
TRANSACTION_ROLLBACK |\
TRANSACTION_PROPAGATE |\
SYNCHRONIZE)
#define TRANSACTION_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
TRANSACTION_COMMIT |\
TRANSACTION_ROLLBACK |\
SYNCHRONIZE)
#define TRANSACTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
TRANSACTION_GENERIC_READ |\
TRANSACTION_GENERIC_WRITE |\
TRANSACTION_GENERIC_EXECUTE)
#define TRANSACTION_RESOURCE_MANAGER_RIGHTS (TRANSACTION_GENERIC_READ |\
STANDARD_RIGHTS_WRITE |\
TRANSACTION_SET_INFORMATION |\
TRANSACTION_ENLIST |\
TRANSACTION_ROLLBACK |\
TRANSACTION_PROPAGATE |\
SYNCHRONIZE)
#define RESOURCEMANAGER_QUERY_INFORMATION ( 0x0001 )
#define RESOURCEMANAGER_SET_INFORMATION ( 0x0002 )
#define RESOURCEMANAGER_RECOVER ( 0x0004 )
#define RESOURCEMANAGER_ENLIST ( 0x0008 )
#define RESOURCEMANAGER_GET_NOTIFICATION ( 0x0010 )
#define RESOURCEMANAGER_REGISTER_PROTOCOL ( 0x0020 )
#define RESOURCEMANAGER_COMPLETE_PROPAGATION ( 0x0040 )
#define RESOURCEMANAGER_GENERIC_READ (STANDARD_RIGHTS_READ |\
RESOURCEMANAGER_QUERY_INFORMATION |\
SYNCHRONIZE)
#define RESOURCEMANAGER_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
RESOURCEMANAGER_SET_INFORMATION |\
RESOURCEMANAGER_RECOVER |\
RESOURCEMANAGER_ENLIST |\
RESOURCEMANAGER_GET_NOTIFICATION |\
RESOURCEMANAGER_REGISTER_PROTOCOL |\
RESOURCEMANAGER_COMPLETE_PROPAGATION |\
SYNCHRONIZE)
#define RESOURCEMANAGER_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
RESOURCEMANAGER_RECOVER |\
RESOURCEMANAGER_ENLIST |\
RESOURCEMANAGER_GET_NOTIFICATION |\
RESOURCEMANAGER_COMPLETE_PROPAGATION |\
SYNCHRONIZE)
#define RESOURCEMANAGER_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
RESOURCEMANAGER_GENERIC_READ |\
RESOURCEMANAGER_GENERIC_WRITE |\
RESOURCEMANAGER_GENERIC_EXECUTE)
#define ENLISTMENT_QUERY_INFORMATION ( 0x0001 )
#define ENLISTMENT_SET_INFORMATION ( 0x0002 )
#define ENLISTMENT_RECOVER ( 0x0004 )
#define ENLISTMENT_SUBORDINATE_RIGHTS ( 0x0008 )
#define ENLISTMENT_SUPERIOR_RIGHTS ( 0x0010 )
#define ENLISTMENT_GENERIC_READ (STANDARD_RIGHTS_READ |\
ENLISTMENT_QUERY_INFORMATION)
#define ENLISTMENT_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
ENLISTMENT_SET_INFORMATION |\
ENLISTMENT_RECOVER |\
ENLISTMENT_SUBORDINATE_RIGHTS |\
ENLISTMENT_SUPERIOR_RIGHTS)
#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
ENLISTMENT_RECOVER |\
ENLISTMENT_SUBORDINATE_RIGHTS |\
ENLISTMENT_SUPERIOR_RIGHTS)
#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
ENLISTMENT_GENERIC_READ |\
ENLISTMENT_GENERIC_WRITE |\
ENLISTMENT_GENERIC_EXECUTE)
typedef
enum
{
TransactionOutcomeUndetermined
=
1
,
TransactionOutcomeCommitted
,
TransactionOutcomeAborted
,
}
;
typedef
enum
{
=
1
,
,
TransactionStateCommittedNotify
,
}
;
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
_Field_size_(LogPathLength) WCHAR LogPath[1]; // Variable size
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
;
;
;
;
[
1
];
}
, *
;
typedef
struct
{
;
}
, *
;
typedef
struct
_TRANSACTION_ENLISTMENT_PAIR
{
;
;
}
TRANSACTION_ENLISTMENT_PAIR
, *
PTRANSACTION_ENLISTMENT_PAIR
;
typedef
struct
{
;
TRANSACTION_ENLISTMENT_PAIR
[
1
];
}
, *
;
typedef
struct
{
TRANSACTION_ENLISTMENT_PAIR
;
}
, *
;
typedef
struct
{
;
;
[
1
];
}
, *
;
typedef
struct
{
;
;
}
, *
;
typedef
enum
{
,
,
,
,
,
,
}
;
typedef
enum
{
,
,
,
=
4
,
=
3
,
=
5
}
;
typedef
enum
{
,
,
}
;
typedef
struct
{
;
;
;
}
, *
;
typedef
struct
{
;
;
;
}
, *
;
typedef
enum
{
,
,
}
;
typedef
struct
{
;
}
, *
;
typedef
struct
{
;
[
1
];
}
, *
;
typedef
enum
{
,
KTMOBJECT_TRANSACTION_MANAGER
,
KTMOBJECT_RESOURCE_MANAGER
,
,
}
, *
;
typedef
struct
{
;
;
[
1
];
}
, *
;
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#ifdef __cplusplus
}
#endif
#endif // _NTTMAPI_
typedef
, *
;
typedef
struct
_TP_CALLBACK_INSTANCE
, *
;
typedef VOID (NTAPI *PTP_SIMPLE_CALLBACK)(
typedef
void
(
__stdcall
*
)(
_Inout_ PTP_CALLBACK_INSTANCE Instance,
_Inout_opt_ PVOID Context
);
typedef
struct
_TP_POOL
, *
;
typedef
enum
{
TP_CALLBACK_PRIORITY_HIGH
,
TP_CALLBACK_PRIORITY_NORMAL
,
,
TP_CALLBACK_PRIORITY_INVALID
,
TP_CALLBACK_PRIORITY_COUNT
=
TP_CALLBACK_PRIORITY_INVALID
}
;
typedef
struct
{
;
;
}
, *
;
typedef
struct
_TP_CLEANUP_GROUP
, *
;
typedef VOID (NTAPI *PTP_CLEANUP_GROUP_CANCEL_CALLBACK)(
typedef
void
(
__stdcall
*
PTP_CLEANUP_GROUP_CANCEL_CALLBACK
)(
_Inout_opt_ PVOID ObjectContext,
_Inout_opt_ PVOID CleanupContext
);
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
typedef
struct
{
;
;
;
PTP_CLEANUP_GROUP_CANCEL_CALLBACK
CleanupGroupCancelCallback
;
;
struct
*
;
;
union
{
;
struct
{
:
1
;
:
1
;
:
30
;
}
;
}
;
;
;
}
;
typedef
, *
;
#else
typedef struct _TP_CALLBACK_ENVIRON_V1 {
TP_VERSION Version;
PTP_POOL Pool;
PTP_CLEANUP_GROUP CleanupGroup;
PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback;
PVOID RaceDll;
struct _ACTIVATION_CONTEXT *ActivationContext;
PTP_SIMPLE_CALLBACK FinalizationCallback;
union {
DWORD Flags;
struct {
DWORD LongFunction : 1;
DWORD Persistent : 1;
DWORD Private : 30;
} s;
} u;
} TP_CALLBACK_ENVIRON_V1;
typedef TP_CALLBACK_ENVIRON_V1 TP_CALLBACK_ENVIRON, *PTP_CALLBACK_ENVIRON;
#endif
#if !defined(MIDL_PASS)
TpInitializeCallbackEnviron
(
_Out_ PTP_CALLBACK_ENVIRON CallbackEnviron
)
{
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
->
=
3
;
#else
CallbackEnviron->Version = 1;
#endif
CallbackEnviron->Pool = NULL;
CallbackEnviron->CleanupGroup = NULL;
CallbackEnviron->CleanupGroupCancelCallback = NULL;
->
CleanupGroupCancelCallback
=
0
;
CallbackEnviron->RaceDll = NULL;
CallbackEnviron->ActivationContext = NULL;
CallbackEnviron->FinalizationCallback = NULL;
->
.
=
0
;
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
->
=
TP_CALLBACK_PRIORITY_NORMAL
;
->
=
sizeof
(
);
#endif
}
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
)
{
->
=
;
}
TpSetCallbackCleanupGroup
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
_In_ PTP_CLEANUP_GROUP CleanupGroup,
_In_opt_ PTP_CLEANUP_GROUP_CANCEL_CALLBACK CleanupGroupCancelCallback
PTP_CLEANUP_GROUP_CANCEL_CALLBACK
CleanupGroupCancelCallback
)
{
->
=
;
->
CleanupGroupCancelCallback
=
CleanupGroupCancelCallback
;
}
TpSetCallbackActivationContext
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
_In_opt_ struct _ACTIVATION_CONTEXT *ActivationContext
)
{
->
=
;
}
TpSetCallbackNoActivationContext
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron
)
{
->
= (
struct
*)(
) -
1
;
}
TpSetCallbackLongFunction
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron
)
{
->
.
.
=
1
;
}
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
)
{
->
=
;
}
TpSetCallbackFinalizationCallback
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
_In_ PTP_SIMPLE_CALLBACK FinalizationCallback
)
{
->
=
;
}
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN7)
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron,
_In_ TP_CALLBACK_PRIORITY Priority
)
{
->
=
;
}
#endif
(
_Inout_ PTP_CALLBACK_ENVIRON CallbackEnviron
)
{
->
.
.
=
1
;
}
(
_In_ PTP_CALLBACK_ENVIRON CallbackEnviron
)
{
UNREFERENCED_PARAMETER(CallbackEnviron);
}
#endif // !defined(MIDL_PASS)
typedef
struct
_TP_WORK
, *
;
typedef VOID (NTAPI *PTP_WORK_CALLBACK)(
typedef
void
(
__stdcall
*
)(
_Inout_ PTP_CALLBACK_INSTANCE Instance,
_Inout_opt_ PVOID Context,
);
typedef
struct
_TP_TIMER
, *
;
typedef VOID (NTAPI *PTP_TIMER_CALLBACK)(
typedef
void
(
__stdcall
*
)(
_Inout_ PTP_CALLBACK_INSTANCE Instance,
_Inout_opt_ PVOID Context,
);
typedef
;
typedef
struct
_TP_WAIT
, *
;
typedef VOID (NTAPI *PTP_WAIT_CALLBACK)(
typedef
void
(
__stdcall
*
)(
_Inout_ PTP_CALLBACK_INSTANCE Instance,
_Inout_opt_ PVOID Context,
_In_ TP_WAIT_RESULT WaitResult
);
typedef
struct
_TP_IO
, *
;
#if defined(_M_AMD64) && !defined(__midl)
__forceinline
struct _TEB *
NtCurrentTeb (
VOID
)
{
return (struct _TEB *)__readgsqword(FIELD_OFFSET(NT_TIB, Self));
}
__forceinline
PVOID
GetCurrentFiber (
VOID
)
{
return (PVOID)__readgsqword(FIELD_OFFSET(NT_TIB, FiberData));
}
__forceinline
PVOID
GetFiberData (
VOID
)
{
return *(PVOID *)GetCurrentFiber();
}
#endif // _M_AMD64 && !defined(__midl)
#if defined(_M_ARM) && !defined(__midl) && !defined(_M_CEE_PURE)
__forceinline
struct _TEB *
NtCurrentTeb (
VOID
)
{
return (struct _TEB *)(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW);
}
__forceinline
PVOID
GetCurrentFiber (
VOID
)
{
return ((PNT_TIB )(ULONG_PTR)_MoveFromCoprocessor(CP15_TPIDRURW))->FiberData;
}
__forceinline
PVOID
GetFiberData (
VOID
)
{
return *(PVOID *)GetCurrentFiber();
}
#endif // _M_ARM && !defined(__midl) && !defined(_M_CEE_PURE)
#if defined(_M_ARM64) && !defined(__midl) && !defined(_M_CEE_PURE)
__forceinline
struct _TEB *
NtCurrentTeb (
VOID
)
{
return (struct _TEB *)__getReg(18);
}
__forceinline
PVOID
GetCurrentFiber (
VOID
)
{
return ((PNT_TIB )__getReg(18))->FiberData;
}
__forceinline
PVOID
GetFiberData (
VOID
)
{
return *(PVOID *)GetCurrentFiber();
}
#endif // _M_ARM64 && !defined(__midl) && !defined(_M_CEE_PURE)
#if defined(_M_IX86) && !defined(MIDL_PASS)
#define PcTeb 0x18
#if !defined(_M_CEE_PURE)
__inline struct _TEB * NtCurrentTeb( void ) { return (struct _TEB *) (ULONG_PTR) __readfsdword (PcTeb); }
__inline
struct
*
(
void
) {
return
(
struct
*) (
)
(
0x18
); }
#endif // !defined(_M_CEE_PURE)
#endif // defined(_M_IX86) && !defined(MIDL_PASS)
#if (_WIN32_WINNT > 0x0500) || (_WIN32_FUSION >= 0x0100) || ISOLATION_AWARE_ENABLED // winnt_only
#define ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION (1)
#define ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION (2)
#define ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION (3)
#define ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION (4)
#define ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION (5)
#define ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION (6)
#define ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION (7)
#define ACTIVATION_CONTEXT_SECTION_GLOBAL_OBJECT_RENAME_TABLE (8)
#define ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES (9)
#define ACTIVATION_CONTEXT_SECTION_APPLICATION_SETTINGS (10)
#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO (11)
#endif // winnt_only
#ifdef __cplusplus
}
#endif
#if _MSC_VER >= 1200
#pragma warning(pop)
#else
#pragma warning(default:4200) // nonstandard extension used : zero-sized array in struct/union
#pragma warning(default:4201) // named type definition in parentheses
#pragma warning(default:4214) // bit field types other than int
#endif
#endif /* _WINNT_ */