Headers diff for ntdll.dll between 6.3.9600.17415-Windows 8.1 and 10.0.10586.306-Windows 10 1511 10586.494 versions



 ip2string.h (6.3.9600.17415-Windows 8.1)   ip2string.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 34 skipping to change at line 34
These routines are dynamically linked in the caller's executable and These routines are dynamically linked in the caller's executable and
are callable in either kernel mode or user mode. are callable in either kernel mode or user mode.
--*/ --*/
#ifndef __IP2STRING__ #ifndef __IP2STRING__
#define __IP2STRING__ #define __IP2STRING__
#pragma once #pragma once
#include <winapifamily.h> #include <winapifamily.h>
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
// //
// Some simple Rtl routines for IP address <-> string literal conversion // Some simple Rtl routines for IP address <-> string literal conversion
// ... and Ethernet // ... and Ethernet
// //
skipping to change at line 275 skipping to change at line 275
#define RtlIpv6StringToAddressEx RtlIpv6StringToAddressExA #define RtlIpv6StringToAddressEx RtlIpv6StringToAddressExA
#define RtlIpv4AddressToStringEx RtlIpv4AddressToStringExA #define RtlIpv4AddressToStringEx RtlIpv4AddressToStringExA
#define RtlIpv6AddressToStringEx RtlIpv6AddressToStringExA #define RtlIpv6AddressToStringEx RtlIpv6AddressToStringExA
#define RtlIpv4StringToAddressEx RtlIpv4StringToAddressExA #define RtlIpv4StringToAddressEx RtlIpv4StringToAddressExA
#endif // UNICODE #endif // UNICODE
#ifdef __cplusplus #ifdef __cplusplus
} // extern "C" } // extern "C"
#endif #endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#endif // __IP2STRING__ #endif // __IP2STRING__
 End of changes. 2 change blocks. 
3 lines changed or deleted 3 lines changed or added


 mstcpip.h (6.3.9600.17415-Windows 8.1)   mstcpip.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 42 skipping to change at line 42
); );
// GUID definition for use with Real Time Notification setting API. // GUID definition for use with Real Time Notification setting API.
// 6b59819a-5cae-492d-a901-2a3c2c50164f // 6b59819a-5cae-492d-a901-2a3c2c50164f
DEFINE_GUID( DEFINE_GUID(
REAL_TIME_NOTIFICATION_CAPABILITY, REAL_TIME_NOTIFICATION_CAPABILITY,
0x6b59819a, 0x6b59819a,
0x5cae, 0x5cae,
0x492d, 0x492d,
0xa9, 0x01, 0x2a, 0x3c, 0x2c, 0x50, 0x16, 0x4f 0xa9, 0x01, 0x2a, 0x3c, 0x2c, 0x50, 0x16, 0x4f
); );
// GUID definition for use with Real Time Notification setting API.
// 6843da03-154a-4616-a508-44371295f96b
DEFINE_GUID(
REAL_TIME_NOTIFICATION_CAPABILITY_EX,
0x6843da03,
0x154a,
0x4616,
0xa5, 0x08, 0x44, 0x37, 0x12, 0x95, 0xf9, 0x6b
);
#endif // (NTDDI_VERSION >= NTDDI_WIN7) #endif // (NTDDI_VERSION >= NTDDI_WIN7)
#ifndef GUID_DEFS_ONLY #ifndef GUID_DEFS_ONLY
#if _MSC_VER > 1000 #if _MSC_VER > 1000
#pragma once #pragma once
#endif #endif
#include <winapifamily.h> #include <winapifamily.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
skipping to change at line 122 skipping to change at line 131
} CONTROL_CHANNEL_TRIGGER_STATUS, *PCONTROL_CHANNEL_TRIGGER_STATUS; } CONTROL_CHANNEL_TRIGGER_STATUS, *PCONTROL_CHANNEL_TRIGGER_STATUS;
#define CONTROL_CHANNEL_TRIGGER_STATUS_MAX CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM _ERROR #define CONTROL_CHANNEL_TRIGGER_STATUS_MAX CONTROL_CHANNEL_TRIGGER_STATUS_SYSTEM _ERROR
typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT
{ {
TRANSPORT_SETTING_ID TransportSettingId; TRANSPORT_SETTING_ID TransportSettingId;
GUID BrokerEventGuid; GUID BrokerEventGuid;
} REAL_TIME_NOTIFICATION_SETTING_INPUT, *PREAL_TIME_NOTIFICATION_SETTING_INPUT; } REAL_TIME_NOTIFICATION_SETTING_INPUT, *PREAL_TIME_NOTIFICATION_SETTING_INPUT;
typedef struct _REAL_TIME_NOTIFICATION_SETTING_INPUT_EX
{
TRANSPORT_SETTING_ID TransportSettingId;
GUID BrokerEventGuid;
BOOLEAN Unmark;
} REAL_TIME_NOTIFICATION_SETTING_INPUT_EX, *PREAL_TIME_NOTIFICATION_SETTING_INPU
T_EX;
typedef struct _REAL_TIME_NOTIFICATION_SETTING_OUTPUT typedef struct _REAL_TIME_NOTIFICATION_SETTING_OUTPUT
{ {
CONTROL_CHANNEL_TRIGGER_STATUS ChannelStatus; CONTROL_CHANNEL_TRIGGER_STATUS ChannelStatus;
} REAL_TIME_NOTIFICATION_SETTING_OUTPUT, *PREAL_TIME_NOTIFICATION_SETTING_OUTPUT ; } REAL_TIME_NOTIFICATION_SETTING_OUTPUT, *PREAL_TIME_NOTIFICATION_SETTING_OUTPUT ;
// //
// New WSAIoctl Options // New WSAIoctl Options
// //
#define SIO_RCVALL _WSAIOW(IOC_VENDOR,1) #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
#define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2) #define SIO_RCVALL_MCAST _WSAIOW(IOC_VENDOR,2)
skipping to change at line 201 skipping to change at line 217
UCHAR MaxSynRetransmissions; UCHAR MaxSynRetransmissions;
} TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS; } TCP_INITIAL_RTO_PARAMETERS, *PTCP_INITIAL_RTO_PARAMETERS;
// //
// Values for ICW level // Values for ICW level
// //
typedef enum { typedef enum {
TCP_ICW_LEVEL_DEFAULT = 0, TCP_ICW_LEVEL_DEFAULT = 0,
TCP_ICW_LEVEL_HIGH = 1, TCP_ICW_LEVEL_HIGH = 1,
TCP_ICW_LEVEL_MAX = 255
} TCP_ICW_LEVEL, *PTCP_ICW_LEVEL; } TCP_ICW_LEVEL, *PTCP_ICW_LEVEL;
typedef struct _TCP_ICW_PARAMETERS { typedef struct _TCP_ICW_PARAMETERS {
// //
// Supplies the level for choosing ICW. // Supplies the level for choosing ICW.
// //
TCP_ICW_LEVEL Level; TCP_ICW_LEVEL Level;
skipping to change at line 254 skipping to change at line 271
#ifdef __cplusplus #ifdef __cplusplus
INET_PORT_RESERVATION Reservation; INET_PORT_RESERVATION Reservation;
INET_PORT_RESERVATION_TOKEN Token; INET_PORT_RESERVATION_TOKEN Token;
#else #else
INET_PORT_RESERVATION; INET_PORT_RESERVATION;
INET_PORT_RESERVATION_TOKEN; INET_PORT_RESERVATION_TOKEN;
#endif #endif
} INET_PORT_RESERVATION_INSTANCE, *PINET_PORT_RESERVATION_INSTANCE; } INET_PORT_RESERVATION_INSTANCE, *PINET_PORT_RESERVATION_INSTANCE;
typedef struct { typedef struct {
ULONG AssignmentCount;
ULONG OwningPid; ULONG OwningPid;
} INET_PORT_RESERVATION_INFORMATION, *PINET_PORT_RESERVATION_INFORMATION; } INET_PORT_RESERVATION_INFORMATION, *PINET_PORT_RESERVATION_INFORMATION;
#ifdef _WS2DEF_ #ifdef _WS2DEF_
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#define _SECURE_SOCKET_TYPES_DEFINED_ #define _SECURE_SOCKET_TYPES_DEFINED_
// //
// Secure socket API type definitions. // Secure socket API type definitions.
// //
#define SIO_SET_SECURITY _WSAIOW(IOC_VENDOR, 200) #define SIO_SET_SECURITY _WSAIOW(IOC_VENDOR, 200)
#define SIO_QUERY_SECURITY _WSAIORW(IOC_VENDOR, 201) #define SIO_QUERY_SECURITY _WSAIORW(IOC_VENDOR, 201)
#define SIO_SET_PEER_TARGET_NAME _WSAIOW(IOC_VENDOR, 202) #define SIO_SET_PEER_TARGET_NAME _WSAIOW(IOC_VENDOR, 202)
#define SIO_DELETE_PEER_TARGET_NAME _WSAIOW(IOC_VENDOR, 203) #define SIO_DELETE_PEER_TARGET_NAME _WSAIOW(IOC_VENDOR, 203)
skipping to change at line 410 skipping to change at line 426
} SOCKET_SECURITY_QUERY_INFO_IPSEC2; } SOCKET_SECURITY_QUERY_INFO_IPSEC2;
#endif // (NTDDI_VERSION >= NTDDI_WIN7) #endif // (NTDDI_VERSION >= NTDDI_WIN7)
// //
// WFP ALE endpoint handle query type definition // WFP ALE endpoint handle query type definition
// //
#define SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE _WSAIOR(IOC_VENDOR, 205) #define SIO_QUERY_WFP_ALE_ENDPOINT_HANDLE _WSAIOR(IOC_VENDOR, 205)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
// //
// Scalability type definitions // Scalability type definitions
// //
#define SIO_QUERY_RSS_SCALABILITY_INFO _WSAIOR(IOC_VENDOR, 210) #define SIO_QUERY_RSS_SCALABILITY_INFO _WSAIOR(IOC_VENDOR, 210)
// Scalability info for the transport // Scalability info for the transport
typedef struct _RSS_SCALABILITY_INFO { typedef struct _RSS_SCALABILITY_INFO {
BOOLEAN RssEnabled; BOOLEAN RssEnabled;
 End of changes. 6 change blocks. 
4 lines changed or deleted 21 lines changed or added


 netiodef.h (6.3.9600.17415-Windows 8.1)   netiodef.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 88 skipping to change at line 88
defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
defined(MIPSEB) || defined (BIT_ZERO_ON_LEFT) defined(MIPSEB) || defined (BIT_ZERO_ON_LEFT)
#define BYTE_ORDER _BIG_ENDIAN #define BYTE_ORDER _BIG_ENDIAN
#endif #endif
#ifndef BYTE_ORDER // still not defined #ifndef BYTE_ORDER // still not defined
#if defined(u3b2) || defined(m68k) #if defined(u3b2) || defined(m68k)
#define BYTE_ORDER _BIG_ENDIAN #define BYTE_ORDER _BIG_ENDIAN
#endif #endif
#if defined(i286) || defined(i386) || defined(_AMD64_) || defined(_IA64_) || def ined(_ARM_) #if defined(i286) || defined(i386) || defined(_AMD64_) || defined(_IA64_) || def ined(_ARM_) || defined(_ARM64_)
#define BYTE_ORDER _LITTLE_ENDIAN #define BYTE_ORDER _LITTLE_ENDIAN
#endif #endif
#endif #endif
#endif #endif
#ifndef BYTE_ORDER #ifndef BYTE_ORDER
// you must determine what the correct bit order is for your compiler // you must determine what the correct bit order is for your compiler
UNDEFINED_BIT_ORDER; UNDEFINED_BIT_ORDER;
#endif #endif
skipping to change at line 309 skipping to change at line 309
UINT16 VID:12; // least significant bit UINT16 VID:12; // least significant bit
UINT16 CFI:1; UINT16 CFI:1;
UINT16 User_Priority:3; UINT16 User_Priority:3;
}; };
}; };
UINT16 Type; // this really is the type, since we come a fter the SNAP header UINT16 Type; // this really is the type, since we come a fter the SNAP header
} VLAN_TAG; } VLAN_TAG;
C_ASSERT(ETH_LENGTH_OF_VLAN_HEADER == sizeof(VLAN_TAG)); C_ASSERT(ETH_LENGTH_OF_VLAN_HEADER == sizeof(VLAN_TAG));
NETIO_INLINE __inline
DL_ADDRESS_TYPE DL_ADDRESS_TYPE
EthernetAddressType( EthernetAddressType(
_In_reads_(sizeof(DL_EUI48)) CONST UCHAR *Address _In_reads_(sizeof(DL_EUI48)) CONST UCHAR *Address
) )
{ {
if (((PDL_EUI48) Address)->Oui.Group) { if (((PDL_EUI48) Address)->Oui.Group) {
if (RtlEqualMemory(Address, &eui48_broadcast, sizeof(DL_EUI48))) { if (RtlEqualMemory(Address, &eui48_broadcast, sizeof(DL_EUI48))) {
return DlBroadcast; return DlBroadcast;
} }
return DlMulticast; return DlMulticast;
skipping to change at line 441 skipping to change at line 441
#define MAX_IPV4_HLEN 60 #define MAX_IPV4_HLEN 60
#define IPV4_MINIMUM_MTU 576 #define IPV4_MINIMUM_MTU 576
#define IPV4_MINIMUM_ULMTU (IPV4_MINIMUM_MTU - sizeof(IPV4_HEADER)) #define IPV4_MINIMUM_ULMTU (IPV4_MINIMUM_MTU - sizeof(IPV4_HEADER))
// //
// The maximum and minimum values for the lower limit of the value the MTU can // The maximum and minimum values for the lower limit of the value the MTU can
// have during PMTU discovery. // have during PMTU discovery.
// //
// Minimum value chosen to unblock customer scenario and minimize security risk. // The minimum value was chosen to be a reasonable limit for real-world
// scenarios, while at the same time minimizing security risks.
// //
#define IPV4_MIN_MINIMUM_MTU 352 #define IPV4_MIN_MINIMUM_MTU 352
#define IPV4_MAX_MINIMUM_MTU 576 #define IPV4_MAX_MINIMUM_MTU IPV4_MINIMUM_MTU
// //
// TODO: remove UNALIGNED qualifier once NetGetDataBuffer takes an // TODO: remove UNALIGNED qualifier once NetGetDataBuffer takes an
// alignment argument. // alignment argument.
// //
__inline __inline
UCHAR UCHAR
Ip4HeaderLengthInBytes( Ip4HeaderLengthInBytes(
_In_ CONST UNALIGNED IPV4_HEADER *Header _In_ CONST UNALIGNED IPV4_HEADER *Header
) )
skipping to change at line 560 skipping to change at line 561
// Structure to interpret the IPv4 loose and strict source routing options as // Structure to interpret the IPv4 loose and strict source routing options as
// a routing header similar to IPv6. // a routing header similar to IPv6.
// //
typedef struct _IPV4_ROUTING_HEADER { typedef struct _IPV4_ROUTING_HEADER {
#ifdef __cplusplus #ifdef __cplusplus
IPV4_OPTION_HEADER OptionHeader; IPV4_OPTION_HEADER OptionHeader;
#else #else
IPV4_OPTION_HEADER; IPV4_OPTION_HEADER;
#endif #endif
UINT8 Pointer; UINT8 Pointer;
#pragma warning(disable: 4228) #pragma warning(push)
#pragma warning(disable: 4228) /* nonstandard extension: qualifiers after comma
in declarator list */
} IPV4_ROUTING_HEADER, UNALIGNED *PIPV4_ROUTING_HEADER; } IPV4_ROUTING_HEADER, UNALIGNED *PIPV4_ROUTING_HEADER;
#pragma warning(pop)
// //
// ICMPV4_HEADER // ICMPV4_HEADER
// //
// Define the structure of an ICMPv4 header. // Define the structure of an ICMPv4 header.
// //
typedef ICMP_HEADER ICMPV4_HEADER, *PICMPV4_HEADER; typedef ICMP_HEADER ICMPV4_HEADER, *PICMPV4_HEADER;
typedef ICMP_MESSAGE ICMPV4_MESSAGE, *PICMPV4_MESSAGE; typedef ICMP_MESSAGE ICMPV4_MESSAGE, *PICMPV4_MESSAGE;
 End of changes. 6 change blocks. 
5 lines changed or deleted 9 lines changed or added


 reshub.h (6.3.9600.17415-Windows 8.1)   reshub.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 113 skipping to change at line 113
// //
// Definitions to interact with the resource hub. // Definitions to interact with the resource hub.
// //
#define IOCTL_RH_QUERY_CONNECTION_PROPERTIES \ #define IOCTL_RH_QUERY_CONNECTION_PROPERTIES \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \ CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x0, \ 0x0, \
METHOD_BUFFERED, \ METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS) FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_RH_ALLOCATE_CONNECTION \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x1, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_RH_FREE_CONNECTION \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x2, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_RH_UPDATE_CONNECTION_PROPERTIES \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x3, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x4, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY \
CTL_CODE(FILE_DEVICE_RESOURCE_HUB, \
0x5, \
METHOD_BUFFERED, \
FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define RH_QUERY_CONNECTION_PROPERTIES_INPUT_VERSION 1 #define RH_QUERY_CONNECTION_PROPERTIES_INPUT_VERSION 1
#define RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_VERSION 1 #define RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_VERSION 1
#define RH_ALLOCATE_CONNECTION_INPUT_VERSION 1
#define RH_ALLOCATE_CONNECTION_OUTPUT_VERSION 1
#define RH_FREE_CONNECTION_INPUT_VERSION 1
#define RH_FREE_CONNECTION_OUTPUT_VERSION 1
#define RH_UPDATE_CONNECTION_PROPERTIES_INPUT_VERSION 1
#define RH_UPDATE_CONNECTION_PROPERTIES_OUTPUT_VERSION 1
#define RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_VERSION 1
#define RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_VERSION 1
#define RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_VERSION 1
#define RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_VERSION 1
/*------------------------------------------------------------------------------
*
* Update Connection Masks
*
*----------------------------------------------------------------------------*/
#define RH_UPDATE_CONNECTIONAL_MASK_ALL 0xFFFF
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* *
* Connection property definitions * Connection property definitions
* *
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
// //
// GPIO // GPIO
// //
skipping to change at line 169 skipping to change at line 222
#define PNP_GPIO_IRQ_POLARITY_BOTH 0x04 #define PNP_GPIO_IRQ_POLARITY_BOTH 0x04
#endif #endif
// //
// Serial Peripheral Bus // Serial Peripheral Bus
// //
#define SERIAL_BUS_DESCRIPTOR 0x8e #define SERIAL_BUS_DESCRIPTOR 0x8e
#define SERIAL_BUS_DESCRIPTOR_REVISION 0x01 #define SERIAL_BUS_DESCRIPTOR_REVISION 0x01
#define SERIAL_BUS_DESCRIPTOR_REVISION_V2 0x02
#define SERIAL_BUS_I2C_DESCRIPTOR_TYPE 1
#define SERIAL_BUS_SPI_DESCRIPTOR_TYPE 2
#define SERIAL_BUS_UART_DESCRIPTOR_TYPE 3
//
// General flags for SPB resources.
//
#define SERIAL_BUS_FLAG_SHARED_DESCRIPTOR (0x4)
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* *
* IOCTL_RH_QUERY_CONNECTION_PROPERTIES parameters * IOCTL_RH_QUERY_CONNECTION_PROPERTIES parameters
* *
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
typedef enum _RH_QUERY_CONNECTION_PROPERTIES_INPUT_TYPE { typedef enum _RH_QUERY_CONNECTION_PROPERTIES_INPUT_TYPE {
ConnectionIdType, ConnectionIdType,
InterruptVectorType InterruptVectorType
skipping to change at line 202 skipping to change at line 265
typedef struct _RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER { typedef struct _RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER {
ULONG Version; ULONG Version;
ULONG PropertiesLength; ULONG PropertiesLength;
UCHAR ConnectionProperties[ANYSIZE_ARRAY]; UCHAR ConnectionProperties[ANYSIZE_ARRAY];
} RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER, } RH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER,
*PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER; *PRH_QUERY_CONNECTION_PROPERTIES_OUTPUT_BUFFER;
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
*
* IOCTL_RH_ALLOCATE_CONNECTION and IOCTL_RH_UPDATE_CONNECTION_PROPERTIES
* parameters
*
*----------------------------------------------------------------------------*/
typedef enum _RH_CONNECTION_PROPERTIES_INPUT_TYPE {
GpioIoType,
GpioInterruptType,
SpiConnectionType,
I2cConnectionType,
UartConnectionType
} RH_CONNECTION_PROPERTIES_INPUT_TYPE,
*PRH_CONNECTION_PROPERTIES_INPUT_TYPE;
//
// _RH_GPIO_IO_CONNECTION_PARAMETERS only includes mutable parameters.
// Fields not present in this structure must not be changed.
//
typedef struct _RH_GPIO_IO_CONNECTION_PARAMETERS {
LARGE_INTEGER ConnectionId;
//
// The UpdateMask field is used to determine which parameters
// should be updated. Currently, all parameters are updated
// by default.
//
USHORT UpdateMask;
//
// Configurable parameters.
//
UCHAR PinConfiguration;
USHORT DebounceTimeout;
USHORT DriveStrength;
} RH_GPIO_IO_CONNECTION_PARAMETERS,
*PRH_GPIO_IO_CONNECTION_PARAMETERS;
//
// _RH_GPIO_INTERRUPT_CONNECTION_PARAMETERS only includes mutable parameters.
// Fields not present in this structure must not be changed.
//
typedef struct _RH_GPIO_INTERRUPT_CONNECTION_PARAMETERS {
ULONG InterruptVector;
//
// The UpdateMask field is used to determine which parameters
// should be updated. Currently, all parameters are updated
// by default.
//
USHORT UpdateMask;
//
// Configurable parameters.
//
UCHAR InterruptMode;
UCHAR InterruptPolarity;
UCHAR PinConfiguration;
USHORT DebounceTimeout;
} RH_GPIO_INTERRUPT_CONNECTION_PARAMETERS,
*PRH_GPIO_INTERRUPT_CONNECTION_PARAMETERS;
//
// _RH_SPI_CONNECTION_PARAMETERS only includes mutable parameters.
// Fields not present in this structure must not be changed.
//
typedef struct _RH_SPI_CONNECTION_PARAMETERS {
LARGE_INTEGER ConnectionId;
//
// The UpdateMask field is used to determine which parameters
// should be updated. Currently, all parameters are updated
// by default.
//
USHORT UpdateMask;
//
// Configurable parameters.
//
USHORT DeviceSelection;
ULONG ConnectionSpeed;
UCHAR ClockPolarity;
UCHAR ClockPhase;
UCHAR DevicePolarity;
UCHAR DataBitLength;
} RH_SPI_CONNECTION_PARAMETERS,
*PRH_SPI_CONNECTION_PARAMETERS;
//
// _RH_I2C_CONNECTION_PARAMETERS only includes mutable parameters.
// Fields not present in this structure must not be changed.
//
typedef struct _RH_I2C_CONNECTION_PARAMETERS {
LARGE_INTEGER ConnectionId;
//
// The UpdateMask field is used to determine which parameters
// should be updated. Currently, all parameters are updated
// by default.
//
USHORT UpdateMask;
//
// Configurable parameters.
//
USHORT TypeSpecificFlags;
ULONG ConnectionSpeed;
USHORT SlaveAddress;
} RH_I2C_CONNECTION_PARAMETERS,
*PRH_I2C_CONNECTION_PARAMETERS;
//
// _RH_UART_CONNECTION_PARAMETERS only includes mutable parameters.
// Fields not present in this structure must not be changed.
//
typedef struct _RH_UART_CONNECTION_PARAMETERS {
LARGE_INTEGER ConnectionId;
//
// The UpdateMask field is used to determine which parameters
// should be updated. Currently, all parameters are updated
// by default.
//
USHORT UpdateMask;
//
// Configurable parameters.
//
ULONG BaudRate;
USHORT TypeSpecificFlags;
USHORT RxBufferSize;
USHORT TxBufferSize;
UCHAR Parity;
} RH_UART_CONNECTION_PARAMETERS,
*PRH_UART_CONNECTION_PARAMETERS;
typedef struct _RH_ALLOCATE_UPDATE_CONNECTION_INPUT_BUFFER {
ULONG Version;
RH_CONNECTION_PROPERTIES_INPUT_TYPE ConnectionType;
union {
RH_GPIO_IO_CONNECTION_PARAMETERS IoConnection;
RH_GPIO_INTERRUPT_CONNECTION_PARAMETERS InterruptConnection;
RH_SPI_CONNECTION_PARAMETERS SpiConnection;
RH_I2C_CONNECTION_PARAMETERS I2cConnection;
RH_UART_CONNECTION_PARAMETERS UartConnection;
} u;
} RH_ALLOCATE_UPDATE_CONNECTION_INPUT_BUFFER,
*PRH_ALLOCATE_UPDATE_CONNECTION_INPUT_BUFFER;
typedef struct _RH_ALLOCATE_CONNECTION_OUTPUT_BUFFER {
ULONG Version;
LARGE_INTEGER ConnectionId;
} RH_ALLOCATE_CONNECTION_OUTPUT_BUFFER,
*PRH_ALLOCATE_CONNECTION_OUTPUT_BUFFER;
typedef struct _RH_UPDATE_CONNECTION_PROPERTIES_OUTPUT_BUFFER {
ULONG Version;
} RH_UPDATE_CONNECTION_PROPERTIES_OUTPUT_BUFFER,
*PRH_UPDATE_CONNECTION_PROPERTIES_OUTPUT_BUFFER;
/*------------------------------------------------------------------------------
*
* IOCTL_RH_FREE_CONNECTION parameters
*
*----------------------------------------------------------------------------*/
typedef struct _RH_FREE_CONNECTION_INPUT_BUFFER {
ULONG Version;
LARGE_INTEGER ConnectionId;
} RH_FREE_CONNECTION_INPUT_BUFFER,
*PRH_FREE_CONNECTION_INPUT_BUFFER;
//
// Currently, the output buffer is empty and is left for future expansion.
//
typedef struct _RH_FREE_CONNECTION_OUTPUT_BUFFER {
ULONG Version;
} RH_FREE_CONNECTION_OUTPUT_BUFFER,
*PRH_FREE_CONNECTION_OUTPUT_BUFFER;
/*------------------------------------------------------------------------------
*
* IOCTL_RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY parameters
*
*----------------------------------------------------------------------------*/
typedef struct _RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER {
ULONG Version;
ULONG InterruptVector;
} RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER,
*PRH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER;
typedef struct _RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER {
ULONG Version;
UCHAR InitialPolarity;
} RH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER,
*PRH_QUERY_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER;
/*------------------------------------------------------------------------------
*
* IOCTL_RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY parameters
*
*----------------------------------------------------------------------------*/
typedef struct _RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER {
ULONG Version;
ULONG InterruptVector;
BOOLEAN InitialPolarity;
} RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER,
*PRH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_INPUT_BUFFER;
//
// Currently this is basically empty but is left for future expansion.
//
typedef struct _RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER {
ULONG Version;
} RH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER,
*PRH_UPDATE_ACTIVE_BOTH_INITIAL_POLARITY_OUTPUT_BUFFER;
/*------------------------------------------------------------------------------
* *
* Connection property structures * Connection property structures
* *
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#include "pshpack1.h" #include "pshpack1.h"
// //
// GPIO IRQ and IO descriptor [fixed block] // GPIO IRQ and IO descriptor [fixed block]
// //
skipping to change at line 240 skipping to change at line 540
// ...followed by Pin table (USHORT) // ...followed by Pin table (USHORT)
// ...followed RESOURCE_NAME string // ...followed RESOURCE_NAME string
// ...followed by optional vendor data. // ...followed by optional vendor data.
// //
// Note the offsets in the fixed block should be used to access this data. // Note the offsets in the fixed block should be used to access this data.
// //
} PNP_GPIO_INTERRUPT_IO_DESCRIPTOR, *PPNP_GPIO_INTERRUPT_IO_DESCRIPTOR; } PNP_GPIO_INTERRUPT_IO_DESCRIPTOR, *PPNP_GPIO_INTERRUPT_IO_DESCRIPTOR;
// //
// Length of GPIO common descriptor.
//
#define PNP_GPIO_INTERRUPT_IO_DESCRIPTOR_LENGTH \
sizeof(PNP_GPIO_INTERRUPT_IO_DESCRIPTOR)
//
// Serial Peripheral Bus common descriptor // Serial Peripheral Bus common descriptor
// //
typedef struct _PNP_SERIAL_BUS_DESCRIPTOR { typedef struct _PNP_SERIAL_BUS_DESCRIPTOR {
UCHAR Tag; UCHAR Tag;
USHORT Length; USHORT Length;
UCHAR RevisionId; UCHAR RevisionId;
UCHAR ResourceSourceIndex; UCHAR ResourceSourceIndex;
UCHAR SerialBusType; UCHAR SerialBusType;
UCHAR GeneralFlags; UCHAR GeneralFlags;
USHORT TypeSpecificFlags; USHORT TypeSpecificFlags;
UCHAR TypeSpecificRevisionId; UCHAR TypeSpecificRevisionId;
USHORT TypeDataLength; USHORT TypeDataLength;
} PNP_SERIAL_BUS_DESCRIPTOR, *PPNP_SERIAL_BUS_DESCRIPTOR; } PNP_SERIAL_BUS_DESCRIPTOR, *PPNP_SERIAL_BUS_DESCRIPTOR;
//
// Length of SPB common descriptor.
//
#define PNP_SERIAL_BUS_DESCRIPTOR_LENGTH sizeof(PNP_SERIAL_BUS_DESCRIPTOR)
#include "poppack.h" #include "poppack.h"
/*------------------------------------------------------------------------------ /*------------------------------------------------------------------------------
* *
* Resource Hub Helper Macros * Resource Hub Helper Macros
* *
*----------------------------------------------------------------------------*/ *----------------------------------------------------------------------------*/
#ifdef RESHUB_USE_HELPER_ROUTINES #ifdef RESHUB_USE_HELPER_ROUTINES
skipping to change at line 337 skipping to change at line 650
argList); argList);
if (SUCCEEDED(hr)) { if (SUCCEEDED(hr)) {
DestinationString->Length = (USHORT)( DestinationString->Length = (USHORT)(
(pszDestEnd - DestinationString->Buffer) * sizeof(WCHAR)); (pszDestEnd - DestinationString->Buffer) * sizeof(WCHAR));
} }
return RESOURCE_HUB_HRESULT_TO_NTSTATUS(hr); return RESOURCE_HUB_HRESULT_TO_NTSTATUS(hr);
} }
#if (UMDF_DRIVER == 1) #if (UMDF_DRIVER)
NTSTATUS NTSTATUS
FORCEINLINE FORCEINLINE
RESOURCE_HUB_UNICODE_STRING_INIT ( RESOURCE_HUB_UNICODE_STRING_INIT (
_Out_ PUNICODE_STRING DestinationString, _Out_ PUNICODE_STRING DestinationString,
_In_opt_ STRSAFE_LPCWSTR pszSrc _In_opt_ STRSAFE_LPCWSTR pszSrc
) )
{ {
HRESULT hr; HRESULT hr;
 End of changes. 7 change blocks. 
1 lines changed or deleted 314 lines changed or added


 winnt.h (6.3.9600.17415-Windows 8.1)   winnt.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 23 skipping to change at line 23
Revision History: Revision History:
--*/ --*/
#ifndef _WINNT_ #ifndef _WINNT_
#define _WINNT_ #define _WINNT_
#if _MSC_VER >= 1200 #if _MSC_VER >= 1200
#pragma warning(push) #pragma warning(push)
#pragma warning(disable:4668) // #if not_defined treated as #if 0
#pragma warning(disable:4820) // padded added
#endif #endif
#pragma warning(disable:4200) // nonstandard extension used : zero-sized array i n struct/union
#pragma warning(disable:4201) // named type definition in parentheses #pragma warning(disable:4201) // named type definition in parentheses
#pragma warning(disable:4214) // bit field types other than int #pragma warning(disable:4214) // bit field types other than int
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <ctype.h> #include <ctype.h>
#include <winapifamily.h> #include <winapifamily.h>
#define ANYSIZE_ARRAY 1 #define ANYSIZE_ARRAY 1
skipping to change at line 97 skipping to change at line 100
#endif #endif
// begin_ntoshvp // begin_ntoshvp
#if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && define d(ENABLE_RESTRICTED) #if defined(_M_MRX000) && !(defined(MIDL_PASS) || defined(RC_INVOKED)) && define d(ENABLE_RESTRICTED)
#define RESTRICTED_POINTER __restrict #define RESTRICTED_POINTER __restrict
#else #else
#define RESTRICTED_POINTER #define RESTRICTED_POINTER
#endif #endif
#if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA6 4) || defined(_M_AMD64) || defined(_M_ARM) #if defined(_M_MRX000) || defined(_M_ALPHA) || defined(_M_PPC) || defined(_M_IA6 4) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_ARM64)
#define ALIGNMENT_MACHINE #define ALIGNMENT_MACHINE
#define UNALIGNED __unaligned #define UNALIGNED __unaligned
#if defined(_WIN64) #if defined(_WIN64)
#define UNALIGNED64 __unaligned #define UNALIGNED64 __unaligned
#else #else
#define UNALIGNED64 #define UNALIGNED64
#endif #endif
#else #else
#undef ALIGNMENT_MACHINE #undef ALIGNMENT_MACHINE
#define UNALIGNED #define UNALIGNED
skipping to change at line 142 skipping to change at line 145
FIELD_OFFSET( struct { char x; t test; }, test ) FIELD_OFFSET( struct { char x; t test; }, test )
#endif #endif
// //
// Note: RC_INVOKED is checked in PROBE_ALIGNMENT to maintain compatibility with previous // Note: RC_INVOKED is checked in PROBE_ALIGNMENT to maintain compatibility with previous
// versions of the SDK which did not block inclusion in an .RC file. // versions of the SDK which did not block inclusion in an .RC file.
// //
#if defined(_AMD64_) || defined(_X86_) #if defined(_AMD64_) || defined(_X86_)
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD ) #define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif defined(_IA64_) || defined(_ARM_) #elif defined(_IA64_) || defined(_ARM_) || defined(_ARM64_)
#define PROBE_ALIGNMENT( _s ) (TYPE_ALIGNMENT( _s ) > TYPE_ALIGNMENT( DWORD ) ?
\ //
TYPE_ALIGNMENT( _s ) : TYPE_ALIGNMENT( DWORD )) // TODO: WOWXX - Unblock ARM. Make all alignment checks DWORD for now.
//
#define PROBE_ALIGNMENT( _s ) TYPE_ALIGNMENT( DWORD )
#elif !defined(RC_INVOKED) #elif !defined(RC_INVOKED)
#error "No Target Architecture" #error "No Target Architecture"
#endif #endif
#if defined(_WIN64) //
// Define PROBE_ALIGNMENT32 to be the same as PROBE_ALIGNMENT on x86, so that
// code hosting x86 under WoW can handle x86's maximum garanteed alignment.
//
#define PROBE_ALIGNMENT32( _s ) TYPE_ALIGNMENT( DWORD ) #define PROBE_ALIGNMENT32( _s ) TYPE_ALIGNMENT( DWORD )
#endif
// begin_ntoshvp // begin_ntoshvp
// //
// C_ASSERT() can be used to perform many compile-time assertions: // C_ASSERT() can be used to perform many compile-time assertions:
// type sizes, field offsets, etc. // type sizes, field offsets, etc.
// //
// An assertion failure results in error C2118: negative subscript. // An assertion failure results in error C2118: negative subscript.
// //
#ifndef SORTPP_PASS #ifndef SORTPP_PASS
#define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1] #define C_ASSERT(e) typedef char __C_ASSERT__[(e)?1:-1]
#else #else
#define C_ASSERT(e) /* nothing */ #define C_ASSERT(e) /* nothing */
#endif #endif
#include <basetsd.h> #include <basetsd.h>
#if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM )) && !defined(MIDL_PASS) #if (defined(_M_IX86) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM ) || defined(_M_ARM64)) && !defined(MIDL_PASS)
#define DECLSPEC_IMPORT __declspec(dllimport) #define DECLSPEC_IMPORT __declspec(dllimport)
#else #else
#define DECLSPEC_IMPORT #define DECLSPEC_IMPORT
#endif #endif
#ifndef DECLSPEC_NORETURN #ifndef DECLSPEC_NORETURN
#if (_MSC_VER >= 1200) && !defined(MIDL_PASS) #if (_MSC_VER >= 1200) && !defined(MIDL_PASS)
#define DECLSPEC_NORETURN __declspec(noreturn) #define DECLSPEC_NORETURN __declspec(noreturn)
#else #else
#define DECLSPEC_NORETURN #define DECLSPEC_NORETURN
skipping to change at line 256 skipping to change at line 264
#endif #endif
#ifndef DECLSPEC_ADDRSAFE #ifndef DECLSPEC_ADDRSAFE
#if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64)) #if (_MSC_VER >= 1200) && (defined(_M_ALPHA) || defined(_M_AXP64))
#define DECLSPEC_ADDRSAFE __declspec(address_safe) #define DECLSPEC_ADDRSAFE __declspec(address_safe)
#else #else
#define DECLSPEC_ADDRSAFE #define DECLSPEC_ADDRSAFE
#endif #endif
#endif #endif
#ifndef DECLSPEC_SAFEBUFFERS
#if (_MSC_VER >= 1600)
#define DECLSPEC_SAFEBUFFERS __declspec(safebuffers)
#else
#define DECLSPEC_SAFEBUFFERS
#endif
#endif
#ifndef DECLSPEC_NOINLINE #ifndef DECLSPEC_NOINLINE
#if (_MSC_VER >= 1300) #if (_MSC_VER >= 1300)
#define DECLSPEC_NOINLINE __declspec(noinline) #define DECLSPEC_NOINLINE __declspec(noinline)
#else #else
#define DECLSPEC_NOINLINE #define DECLSPEC_NOINLINE
#endif #endif
#endif #endif
#ifndef DECLSPEC_SAFEBUFFERS #ifndef DECLSPEC_SAFEBUFFERS
#if (_MSC_VER >= 1300) #if (_MSC_VER >= 1300)
#define DECLSPEC_SAFEBUFFERS __declspec(safebuffers) #define DECLSPEC_SAFEBUFFERS __declspec(safebuffers)
#else #else
#define DECLSPEC_SAFEBUFFERS #define DECLSPEC_SAFEBUFFERS
#endif #endif
#endif #endif
#ifndef DECLSPEC_GUARDNOCF #ifndef DECLSPEC_GUARDNOCF
#if (_MSC_FULL_VER >= 170065501) #if (_MSC_FULL_VER >= 170065501) || defined(_D1VERSIONLKG171_)
#define DECLSPEC_GUARDNOCF __declspec(guard(nocf)) #define DECLSPEC_GUARDNOCF __declspec(guard(nocf))
#else #else
#define DECLSPEC_GUARDNOCF #define DECLSPEC_GUARDNOCF
#endif #endif
#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
// begin_ntoshvp // begin_ntoshvp
#ifndef FORCEINLINE #ifndef FORCEINLINE
#if (_MSC_VER >= 1200) #if (_MSC_VER >= 1200)
#define FORCEINLINE __forceinline #define FORCEINLINE __forceinline
#else #else
#define FORCEINLINE __inline #define FORCEINLINE __inline
#endif #endif
#endif #endif
skipping to change at line 303 skipping to change at line 327
#define CFORCEINLINE FORCEINLINE #define CFORCEINLINE FORCEINLINE
// //
// STKFORCEINLINE: __forceinline required for correctness due to counting stack // STKFORCEINLINE: __forceinline required for correctness due to counting stack
// frames for a stack trace being captured. // frames for a stack trace being captured.
// //
#define STKFORCEINLINE FORCEINLINE #define STKFORCEINLINE FORCEINLINE
#define ICEFORCEINLINE FORCEINLINE //
// PFORCEINLINE: __forceinline required for performance.
//
#ifndef PFORCEINLINE
#define PFORCEINLINE FORCEINLINE
#endif
// end_ntoshvp // end_ntoshvp
#ifndef DECLSPEC_DEPRECATED #ifndef DECLSPEC_DEPRECATED
#if (_MSC_VER >= 1300) && !defined(MIDL_PASS) #if (_MSC_VER >= 1300) && !defined(MIDL_PASS)
#define DECLSPEC_DEPRECATED __declspec(deprecated) #define DECLSPEC_DEPRECATED __declspec(deprecated)
#define DEPRECATE_SUPPORTED #define DEPRECATE_SUPPORTED
#else #else
#define DECLSPEC_DEPRECATED #define DECLSPEC_DEPRECATED
#undef DEPRECATE_SUPPORTED #undef DEPRECATE_SUPPORTED
skipping to change at line 559 skipping to change at line 589
// Structure to represent a group-specific affinity, such as that of a // Structure to represent a group-specific affinity, such as that of a
// thread. Specifies the group number and the affinity within that group. // thread. Specifies the group number and the affinity within that group.
// //
typedef struct _GROUP_AFFINITY { typedef struct _GROUP_AFFINITY {
KAFFINITY Mask; KAFFINITY Mask;
WORD Group; WORD Group;
WORD Reserved[3]; WORD Reserved[3];
} GROUP_AFFINITY, *PGROUP_AFFINITY; } GROUP_AFFINITY, *PGROUP_AFFINITY;
#if defined(_WIN64)
#define MAXIMUM_PROC_PER_GROUP 64
#else
#define MAXIMUM_PROC_PER_GROUP 32
#endif
#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
// begin_ntoshvp // begin_ntoshvp
// //
// Handle to an Object // Handle to an Object
// //
#ifdef STRICT #ifdef STRICT
typedef void *HANDLE; typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000) #if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name #define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
skipping to change at line 604 skipping to change at line 646
#ifdef __midl #ifdef __midl
typedef LONG HRESULT; typedef LONG HRESULT;
#else #else
typedef _Return_type_success_(return >= 0) long HRESULT; typedef _Return_type_success_(return >= 0) long HRESULT;
#endif // __midl #endif // __midl
#endif // !_HRESULT_DEFINED #endif // !_HRESULT_DEFINED
// end_ntoshvp // end_ntoshvp
#ifdef __cplusplus #ifdef __cplusplus
#define EXTERN_C extern "C" #define EXTERN_C extern "C"
#define EXTERN_C_START extern "C" {
#define EXTERN_C_END }
#else #else
#define EXTERN_C extern #define EXTERN_C extern
#define EXTERN_C_START
#define EXTERN_C_END
#endif #endif
#if defined(_WIN32) || defined(_MPPC_) #if defined(_WIN32) || defined(_MPPC_)
// Win32 doesn't support __export // Win32 doesn't support __export
#ifdef _68K_ #ifdef _68K_
#define STDMETHODCALLTYPE __cdecl #define STDMETHODCALLTYPE __cdecl
#else #else
#define STDMETHODCALLTYPE __stdcall #define STDMETHODCALLTYPE __stdcall
skipping to change at line 808 skipping to change at line 854
typedef ULONGLONG DWORDLONG; typedef ULONGLONG DWORDLONG;
typedef DWORDLONG *PDWORDLONG; typedef DWORDLONG *PDWORDLONG;
// //
// Define operations to logically shift an int64 by 0..31 bits and to multiply // Define operations to logically shift an int64 by 0..31 bits and to multiply
// 32-bits by 32-bits to form a 64-bit product. // 32-bits by 32-bits to form a 64-bit product.
// //
#if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \ #if defined(MIDL_PASS) || defined(RC_INVOKED) || defined(_M_CEE_PURE) \
|| defined(_68K_) || defined(_MPPC_) \ || defined(_68K_) || defined(_MPPC_) \
|| defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_IA64) || defined(_M_AMD64) || defined(_M_ARM) || defined(_M_AR M64)
// //
// Midl does not understand inline assembler. Therefore, the Rtl functions // 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 // are used for shifts by 0..31 and multiplies of 32-bits times 32-bits to
// form a 64-bit product. // form a 64-bit product.
// //
// //
// IA64 and AMD64 have native 64-bit operations that are just as fast as their // 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 // 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 // shifts of 0..31 and multiplies of 32-bits times 32-bits to form a 64-bit
skipping to change at line 1157 skipping to change at line 1203
// //
// We never even call RtlpNumberOf, we just take the size of dereferencing its r eturn type. // We never even call RtlpNumberOf, we just take the size of dereferencing its r eturn type.
// We do not even implement RtlpNumberOf, we just decare it. // We do not even implement RtlpNumberOf, we just decare it.
// //
// Attempts to pass pointers instead of arrays to this macro result in compile t ime errors. // Attempts to pass pointers instead of arrays to this macro result in compile t ime errors.
// That is the point. // That is the point.
// //
// end_ntndis end_ntminiport // end_ntndis end_ntminiport
#pragma region Application Family #pragma region Application Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
// begin_ntndis begin_ntminiport // begin_ntndis begin_ntminiport
extern "C++" // templates cannot be declared to have 'C' linkage extern "C++" // templates cannot be declared to have 'C' linkage
template <typename T, size_t N> template <typename T, size_t N>
char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N]; char (*RtlpNumberOf( UNALIGNED T (&)[N] ))[N];
// end_ntndis end_ntminiport // end_ntndis end_ntminiport
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
// begin_ntndis begin_ntminiport // begin_ntndis begin_ntminiport
#define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A))) #define RTL_NUMBER_OF_V2(A) (sizeof(*RtlpNumberOf(A)))
// //
// This does not work with: // This does not work with:
// //
// void Foo() // void Foo()
skipping to change at line 1436 skipping to change at line 1482
#define PRODUCT_CORE_N 0x00000062 #define PRODUCT_CORE_N 0x00000062
#define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063 #define PRODUCT_CORE_COUNTRYSPECIFIC 0x00000063
#define PRODUCT_CORE_SINGLELANGUAGE 0x00000064 #define PRODUCT_CORE_SINGLELANGUAGE 0x00000064
#define PRODUCT_CORE 0x00000065 #define PRODUCT_CORE 0x00000065
#define PRODUCT_PROFESSIONAL_WMC 0x00000067 #define PRODUCT_PROFESSIONAL_WMC 0x00000067
#define PRODUCT_MOBILE_CORE 0x00000068 #define PRODUCT_MOBILE_CORE 0x00000068
#define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069 #define PRODUCT_EMBEDDED_INDUSTRY_EVAL 0x00000069
#define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A #define PRODUCT_EMBEDDED_INDUSTRY_E_EVAL 0x0000006A
#define PRODUCT_EMBEDDED_EVAL 0x0000006B #define PRODUCT_EMBEDDED_EVAL 0x0000006B
#define PRODUCT_EMBEDDED_E_EVAL 0x0000006C #define PRODUCT_EMBEDDED_E_EVAL 0x0000006C
#define PRODUCT_CORE_SERVER 0x0000006D #define PRODUCT_NANO_SERVER 0x0000006D
#define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E #define PRODUCT_CLOUD_STORAGE_SERVER 0x0000006E
#define PRODUCT_CORE_CONNECTED 0x0000006F #define PRODUCT_CORE_CONNECTED 0x0000006F
#define PRODUCT_PROFESSIONAL_STUDENT 0x00000070 #define PRODUCT_PROFESSIONAL_STUDENT 0x00000070
#define PRODUCT_CORE_CONNECTED_N 0x00000071 #define PRODUCT_CORE_CONNECTED_N 0x00000071
#define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072 #define PRODUCT_PROFESSIONAL_STUDENT_N 0x00000072
#define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073 #define PRODUCT_CORE_CONNECTED_SINGLELANGUAGE 0x00000073
#define PRODUCT_CORE_CONNECTED_COUNTRYSPECIFIC 0x00000074 #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_UNLICENSED 0xABCDABCD #define PRODUCT_UNLICENSED 0xABCDABCD
#include <sdkddkver.h> #include <sdkddkver.h>
// //
// Language IDs. // Language IDs.
// //
// Note that the named locale APIs (eg GetLocaleInfoEx) are preferred. // Note that the named locale APIs (eg GetLocaleInfoEx) are preferred.
// //
skipping to change at line 2057 skipping to change at line 2118
// Use UNREFERENCED_PARAMETER() if a parameter will never be referenced. // Use UNREFERENCED_PARAMETER() if a parameter will never be referenced.
// //
// DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE will // DBG_UNREFERENCED_PARAMETER and DBG_UNREFERENCED_LOCAL_VARIABLE will
// eventually be made into a null macro to help determine whether there // eventually be made into a null macro to help determine whether there
// is unfinished work. // is unfinished work.
// //
// begin_ntoshvp // begin_ntoshvp
#if ! defined(lint) #if ! defined(lint)
#ifdef _PREFAST_
void _Prefast_unreferenced_parameter_impl_(const char*, ...);
#define UNREFERENCED_PARAMETER(P) _Prefast_unreferenced_parameter_impl_
("PREfast", (P))
#define DBG_UNREFERENCED_PARAMETER(P) _Prefast_unreferenced_parameter_impl_
("PREfast", (P))
#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) _Prefast_unreferenced_parameter_impl_
("PREfast", (V))
#else // _PREFAST_
#define UNREFERENCED_PARAMETER(P) (P) #define UNREFERENCED_PARAMETER(P) (P)
#define DBG_UNREFERENCED_PARAMETER(P) (P) #define DBG_UNREFERENCED_PARAMETER(P) (P)
#define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V) #define DBG_UNREFERENCED_LOCAL_VARIABLE(V) (V)
#endif // _PREFAST_
#else // lint #else // lint
// Note: lint -e530 says don't complain about uninitialized variables for // Note: lint -e530 says don't complain about uninitialized variables for
// this varible. Error 527 has to do with unreachable code. // this varible. Error 527 has to do with unreachable code.
// -restore restores checking to the -save state // -restore restores checking to the -save state
#define UNREFERENCED_PARAMETER(P) \ #define UNREFERENCED_PARAMETER(P) \
/*lint -save -e527 -e530 */ \ /*lint -save -e527 -e530 */ \
{ \ { \
(P) = (P); \ (P) = (P); \
skipping to change at line 2148 skipping to change at line 2221
{ {
typedef INT16 type; typedef INT16 type;
}; };
template <> template <>
struct _ENUM_FLAG_INTEGER_FOR_SIZE<4> struct _ENUM_FLAG_INTEGER_FOR_SIZE<4>
{ {
typedef INT32 type; typedef INT32 type;
}; };
template <>
struct _ENUM_FLAG_INTEGER_FOR_SIZE<8>
{
typedef INT64 type;
};
// used as an approximation of std::underlying_type<T> // used as an approximation of std::underlying_type<T>
template <class T> template <class T>
struct _ENUM_FLAG_SIZED_INTEGER struct _ENUM_FLAG_SIZED_INTEGER
{ {
typedef typename _ENUM_FLAG_INTEGER_FOR_SIZE<sizeof(T)>::type type; typedef typename _ENUM_FLAG_INTEGER_FOR_SIZE<sizeof(T)>::type type;
}; };
} }
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \ #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) \
extern "C++" { \ extern "C++" { \
inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FL inline ENUMTYPE operator | (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((
AG_SIZED_INTEGER<ENUMTYPE>::type)a) | ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type _ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) | ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYP
)b)); } \ E>::type)b)); } \
inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ inline ENUMTYPE &operator |= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYP
ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) |= ((_ENUM_FLAG_SIZED_INTEGER<ENUMT E &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) |= ((_ENUM_FLAG_SIZED_INTEG
YPE>::type)b)); } \ ER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FL inline ENUMTYPE operator & (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((
AG_SIZED_INTEGER<ENUMTYPE>::type)a) & ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type _ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) & ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYP
)b)); } \ E>::type)b)); } \
inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ inline ENUMTYPE &operator &= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYP
ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) &= ((_ENUM_FLAG_SIZED_INTEGER<ENUMT E &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) &= ((_ENUM_FLAG_SIZED_INTEG
YPE>::type)b)); } \ ER<ENUMTYPE>::type)b)); } \
inline ENUMTYPE operator ~ (ENUMTYPE a) { return ENUMTYPE(~((_ENUM_FLAG_SIZED_IN inline ENUMTYPE operator ~ (ENUMTYPE a) throw() { return ENUMTYPE(~((_ENUM_FLAG_
TEGER<ENUMTYPE>::type)a)); } \ SIZED_INTEGER<ENUMTYPE>::type)a)); } \
inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) { return ENUMTYPE(((_ENUM_FL inline ENUMTYPE operator ^ (ENUMTYPE a, ENUMTYPE b) throw() { return ENUMTYPE(((
AG_SIZED_INTEGER<ENUMTYPE>::type)a) ^ ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type _ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type)a) ^ ((_ENUM_FLAG_SIZED_INTEGER<ENUMTYP
)b)); } \ E>::type)b)); } \
inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) { return (ENUMTYPE &)(((_ inline ENUMTYPE &operator ^= (ENUMTYPE &a, ENUMTYPE b) throw() { return (ENUMTYP
ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) ^= ((_ENUM_FLAG_SIZED_INTEGER<ENUMT E &)(((_ENUM_FLAG_SIZED_INTEGER<ENUMTYPE>::type &)a) ^= ((_ENUM_FLAG_SIZED_INTEG
YPE>::type)b)); } \ ER<ENUMTYPE>::type)b)); } \
} }
#else #else
#define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) // NOP, C allows these operators. #define DEFINE_ENUM_FLAG_OPERATORS(ENUMTYPE) // NOP, C allows these operators.
#endif #endif
// Compile-time macros for initializing flag values in const data. // Compile-time macros for initializing flag values in const data.
// //
// When using DEFINE_ENUM_FLAG_OPERATORS for enum values you should use the macr os below // When using DEFINE_ENUM_FLAG_OPERATORS for enum values you should use the macr os below
// when you need to initialize global const data. Without these macros the inli ne operators // when you need to initialize global const data. Without these macros the inli ne operators
// from DEFINE_ENUM_FLAG_OPERATORS force a runtime initialization rather than a // from DEFINE_ENUM_FLAG_OPERATORS force a runtime initialization rather than a
// compile time initialization. This applies even if you have declared the data as const. // compile time initialization. This applies even if you have declared the data as const.
#define COMPILETIME_OR_2FLAGS(a,b) ((UINT)(a)|(UINT)(b)) #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_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_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_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 UMDF_USING_NTSTATUS
#ifndef WIN32_NO_STATUS #ifndef WIN32_NO_STATUS
/*lint -save -e767 */ /*lint -save -e767 */
#define STATUS_WAIT_0 ((DWORD )0x00000000L) #define STATUS_WAIT_0 ((DWORD )0x00000000L)
#define STATUS_ABANDONED_WAIT_0 ((DWORD )0x00000080L) #define STATUS_ABANDONED_WAIT_0 ((DWORD )0x00000080L)
#define STATUS_USER_APC ((DWORD )0x000000C0L) #define STATUS_USER_APC ((DWORD )0x000000C0L)
#define STATUS_TIMEOUT ((DWORD )0x00000102L) #define STATUS_TIMEOUT ((DWORD )0x00000102L)
#define STATUS_PENDING ((DWORD )0x00000103L) #define STATUS_PENDING ((DWORD )0x00000103L)
#define DBG_EXCEPTION_HANDLED ((DWORD )0x00010001L) #define DBG_EXCEPTION_HANDLED ((DWORD )0x00010001L)
#define DBG_CONTINUE ((DWORD )0x00010002L) #define DBG_CONTINUE ((DWORD )0x00010002L)
#define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L) #define STATUS_SEGMENT_NOTIFICATION ((DWORD )0x40000005L)
#define STATUS_FATAL_APP_EXIT ((DWORD )0x40000015L) #define STATUS_FATAL_APP_EXIT ((DWORD )0x40000015L)
#define DBG_REPLY_LATER ((DWORD )0x40010001L)
#define DBG_TERMINATE_THREAD ((DWORD )0x40010003L) #define DBG_TERMINATE_THREAD ((DWORD )0x40010003L)
#define DBG_TERMINATE_PROCESS ((DWORD )0x40010004L) #define DBG_TERMINATE_PROCESS ((DWORD )0x40010004L)
#define DBG_CONTROL_C ((DWORD )0x40010005L) #define DBG_CONTROL_C ((DWORD )0x40010005L)
#define DBG_PRINTEXCEPTION_C ((DWORD )0x40010006L) #define DBG_PRINTEXCEPTION_C ((DWORD )0x40010006L)
#define DBG_RIPEXCEPTION ((DWORD )0x40010007L) #define DBG_RIPEXCEPTION ((DWORD )0x40010007L)
#define DBG_CONTROL_BREAK ((DWORD )0x40010008L) #define DBG_CONTROL_BREAK ((DWORD )0x40010008L)
#define DBG_COMMAND_EXCEPTION ((DWORD )0x40010009L) #define DBG_COMMAND_EXCEPTION ((DWORD )0x40010009L)
#define DBG_PRINTEXCEPTION_WIDE_C ((DWORD )0x4001000AL)
#define STATUS_GUARD_PAGE_VIOLATION ((DWORD )0x80000001L) #define STATUS_GUARD_PAGE_VIOLATION ((DWORD )0x80000001L)
#define STATUS_DATATYPE_MISALIGNMENT ((DWORD )0x80000002L) #define STATUS_DATATYPE_MISALIGNMENT ((DWORD )0x80000002L)
#define STATUS_BREAKPOINT ((DWORD )0x80000003L) #define STATUS_BREAKPOINT ((DWORD )0x80000003L)
#define STATUS_SINGLE_STEP ((DWORD )0x80000004L) #define STATUS_SINGLE_STEP ((DWORD )0x80000004L)
#define STATUS_LONGJUMP ((DWORD )0x80000026L) #define STATUS_LONGJUMP ((DWORD )0x80000026L)
#define STATUS_UNWIND_CONSOLIDATE ((DWORD )0x80000029L) #define STATUS_UNWIND_CONSOLIDATE ((DWORD )0x80000029L)
#define DBG_EXCEPTION_NOT_HANDLED ((DWORD )0x80010001L) #define DBG_EXCEPTION_NOT_HANDLED ((DWORD )0x80010001L)
#define STATUS_ACCESS_VIOLATION ((DWORD )0xC0000005L) #define STATUS_ACCESS_VIOLATION ((DWORD )0xC0000005L)
#define STATUS_IN_PAGE_ERROR ((DWORD )0xC0000006L) #define STATUS_IN_PAGE_ERROR ((DWORD )0xC0000006L)
#define STATUS_INVALID_HANDLE ((DWORD )0xC0000008L) #define STATUS_INVALID_HANDLE ((DWORD )0xC0000008L)
skipping to change at line 2304 skipping to change at line 2386
BYTE Reserved4[224]; BYTE Reserved4[224];
#endif #endif
} XSAVE_FORMAT, *PXSAVE_FORMAT; } XSAVE_FORMAT, *PXSAVE_FORMAT;
// end_ntoshvp // end_ntoshvp
typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER { typedef struct DECLSPEC_ALIGN(8) _XSAVE_AREA_HEADER {
DWORD64 Mask; DWORD64 Mask;
DWORD64 Reserved[7]; DWORD64 CompactionMask;
DWORD64 Reserved2[6];
} XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER; } XSAVE_AREA_HEADER, *PXSAVE_AREA_HEADER;
typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA { typedef struct DECLSPEC_ALIGN(16) _XSAVE_AREA {
XSAVE_FORMAT LegacyState; XSAVE_FORMAT LegacyState;
XSAVE_AREA_HEADER Header; XSAVE_AREA_HEADER Header;
} XSAVE_AREA, *PXSAVE_AREA; } XSAVE_AREA, *PXSAVE_AREA;
typedef struct _XSTATE_CONTEXT { typedef struct _XSTATE_CONTEXT {
DWORD64 Mask; DWORD64 Mask;
DWORD Length; DWORD Length;
skipping to change at line 2387 skipping to change at line 2470
#define InterlockedBitTestAndSet64Release _interlockedbittestandset64 #define InterlockedBitTestAndSet64Release _interlockedbittestandset64
#define InterlockedBitTestAndSet64NoFence _interlockedbittestandset64 #define InterlockedBitTestAndSet64NoFence _interlockedbittestandset64
#define InterlockedBitTestAndReset64 _interlockedbittestandreset64 #define InterlockedBitTestAndReset64 _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Acquire _interlockedbittestandreset64 #define InterlockedBitTestAndReset64Acquire _interlockedbittestandreset64
#define InterlockedBitTestAndReset64Release _interlockedbittestandreset64 #define InterlockedBitTestAndReset64Release _interlockedbittestandreset64
#define InterlockedBitTestAndReset64NoFence _interlockedbittestandreset64 #define InterlockedBitTestAndReset64NoFence _interlockedbittestandreset64
_Must_inspect_result_ _Must_inspect_result_
BOOLEAN BOOLEAN
_bittest ( _bittest (
_In_reads_bytes_((Offset+7)/8) LONG const *Base, _In_reads_bytes_((Offset/8)+1) LONG const *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandcomplement ( _bittestandcomplement (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandset ( _bittestandset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandreset ( _bittestandreset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandset ( _interlockedbittestandset (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG volatile *Bas _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Bas
e, e,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandreset ( _interlockedbittestandreset (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG volatile *Bas _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Bas
e, e,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittest64 ( _bittest64 (
_In_reads_bytes_((Offset+7)/8) LONG64 const *Base, _In_reads_bytes_((Offset/8)+1) LONG64 const *Base,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
BOOLEAN BOOLEAN
_bittestandcomplement64 ( _bittestandcomplement64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base, _Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
BOOLEAN BOOLEAN
_bittestandset64 ( _bittestandset64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base, _Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
BOOLEAN BOOLEAN
_bittestandreset64 ( _bittestandreset64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base, _Inout_updates_bytes_((Offset/8)+1) LONG64 *Base,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandset64 ( _interlockedbittestandset64 (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG64 volatile *B _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG64 volatile *B
ase, ase,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandreset64 ( _interlockedbittestandreset64 (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG64 volatile *B _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG64 volatile *B
ase, ase,
_In_ LONG64 Offset _In_range_(>=,0) LONG64 Offset
); );
#pragma intrinsic(_bittest) #pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement) #pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset) #pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset) #pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset) #pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandreset) #pragma intrinsic(_interlockedbittestandreset)
#pragma intrinsic(_bittest64) #pragma intrinsic(_bittest64)
skipping to change at line 2550 skipping to change at line 2633
#define InterlockedXorRelease _InterlockedXor #define InterlockedXorRelease _InterlockedXor
#define InterlockedXorNoFence _InterlockedXor #define InterlockedXorNoFence _InterlockedXor
#define InterlockedIncrement _InterlockedIncrement #define InterlockedIncrement _InterlockedIncrement
#define InterlockedIncrementAcquire _InterlockedIncrement #define InterlockedIncrementAcquire _InterlockedIncrement
#define InterlockedIncrementRelease _InterlockedIncrement #define InterlockedIncrementRelease _InterlockedIncrement
#define InterlockedIncrementNoFence _InterlockedIncrement #define InterlockedIncrementNoFence _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement #define InterlockedDecrement _InterlockedDecrement
#define InterlockedDecrementAcquire _InterlockedDecrement #define InterlockedDecrementAcquire _InterlockedDecrement
#define InterlockedDecrementRelease _InterlockedDecrement #define InterlockedDecrementRelease _InterlockedDecrement
#define InterlockedDecrementNoFence _InterlockedDecrement #define InterlockedDecrementNoFence _InterlockedDecrement
#define InterlockedAdd _InterlockedAdd #define InterlockedAdd _InlineInterlockedAdd
#define InterlockedAddAcquire _InterlockedAdd #define InterlockedAddAcquire _InlineInterlockedAdd
#define InterlockedAddRelease _InterlockedAdd #define InterlockedAddRelease _InlineInterlockedAdd
#define InterlockedAddNoFence _InterlockedAdd #define InterlockedAddNoFence _InlineInterlockedAdd
#define InterlockedExchange _InterlockedExchange #define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAcquire _InterlockedExchange #define InterlockedExchangeAcquire _InterlockedExchange
#define InterlockedExchangeNoFence _InterlockedExchange #define InterlockedExchangeNoFence _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd #define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd #define InterlockedExchangeAddAcquire _InterlockedExchangeAdd
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd #define InterlockedExchangeAddRelease _InterlockedExchangeAdd
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd #define InterlockedExchangeAddNoFence _InterlockedExchangeAdd
#define InterlockedCompareExchange _InterlockedCompareExchange #define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange #define InterlockedCompareExchangeAcquire _InterlockedCompareExchange
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange #define InterlockedCompareExchangeRelease _InterlockedCompareExchange
skipping to change at line 2588 skipping to change at line 2671
#define InterlockedXor64Release _InterlockedXor64 #define InterlockedXor64Release _InterlockedXor64
#define InterlockedXor64NoFence _InterlockedXor64 #define InterlockedXor64NoFence _InterlockedXor64
#define InterlockedIncrement64 _InterlockedIncrement64 #define InterlockedIncrement64 _InterlockedIncrement64
#define InterlockedIncrementAcquire64 _InterlockedIncrement64 #define InterlockedIncrementAcquire64 _InterlockedIncrement64
#define InterlockedIncrementRelease64 _InterlockedIncrement64 #define InterlockedIncrementRelease64 _InterlockedIncrement64
#define InterlockedIncrementNoFence64 _InterlockedIncrement64 #define InterlockedIncrementNoFence64 _InterlockedIncrement64
#define InterlockedDecrement64 _InterlockedDecrement64 #define InterlockedDecrement64 _InterlockedDecrement64
#define InterlockedDecrementAcquire64 _InterlockedDecrement64 #define InterlockedDecrementAcquire64 _InterlockedDecrement64
#define InterlockedDecrementRelease64 _InterlockedDecrement64 #define InterlockedDecrementRelease64 _InterlockedDecrement64
#define InterlockedDecrementNoFence64 _InterlockedDecrement64 #define InterlockedDecrementNoFence64 _InterlockedDecrement64
#define InterlockedAdd64 _InterlockedAdd64 #define InterlockedAdd64 _InlineInterlockedAdd64
#define InterlockedAddAcquire64 _InterlockedAdd64 #define InterlockedAddAcquire64 _InlineInterlockedAdd64
#define InterlockedAddRelease64 _InterlockedAdd64 #define InterlockedAddRelease64 _InlineInterlockedAdd64
#define InterlockedAddNoFence64 _InterlockedAdd64 #define InterlockedAddNoFence64 _InlineInterlockedAdd64
#define InterlockedExchange64 _InterlockedExchange64 #define InterlockedExchange64 _InterlockedExchange64
#define InterlockedExchangeAcquire64 InterlockedExchange64 #define InterlockedExchangeAcquire64 InterlockedExchange64
#define InterlockedExchangeNoFence64 InterlockedExchange64 #define InterlockedExchangeNoFence64 InterlockedExchange64
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 #define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64 #define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64 #define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64 #define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64
#define InterlockedCompareExchange64 _InterlockedCompareExchange64 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64 #define InterlockedCompareExchangeAcquire64 InterlockedCompareExchange64
#define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64 #define InterlockedCompareExchangeRelease64 InterlockedCompareExchange64
skipping to change at line 2744 skipping to change at line 2827
LONG64 LONG64
InterlockedExchangeAdd64 ( InterlockedExchangeAdd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend, _Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
_In_ LONG64 Value _In_ LONG64 Value
); );
#if !defined(_X86AMD64_) #if !defined(_X86AMD64_)
__forceinline __forceinline
LONG64 LONG64
InterlockedAdd64 ( _InlineInterlockedAdd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend, _Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
_In_ LONG64 Value _In_ LONG64 Value
) )
{ {
return InterlockedExchangeAdd64(Addend, Value) + Value; return InterlockedExchangeAdd64(Addend, Value) + Value;
} }
#endif #endif
skipping to change at line 2842 skipping to change at line 2925
_In_ SHORT ExChange _In_ SHORT ExChange
); );
#pragma intrinsic(_InterlockedExchange8) #pragma intrinsic(_InterlockedExchange8)
#pragma intrinsic(_InterlockedExchange16) #pragma intrinsic(_InterlockedExchange16)
#endif /* _MSC_VER >= 1600 */ #endif /* _MSC_VER >= 1600 */
#if _MSC_FULL_VER >= 140041204 #if _MSC_FULL_VER >= 140041204
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd8 _InterlockedAnd8 #define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8 #define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8 #define InterlockedXor8 _InterlockedXor8
#define InterlockedAnd16 _InterlockedAnd16 #define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16 #define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16 #define InterlockedXor16 _InterlockedXor16
char char
InterlockedExchangeAdd8 (
_Inout_ _Interlocked_operand_ char volatile * _Addend,
_In_ char _Value
);
char
InterlockedAnd8 ( InterlockedAnd8 (
_Inout_ _Interlocked_operand_ char volatile *Destination, _Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value _In_ char Value
); );
char char
InterlockedOr8 ( InterlockedOr8 (
_Inout_ _Interlocked_operand_ char volatile *Destination, _Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value _In_ char Value
); );
skipping to change at line 2885 skipping to change at line 2975
_Inout_ _Interlocked_operand_ SHORT volatile *Destination, _Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value _In_ SHORT Value
); );
SHORT SHORT
InterlockedXor16( InterlockedXor16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination, _Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value _In_ SHORT Value
); );
#pragma intrinsic (_InterlockedExchangeAdd8)
#pragma intrinsic (_InterlockedAnd8) #pragma intrinsic (_InterlockedAnd8)
#pragma intrinsic (_InterlockedOr8) #pragma intrinsic (_InterlockedOr8)
#pragma intrinsic (_InterlockedXor8) #pragma intrinsic (_InterlockedXor8)
#pragma intrinsic (_InterlockedAnd16) #pragma intrinsic (_InterlockedAnd16)
#pragma intrinsic (_InterlockedOr16) #pragma intrinsic (_InterlockedOr16)
#pragma intrinsic (_InterlockedXor16) #pragma intrinsic (_InterlockedXor16)
#endif #endif
// end_ntoshvp // end_ntoshvp
skipping to change at line 3479 skipping to change at line 3570
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | \ #define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | \
CONTEXT_FLOATING_POINT) CONTEXT_FLOATING_POINT)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | \ #define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | \
CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | \ CONTEXT_SEGMENTS | CONTEXT_FLOATING_POINT | \
CONTEXT_DEBUG_REGISTERS) CONTEXT_DEBUG_REGISTERS)
#define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x00000040L) #define CONTEXT_XSTATE (CONTEXT_AMD64 | 0x00000040L)
#if defined(XBOX_SYSTEMOS)
#define CONTEXT_KERNEL_DEBUGGER 0x04000000L
#endif
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L #define CONTEXT_EXCEPTION_ACTIVE 0x08000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L #define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L #define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L #define CONTEXT_EXCEPTION_REPORTING 0x80000000L
// begin_wx86 // begin_wx86
#endif // !defined(RC_INVOKED) #endif // !defined(RC_INVOKED)
// //
skipping to change at line 3927 skipping to change at line 4024
#pragma intrinsic(_BitScanForward) #pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse) #pragma intrinsic(_BitScanReverse)
// //
// Interlocked intrinsic functions. // Interlocked intrinsic functions.
// //
#pragma intrinsic(_InterlockedAnd8) #pragma intrinsic(_InterlockedAnd8)
#pragma intrinsic(_InterlockedOr8) #pragma intrinsic(_InterlockedOr8)
#pragma intrinsic(_InterlockedXor8) #pragma intrinsic(_InterlockedXor8)
#pragma intrinsic(_InterlockedExchangeAdd8)
#pragma intrinsic(_InterlockedAnd16) #pragma intrinsic(_InterlockedAnd16)
#pragma intrinsic(_InterlockedOr16) #pragma intrinsic(_InterlockedOr16)
#pragma intrinsic(_InterlockedXor16) #pragma intrinsic(_InterlockedXor16)
#pragma intrinsic(_InterlockedIncrement16) #pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedDecrement16) #pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedCompareExchange16) #pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedAnd) #pragma intrinsic(_InterlockedAnd)
#pragma intrinsic(_InterlockedOr) #pragma intrinsic(_InterlockedOr)
skipping to change at line 3958 skipping to change at line 4056
#pragma intrinsic(_InterlockedDecrement64) #pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedExchange64) #pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedCompareExchange64) #pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedExchangePointer) #pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_InterlockedCompareExchangePointer) #pragma intrinsic(_InterlockedCompareExchangePointer)
#define InterlockedAnd8 _InterlockedAnd8 #define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8 #define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8 #define InterlockedXor8 _InterlockedXor8
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd16 _InterlockedAnd16 #define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16 #define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16 #define InterlockedXor16 _InterlockedXor16
#define InterlockedIncrement16 _InterlockedIncrement16 #define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16 #define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedAnd _InterlockedAnd #define InterlockedAnd _InterlockedAnd
#define InterlockedOr _InterlockedOr #define InterlockedOr _InterlockedOr
skipping to change at line 4167 skipping to change at line 4266
#define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64_acq #define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64_acq
#define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64_rel #define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64_rel
#define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64_nf #define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64_nf
#define InterlockedExchangePointerAcquire _InterlockedExchangePointer_acq #define InterlockedExchangePointerAcquire _InterlockedExchangePointer_acq
#define InterlockedExchangePointerNoFence _InterlockedExchangePointer_nf #define InterlockedExchangePointerNoFence _InterlockedExchangePointer_nf
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePoin ter_acq #define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangePoin ter_acq
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePoin ter_rel #define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePoin ter_rel
#define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePoin ter_nf #define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePoin ter_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. // Define accessors for volatile loads and stores.
// //
#pragma intrinsic(__iso_volatile_load8) #pragma intrinsic(__iso_volatile_load8)
#pragma intrinsic(__iso_volatile_load16) #pragma intrinsic(__iso_volatile_load16)
#pragma intrinsic(__iso_volatile_load32) #pragma intrinsic(__iso_volatile_load32)
#pragma intrinsic(__iso_volatile_load64) #pragma intrinsic(__iso_volatile_load64)
#pragma intrinsic(__iso_volatile_store8) #pragma intrinsic(__iso_volatile_store8)
#pragma intrinsic(__iso_volatile_store16) #pragma intrinsic(__iso_volatile_store16)
skipping to change at line 4774 skipping to change at line 4881
PULONGLONG D11; PULONGLONG D11;
PULONGLONG D12; PULONGLONG D12;
PULONGLONG D13; PULONGLONG D13;
PULONGLONG D14; PULONGLONG D14;
PULONGLONG D15; PULONGLONG D15;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS; } KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
#endif // _ARM_ #endif // _ARM_
//
// Scope table structure definition.
//
typedef struct _SCOPE_TABLE_ARM64 {
DWORD Count;
struct
{
DWORD BeginAddress;
DWORD EndAddress;
DWORD HandlerAddress;
DWORD JumpTarget;
} ScopeRecord[1];
} SCOPE_TABLE_ARM64, *PSCOPE_TABLE_ARM64;
// begin_ntoshvp
#ifdef _ARM64_
#if defined(_M_ARM64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#include <intrin.h>
#if !defined(_M_CEE_PURE)
#pragma intrinsic(__getReg)
#pragma intrinsic(__getCallerReg)
#pragma intrinsic(__getRegFp)
#pragma intrinsic(__getCallerRegFp)
#pragma intrinsic(__setReg)
#pragma intrinsic(__setCallerReg)
#pragma intrinsic(__setRegFp)
#pragma intrinsic(__setCallerRegFp)
#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)
#ifdef __cplusplus
extern "C" {
#endif
//
// 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)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
__dmb(_ARM64_BARRIER_ISHST);
__yield();
}
#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)
//
// 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 _InterlockedCompareExchangePoin
ter_acq
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangePoin
ter_rel
#define InterlockedCompareExchangePointerNoFence _InterlockedCompareExchangePoin
ter_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((LONG6
4 *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrementNoFence64((LONG6
4 *)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
// end_ntoshvp
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_ntoshvp
// 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(_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_ntoshvp
// 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 ARM64_SYSREG(op0, op1, crn, crm, op2) \
( ((op0 & 1) << 14) | \
((op1 & 7) << 11) | \
((crn & 15) << 7) | \
((crm & 15) << 3) | \
((op2 & 7) << 0) )
#define ARM64_PMCCNTR_EL0 ARM64_SYSREG(3,3, 9,13,0) // Cycle Count Regist
er [CP15_PMCCNTR]
#define ARM64_PMSELR_EL0 ARM64_SYSREG(3,3, 9,12,5) // Event Counter Sele
ction Register [CP15_PMSELR]
#define ARM64_PMXEVCNTR_EL0 ARM64_SYSREG(3,3, 9,13,2) // Event Count Regist
er [CP15_PMXEVCNTR]
#define ARM64_PMXEVCNTRn_EL0(n) ARM64_SYSREG(3,3,14, 8+((n)/8), (n)%8) // Dir
ect 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
//
// Define function to read the value of the time stamp counter.
//
FORCEINLINE
DWORD64
ReadTimeStampCounter(
VOID
)
{
return (DWORD64)_ReadStatusReg(ARM64_PMCCNTR_EL0);
}
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)
#ifdef __cplusplus
}
#endif
#endif // !defined(_M_CEE_PURE)
#endif // defined(_M_ARM64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#if defined(_M_CEE_PURE)
FORCEINLINE
VOID
YieldProcessor (
VOID
)
{
}
#endif
// 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 fe
tch
// begin_wx86
//
// The following flags control the contents of the CONTEXT structure.
//
#if !defined(RC_INVOKED)
#define CONTEXT_ARM64 0x00400000L
// end_wx86
#define CONTEXT_CONTROL (CONTEXT_ARM64 | 0x1L)
#define CONTEXT_INTEGER (CONTEXT_ARM64 | 0x2L)
#define CONTEXT_FLOATING_POINT (CONTEXT_ARM64 | 0x4L)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARM64 | 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
// 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 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 union _NEON128 {
struct {
ULONGLONG Low;
LONGLONG High;
} DUMMYSTRUCTNAME;
double D[2];
float S[4];
WORD H[8];
BYTE B[16];
} NEON128, *PNEON128;
typedef struct DECLSPEC_ALIGN(16) _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;
} DUMMYSTRUCTNAME;
DWORD64 X[29];
} DUMMYUNIONNAME;
/* +0x0f0 */ DWORD64 Fp;
/* +0x0f8 */ DWORD64 Lr;
/* +0x100 */ DWORD64 Sp;
/* +0x108 */ DWORD64 Pc;
//
// Floating Point/NEON Registers
//
/* +0x110 */ 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 */
} CONTEXT, *PCONTEXT;
// end_ntoshvp
//
// Select platform-specific definitions
//
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY RUNTIME_FUNCTION, *PRUNTIME_F
UNCTION;
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;
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 exception dispatch context structure.
//
typedef struct _DISPATCHER_CONTEXT {
DWORD64 ControlPc;
DWORD64 ImageBase;
PRUNTIME_FUNCTION FunctionEntry;
DWORD64 EstablisherFrame;
DWORD64 TargetPc;
PCONTEXT ContextRecord;
PEXCEPTION_ROUTINE LanguageHandler;
PVOID HandlerData;
PUNWIND_HISTORY_TABLE HistoryTable;
DWORD ScopeIndex;
BOOLEAN ControlPcIsUnwound;
PBYTE NonVolatileRegisters;
} 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,
DWORD64 EstablisherFrame
);
typedef
VOID
(*PTERMINATION_HANDLER) (
BOOLEAN AbnormalTermination,
DWORD64 EstablisherFrame
);
//
// 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_C
ALLBACK;
#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
"OutOfProcessFunctionTableCallback"
//
// Nonvolatile context pointer record.
//
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
PDWORD64 X19;
PDWORD64 X20;
PDWORD64 X21;
PDWORD64 X22;
PDWORD64 X23;
PDWORD64 X24;
PDWORD64 X25;
PDWORD64 X26;
PDWORD64 X27;
PDWORD64 X28;
PDWORD64 Fp;
PDWORD64 Lr;
PDWORD64 D8;
PDWORD64 D9;
PDWORD64 D10;
PDWORD64 D11;
PDWORD64 D12;
PDWORD64 D13;
PDWORD64 D14;
PDWORD64 D15;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
// begin_ntoshvp
#endif // _ARM64_
// end_ntoshvp
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
// //
// Assert exception. // Assert exception.
// //
#if !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defined(MID L_PASS) #if !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defined(MID L_PASS)
skipping to change at line 4883 skipping to change at line 6074
#define ASSERT_BREAKPOINT (BREAK_DEBUG_BASE+3) // Cause a STATUS_ASSERT ION_FAILURE exception to be raised. #define ASSERT_BREAKPOINT (BREAK_DEBUG_BASE+3) // Cause a STATUS_ASSERT ION_FAILURE exception to be raised.
#if !defined(_PREFAST_) #if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT) #define DbgRaiseAssertionFailure() __break(ASSERT_BREAKPOINT)
#endif // !defined(_PREFAST_) #endif // !defined(_PREFAST_)
#endif // defined(_M_IA64) #endif // defined(_M_IA64)
#elif defined(_ARM64_)
#if defined(_M_ARM64)
void
__break(
_In_ int Code
);
#pragma intrinsic (__break)
#if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __break(0xf001)
#endif // !defined(_PREFAST_)
#endif // defined(_M_ARM64)
#elif defined(_ARM_) #elif defined(_ARM_)
#if defined(_M_ARM) #if defined(_M_ARM)
VOID VOID
__emit( __emit(
const unsigned __int32 opcode const unsigned __int32 opcode
); );
#pragma intrinsic(__emit) #pragma intrinsic(__emit)
#if !defined(_PREFAST_) #if !defined(_PREFAST_)
#define DbgRaiseAssertionFailure() __emit(0xdefc) // THUMB_ASSERT #define DbgRaiseAssertionFailure() __emit(0xdefc) // THUMB_ASSERT
#endif // !defined(_PREFAST_) #endif // !defined(_PREFAST_)
#endif // defined(_M_ARM) #endif // defined(_M_ARM)
#endif // _AMD64_, _X86_, _IA64_, _ARM_ #endif // _AMD64_, _X86_, _IA64_, _ARM64_, _ARM_
#endif // !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defin ed(MIDL_PASS) #endif // !defined(_DBGRAISEASSERTIONFAILURE_) && !defined(RC_INVOKED) && !defin ed(MIDL_PASS)
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
// begin_ntoshvp // begin_ntoshvp
#ifdef _X86_ #ifdef _X86_
skipping to change at line 4982 skipping to change at line 6192
#define InterlockedBitTestAndSetRelease _interlockedbittestandset #define InterlockedBitTestAndSetRelease _interlockedbittestandset
#define InterlockedBitTestAndSetNoFence _interlockedbittestandset #define InterlockedBitTestAndSetNoFence _interlockedbittestandset
#define InterlockedBitTestAndReset _interlockedbittestandreset #define InterlockedBitTestAndReset _interlockedbittestandreset
#define InterlockedBitTestAndResetAcquire _interlockedbittestandreset #define InterlockedBitTestAndResetAcquire _interlockedbittestandreset
#define InterlockedBitTestAndResetRelease _interlockedbittestandreset #define InterlockedBitTestAndResetRelease _interlockedbittestandreset
#define InterlockedBitTestAndResetNoFence _interlockedbittestandreset #define InterlockedBitTestAndResetNoFence _interlockedbittestandreset
_Must_inspect_result_ _Must_inspect_result_
BOOLEAN BOOLEAN
_bittest ( _bittest (
_In_reads_bytes_((Offset+7)/8) LONG const *Base, _In_reads_bytes_((Offset/8)+1) LONG const *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandcomplement ( _bittestandcomplement (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandset ( _bittestandset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_bittestandreset ( _bittestandreset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base, _Inout_updates_bytes_((Offset/8)+1) LONG *Base,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandset ( _interlockedbittestandset (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG volatile *Bas _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Bas
e, e,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
BOOLEAN BOOLEAN
_interlockedbittestandreset ( _interlockedbittestandreset (
_Inout_updates_bytes_((Offset+7)/8) _Interlocked_operand_ LONG volatile *Bas _Inout_updates_bytes_((Offset/8)+1) _Interlocked_operand_ LONG volatile *Bas
e, e,
_In_ LONG Offset _In_range_(>=,0) LONG Offset
); );
#pragma intrinsic(_bittest) #pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement) #pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset) #pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset) #pragma intrinsic(_bittestandreset)
#pragma intrinsic(_interlockedbittestandset) #pragma intrinsic(_interlockedbittestandset)
#pragma intrinsic(_interlockedbittestandreset) #pragma intrinsic(_interlockedbittestandreset)
// //
skipping to change at line 5047 skipping to change at line 6257
_Success_(return != 0) _Success_(return != 0)
BOOLEAN BOOLEAN
_BitScanReverse ( _BitScanReverse (
_Out_ DWORD *Index, _Out_ DWORD *Index,
_In_ DWORD Mask _In_ DWORD Mask
); );
#pragma intrinsic(_BitScanForward) #pragma intrinsic(_BitScanForward)
#pragma intrinsic(_BitScanReverse) #pragma intrinsic(_BitScanReverse)
_Success_(return != 0)
FORCEINLINE
BOOLEAN
_InlineBitScanForward64 (
_Out_ DWORD *Index,
_In_ DWORD64 Mask
)
{
if (_BitScanForward(Index, (DWORD)Mask)) {
return 1;
}
if (_BitScanForward(Index, (DWORD)(Mask >> 32))) {
*Index += 32;
return 1;
}
return 0;
}
#define BitScanForward64 _InlineBitScanForward64
_Success_(return != 0)
FORCEINLINE
BOOLEAN
_InlineBitScanReverse64 (
_Out_ DWORD *Index,
_In_ DWORD64 Mask
)
{
if (_BitScanReverse(Index, (DWORD)(Mask >> 32))) {
*Index += 32;
return 1;
}
if (_BitScanReverse(Index, (DWORD)Mask)) {
return 1;
}
return 0;
}
#define BitScanReverse64 _InlineBitScanReverse64
#endif // !defined(_MANAGED) #endif // !defined(_MANAGED)
// //
// Interlocked intrinsic functions. // Interlocked intrinsic functions.
// //
#if !defined(_MANAGED) #if !defined(_MANAGED)
#define InterlockedIncrement16 _InterlockedIncrement16 #define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedIncrementAcquire16 _InterlockedIncrement16 #define InterlockedIncrementAcquire16 _InterlockedIncrement16
skipping to change at line 5131 skipping to change at line 6385
#define InterlockedIncrement _InterlockedIncrement #define InterlockedIncrement _InterlockedIncrement
#define InterlockedIncrementAcquire _InterlockedIncrement #define InterlockedIncrementAcquire _InterlockedIncrement
#define InterlockedIncrementRelease _InterlockedIncrement #define InterlockedIncrementRelease _InterlockedIncrement
#define InterlockedIncrementNoFence _InterlockedIncrement #define InterlockedIncrementNoFence _InterlockedIncrement
#define InterlockedDecrement _InterlockedDecrement #define InterlockedDecrement _InterlockedDecrement
#define InterlockedDecrementAcquire _InterlockedDecrement #define InterlockedDecrementAcquire _InterlockedDecrement
#define InterlockedDecrementRelease _InterlockedDecrement #define InterlockedDecrementRelease _InterlockedDecrement
#define InterlockedDecrementNoFence _InterlockedDecrement #define InterlockedDecrementNoFence _InterlockedDecrement
#define InterlockedAdd _InterlockedAdd #define InterlockedAdd _InlineInterlockedAdd
#define InterlockedAddAcquire _InterlockedAdd #define InterlockedAddAcquire _InlineInterlockedAdd
#define InterlockedAddRelease _InterlockedAdd #define InterlockedAddRelease _InlineInterlockedAdd
#define InterlockedAddNoFence _InterlockedAdd #define InterlockedAddNoFence _InlineInterlockedAdd
#define InterlockedAddNoFence64 _InterlockedAdd64 #define InterlockedAddNoFence64 _InlineInterlockedAdd64
#define InterlockedExchange _InterlockedExchange #define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAcquire _InterlockedExchange #define InterlockedExchangeAcquire _InterlockedExchange
#define InterlockedExchangeNoFence _InterlockedExchange #define InterlockedExchangeNoFence _InterlockedExchange
#define InterlockedExchangeAdd _InterlockedExchangeAdd #define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd #define InterlockedExchangeAddAcquire _InterlockedExchangeAdd
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd #define InterlockedExchangeAddRelease _InterlockedExchangeAdd
#define InterlockedExchangeAddNoFence _InterlockedExchangeAdd #define InterlockedExchangeAddNoFence _InterlockedExchangeAdd
skipping to change at line 5199 skipping to change at line 6453
LONG LONG
__cdecl __cdecl
InterlockedExchangeAdd ( InterlockedExchangeAdd (
_Inout_ _Interlocked_operand_ LONG volatile *Addend, _Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value _In_ LONG Value
); );
FORCEINLINE FORCEINLINE
LONG LONG
InterlockedAdd ( _InlineInterlockedAdd (
_Inout_ _Interlocked_operand_ LONG volatile *Addend, _Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value _In_ LONG Value
) )
{ {
return InterlockedExchangeAdd(Addend, Value) + Value; return InterlockedExchangeAdd(Addend, Value) + Value;
} }
LONG LONG
skipping to change at line 5300 skipping to change at line 6554
_In_ SHORT ExChange _In_ SHORT ExChange
); );
#pragma intrinsic(_InterlockedExchange8) #pragma intrinsic(_InterlockedExchange8)
#pragma intrinsic(_InterlockedExchange16) #pragma intrinsic(_InterlockedExchange16)
#endif // _MSC_VER >= 1600 #endif // _MSC_VER >= 1600
#if _MSC_FULL_VER >= 140041204 #if _MSC_FULL_VER >= 140041204
#define InterlockedExchangeAdd8 _InterlockedExchangeAdd8
#define InterlockedAnd8 _InterlockedAnd8 #define InterlockedAnd8 _InterlockedAnd8
#define InterlockedOr8 _InterlockedOr8 #define InterlockedOr8 _InterlockedOr8
#define InterlockedXor8 _InterlockedXor8 #define InterlockedXor8 _InterlockedXor8
#define InterlockedAnd16 _InterlockedAnd16 #define InterlockedAnd16 _InterlockedAnd16
#define InterlockedOr16 _InterlockedOr16 #define InterlockedOr16 _InterlockedOr16
#define InterlockedXor16 _InterlockedXor16 #define InterlockedXor16 _InterlockedXor16
#define InterlockedCompareExchange16 _InterlockedCompareExchange16 #define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedIncrement16 _InterlockedIncrement16 #define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedDecrement16 _InterlockedDecrement16 #define InterlockedDecrement16 _InterlockedDecrement16
char char
InterlockedExchangeAdd8 (
_Inout_ _Interlocked_operand_ char volatile * _Addend,
_In_ char _Value
);
char
InterlockedAnd8 ( InterlockedAnd8 (
_Inout_ _Interlocked_operand_ char volatile *Destination, _Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value _In_ char Value
); );
char char
InterlockedOr8 ( InterlockedOr8 (
_Inout_ _Interlocked_operand_ char volatile *Destination, _Inout_ _Interlocked_operand_ char volatile *Destination,
_In_ char Value _In_ char Value
); );
skipping to change at line 5363 skipping to change at line 6624
SHORT SHORT
_InterlockedIncrement16 ( _InterlockedIncrement16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination _Inout_ _Interlocked_operand_ SHORT volatile *Destination
); );
SHORT SHORT
_InterlockedDecrement16 ( _InterlockedDecrement16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination _Inout_ _Interlocked_operand_ SHORT volatile *Destination
); );
#pragma intrinsic (_InterlockedExchangeAdd8)
#pragma intrinsic (_InterlockedAnd8) #pragma intrinsic (_InterlockedAnd8)
#pragma intrinsic (_InterlockedOr8) #pragma intrinsic (_InterlockedOr8)
#pragma intrinsic (_InterlockedXor8) #pragma intrinsic (_InterlockedXor8)
#pragma intrinsic (_InterlockedAnd16) #pragma intrinsic (_InterlockedAnd16)
#pragma intrinsic (_InterlockedOr16) #pragma intrinsic (_InterlockedOr16)
#pragma intrinsic (_InterlockedXor16) #pragma intrinsic (_InterlockedXor16)
#pragma intrinsic (_InterlockedCompareExchange16) #pragma intrinsic (_InterlockedCompareExchange16)
#pragma intrinsic (_InterlockedIncrement16) #pragma intrinsic (_InterlockedIncrement16)
#pragma intrinsic (_InterlockedDecrement16) #pragma intrinsic (_InterlockedDecrement16)
#endif /* _MSC_FULL_VER >= 140040816 */ #endif /* _MSC_FULL_VER >= 140040816 */
// //
// Define 64-bit operations in terms of InterlockedCompareExchange64 // Define 64-bit operations in terms of InterlockedCompareExchange64
// //
#define InterlockedCompareExchange64 _InterlockedCompareExchange64 #define InterlockedCompareExchange64 _InterlockedCompareExchange64
FORCEINLINE FORCEINLINE
LONG64 LONG64
_InterlockedAnd64 ( _InlineInterlockedAnd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination, _Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value _In_ LONG64 Value
) )
{ {
LONG64 Old; LONG64 Old;
do { do {
Old = *Destination; Old = *Destination;
} while (InterlockedCompareExchange64(Destination, } while (InterlockedCompareExchange64(Destination,
Old & Value, Old & Value,
Old) != Old); Old) != Old);
return Old; return Old;
} }
#define InterlockedAnd64 _InterlockedAnd64 #define InterlockedAnd64 _InlineInterlockedAnd64
#define InterlockedAnd64Acquire _InterlockedAnd64 #define InterlockedAnd64Acquire _InlineInterlockedAnd64
#define InterlockedAnd64Release _InterlockedAnd64 #define InterlockedAnd64Release _InlineInterlockedAnd64
#define InterlockedAnd64NoFence _InterlockedAnd64 #define InterlockedAnd64NoFence _InlineInterlockedAnd64
FORCEINLINE FORCEINLINE
LONG64 LONG64
_InterlockedAdd64 ( _InlineInterlockedAdd64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Addend, _Inout_ _Interlocked_operand_ LONG64 volatile *Addend,
_In_ LONG64 Value _In_ LONG64 Value
) )
{ {
LONG64 Old; LONG64 Old;
do { do {
Old = *Addend; Old = *Addend;
} while (InterlockedCompareExchange64(Addend, } while (InterlockedCompareExchange64(Addend,
Old + Value, Old + Value,
Old) != Old); Old) != Old);
return Old + Value; return Old + Value;
} }
#define InterlockedAdd64 _InterlockedAdd64 #define InterlockedAdd64 _InlineInterlockedAdd64
#define InterlockedAddAcquire64 _InterlockedAdd64 #define InterlockedAddAcquire64 _InlineInterlockedAdd64
#define InterlockedAddRelease64 _InterlockedAdd64 #define InterlockedAddRelease64 _InlineInterlockedAdd64
#define InterlockedAddNoFence64 _InterlockedAdd64 #define InterlockedAddNoFence64 _InlineInterlockedAdd64
#endif // !defined(_MANAGED) #endif // !defined(_MANAGED)
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b) #define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd((LONG *)a, b)
#define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAdd((LONG *) a, b) #define InterlockedExchangeAddSizeTAcquire(a, b) InterlockedExchangeAdd((LONG *) a, b)
#define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAdd((LONG *) a, b) #define InterlockedExchangeAddSizeTNoFence(a, b) InterlockedExchangeAdd((LONG *) a, b)
#define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a) #define InterlockedIncrementSizeT(a) InterlockedIncrement((LONG *)a)
#define InterlockedIncrementSizeTNoFence(a) InterlockedIncrement((LONG *)a) #define InterlockedIncrementSizeTNoFence(a) InterlockedIncrement((LONG *)a)
#define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a) #define InterlockedDecrementSizeT(a) InterlockedDecrement((LONG *)a)
#define InterlockedDecrementSizeTNoFence(a) InterlockedDecrement((LONG *)a) #define InterlockedDecrementSizeTNoFence(a) InterlockedDecrement((LONG *)a)
skipping to change at line 5455 skipping to change at line 6717
); );
#pragma intrinsic(_InterlockedXor) #pragma intrinsic(_InterlockedXor)
#define InterlockedXor _InterlockedXor #define InterlockedXor _InterlockedXor
#if !defined(_MANAGED) #if !defined(_MANAGED)
LONGLONG LONGLONG
FORCEINLINE FORCEINLINE
_InterlockedOr64 ( _InlineInterlockedOr64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination, _Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value _In_ LONGLONG Value
) )
{ {
LONGLONG Old; LONGLONG Old;
do { do {
Old = *Destination; Old = *Destination;
} while (InterlockedCompareExchange64(Destination, } while (InterlockedCompareExchange64(Destination,
Old | Value, Old | Value,
Old) != Old); Old) != Old);
return Old; return Old;
} }
#define InterlockedOr64 _InterlockedOr64 #define InterlockedOr64 _InlineInterlockedOr64
FORCEINLINE FORCEINLINE
LONG64 LONG64
_InterlockedXor64 ( _InlineInterlockedXor64 (
_Inout_ _Interlocked_operand_ LONG64 volatile *Destination, _Inout_ _Interlocked_operand_ LONG64 volatile *Destination,
_In_ LONG64 Value _In_ LONG64 Value
) )
{ {
LONG64 Old; LONG64 Old;
do { do {
Old = *Destination; Old = *Destination;
} while (InterlockedCompareExchange64(Destination, } while (InterlockedCompareExchange64(Destination,
Old ^ Value, Old ^ Value,
Old) != Old); Old) != Old);
return Old; return Old;
} }
#define InterlockedXor64 _InterlockedXor64 #define InterlockedXor64 _InlineInterlockedXor64
LONGLONG LONGLONG
FORCEINLINE FORCEINLINE
_InterlockedIncrement64 ( _InlineInterlockedIncrement64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend _Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
) )
{ {
LONGLONG Old; LONGLONG Old;
do { do {
Old = *Addend; Old = *Addend;
} while (InterlockedCompareExchange64(Addend, } while (InterlockedCompareExchange64(Addend,
Old + 1, Old + 1,
Old) != Old); Old) != Old);
return Old + 1; return Old + 1;
} }
#define InterlockedIncrement64 _InterlockedIncrement64 #define InterlockedIncrement64 _InlineInterlockedIncrement64
#define InterlockedIncrementAcquire64 InterlockedIncrement64 #define InterlockedIncrementAcquire64 InterlockedIncrement64
FORCEINLINE FORCEINLINE
LONGLONG LONGLONG
_InterlockedDecrement64 ( _InlineInterlockedDecrement64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend _Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
) )
{ {
LONGLONG Old; LONGLONG Old;
do { do {
Old = *Addend; Old = *Addend;
} while (InterlockedCompareExchange64(Addend, } while (InterlockedCompareExchange64(Addend,
Old - 1, Old - 1,
Old) != Old); Old) != Old);
return Old - 1; return Old - 1;
} }
#define InterlockedDecrement64 _InterlockedDecrement64 #define InterlockedDecrement64 _InlineInterlockedDecrement64
FORCEINLINE FORCEINLINE
LONGLONG LONGLONG
_InterlockedExchange64 ( _InlineInterlockedExchange64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Target, _Inout_ _Interlocked_operand_ LONGLONG volatile *Target,
_In_ LONGLONG Value _In_ LONGLONG Value
) )
{ {
LONGLONG Old; LONGLONG Old;
do { do {
Old = *Target; Old = *Target;
} while (InterlockedCompareExchange64(Target, } while (InterlockedCompareExchange64(Target,
Value, Value,
Old) != Old); Old) != Old);
return Old; return Old;
} }
#define InterlockedExchange64 _InterlockedExchange64 #define InterlockedExchange64 _InlineInterlockedExchange64
#define InterlockedExchangeAcquire64 InterlockedExchange64 #define InterlockedExchangeAcquire64 InterlockedExchange64
#define InterlockedExchangeNoFence64 _InterlockedExchange64 #define InterlockedExchangeNoFence64 _InlineInterlockedExchange64
FORCEINLINE FORCEINLINE
LONGLONG LONGLONG
_InterlockedExchangeAdd64 ( _InlineInterlockedExchangeAdd64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend, _Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value _In_ LONGLONG Value
) )
{ {
LONGLONG Old; LONGLONG Old;
do { do {
Old = *Addend; Old = *Addend;
} while (InterlockedCompareExchange64(Addend, } while (InterlockedCompareExchange64(Addend,
Old + Value, Old + Value,
Old) != Old); Old) != Old);
return Old; return Old;
} }
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64 #define InterlockedExchangeAdd64 _InlineInterlockedExchangeAdd64
#define InterlockedExchangeAddNoFence64 _InterlockedExchangeAdd64 #define InterlockedExchangeAddNoFence64 _InlineInterlockedExchangeAdd64
// //
// FS relative adds and increments. // FS relative adds and increments.
// //
VOID VOID
__incfsbyte ( __incfsbyte (
_In_ DWORD Offset _In_ DWORD Offset
); );
skipping to change at line 6032 skipping to change at line 7294
DWORD Reserved_0 : 1; DWORD Reserved_0 : 1;
DWORD Default_Big : 1; DWORD Default_Big : 1;
DWORD Granularity : 1; DWORD Granularity : 1;
DWORD BaseHi : 8; DWORD BaseHi : 8;
} Bits; } Bits;
} HighWord; } HighWord;
} LDT_ENTRY, *PLDT_ENTRY; } LDT_ENTRY, *PLDT_ENTRY;
#endif #endif
#if defined(_M_IA64) && !defined(RC_INVOKED) && !defined(MIDL_PASS)
#ifdef __cplusplus
extern "C" {
#endif
//
// Define bit test intrinsics.
//
#define BitTest _bittest
#define BitTestAndComplement _bittestandcomplement
#define BitTestAndSet _bittestandset
#define BitTestAndReset _bittestandreset
#define BitTest64 _bittest64
#define BitTestAndComplement64 _bittestandcomplement64
#define BitTestAndSet64 _bittestandset64
#define BitTestAndReset64 _bittestandreset64
_Must_inspect_result_
BOOLEAN
_bittest (
_In_reads_bytes_((Offset+7)/8) LONG const *Base,
_In_ LONG Offset
);
BOOLEAN
_bittestandcomplement (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base,
_In_ LONG Offset
);
BOOLEAN
_bittestandset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base,
_In_ LONG Offset
);
BOOLEAN
_bittestandreset (
_Inout_updates_bytes_((Offset+7)/8) LONG *Base,
_In_ LONG Offset
);
_Must_inspect_result_
BOOLEAN
_bittest64 (
_In_reads_bytes_((Offset+7)/8) LONG64 const *Base,
_In_ LONG64 Offset
);
BOOLEAN
_bittestandcomplement64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base,
_In_ LONG64 Offset
);
BOOLEAN
_bittestandset64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base,
_In_ LONG64 Offset
);
BOOLEAN
_bittestandreset64 (
_Inout_updates_bytes_((Offset+7)/8) LONG64 *Base,
_In_ LONG64 Offset
);
#pragma intrinsic(_bittest)
#pragma intrinsic(_bittestandcomplement)
#pragma intrinsic(_bittestandset)
#pragma intrinsic(_bittestandreset)
#pragma intrinsic(_bittest64)
#pragma intrinsic(_bittestandcomplement64)
#pragma intrinsic(_bittestandset64)
#pragma intrinsic(_bittestandreset64)
//
// 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)
//
// Define atomic read intrinsics.
//
#define ReadAtomic128 __load128
#define ReadAtomicAcquire128 __load128_acq
LONG64
ReadAtomic128 (
void *Source,
LONG64 *DestinationHigh
);
LONG64
ReadAtomicAcquire128 (
void *Source,
LONG64 *DestinationHigh
);
#pragma intrinsic(__load128)
#pragma intrinsic(__load128_acq)
//
// Define interlocked operations intrinsics.
//
#ifdef __cplusplus
}
#endif
#define InterlockedAdd _InterlockedAdd
#define InterlockedAddAcquire _InterlockedAdd_acq
#define InterlockedAddRelease _InterlockedAdd_rel
#define InterlockedAdd64 _InterlockedAdd64
#define InterlockedAddAcquire64 _InterlockedAdd64_acq
#define InterlockedAddRelease64 _InterlockedAdd64_rel
#define InterlockedIncrement _InterlockedIncrement
#define InterlockedIncrementAcquire _InterlockedIncrement_acq
#define InterlockedIncrementRelease _InterlockedIncrement_rel
#define InterlockedIncrement16 _InterlockedIncrement16
#define InterlockedIncrementAcquire16 _InterlockedIncrement16_acq
#define InterlockedIncrementRelease16 _InterlockedIncrement16_rel
#define InterlockedIncrement64 _InterlockedIncrement64
#define InterlockedIncrementAcquire64 _InterlockedIncrement64_acq
#define InterlockedIncrementRelease64 _InterlockedIncrement64_rel
#define InterlockedIncrementSizeT(a) InterlockedIncrement64((LONG64 *)a)
#define InterlockedDecrement _InterlockedDecrement
#define InterlockedDecrementAcquire _InterlockedDecrement_acq
#define InterlockedDecrementRelease _InterlockedDecrement_rel
#define InterlockedDecrement16 _InterlockedDecrement16
#define InterlockedDecrementAcquire16 _InterlockedDecrement16_acq
#define InterlockedDecrementRelease16 _InterlockedDecrement16_rel
#define InterlockedDecrement64 _InterlockedDecrement64
#define InterlockedDecrementAcquire64 _InterlockedDecrement64_acq
#define InterlockedDecrementRelease64 _InterlockedDecrement64_rel
#define InterlockedDecrementSizeT(a) InterlockedDecrement64((LONG64 *)a)
#define InterlockedExchange _InterlockedExchange
#define InterlockedExchangeAcquire _InterlockedExchange_acq
#define InterlockedExchange64 _InterlockedExchange64
#define InterlockedExchangeAcquire64 _InterlockedExchange64_acq
#define InterlockedExchangePointer _InterlockedExchangePointer
#define InterlockedExchangePointerAcquire _InterlockedExchangePointer_acq
#define InterlockedExchangeAdd _InterlockedExchangeAdd
#define InterlockedExchangeAddAcquire _InterlockedExchangeAdd_acq
#define InterlockedExchangeAddRelease _InterlockedExchangeAdd_rel
#define InterlockedExchangeAdd64 _InterlockedExchangeAdd64
#define InterlockedExchangeAddAcquire64 _InterlockedExchangeAdd64_acq
#define InterlockedExchangeAddRelease64 _InterlockedExchangeAdd64_rel
#define InterlockedExchangeAddSizeT(a, b) InterlockedExchangeAdd64((LONG64 *)a,
b)
#define InterlockedCompareExchange _InterlockedCompareExchange
#define InterlockedCompareExchangeAcquire _InterlockedCompareExchange_acq
#define InterlockedCompareExchangeRelease _InterlockedCompareExchange_rel
#define InterlockedCompareExchange16 _InterlockedCompareExchange16
#define InterlockedCompareExchangeAcquire16 _InterlockedCompareExchange16_acq
#define InterlockedCompareExchangeRelease16 _InterlockedCompareExchange16_rel
#define InterlockedCompareExchange64 _InterlockedCompareExchange64
#define InterlockedCompareExchangeAcquire64 _InterlockedCompareExchange64_acq
#define InterlockedCompareExchangeRelease64 _InterlockedCompareExchange64_rel
#define InterlockedCompare64Exchange128 _InterlockedCompare64Exchange128
#define InterlockedCompare64ExchangeAcquire128 _InterlockedCompare64Exchange128
_acq
#define InterlockedCompare64ExchangeRelease128 _InterlockedCompare64Exchange128
_rel
#define InterlockedCompareExchangePointer _InterlockedCompareExchangeP
ointer
#define InterlockedCompareExchangePointerRelease _InterlockedCompareExchangeP
ointer_rel
#define InterlockedCompareExchangePointerAcquire _InterlockedCompareExchangeP
ointer_acq
#define InterlockedOr _InterlockedOr
#define InterlockedOrAcquire _InterlockedOr_acq
#define InterlockedOrRelease _InterlockedOr_rel
#define InterlockedOr8 _InterlockedOr8
#define InterlockedOr8Acquire _InterlockedOr8_acq
#define InterlockedOr8Release _InterlockedOr8_rel
#define InterlockedOr16 _InterlockedOr16
#define InterlockedOr16Acquire _InterlockedOr16_acq
#define InterlockedOr16Release _InterlockedOr16_rel
#define InterlockedOr64 _InterlockedOr64
#define InterlockedOr64Acquire _InterlockedOr64_acq
#define InterlockedOr64Release _InterlockedOr64_rel
#define InterlockedXor _InterlockedXor
#define InterlockedXorAcquire _InterlockedXor_acq
#define InterlockedXorRelease _InterlockedXor_rel
#define InterlockedXor8 _InterlockedXor8
#define InterlockedXor8Acquire _InterlockedXor8_acq
#define InterlockedXor8Release _InterlockedXor8_rel
#define InterlockedXor16 _InterlockedXor16
#define InterlockedXor16Acquire _InterlockedXor16_acq
#define InterlockedXor16Release _InterlockedXor16_rel
#define InterlockedXor64 _InterlockedXor64
#define InterlockedXor64Acquire _InterlockedXor64_acq
#define InterlockedXor64Release _InterlockedXor64_rel
#define InterlockedAnd _InterlockedAnd
#define InterlockedAndAcquire _InterlockedAnd_acq
#define InterlockedAndRelease _InterlockedAnd_rel
#define InterlockedAnd8 _InterlockedAnd8
#define InterlockedAnd8Acquire _InterlockedAnd8_acq
#define InterlockedAnd8Release _InterlockedAnd8_rel
#define InterlockedAnd16 _InterlockedAnd16
#define InterlockedAnd16Acquire _InterlockedAnd16_acq
#define InterlockedAnd16Release _InterlockedAnd16_rel
#define InterlockedAnd64 _InterlockedAnd64
#define InterlockedAnd64Acquire _InterlockedAnd64_acq
#define InterlockedAnd64Release _InterlockedAnd64_rel
#ifdef __cplusplus
extern "C" {
#endif
LONG
__cdecl
InterlockedAdd (
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONG
__cdecl
InterlockedAddAcquire (
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONG
__cdecl
InterlockedAddRelease (
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONGLONG
__cdecl
InterlockedAdd64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedAddAcquire64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedAddRelease64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONG
__cdecl
InterlockedIncrement(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
__cdecl
InterlockedIncrementAcquire(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
__cdecl
InterlockedIncrementRelease(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
SHORT
__cdecl
InterlockedIncrement16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
SHORT
__cdecl
InterlockedIncrementAcquire16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
SHORT
__cdecl
InterlockedIncrementRelease16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
LONGLONG
__cdecl
InterlockedIncrement64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONGLONG
__cdecl
InterlockedIncrementAcquire64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONGLONG
__cdecl
InterlockedIncrementRelease64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONG
__cdecl
InterlockedDecrement(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
__cdecl
InterlockedDecrementAcquire(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
LONG
__cdecl
InterlockedDecrementRelease(
_Inout_ _Interlocked_operand_ LONG volatile *Addend
);
SHORT
__cdecl
InterlockedDecrement16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
SHORT
__cdecl
InterlockedDecrementAcquire16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
SHORT
__cdecl
InterlockedDecrementRelease16 (
_Inout_ _Interlocked_operand_ volatile SHORT *Addend
);
LONGLONG
__cdecl
InterlockedDecrement64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONGLONG
__cdecl
InterlockedDecrementAcquire64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONGLONG
__cdecl
InterlockedDecrementRelease64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend
);
LONG
__cdecl
InterlockedExchange(
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);
LONG
__cdecl
InterlockedExchangeAcquire(
_Inout_ _Interlocked_operand_ LONG volatile *Target,
_In_ LONG Value
);
LONGLONG
__cdecl
InterlockedExchange64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Target,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedExchangeAcquire64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Target,
_In_ LONGLONG Value
);
PVOID
__cdecl
InterlockedExchangePointer(
_Inout_ _Interlocked_operand_ PVOID volatile *Target,
_In_ PVOID Value
);
PVOID
__cdecl
InterlockedExchangePointerAcquire(
_Inout_ _Interlocked_operand_ PVOID volatile *Target,
_In_ PVOID Value
);
LONG
__cdecl
InterlockedExchangeAdd(
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONG
__cdecl
InterlockedExchangeAddAcquire(
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONG
__cdecl
InterlockedExchangeAddRelease(
_Inout_ _Interlocked_operand_ LONG volatile *Addend,
_In_ LONG Value
);
LONGLONG
__cdecl
InterlockedExchangeAdd64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedExchangeAddAcquire64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedExchangeAddRelease64(
_Inout_ _Interlocked_operand_ LONGLONG volatile *Addend,
_In_ LONGLONG Value
);
LONG
__cdecl
InterlockedCompareExchange (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG ExChange,
_In_ LONG Comperand
);
LONG
__cdecl
InterlockedCompareExchangeAcquire (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG ExChange,
_In_ LONG Comperand
);
LONG
__cdecl
InterlockedCompareExchangeRelease (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG ExChange,
_In_ LONG Comperand
);
SHORT
__cdecl
InterlockedCompareExchange16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT ExChange,
_In_ SHORT Comperand
);
SHORT
__cdecl
InterlockedCompareExchangeAcquire16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT ExChange,
_In_ SHORT Comperand
);
SHORT
__cdecl
InterlockedCompareExchangeRelease16 (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT ExChange,
_In_ SHORT Comperand
);
LONGLONG
__cdecl
InterlockedCompareExchange64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG ExChange,
_In_ LONGLONG Comperand
);
LONGLONG
__cdecl
InterlockedCompareExchangeAcquire64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG ExChange,
_In_ LONGLONG Comperand
);
LONGLONG
__cdecl
InterlockedCompareExchangeRelease64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG ExChange,
_In_ LONGLONG Comperand
);
LONG64
__cdecl
InterlockedCompare64Exchange128(
_Inout_updates_bytes_(16) _Interlocked_operand_ LONG64 volatile *Destination
,
_In_ LONG64 ExchangeHigh,
_In_ LONG64 ExchangeLow,
_In_ LONG64 Comperand
);
LONG64
__cdecl
InterlockedCompare64ExchangeAcquire128(
_Inout_updates_bytes_(16) _Interlocked_operand_ LONG64 volatile *Destination
,
_In_ LONG64 ExchangeHigh,
_In_ LONG64 ExchangeLow,
_In_ LONG64 Comperand
);
LONG64
__cdecl
InterlockedCompare64ExchangeRelease128(
_Inout_updates_bytes_(16) _Interlocked_operand_ LONG64 volatile *Destination
,
_In_ LONG64 ExchangeHigh,
_In_ LONG64 ExchangeLow,
_In_ LONG64 Comperand
);
PVOID
__cdecl
InterlockedCompareExchangePointer (
_Inout_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Exchange,
_In_ PVOID Comperand
);
PVOID
__cdecl
InterlockedCompareExchangePointerAcquire (
_Inout_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Exchange,
_In_ PVOID Comperand
);
PVOID
__cdecl
InterlockedCompareExchangePointerRelease (
_Inout_ _Interlocked_operand_ PVOID volatile *Destination,
_In_ PVOID Exchange,
_In_ PVOID Comperand
);
LONG
__cdecl
InterlockedOr (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedOrAcquire (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedOrRelease (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
CHAR
__cdecl
InterlockedOr8 (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedOr8Acquire (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedOr8Release (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
SHORT
__cdecl
InterlockedOr16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedOr16Acquire (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedOr16Release (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
LONGLONG
__cdecl
InterlockedOr64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedOr64Acquire (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedOr64Release (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONG
__cdecl
InterlockedXor (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedXorAcquire (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedXorRelease (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
CHAR
__cdecl
InterlockedXor8 (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedXor8Acquire (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedXor8Release (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
SHORT
__cdecl
InterlockedXor16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedXor16Acquire (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedXor16Release (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
LONGLONG
__cdecl
InterlockedXor64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedXor64Acquire (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedXor64Release (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONG
__cdecl
InterlockedAnd (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedAndAcquire (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
LONG
__cdecl
InterlockedAndRelease (
_Inout_ _Interlocked_operand_ LONG volatile *Destination,
_In_ LONG Value
);
CHAR
__cdecl
InterlockedAnd8 (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedAnd8Acquire (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
CHAR
__cdecl
InterlockedAnd8Release (
_Inout_ _Interlocked_operand_ CHAR volatile *Destination,
_In_ CHAR Value
);
SHORT
__cdecl
InterlockedAnd16(
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedAnd16Acquire (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
SHORT
__cdecl
InterlockedAnd16Release (
_Inout_ _Interlocked_operand_ SHORT volatile *Destination,
_In_ SHORT Value
);
LONGLONG
__cdecl
InterlockedAnd64 (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedAnd64Acquire (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
LONGLONG
__cdecl
InterlockedAnd64Release (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
);
#pragma intrinsic(_InterlockedAdd)
#pragma intrinsic(_InterlockedAdd_acq)
#pragma intrinsic(_InterlockedAdd_rel)
#pragma intrinsic(_InterlockedAdd64)
#pragma intrinsic(_InterlockedAdd64_acq)
#pragma intrinsic(_InterlockedAdd64_rel)
#pragma intrinsic(_InterlockedIncrement)
#pragma intrinsic(_InterlockedIncrement_acq)
#pragma intrinsic(_InterlockedIncrement_rel)
#pragma intrinsic(_InterlockedIncrement16)
#pragma intrinsic(_InterlockedIncrement16_acq)
#pragma intrinsic(_InterlockedIncrement16_rel)
#pragma intrinsic(_InterlockedIncrement64)
#pragma intrinsic(_InterlockedIncrement64_acq)
#pragma intrinsic(_InterlockedIncrement64_rel)
#pragma intrinsic(_InterlockedDecrement)
#pragma intrinsic(_InterlockedDecrement_acq)
#pragma intrinsic(_InterlockedDecrement_rel)
#pragma intrinsic(_InterlockedDecrement16)
#pragma intrinsic(_InterlockedDecrement16_acq)
#pragma intrinsic(_InterlockedDecrement16_rel)
#pragma intrinsic(_InterlockedDecrement64)
#pragma intrinsic(_InterlockedDecrement64_acq)
#pragma intrinsic(_InterlockedDecrement64_rel)
#pragma intrinsic(_InterlockedExchange)
#pragma intrinsic(_InterlockedExchange_acq)
#pragma intrinsic(_InterlockedExchange64)
#pragma intrinsic(_InterlockedExchange64_acq)
#pragma intrinsic(_InterlockedExchangePointer)
#pragma intrinsic(_InterlockedExchangePointer_acq)
#pragma intrinsic(_InterlockedExchangeAdd)
#pragma intrinsic(_InterlockedExchangeAdd_acq)
#pragma intrinsic(_InterlockedExchangeAdd_rel)
#pragma intrinsic(_InterlockedExchangeAdd64)
#pragma intrinsic(_InterlockedExchangeAdd64_acq)
#pragma intrinsic(_InterlockedExchangeAdd64_rel)
#pragma intrinsic(_InterlockedCompareExchange)
#pragma intrinsic(_InterlockedCompareExchange_acq)
#pragma intrinsic(_InterlockedCompareExchange_rel)
#pragma intrinsic(_InterlockedCompareExchange16)
#pragma intrinsic(_InterlockedCompareExchange16_acq)
#pragma intrinsic(_InterlockedCompareExchange16_rel)
#pragma intrinsic(_InterlockedCompareExchange64)
#pragma intrinsic(_InterlockedCompareExchange64_acq)
#pragma intrinsic(_InterlockedCompareExchange64_rel)
#pragma intrinsic(_InterlockedCompare64Exchange128)
#pragma intrinsic(_InterlockedCompare64Exchange128_acq)
#pragma intrinsic(_InterlockedCompare64Exchange128_rel)
#pragma intrinsic(_InterlockedCompareExchangePointer)
#pragma intrinsic(_InterlockedCompareExchangePointer_acq)
#pragma intrinsic(_InterlockedCompareExchangePointer_rel)
#pragma intrinsic (_InterlockedOr)
#pragma intrinsic (_InterlockedOr_acq)
#pragma intrinsic (_InterlockedOr_rel)
#pragma intrinsic (_InterlockedOr8)
#pragma intrinsic (_InterlockedOr8_acq)
#pragma intrinsic (_InterlockedOr8_rel)
#pragma intrinsic (_InterlockedOr16)
#pragma intrinsic (_InterlockedOr16_acq)
#pragma intrinsic (_InterlockedOr16_rel)
#pragma intrinsic (_InterlockedOr64)
#pragma intrinsic (_InterlockedOr64_acq)
#pragma intrinsic (_InterlockedOr64_rel)
#pragma intrinsic (_InterlockedXor)
#pragma intrinsic (_InterlockedXor_acq)
#pragma intrinsic (_InterlockedXor_rel)
#pragma intrinsic (_InterlockedXor8)
#pragma intrinsic (_InterlockedXor8_acq)
#pragma intrinsic (_InterlockedXor8_rel)
#pragma intrinsic (_InterlockedXor16)
#pragma intrinsic (_InterlockedXor16_acq)
#pragma intrinsic (_InterlockedXor16_rel)
#pragma intrinsic (_InterlockedXor64)
#pragma intrinsic (_InterlockedXor64_acq)
#pragma intrinsic (_InterlockedXor64_rel)
#pragma intrinsic (_InterlockedAnd)
#pragma intrinsic (_InterlockedAnd_acq)
#pragma intrinsic (_InterlockedAnd_rel)
#pragma intrinsic (_InterlockedAnd8)
#pragma intrinsic (_InterlockedAnd8_acq)
#pragma intrinsic (_InterlockedAnd8_rel)
#pragma intrinsic (_InterlockedAnd16)
#pragma intrinsic (_InterlockedAnd16_acq)
#pragma intrinsic (_InterlockedAnd16_rel)
#pragma intrinsic (_InterlockedAnd64)
#pragma intrinsic (_InterlockedAnd64_acq)
#pragma intrinsic (_InterlockedAnd64_rel)
#if !defined (InterlockedAnd64)
#define InterlockedAnd64 InterlockedAnd64_Inline
LONGLONG
FORCEINLINE
InterlockedAnd64_Inline (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
)
{
LONGLONG Old;
do {
Old = *Destination;
} while (InterlockedCompareExchange64(Destination,
Old & Value,
Old) != Old);
return Old;
}
#endif
#define InterlockedAndAffinity InterlockedAnd64
#if !defined (InterlockedOr64)
#define InterlockedOr64 InterlockedOr64_Inline
LONGLONG
FORCEINLINE
InterlockedOr64_Inline (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
)
{
LONGLONG Old;
do {
Old = *Destination;
} while (InterlockedCompareExchange64(Destination,
Old | Value,
Old) != Old);
return Old;
}
#endif
#define InterlockedOrAffinity InterlockedOr64
#if !defined (InterlockedXor64)
#define InterlockedXor64 InterlockedXor64_Inline
LONGLONG
FORCEINLINE
InterlockedXor64_Inline (
_Inout_ _Interlocked_operand_ LONGLONG volatile *Destination,
_In_ LONGLONG Value
)
{
LONGLONG Old;
do {
Old = *Destination;
} while (InterlockedCompareExchange64(Destination,
Old ^ Value,
Old) != Old);
return Old;
}
#endif
#if !defined (InterlockedBitTestAndSet)
#define InterlockedBitTestAndSet InterlockedBitTestAndSet_Inline
BOOLEAN
FORCEINLINE
InterlockedBitTestAndSet_Inline (
_Inout_ _Interlocked_operand_ LONG volatile *Base,
_In_ LONG Bit
)
{
LONG tBit;
tBit = 1<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedOr (&Base[Bit/(sizeof (*Base)*8)], tBit)&tBit)
!= 0);
}
#endif
#if !defined (InterlockedBitTestAndReset)
#define InterlockedBitTestAndReset InterlockedBitTestAndReset_Inline
BOOLEAN
FORCEINLINE
InterlockedBitTestAndReset_Inline (
_Inout_ _Interlocked_operand_ LONG volatile *Base,
_In_ LONG Bit
)
{
LONG tBit;
tBit = 1<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedAnd (&Base[Bit/(sizeof (*Base)*8)], ~tBit)&tBi
t) != 0);
}
#endif
#if !defined (InterlockedBitTestAndSet64)
#define InterlockedBitTestAndSet64 InterlockedBitTestAndSet64_Inline
BOOLEAN
FORCEINLINE
InterlockedBitTestAndSet64_Inline (
_Inout_ _Interlocked_operand_ LONG64 volatile *Base,
_In_ LONG64 Bit
)
{
LONG64 tBit;
tBit = 1i64<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedOr64 (&Base[Bit/(sizeof (*Base)*8)], tBit)&tBi
t) != 0);
}
#endif
#if !defined (InterlockedBitTestAndReset64)
#define InterlockedBitTestAndReset64 InterlockedBitTestAndReset64_Inline
BOOLEAN
FORCEINLINE
InterlockedBitTestAndReset64_Inline (
_Inout_ _Interlocked_operand_ LONG64 volatile *Base,
_In_ LONG64 Bit
)
{
LONG64 tBit;
tBit = 1i64<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedAnd64 (&Base[Bit/(sizeof (*Base)*8)], ~tBit)&t
Bit) != 0);
}
#endif
#if !defined (InterlockedBitTestAndComplement)
#define InterlockedBitTestAndComplement InterlockedBitTestAndComplement_Inline
BOOLEAN
FORCEINLINE
InterlockedBitTestAndComplement_Inline (
_Inout_ _Interlocked_operand_ LONG volatile *Base,
_In_ LONG Bit
)
{
LONG tBit;
tBit = 1<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedXor (&Base[Bit/(sizeof (*Base)*8)], tBit)&tBit
) != 0);
}
#endif
#if !defined (InterlockedBitTestAndComplement64)
#define InterlockedBitTestAndComplement64 InterlockedBitTestAndComplement64_Inli
ne
BOOLEAN
FORCEINLINE
InterlockedBitTestAndComplement64_Inline (
_Inout_ _Interlocked_operand_ LONG64 volatile *Base,
_In_ LONG64 Bit
)
{
LONG64 tBit;
tBit = 1i64<<(Bit & (sizeof (*Base)*8-1));
return (BOOLEAN) ((InterlockedXor64 (&Base[Bit/(sizeof (*Base)*8)], tBit)&tB
it) != 0);
}
#endif
#ifdef __cplusplus
}
#endif
#endif /* defined(_M_IA64) && !defined(RC_INVOKED) && !defined(MIDL_PASS) */
#if !defined(__midl) && !defined(GENUTIL) && !defined(_GENIA64_) && defined(_IA6
4_)
void * __cdecl _rdteb(void);
void * __cdecl _rdtebex(void);
#ifdef _M_IA64
#pragma intrinsic(_rdteb)
// _rdtebex() is a kernel safe version of _rdteb()
#pragma intrinsic(_rdtebex)
#define NtCurrentTeb() ((struct _TEB *)_rdtebex())
//
// Define functions to get the address of the current fiber and the
// current fiber data.
//
#define GetCurrentFiber() (((PNT_TIB)NtCurrentTeb())->FiberData)
#define GetFiberData() (*(PVOID *)(GetCurrentFiber()))
// begin_ntddk
#ifdef __cplusplus
extern "C" {
#endif
// end_ntddk
// begin_ntddk
void
__yield(
void
);
void
__mf(
void
);
void
__lfetch(
int Level,
_In_ volatile VOID CONST *Address
);
void
__lfetchfault(
_In_ int Level,
_In_ volatile VOID CONST *Address
);
void
__lfetch_excl(
_In_ int Level,
_In_ volatile VOID CONST *Address
);
void
__lfetchfault_excl(
_In_ int Level,
_In_ volatile VOID CONST *Address
);
//
// __lfetch control defines.
//
#define MD_LFHINT_NONE 0x00
#define MD_LFHINT_NT1 0x01
#define MD_LFHINT_NT2 0x02
#define MD_LFHINT_NTA 0x03
#pragma intrinsic (__yield)
#pragma intrinsic (__lfetch)
#pragma intrinsic (__lfetchfault)
#pragma intrinsic (__lfetchfault_excl)
#pragma intrinsic (__lfetch_excl)
#pragma intrinsic (__mf)
//
// Define function to read the value of the time stamp counter
//
// N.B. The register number for the time stamp counter is CV_IA64_ApITC which
// is 3116.
//
#define ReadTimeStampCounter() __getReg(3116)
unsigned __int64
__getReg (
_In_ int Number
);
#pragma intrinsic(__getReg)
#define YieldProcessor __yield
#define MemoryBarrier __mf
#define PreFetchCacheLine __lfetch
#define PrefetchForWrite(p)
#define ReadForWriteAccess(p) (__lfetch_excl(MD_LFHINT_NONE, (p)), (*(p)))
//
// PreFetchCacheLine level defines.
//
#define PF_TEMPORAL_LEVEL_1 MD_LFHINT_NONE
#define PF_TEMPORAL_LEVEL_2 MD_LFHINT_NT1
#define PF_TEMPORAL_LEVEL_3 MD_LFHINT_NT2
#define PF_NON_TEMPORAL_LEVEL_ALL MD_LFHINT_NTA
//
// Define functions to capture the high 64-bits of a 128-bit multiply.
//
#define UnsignedMultiplyHigh __UMULH
ULONGLONG
UnsignedMultiplyHigh (
_In_ ULONGLONG Multiplier,
_In_ ULONGLONG Multiplicand
);
#pragma intrinsic(__UMULH)
#if (_MSC_VER >= 1400)
#define UnsignedMultiply128 _umul128
DWORD64
UnsignedMultiply128 (
_In_ unsigned __int64 Multiplier,
_In_ unsigned __int64 Multiplicand,
_Out_ _Deref_out_range_(==,Multiplier * Multiplicand) unsigned __int64 *High
Product
);
#pragma intrinsic(_umul128)
#endif
#ifdef __cplusplus
}
#endif
// end_ntddk
#else
struct _TEB *
NtCurrentTeb(void);
#endif
#endif // !defined(__midl) && !defined(GENUTIL) && !defined(_GENIA64_) && defin
ed(_M_IA64)
#ifdef _IA64_
// begin_ntddk
//
// The following values specify the type of failing access when the status is
// STATUS_ACCESS_VIOLATION and the first parameter in the exception record.
//
#define EXCEPTION_READ_FAULT 0 // Access violation was caused by a read
#define EXCEPTION_WRITE_FAULT 1 // Access violation was caused by a writ
e
#define EXCEPTION_EXECUTE_FAULT 2 // Access violation was caused by an ins
truction fetch
//
// The following flags control the contents of the CONTEXT structure.
//
#if !defined(RC_INVOKED)
#define CONTEXT_IA64 0x00080000L
#define CONTEXT_CONTROL (CONTEXT_IA64 | 0x00000001L)
#define CONTEXT_LOWER_FLOATING_POINT (CONTEXT_IA64 | 0x00000002L)
#define CONTEXT_HIGHER_FLOATING_POINT (CONTEXT_IA64 | 0x00000004L)
#define CONTEXT_INTEGER (CONTEXT_IA64 | 0x00000008L)
#define CONTEXT_DEBUG (CONTEXT_IA64 | 0x00000010L)
#define CONTEXT_IA32_CONTROL (CONTEXT_IA64 | 0x00000020L) // Include
s StIPSR
#define CONTEXT_FLOATING_POINT (CONTEXT_LOWER_FLOATING_POINT | CONTEXT_
HIGHER_FLOATING_POINT)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POIN
T | CONTEXT_INTEGER | CONTEXT_IA32_CONTROL)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_FLOATING_POIN
T | CONTEXT_INTEGER | CONTEXT_DEBUG | CONTEXT_IA32_CONTROL)
#define CONTEXT_EXCEPTION_ACTIVE 0x08000000L
#define CONTEXT_SERVICE_ACTIVE 0x10000000L
#define CONTEXT_EXCEPTION_REQUEST 0x40000000L
#define CONTEXT_EXCEPTION_REPORTING 0x80000000L
#endif // !defined(RC_INVOKED)
//
// Context Frame
//
// This frame has a several purposes: 1) it is used as an argument to
// NtContinue, 2) it is used to construct a call frame for APC delivery,
// 3) it is used to construct a call frame for exception dispatching
// in user mode, 4) it is used in the user level thread creation
// routines, and 5) it is used to to pass thread state to debuggers.
//
// N.B. Because this record is used as a call frame, it must be EXACTLY
// a multiple of 16 bytes in length and aligned on a 16-byte boundary.
//
typedef struct _CONTEXT {
//
// The flags values within this flag control 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 thread's context, then only that
// portion of the threads context will be modified.
//
// If the context record is used as an _Inout_ parameter to capture
// the context of a thread, then only those portions of the thread's
// context corresponding to set flags will be returned.
//
// The context record is never used as an _Out_ only parameter.
//
DWORD ContextFlags;
DWORD Fill1[3]; // for alignment of following on 16-byte boundary
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_DEBUG.
//
// N.B. CONTEXT_DEBUG is *not* part of CONTEXT_FULL.
//
ULONGLONG DbI0;
ULONGLONG DbI1;
ULONGLONG DbI2;
ULONGLONG DbI3;
ULONGLONG DbI4;
ULONGLONG DbI5;
ULONGLONG DbI6;
ULONGLONG DbI7;
ULONGLONG DbD0;
ULONGLONG DbD1;
ULONGLONG DbD2;
ULONGLONG DbD3;
ULONGLONG DbD4;
ULONGLONG DbD5;
ULONGLONG DbD6;
ULONGLONG DbD7;
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_LOWER_FLOATING_POINT.
//
FLOAT128 FltS0;
FLOAT128 FltS1;
FLOAT128 FltS2;
FLOAT128 FltS3;
FLOAT128 FltT0;
FLOAT128 FltT1;
FLOAT128 FltT2;
FLOAT128 FltT3;
FLOAT128 FltT4;
FLOAT128 FltT5;
FLOAT128 FltT6;
FLOAT128 FltT7;
FLOAT128 FltT8;
FLOAT128 FltT9;
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_HIGHER_FLOATING_POINT.
//
FLOAT128 FltS4;
FLOAT128 FltS5;
FLOAT128 FltS6;
FLOAT128 FltS7;
FLOAT128 FltS8;
FLOAT128 FltS9;
FLOAT128 FltS10;
FLOAT128 FltS11;
FLOAT128 FltS12;
FLOAT128 FltS13;
FLOAT128 FltS14;
FLOAT128 FltS15;
FLOAT128 FltS16;
FLOAT128 FltS17;
FLOAT128 FltS18;
FLOAT128 FltS19;
FLOAT128 FltF32;
FLOAT128 FltF33;
FLOAT128 FltF34;
FLOAT128 FltF35;
FLOAT128 FltF36;
FLOAT128 FltF37;
FLOAT128 FltF38;
FLOAT128 FltF39;
FLOAT128 FltF40;
FLOAT128 FltF41;
FLOAT128 FltF42;
FLOAT128 FltF43;
FLOAT128 FltF44;
FLOAT128 FltF45;
FLOAT128 FltF46;
FLOAT128 FltF47;
FLOAT128 FltF48;
FLOAT128 FltF49;
FLOAT128 FltF50;
FLOAT128 FltF51;
FLOAT128 FltF52;
FLOAT128 FltF53;
FLOAT128 FltF54;
FLOAT128 FltF55;
FLOAT128 FltF56;
FLOAT128 FltF57;
FLOAT128 FltF58;
FLOAT128 FltF59;
FLOAT128 FltF60;
FLOAT128 FltF61;
FLOAT128 FltF62;
FLOAT128 FltF63;
FLOAT128 FltF64;
FLOAT128 FltF65;
FLOAT128 FltF66;
FLOAT128 FltF67;
FLOAT128 FltF68;
FLOAT128 FltF69;
FLOAT128 FltF70;
FLOAT128 FltF71;
FLOAT128 FltF72;
FLOAT128 FltF73;
FLOAT128 FltF74;
FLOAT128 FltF75;
FLOAT128 FltF76;
FLOAT128 FltF77;
FLOAT128 FltF78;
FLOAT128 FltF79;
FLOAT128 FltF80;
FLOAT128 FltF81;
FLOAT128 FltF82;
FLOAT128 FltF83;
FLOAT128 FltF84;
FLOAT128 FltF85;
FLOAT128 FltF86;
FLOAT128 FltF87;
FLOAT128 FltF88;
FLOAT128 FltF89;
FLOAT128 FltF90;
FLOAT128 FltF91;
FLOAT128 FltF92;
FLOAT128 FltF93;
FLOAT128 FltF94;
FLOAT128 FltF95;
FLOAT128 FltF96;
FLOAT128 FltF97;
FLOAT128 FltF98;
FLOAT128 FltF99;
FLOAT128 FltF100;
FLOAT128 FltF101;
FLOAT128 FltF102;
FLOAT128 FltF103;
FLOAT128 FltF104;
FLOAT128 FltF105;
FLOAT128 FltF106;
FLOAT128 FltF107;
FLOAT128 FltF108;
FLOAT128 FltF109;
FLOAT128 FltF110;
FLOAT128 FltF111;
FLOAT128 FltF112;
FLOAT128 FltF113;
FLOAT128 FltF114;
FLOAT128 FltF115;
FLOAT128 FltF116;
FLOAT128 FltF117;
FLOAT128 FltF118;
FLOAT128 FltF119;
FLOAT128 FltF120;
FLOAT128 FltF121;
FLOAT128 FltF122;
FLOAT128 FltF123;
FLOAT128 FltF124;
FLOAT128 FltF125;
FLOAT128 FltF126;
FLOAT128 FltF127;
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_LOWER_FLOATING_POINT | CONTEXT_HIGHER_FLOATING_POINT | C
ONTEXT_CONTROL.
//
ULONGLONG StFPSR; // FP status
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_INTEGER.
//
// N.B. The registers gp, sp, rp are part of the control context
//
ULONGLONG IntGp; // r1, volatile
ULONGLONG IntT0; // r2-r3, volatile
ULONGLONG IntT1; //
ULONGLONG IntS0; // r4-r7, preserved
ULONGLONG IntS1;
ULONGLONG IntS2;
ULONGLONG IntS3;
ULONGLONG IntV0; // r8, volatile
ULONGLONG IntT2; // r9-r11, volatile
ULONGLONG IntT3;
ULONGLONG IntT4;
ULONGLONG IntSp; // stack pointer (r12), special
ULONGLONG IntTeb; // teb (r13), special
ULONGLONG IntT5; // r14-r31, volatile
ULONGLONG IntT6;
ULONGLONG IntT7;
ULONGLONG IntT8;
ULONGLONG IntT9;
ULONGLONG IntT10;
ULONGLONG IntT11;
ULONGLONG IntT12;
ULONGLONG IntT13;
ULONGLONG IntT14;
ULONGLONG IntT15;
ULONGLONG IntT16;
ULONGLONG IntT17;
ULONGLONG IntT18;
ULONGLONG IntT19;
ULONGLONG IntT20;
ULONGLONG IntT21;
ULONGLONG IntT22;
ULONGLONG IntNats; // Nat bits for r1-r31
// r1-r31 in bits 1 thru 31.
ULONGLONG Preds; // predicates, preserved
ULONGLONG BrRp; // return pointer, b0, preserved
ULONGLONG BrS0; // b1-b5, preserved
ULONGLONG BrS1;
ULONGLONG BrS2;
ULONGLONG BrS3;
ULONGLONG BrS4;
ULONGLONG BrT0; // b6-b7, volatile
ULONGLONG BrT1;
//
// This section is specified/returned if the ContextFlags word contains
// the flag CONTEXT_CONTROL.
//
// Other application registers
ULONGLONG ApUNAT; // User Nat collection register, preserved
ULONGLONG ApLC; // Loop counter register, preserved
ULONGLONG ApEC; // Epilog counter register, preserved
ULONGLONG ApCCV; // CMPXCHG value register, volatile
ULONGLONG ApDCR; // Default control register (TBD)
// Register stack info
ULONGLONG RsPFS; // Previous function state, preserved
ULONGLONG RsBSP; // Backing store pointer, preserved
ULONGLONG RsBSPSTORE;
ULONGLONG RsRSC; // RSE configuration, volatile
ULONGLONG RsRNAT; // RSE Nat collection register, preserved
// Trap Status Information
ULONGLONG StIPSR; // Interruption Processor Status
ULONGLONG StIIP; // Interruption IP
ULONGLONG StIFS; // Interruption Function State
// iA32 related control registers
ULONGLONG StFCR; // copy of Ar21
ULONGLONG Eflag; // Eflag copy of Ar24
ULONGLONG SegCSD; // iA32 CSDescriptor (Ar25)
ULONGLONG SegSSD; // iA32 SSDescriptor (Ar26)
ULONGLONG Cflag; // Cr0+Cr4 copy of Ar27
ULONGLONG StFSR; // x86 FP status (copy of AR28)
ULONGLONG StFIR; // x86 FP status (copy of AR29)
ULONGLONG StFDR; // x86 FP status (copy of AR30)
ULONGLONG UNUSEDPACK; // added to pack StFDR to 16-bytes
} CONTEXT, *PCONTEXT;
//
// Plabel descriptor structure definition
//
typedef struct _PLABEL_DESCRIPTOR {
ULONGLONG EntryPoint;
ULONGLONG GlobalPointer;
} PLABEL_DESCRIPTOR, *PPLABEL_DESCRIPTOR;
//
// Function table entry structure definition.
//
typedef struct _RUNTIME_FUNCTION {
DWORD BeginAddress;
DWORD EndAddress;
DWORD UnwindInfoAddress;
} RUNTIME_FUNCTION, *PRUNTIME_FUNCTION;
//
// Define unwind history table structure.
//
#define UNWIND_HISTORY_TABLE_SIZE 12
typedef struct _UNWIND_HISTORY_TABLE_ENTRY {
DWORD64 ImageBase;
DWORD64 Gp;
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)
_Must_inspect_result_
DWORD
OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK (
_In_ HANDLE Process,
_In_ PVOID TableAddress,
_Out_ PDWORD Entries,
_Outptr_ PRUNTIME_FUNCTION* Functions
);
typedef OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK *POUT_OF_PROCESS_FUNCTION_TABLE_C
ALLBACK;
#define OUT_OF_PROCESS_FUNCTION_TABLE_CALLBACK_EXPORT_NAME \
"OutOfProcessFunctionTableCallback"
//
// Nonvolatile context pointer record.
//
// The IA64 architecture currently doesn't have any nonvolatile kernel context
// as we capture everything in either the trap or exception frames on
// transition from user to kernel mode. We allocate a single bogus
// pointer field as usually this structure is made up of pointers to
// places in the kernel stack where the various nonvolatile items were
// pushed on to the kernel stack.
//
// TBD *** Need to fill in this structure with the relevant fields
// when we start storing the nonvolatile information only when
// necessary.
//
typedef struct _KNONVOLATILE_CONTEXT_POINTERS {
PFLOAT128 FltS0;
PFLOAT128 FltS1;
PFLOAT128 FltS2;
PFLOAT128 FltS3;
PFLOAT128 HighFloatingContext[10];
PFLOAT128 FltS4;
PFLOAT128 FltS5;
PFLOAT128 FltS6;
PFLOAT128 FltS7;
PFLOAT128 FltS8;
PFLOAT128 FltS9;
PFLOAT128 FltS10;
PFLOAT128 FltS11;
PFLOAT128 FltS12;
PFLOAT128 FltS13;
PFLOAT128 FltS14;
PFLOAT128 FltS15;
PFLOAT128 FltS16;
PFLOAT128 FltS17;
PFLOAT128 FltS18;
PFLOAT128 FltS19;
PULONGLONG IntS0;
PULONGLONG IntS1;
PULONGLONG IntS2;
PULONGLONG IntS3;
PULONGLONG IntSp;
PULONGLONG IntS0Nat;
PULONGLONG IntS1Nat;
PULONGLONG IntS2Nat;
PULONGLONG IntS3Nat;
PULONGLONG IntSpNat;
PULONGLONG Preds;
PULONGLONG BrRp;
PULONGLONG BrS0;
PULONGLONG BrS1;
PULONGLONG BrS2;
PULONGLONG BrS3;
PULONGLONG BrS4;
PULONGLONG ApUNAT;
PULONGLONG ApLC;
PULONGLONG ApEC;
PULONGLONG RsPFS;
PULONGLONG StFSR;
PULONGLONG StFIR;
PULONGLONG StFDR;
PULONGLONG Cflag;
PULONGLONG StFPSR;
} KNONVOLATILE_CONTEXT_POINTERS, *PKNONVOLATILE_CONTEXT_POINTERS;
typedef struct _FRAME_POINTERS {
ULONGLONG MemoryStackFp;
ULONGLONG BackingStoreFp;
} FRAME_POINTERS, *PFRAME_POINTERS;
NTSYSAPI
VOID
NTAPI
__jump_unwind (
ULONGLONG TargetMsFrame,
ULONGLONG TargetBsFrame,
ULONGLONG TargetPc
);
#endif // _IA64_
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
// begin_wdm begin_ntminiport // begin_wdm begin_ntminiport
#if !defined(RC_INVOKED) && !defined(MIDL_PASS) #if !defined(RC_INVOKED) && !defined(MIDL_PASS)
#if defined(_M_AMD64) || defined(_M_IX86) || defined(_M_CEE_PURE) #if defined(_M_AMD64) || defined(_M_IX86) || defined(_M_CEE_PURE)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
skipping to change at line 8260 skipping to change at line 7666
_In_ _Interlocked_operand_ BYTE const volatile *Source _In_ _Interlocked_operand_ BYTE const volatile *Source
) )
{ {
return (BYTE )ReadNoFence8((PCHAR)Source); return (BYTE )ReadNoFence8((PCHAR)Source);
} }
FORCEINLINE FORCEINLINE
BYTE BYTE
ReadBooleanAcquire (
_In_ _Interlocked_operand_ BOOLEAN const volatile *Source
)
{
return (BOOLEAN)ReadAcquire8((PCHAR)Source);
}
FORCEINLINE
BYTE
ReadBooleanNoFence (
_In_ _Interlocked_operand_ BOOLEAN const volatile *Source
)
{
return (BOOLEAN)ReadNoFence8((PCHAR)Source);
}
FORCEINLINE
BYTE
ReadUCharRaw ( ReadUCharRaw (
_In_ _Interlocked_operand_ BYTE const volatile *Source _In_ _Interlocked_operand_ BYTE const volatile *Source
) )
{ {
return (BYTE )ReadRaw8((PCHAR)Source); return (BYTE )ReadRaw8((PCHAR)Source);
} }
FORCEINLINE FORCEINLINE
skipping to change at line 8297 skipping to change at line 7725
) )
{ {
WriteNoFence8((PCHAR)Destination, (CHAR)Value); WriteNoFence8((PCHAR)Destination, (CHAR)Value);
return; return;
} }
FORCEINLINE FORCEINLINE
VOID VOID
WriteBooleanRelease (
_Out_ _Interlocked_operand_ BOOLEAN volatile *Destination,
_In_ BOOLEAN Value
)
{
WriteRelease8((PCHAR)Destination, (CHAR)Value);
return;
}
FORCEINLINE
VOID
WriteBooleanNoFence (
_Out_ _Interlocked_operand_ BOOLEAN volatile *Destination,
_In_ BOOLEAN Value
)
{
WriteNoFence8((PCHAR)Destination, (CHAR)Value);
return;
}
FORCEINLINE
VOID
WriteUCharRaw ( WriteUCharRaw (
_Out_ _Interlocked_operand_ BYTE volatile *Destination, _Out_ _Interlocked_operand_ BYTE volatile *Destination,
_In_ BYTE Value _In_ BYTE Value
) )
{ {
WriteRaw8((PCHAR)Destination, (CHAR)Value); WriteRaw8((PCHAR)Destination, (CHAR)Value);
return; return;
} }
skipping to change at line 9046 skipping to change at line 8500
// //
// So we'll declare ACCESS_MASK as DWORD // So we'll declare ACCESS_MASK as DWORD
// //
// begin_wdm // begin_wdm
// begin_ntoshvp // begin_ntoshvp
typedef DWORD ACCESS_MASK; typedef DWORD ACCESS_MASK;
typedef ACCESS_MASK *PACCESS_MASK; typedef ACCESS_MASK *PACCESS_MASK;
// end_ntoshvp // end_ntoshvp
// begin_access
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// // // //
// ACCESS TYPES // // ACCESS TYPES //
// // // //
//////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////
// begin_wdm // begin_wdm
// //
// The following are masks for the predefined standard access types // The following are masks for the predefined standard access types
// //
skipping to change at line 9184 skipping to change at line 8639
#endif #endif
#define SID_REVISION (1) // Current revision level #define SID_REVISION (1) // Current revision level
#define SID_MAX_SUB_AUTHORITIES (15) #define SID_MAX_SUB_AUTHORITIES (15)
#define SID_RECOMMENDED_SUB_AUTHORITIES (1) // Will change to around 6 #define SID_RECOMMENDED_SUB_AUTHORITIES (1) // Will change to around 6
// in a future release. // in a future release.
#ifndef MIDL_PASS #ifndef MIDL_PASS
#define SECURITY_MAX_SID_SIZE \ #define SECURITY_MAX_SID_SIZE \
(sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD))) (sizeof(SID) - sizeof(DWORD) + (SID_MAX_SUB_AUTHORITIES * sizeof(DWORD)))
#define SECURITY_SID_SIZE(SubAuthorityCount_) (sizeof(SID) - sizeof(DWORD) + \
(SubAuthorityCount_) * sizeof(DW
ORD))
//
// Union which can hold any valid sid.
//
typedef union _SE_SID {
SID Sid;
BYTE Buffer[SECURITY_MAX_SID_SIZE];
} SE_SID, *PSE_SID;
#endif // MIDL_PASS #endif // MIDL_PASS
typedef enum _SID_NAME_USE { typedef enum _SID_NAME_USE {
SidTypeUser = 1, SidTypeUser = 1,
SidTypeGroup, SidTypeGroup,
SidTypeDomain, SidTypeDomain,
SidTypeAlias, SidTypeAlias,
SidTypeWellKnownGroup, SidTypeWellKnownGroup,
SidTypeDeletedAccount, SidTypeDeletedAccount,
SidTypeInvalid, SidTypeInvalid,
SidTypeUnknown, SidTypeUnknown,
SidTypeComputer, SidTypeComputer,
SidTypeLabel SidTypeLabel,
SidTypeLogonSession
} SID_NAME_USE, *PSID_NAME_USE; } SID_NAME_USE, *PSID_NAME_USE;
typedef struct _SID_AND_ATTRIBUTES { typedef struct _SID_AND_ATTRIBUTES {
#ifdef MIDL_PASS #ifdef MIDL_PASS
PISID Sid; PISID Sid;
#else // MIDL_PASS #else // MIDL_PASS
PSID Sid; PSID Sid;
#endif // MIDL_PASS #endif // MIDL_PASS
DWORD Attributes; DWORD Attributes;
} SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES; } SID_AND_ATTRIBUTES, * PSID_AND_ATTRIBUTES;
skipping to change at line 9378 skipping to change at line 8847
#define SECURITY_COM_ID_BASE_RID (0x00000059L) #define SECURITY_COM_ID_BASE_RID (0x00000059L)
#define SECURITY_WINDOW_MANAGER_BASE_RID (0x0000005AL) #define SECURITY_WINDOW_MANAGER_BASE_RID (0x0000005AL)
#define SECURITY_RDV_GFX_BASE_RID (0x0000005BL) #define SECURITY_RDV_GFX_BASE_RID (0x0000005BL)
#define SECURITY_DASHOST_ID_BASE_RID (0x0000005CL) #define SECURITY_DASHOST_ID_BASE_RID (0x0000005CL)
#define SECURITY_DASHOST_ID_RID_COUNT (6L) #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_VIRTUALACCOUNT_ID_RID_COUNT (6L) #define SECURITY_VIRTUALACCOUNT_ID_RID_COUNT (6L)
#define SECURITY_MAX_BASE_RID (0x0000006FL) #define SECURITY_MAX_BASE_RID (0x0000006FL)
#define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L) #define SECURITY_MAX_ALWAYS_FILTERED (0x000003E7L)
#define SECURITY_MIN_NEVER_FILTERED (0x000003E8L) #define SECURITY_MIN_NEVER_FILTERED (0x000003E8L)
#define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L) #define SECURITY_OTHER_ORGANIZATION_RID (0x000003E8L)
// //
//Service SID type RIDs are in the range 0x50- 0x6F. Therefore, we are giving the next available RID to Windows Mobile team. //Service SID type RIDs are in the range 0x50- 0x6F. Therefore, we are giving the next available RID to Windows Mobile team.
// //
#define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L) #define SECURITY_WINDOWSMOBILE_ID_BASE_RID (0x00000070L)
// //
// Installer Capability Group Sid related. Currently Base RID is same as LOCAL D
OMAIN.
//
#define SECURITY_INSTALLER_GROUP_CAPABILITY_BASE (0x20)
#define SECURITY_INSTALLER_GROUP_CAPABILITY_RID_COUNT (9)
// Note: This is because the App Capability Rid is S-1-15-3-1024-...
// whereas the service group rid is S-1-5-32-...
// The number of RIDs from hash (8) are the same for both
#define SECURITY_INSTALLER_CAPABILITY_RID_COUNT (10)
//
//Well-known group for local accounts //Well-known group for local accounts
// //
#define SECURITY_LOCAL_ACCOUNT_RID (0x00000071L) #define SECURITY_LOCAL_ACCOUNT_RID (0x00000071L)
#define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID (0x00000072L) #define SECURITY_LOCAL_ACCOUNT_AND_ADMIN_RID (0x00000072L)
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
// // // //
// well-known domain relative sub-authority values (RIDs)... // // well-known domain relative sub-authority values (RIDs)... //
// // // //
///////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////
#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED (0x000001F0L) #define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_IS_COMPOUNDED (0x000001F0L)
#define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS (0x000001F1L) #define DOMAIN_GROUP_RID_AUTHORIZATION_DATA_CONTAINS_CLAIMS (0x000001F1L)
#define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L) #define DOMAIN_GROUP_RID_ENTERPRISE_READONLY_DOMAIN_CONTROLLERS (0x000001F2L)
#define FOREST_USER_RID_MAX (0x000001F3L) #define FOREST_USER_RID_MAX (0x000001F3L)
// Well-known users ... // Well-known users ...
#define DOMAIN_USER_RID_ADMIN (0x000001F4L) #define DOMAIN_USER_RID_ADMIN (0x000001F4L)
#define DOMAIN_USER_RID_GUEST (0x000001F5L) #define DOMAIN_USER_RID_GUEST (0x000001F5L)
#define DOMAIN_USER_RID_KRBTGT (0x000001F6L) #define DOMAIN_USER_RID_KRBTGT (0x000001F6L)
#define DOMAIN_USER_RID_DEFAULT_ACCOUNT (0x000001F7L)
#define DOMAIN_USER_RID_MAX (0x000003E7L) #define DOMAIN_USER_RID_MAX (0x000003E7L)
// well-known groups ... // well-known groups ...
#define DOMAIN_GROUP_RID_ADMINS (0x00000200L) #define DOMAIN_GROUP_RID_ADMINS (0x00000200L)
#define DOMAIN_GROUP_RID_USERS (0x00000201L) #define DOMAIN_GROUP_RID_USERS (0x00000201L)
#define DOMAIN_GROUP_RID_GUESTS (0x00000202L) #define DOMAIN_GROUP_RID_GUESTS (0x00000202L)
#define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L) #define DOMAIN_GROUP_RID_COMPUTERS (0x00000203L)
#define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L) #define DOMAIN_GROUP_RID_CONTROLLERS (0x00000204L)
#define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L) #define DOMAIN_GROUP_RID_CERT_ADMINS (0x00000205L)
#define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L) #define DOMAIN_GROUP_RID_SCHEMA_ADMINS (0x00000206L)
#define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L) #define DOMAIN_GROUP_RID_ENTERPRISE_ADMINS (0x00000207L)
#define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L) #define DOMAIN_GROUP_RID_POLICY_ADMINS (0x00000208L)
#define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L) #define DOMAIN_GROUP_RID_READONLY_CONTROLLERS (0x00000209L)
#define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS (0x0000020AL) #define DOMAIN_GROUP_RID_CLONEABLE_CONTROLLERS (0x0000020AL)
#define DOMAIN_GROUP_RID_CDC_RESERVED (0x0000020CL) #define DOMAIN_GROUP_RID_CDC_RESERVED (0x0000020CL)
#define DOMAIN_GROUP_RID_PROTECTED_USERS (0x0000020DL) #define DOMAIN_GROUP_RID_PROTECTED_USERS (0x0000020DL)
#define DOMAIN_GROUP_RID_KEY_ADMINS (0x0000020EL)
#define DOMAIN_GROUP_RID_ENTERPRISE_KEY_ADMINS (0x0000020FL)
// well-known aliases ... // well-known aliases ...
#define DOMAIN_ALIAS_RID_ADMINS (0x00000220L) #define DOMAIN_ALIAS_RID_ADMINS (0x00000220L)
#define DOMAIN_ALIAS_RID_USERS (0x00000221L) #define DOMAIN_ALIAS_RID_USERS (0x00000221L)
#define DOMAIN_ALIAS_RID_GUESTS (0x00000222L) #define DOMAIN_ALIAS_RID_GUESTS (0x00000222L)
#define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L) #define DOMAIN_ALIAS_RID_POWER_USERS (0x00000223L)
#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L) #define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x00000224L)
#define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L) #define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x00000225L)
skipping to change at line 9469 skipping to change at line 8958
#define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL) #define DOMAIN_ALIAS_RID_CACHEABLE_PRINCIPALS_GROUP (0x0000023BL)
#define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL) #define DOMAIN_ALIAS_RID_NON_CACHEABLE_PRINCIPALS_GROUP (0x0000023CL)
#define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL) #define DOMAIN_ALIAS_RID_EVENT_LOG_READERS_GROUP (0x0000023DL)
#define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL) #define DOMAIN_ALIAS_RID_CERTSVC_DCOM_ACCESS_GROUP (0x0000023EL)
#define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS (0x0000023FL) #define DOMAIN_ALIAS_RID_RDS_REMOTE_ACCESS_SERVERS (0x0000023FL)
#define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS (0x00000240L) #define DOMAIN_ALIAS_RID_RDS_ENDPOINT_SERVERS (0x00000240L)
#define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS (0x00000241L) #define DOMAIN_ALIAS_RID_RDS_MANAGEMENT_SERVERS (0x00000241L)
#define DOMAIN_ALIAS_RID_HYPER_V_ADMINS (0x00000242L) #define DOMAIN_ALIAS_RID_HYPER_V_ADMINS (0x00000242L)
#define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS (0x00000243L) #define DOMAIN_ALIAS_RID_ACCESS_CONTROL_ASSISTANCE_OPS (0x00000243L)
#define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS (0x00000244L) #define DOMAIN_ALIAS_RID_REMOTE_MANAGEMENT_USERS (0x00000244L)
#define DOMAIN_ALIAS_RID_DEFAULT_ACCOUNT (0x00000245L)
#define DOMAIN_ALIAS_RID_STORAGE_REPLICA_ADMINS (0x00000246L)
// //
// Application Package Authority. // Application Package Authority.
// //
#define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15} #define SECURITY_APP_PACKAGE_AUTHORITY {0,0,0,0,0,15}
#define SECURITY_APP_PACKAGE_BASE_RID (0x00000002L) #define SECURITY_APP_PACKAGE_BASE_RID (0x00000002L)
#define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT (2L) #define SECURITY_BUILTIN_APP_PACKAGE_RID_COUNT (2L)
#define SECURITY_APP_PACKAGE_RID_COUNT (8L) #define SECURITY_APP_PACKAGE_RID_COUNT (8L)
#define SECURITY_CAPABILITY_BASE_RID (0x00000003L) #define SECURITY_CAPABILITY_BASE_RID (0x00000003L)
#define SECURITY_CAPABILITY_APP_RID (0x000000400)
#define SECURITY_BUILTIN_CAPABILITY_RID_COUNT (2L) #define SECURITY_BUILTIN_CAPABILITY_RID_COUNT (2L)
#define SECURITY_CAPABILITY_RID_COUNT (5L) #define SECURITY_CAPABILITY_RID_COUNT (5L)
#define SECURITY_PARENT_PACKAGE_RID_COUNT (SECURITY_APP_PACKAGE_RID_CO UNT) #define SECURITY_PARENT_PACKAGE_RID_COUNT (SECURITY_APP_PACKAGE_RID_CO UNT)
#define SECURITY_CHILD_PACKAGE_RID_COUNT (12L) #define SECURITY_CHILD_PACKAGE_RID_COUNT (12L)
// //
// Built-in Packages. // Built-in Packages.
// //
#define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE (0x00000001L) #define SECURITY_BUILTIN_PACKAGE_ANY_PACKAGE (0x00000001L)
skipping to change at line 9505 skipping to change at line 8997
#define SECURITY_CAPABILITY_INTERNET_CLIENT (0x00000001L) #define SECURITY_CAPABILITY_INTERNET_CLIENT (0x00000001L)
#define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER (0x00000002L) #define SECURITY_CAPABILITY_INTERNET_CLIENT_SERVER (0x00000002L)
#define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER (0x00000003L) #define SECURITY_CAPABILITY_PRIVATE_NETWORK_CLIENT_SERVER (0x00000003L)
#define SECURITY_CAPABILITY_PICTURES_LIBRARY (0x00000004L) #define SECURITY_CAPABILITY_PICTURES_LIBRARY (0x00000004L)
#define SECURITY_CAPABILITY_VIDEOS_LIBRARY (0x00000005L) #define SECURITY_CAPABILITY_VIDEOS_LIBRARY (0x00000005L)
#define SECURITY_CAPABILITY_MUSIC_LIBRARY (0x00000006L) #define SECURITY_CAPABILITY_MUSIC_LIBRARY (0x00000006L)
#define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY (0x00000007L) #define SECURITY_CAPABILITY_DOCUMENTS_LIBRARY (0x00000007L)
#define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION (0x00000008L) #define SECURITY_CAPABILITY_ENTERPRISE_AUTHENTICATION (0x00000008L)
#define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES (0x00000009L) #define SECURITY_CAPABILITY_SHARED_USER_CERTIFICATES (0x00000009L)
#define SECURITY_CAPABILITY_REMOVABLE_STORAGE (0x0000000AL) #define SECURITY_CAPABILITY_REMOVABLE_STORAGE (0x0000000AL)
#define SECURITY_CAPABILITY_APPOINTMENTS (0x0000000BL)
#define SECURITY_CAPABILITY_CONTACTS (0x0000000CL)
#define SECURITY_CAPABILITY_INTERNET_EXPLORER (0x00001000L) #define SECURITY_CAPABILITY_INTERNET_EXPLORER (0x00001000L)
// //
// Mandatory Label Authority. // Mandatory Label Authority.
// //
#define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16} #define SECURITY_MANDATORY_LABEL_AUTHORITY {0,0,0,0,0,16}
#define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L) #define SECURITY_MANDATORY_UNTRUSTED_RID (0x00000000L)
#define SECURITY_MANDATORY_LOW_RID (0x00001000L) #define SECURITY_MANDATORY_LOW_RID (0x00001000L)
skipping to change at line 9536 skipping to change at line 9030
#define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID #define SECURITY_MANDATORY_MAXIMUM_USER_RID SECURITY_MANDATORY_SYSTEM_RID
#define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000) #define MANDATORY_LEVEL_TO_MANDATORY_RID(IL) (IL * 0x1000)
#define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0,0,0,0,0,17} #define SECURITY_SCOPED_POLICY_ID_AUTHORITY {0,0,0,0,0,17}
// //
// Authentication Authority // Authentication Authority
// //
#define SECURITY_AUTHENTICATION_AUTHORITY {0,0,0,0,0,18} #define SECURITY_AUTHENTICATION_AUTHORITY {0,0,0,0,0,18}
#define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT (1L) #define SECURITY_AUTHENTICATION_AUTHORITY_RID_COUNT (1L)
#define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (0x00000001L) #define SECURITY_AUTHENTICATION_AUTHORITY_ASSERTED_RID (0x00000001L)
#define SECURITY_AUTHENTICATION_SERVICE_ASSERTED_RID (0x00000002L) #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)
// //
// Process Trust Authority // Process Trust Authority
// //
#define SECURITY_PROCESS_TRUST_AUTHORITY {0,0,0,0,0,19} #define SECURITY_PROCESS_TRUST_AUTHORITY {0,0,0,0,0,19}
#define SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT (2L) #define SECURITY_PROCESS_TRUST_AUTHORITY_RID_COUNT (2L)
#define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID (0x00000400L) #define SECURITY_PROCESS_PROTECTION_TYPE_FULL_RID (0x00000400L)
#define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID (0x00000200L) #define SECURITY_PROCESS_PROTECTION_TYPE_LITE_RID (0x00000200L)
skipping to change at line 9680 skipping to change at line 9178
WinUserModeDriversSid = 98, WinUserModeDriversSid = 98,
WinBuiltinHyperVAdminsSid = 99, WinBuiltinHyperVAdminsSid = 99,
WinAccountCloneableControllersSid = 100, WinAccountCloneableControllersSid = 100,
WinBuiltinAccessControlAssistanceOperatorsSid = 101, WinBuiltinAccessControlAssistanceOperatorsSid = 101,
WinBuiltinRemoteManagementUsersSid = 102, WinBuiltinRemoteManagementUsersSid = 102,
WinAuthenticationAuthorityAssertedSid = 103, WinAuthenticationAuthorityAssertedSid = 103,
WinAuthenticationServiceAssertedSid = 104, WinAuthenticationServiceAssertedSid = 104,
WinLocalAccountSid = 105, WinLocalAccountSid = 105,
WinLocalAccountAndAdministratorSid = 106, WinLocalAccountAndAdministratorSid = 106,
WinAccountProtectedUsersSid = 107, WinAccountProtectedUsersSid = 107,
WinCapabilityAppointmentsSid = 108,
WinCapabilityContactsSid = 109,
WinAccountDefaultSystemManagedSid = 110,
WinBuiltinDefaultSystemManagedGroupSid = 111,
WinBuiltinStorageReplicaAdminsSid = 112,
WinAccountKeyAdminsSid = 113,
WinAccountEnterpriseKeyAdminsSid = 114,
WinAuthenticationKeyTrustSid = 115,
WinAuthenticationKeyPropertyMFASid = 116,
WinAuthenticationKeyPropertyAttestationSid = 117,
WinAuthenticationFreshKeyAuthSid = 118,
} WELL_KNOWN_SID_TYPE; } WELL_KNOWN_SID_TYPE;
// //
// Allocate the System Luid. The first 1000 LUIDs are reserved. // Allocate the System Luid. The first 1000 LUIDs are reserved.
// Use #999 here (0x3e7 = 999) // Use #999 here (0x3e7 = 999)
// //
#define SYSTEM_LUID { 0x3e7, 0x0 } #define SYSTEM_LUID { 0x3e7, 0x0 }
#define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 } #define ANONYMOUS_LOGON_LUID { 0x3e6, 0x0 }
#define LOCALSERVICE_LUID { 0x3e5, 0x0 } #define LOCALSERVICE_LUID { 0x3e5, 0x0 }
skipping to change at line 10552 skipping to change at line 10061
#define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege") #define SE_ENABLE_DELEGATION_NAME TEXT("SeEnableDelegationPrivilege")
#define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege") #define SE_MANAGE_VOLUME_NAME TEXT("SeManageVolumePrivilege")
#define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege") #define SE_IMPERSONATE_NAME TEXT("SeImpersonatePrivilege")
#define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege") #define SE_CREATE_GLOBAL_NAME TEXT("SeCreateGlobalPrivilege")
#define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege" ) #define SE_TRUSTED_CREDMAN_ACCESS_NAME TEXT("SeTrustedCredManAccessPrivilege" )
#define SE_RELABEL_NAME TEXT("SeRelabelPrivilege") #define SE_RELABEL_NAME TEXT("SeRelabelPrivilege")
#define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege") #define SE_INC_WORKING_SET_NAME TEXT("SeIncreaseWorkingSetPrivilege")
#define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege") #define SE_TIME_ZONE_NAME TEXT("SeTimeZonePrivilege")
#define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege") #define SE_CREATE_SYMBOLIC_LINK_NAME TEXT("SeCreateSymbolicLinkPrivilege")
//
// List Of String Capabilities.
//
#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"
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// // // //
// Security Quality Of Service // // Security Quality Of Service //
// // // //
// // // //
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// begin_wdm // begin_wdm
// //
// Impersonation Level // Impersonation Level
skipping to change at line 10587 skipping to change at line 10104
#define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation #define DEFAULT_IMPERSONATION_LEVEL SecurityImpersonation
#define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL)) #define VALID_IMPERSONATION_LEVEL(L) (((L) >= SECURITY_MIN_IMPERSONATION_LEVEL) && ((L) <= SECURITY_MAX_IMPERSONATION_LEVEL))
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// // // //
// Token Object Definitions // // Token Object Definitions //
// // // //
// // // //
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
// begin_access
// //
// Token Specific Access Rights. // Token Specific Access Rights.
// //
#define TOKEN_ASSIGN_PRIMARY (0x0001) #define TOKEN_ASSIGN_PRIMARY (0x0001)
#define TOKEN_DUPLICATE (0x0002) #define TOKEN_DUPLICATE (0x0002)
#define TOKEN_IMPERSONATE (0x0004) #define TOKEN_IMPERSONATE (0x0004)
#define TOKEN_QUERY (0x0008) #define TOKEN_QUERY (0x0008)
#define TOKEN_QUERY_SOURCE (0x0010) #define TOKEN_QUERY_SOURCE (0x0010)
#define TOKEN_ADJUST_PRIVILEGES (0x0020) #define TOKEN_ADJUST_PRIVILEGES (0x0020)
skipping to change at line 10632 skipping to change at line 10151
TOKEN_ADJUST_PRIVILEGES |\ TOKEN_ADJUST_PRIVILEGES |\
TOKEN_ADJUST_GROUPS |\ TOKEN_ADJUST_GROUPS |\
TOKEN_ADJUST_DEFAULT) TOKEN_ADJUST_DEFAULT)
#define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE) #define TOKEN_EXECUTE (STANDARD_RIGHTS_EXECUTE)
#define TOKEN_TRUST_CONSTRAINT_MASK (STANDARD_RIGHTS_READ | \ #define TOKEN_TRUST_CONSTRAINT_MASK (STANDARD_RIGHTS_READ | \
TOKEN_QUERY |\ TOKEN_QUERY |\
TOKEN_QUERY_SOURCE ) 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
//
// end_access
// //
// //
// Token Types // Token Types
// //
typedef enum _TOKEN_TYPE { typedef enum _TOKEN_TYPE {
TokenPrimary = 1, TokenPrimary = 1,
TokenImpersonation TokenImpersonation
} TOKEN_TYPE; } TOKEN_TYPE;
typedef TOKEN_TYPE *PTOKEN_TYPE; typedef TOKEN_TYPE *PTOKEN_TYPE;
skipping to change at line 10701 skipping to change at line 10229
TokenAppContainerNumber, TokenAppContainerNumber,
TokenUserClaimAttributes, TokenUserClaimAttributes,
TokenDeviceClaimAttributes, TokenDeviceClaimAttributes,
TokenRestrictedUserClaimAttributes, TokenRestrictedUserClaimAttributes,
TokenRestrictedDeviceClaimAttributes, TokenRestrictedDeviceClaimAttributes,
TokenDeviceGroups, TokenDeviceGroups,
TokenRestrictedDeviceGroups, TokenRestrictedDeviceGroups,
TokenSecurityAttributes, TokenSecurityAttributes,
TokenIsRestricted, TokenIsRestricted,
TokenProcessTrustLevel, TokenProcessTrustLevel,
TokenPrivateNameSpace,
MaxTokenInfoClass // MaxTokenInfoClass should always be the last enum MaxTokenInfoClass // MaxTokenInfoClass should always be the last enum
} TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS; } TOKEN_INFORMATION_CLASS, *PTOKEN_INFORMATION_CLASS;
// //
// Token information class structures // Token information class structures
// //
typedef struct _TOKEN_USER { typedef struct _TOKEN_USER {
SID_AND_ATTRIBUTES User; SID_AND_ATTRIBUTES User;
} TOKEN_USER, *PTOKEN_USER; } TOKEN_USER, *PTOKEN_USER;
#ifndef MIDL_PASS
typedef struct _SE_TOKEN_USER {
union {
TOKEN_USER TokenUser;
SID_AND_ATTRIBUTES User;
} DUMMYUNIONNAME;
union {
SID Sid;
BYTE Buffer[SECURITY_MAX_SID_SIZE];
} DUMMYUNIONNAME2;
} SE_TOKEN_USER , PSE_TOKEN_USER;
#define TOKEN_USER_MAX_SIZE (sizeof(TOKEN_USER) + SECURITY_MAX_SID_SIZE)
#endif
typedef struct _TOKEN_GROUPS { typedef struct _TOKEN_GROUPS {
DWORD GroupCount; DWORD GroupCount;
#ifdef MIDL_PASS #ifdef MIDL_PASS
[size_is(GroupCount)] SID_AND_ATTRIBUTES Groups[*]; [size_is(GroupCount)] SID_AND_ATTRIBUTES Groups[*];
#else // MIDL_PASS #else // MIDL_PASS
SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY]; SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
#endif // MIDL_PASS #endif // MIDL_PASS
} TOKEN_GROUPS, *PTOKEN_GROUPS; } TOKEN_GROUPS, *PTOKEN_GROUPS;
typedef struct _TOKEN_PRIVILEGES { typedef struct _TOKEN_PRIVILEGES {
DWORD PrivilegeCount; DWORD PrivilegeCount;
LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY]; LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES; } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;
typedef struct _TOKEN_OWNER { typedef struct _TOKEN_OWNER {
PSID Owner; PSID Owner;
} TOKEN_OWNER, *PTOKEN_OWNER; } TOKEN_OWNER, *PTOKEN_OWNER;
#ifndef MIDL_PASS
#define TOKEN_OWNER_MAX_SIZE (sizeof(TOKEN_OWNER) + SECURITY_MAX_SID_SIZE)
#endif
typedef struct _TOKEN_PRIMARY_GROUP { typedef struct _TOKEN_PRIMARY_GROUP {
PSID PrimaryGroup; PSID PrimaryGroup;
} TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP; } TOKEN_PRIMARY_GROUP, *PTOKEN_PRIMARY_GROUP;
typedef struct _TOKEN_DEFAULT_DACL { typedef struct _TOKEN_DEFAULT_DACL {
PACL DefaultDacl; PACL DefaultDacl;
} TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL; } TOKEN_DEFAULT_DACL, *PTOKEN_DEFAULT_DACL;
typedef struct _TOKEN_USER_CLAIMS { typedef struct _TOKEN_USER_CLAIMS {
PCLAIMS_BLOB UserClaims; PCLAIMS_BLOB UserClaims;
skipping to change at line 10778 skipping to change at line 10330
SID_AND_ATTRIBUTES Label; SID_AND_ATTRIBUTES Label;
} TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL; } TOKEN_MANDATORY_LABEL, *PTOKEN_MANDATORY_LABEL;
#define TOKEN_MANDATORY_POLICY_OFF 0x0 #define TOKEN_MANDATORY_POLICY_OFF 0x0
#define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1 #define TOKEN_MANDATORY_POLICY_NO_WRITE_UP 0x1
#define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2 #define TOKEN_MANDATORY_POLICY_NEW_PROCESS_MIN 0x2
#define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_ UP | \ #define TOKEN_MANDATORY_POLICY_VALID_MASK (TOKEN_MANDATORY_POLICY_NO_WRITE_ UP | \
TOKEN_MANDATORY_POLICY_NEW_PROCE SS_MIN) TOKEN_MANDATORY_POLICY_NEW_PROCE SS_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 _TOKEN_MANDATORY_POLICY { typedef struct _TOKEN_MANDATORY_POLICY {
DWORD Policy; DWORD Policy;
} TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY; } TOKEN_MANDATORY_POLICY, *PTOKEN_MANDATORY_POLICY;
typedef PVOID PSECURITY_ATTRIBUTES_OPAQUE;
typedef struct _TOKEN_ACCESS_INFORMATION { typedef struct _TOKEN_ACCESS_INFORMATION {
PSID_AND_ATTRIBUTES_HASH SidHash; PSID_AND_ATTRIBUTES_HASH SidHash;
PSID_AND_ATTRIBUTES_HASH RestrictedSidHash; PSID_AND_ATTRIBUTES_HASH RestrictedSidHash;
PTOKEN_PRIVILEGES Privileges; PTOKEN_PRIVILEGES Privileges;
LUID AuthenticationId; LUID AuthenticationId;
TOKEN_TYPE TokenType; TOKEN_TYPE TokenType;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
TOKEN_MANDATORY_POLICY MandatoryPolicy; TOKEN_MANDATORY_POLICY MandatoryPolicy;
DWORD Flags; DWORD Flags;
DWORD AppContainerNumber; DWORD AppContainerNumber;
PSID PackageSid; PSID PackageSid;
PSID_AND_ATTRIBUTES_HASH CapabilitiesHash; PSID_AND_ATTRIBUTES_HASH CapabilitiesHash;
PSID TrustLevelSid; PSID TrustLevelSid;
PSECURITY_ATTRIBUTES_OPAQUE SecurityAttributes;
} TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION; } TOKEN_ACCESS_INFORMATION, *PTOKEN_ACCESS_INFORMATION;
// //
// Valid bits for each TOKEN_AUDIT_POLICY policy mask field. // Valid bits for each TOKEN_AUDIT_POLICY policy mask field.
// //
#define POLICY_AUDIT_SUBCATEGORY_COUNT (56) #define POLICY_AUDIT_SUBCATEGORY_COUNT (58)
typedef struct _TOKEN_AUDIT_POLICY { typedef struct _TOKEN_AUDIT_POLICY {
BYTE PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1]; BYTE PerUserPolicy[((POLICY_AUDIT_SUBCATEGORY_COUNT) >> 1) + 1];
} TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY; } TOKEN_AUDIT_POLICY, *PTOKEN_AUDIT_POLICY;
#define TOKEN_SOURCE_LENGTH 8 #define TOKEN_SOURCE_LENGTH 8
typedef struct _TOKEN_SOURCE { typedef struct _TOKEN_SOURCE {
CHAR SourceName[TOKEN_SOURCE_LENGTH]; CHAR SourceName[TOKEN_SOURCE_LENGTH];
LUID SourceIdentifier; LUID SourceIdentifier;
skipping to change at line 10852 skipping to change at line 10411
MandatoryLevelHigh, MandatoryLevelHigh,
MandatoryLevelSystem, MandatoryLevelSystem,
MandatoryLevelSecureProcess, MandatoryLevelSecureProcess,
MandatoryLevelCount MandatoryLevelCount
} MANDATORY_LEVEL, *PMANDATORY_LEVEL; } MANDATORY_LEVEL, *PMANDATORY_LEVEL;
typedef struct _TOKEN_APPCONTAINER_INFORMATION { typedef struct _TOKEN_APPCONTAINER_INFORMATION {
PSID TokenAppContainer; PSID TokenAppContainer;
} TOKEN_APPCONTAINER_INFORMATION, *PTOKEN_APPCONTAINER_INFORMATION; } TOKEN_APPCONTAINER_INFORMATION, *PTOKEN_APPCONTAINER_INFORMATION;
#ifndef MIDL_PASS
#define TOKEN_APPCONTAINER_SID_MAX_SIZE (sizeof(TOKEN_APPCONTAINER_INFORMATION)
+ SECURITY_MAX_SID_SIZE)
#endif
typedef struct _TOKEN_SID_INFORMATION { typedef struct _TOKEN_SID_INFORMATION {
PSID Sid; PSID Sid;
} TOKEN_SID_INFORMATION, *PTOKEN_SID_INFORMATION; } TOKEN_SID_INFORMATION, *PTOKEN_SID_INFORMATION;
// //
// *** Claim Security attributes *** // *** Claim Security attributes ***
// //
// These #defines and data structures (almost) exactly mirror // These #defines and data structures (almost) exactly mirror
// the Token_XXX definitions (except for PWSTR/PUNICODE changes) // the Token_XXX definitions (except for PWSTR/PUNICODE changes)
// in ntseapi.w as well as AUTHZ_XXX in authz.w. // in ntseapi.w as well as AUTHZ_XXX in authz.w.
skipping to change at line 11154 skipping to change at line 10717
#define SCOPE_SECURITY_INFORMATION (0x00000040L) #define SCOPE_SECURITY_INFORMATION (0x00000040L)
#define PROCESS_TRUST_LABEL_SECURITY_INFORMATION (0x00000080L) #define PROCESS_TRUST_LABEL_SECURITY_INFORMATION (0x00000080L)
#define BACKUP_SECURITY_INFORMATION (0x00010000L) #define BACKUP_SECURITY_INFORMATION (0x00010000L)
#define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L) #define PROTECTED_DACL_SECURITY_INFORMATION (0x80000000L)
#define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L) #define PROTECTED_SACL_SECURITY_INFORMATION (0x40000000L)
#define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L) #define UNPROTECTED_DACL_SECURITY_INFORMATION (0x20000000L)
#define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L) #define UNPROTECTED_SACL_SECURITY_INFORMATION (0x10000000L)
// //
// Base signing levels.
//
typedef BYTE SE_SIGNING_LEVEL, *PSE_SIGNING_LEVEL;
#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_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
//
// Image signature types.
//
typedef enum _SE_IMAGE_SIGNATURE_TYPE
{
SeImageSignatureNone = 0,
SeImageSignatureEmbedded,
SeImageSignatureCache,
SeImageSignatureCatalogCached,
SeImageSignatureCatalogNotCached,
SeImageSignatureCatalogHint,
SeImageSignaturePackageCatalog,
} SE_IMAGE_SIGNATURE_TYPE, *PSE_IMAGE_SIGNATURE_TYPE;
//
// Learning Mode Types. // Learning Mode Types.
// //
typedef enum _SE_LEARNING_MODE_DATA_TYPE { typedef enum _SE_LEARNING_MODE_DATA_TYPE {
SeLearningModeInvalidType = 0, SeLearningModeInvalidType = 0,
SeLearningModeSettings, SeLearningModeSettings,
SeLearningModeMax SeLearningModeMax
} SE_LEARNING_MODE_DATA_TYPE; } SE_LEARNING_MODE_DATA_TYPE;
#define SE_LEARNING_MODE_FLAG_PERMISSIVE 0x00000001 #define SE_LEARNING_MODE_FLAG_PERMISSIVE 0x00000001
typedef struct _SECURITY_CAPABILITIES { typedef struct _SECURITY_CAPABILITIES {
#ifdef MIDL_PASS
PISID AppContainerSid;
[size_is(CapabilityCount)] PSID_AND_ATTRIBUTES Capabilities;
#else // MIDL_PASS
PSID AppContainerSid; PSID AppContainerSid;
PSID_AND_ATTRIBUTES Capabilities; PSID_AND_ATTRIBUTES Capabilities;
#endif // MIDL_PASS
DWORD CapabilityCount; DWORD CapabilityCount;
DWORD Reserved; DWORD Reserved;
} SECURITY_CAPABILITIES, *PSECURITY_CAPABILITIES, *LPSECURITY_CAPABILITIES; } SECURITY_CAPABILITIES, *PSECURITY_CAPABILITIES, *LPSECURITY_CAPABILITIES;
#define PROCESS_TERMINATE (0x0001) #define PROCESS_TERMINATE (0x0001)
#define PROCESS_CREATE_THREAD (0x0002) #define PROCESS_CREATE_THREAD (0x0002)
#define PROCESS_SET_SESSIONID (0x0004) #define PROCESS_SET_SESSIONID (0x0004)
#define PROCESS_VM_OPERATION (0x0008) #define PROCESS_VM_OPERATION (0x0008)
#define PROCESS_VM_READ (0x0010) #define PROCESS_VM_READ (0x0010)
#define PROCESS_VM_WRITE (0x0020) #define PROCESS_VM_WRITE (0x0020)
skipping to change at line 11194 skipping to change at line 10801
#define PROCESS_QUERY_LIMITED_INFORMATION (0x1000) #define PROCESS_QUERY_LIMITED_INFORMATION (0x1000)
#define PROCESS_SET_LIMITED_INFORMATION (0x2000) #define PROCESS_SET_LIMITED_INFORMATION (0x2000)
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFFF) 0xFFFF)
#else #else
#define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ #define PROCESS_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0xFFF) 0xFFF)
#endif #endif
#if defined(_WIN64)
#define MAXIMUM_PROC_PER_GROUP 64
#else
#define MAXIMUM_PROC_PER_GROUP 32
#endif
#define MAXIMUM_PROCESSORS MAXIMUM_PROC_PER_GROUP
#define THREAD_TERMINATE (0x0001) #define THREAD_TERMINATE (0x0001)
#define THREAD_SUSPEND_RESUME (0x0002) #define THREAD_SUSPEND_RESUME (0x0002)
#define THREAD_GET_CONTEXT (0x0008) #define THREAD_GET_CONTEXT (0x0008)
#define THREAD_SET_CONTEXT (0x0010) #define THREAD_SET_CONTEXT (0x0010)
#define THREAD_QUERY_INFORMATION (0x0040) #define THREAD_QUERY_INFORMATION (0x0040)
#define THREAD_SET_INFORMATION (0x0020) #define THREAD_SET_INFORMATION (0x0020)
#define THREAD_SET_THREAD_TOKEN (0x0080) #define THREAD_SET_THREAD_TOKEN (0x0080)
#define THREAD_IMPERSONATE (0x0100) #define THREAD_IMPERSONATE (0x0100)
#define THREAD_DIRECT_IMPERSONATION (0x0200) #define THREAD_DIRECT_IMPERSONATION (0x0200)
// begin_wdm // begin_wdm
skipping to change at line 11234 skipping to change at line 10829
0x3FF) 0x3FF)
#endif #endif
#define JOB_OBJECT_ASSIGN_PROCESS (0x0001) #define JOB_OBJECT_ASSIGN_PROCESS (0x0001)
#define JOB_OBJECT_SET_ATTRIBUTES (0x0002) #define JOB_OBJECT_SET_ATTRIBUTES (0x0002)
#define JOB_OBJECT_QUERY (0x0004) #define JOB_OBJECT_QUERY (0x0004)
#define JOB_OBJECT_TERMINATE (0x0008) #define JOB_OBJECT_TERMINATE (0x0008)
#define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010) #define JOB_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \ #define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0x1F ) 0x1F )
// end_access
typedef struct _JOB_SET_ARRAY { typedef struct _JOB_SET_ARRAY {
HANDLE JobHandle; // Handle to job object to insert HANDLE JobHandle; // Handle to job object to insert
DWORD MemberLevel; // Level of this job in the set. Must be > 0. Can be spa rse. DWORD MemberLevel; // Level of this job in the set. Must be > 0. Can be spa rse.
DWORD Flags; // Unused. Must be zero DWORD Flags; // Unused. Must be zero
} JOB_SET_ARRAY, *PJOB_SET_ARRAY; } JOB_SET_ARRAY, *PJOB_SET_ARRAY;
#define FLS_MAXIMUM_AVAILABLE 128 #define FLS_MAXIMUM_AVAILABLE 128
#define TLS_MINIMUM_AVAILABLE 64 #define TLS_MINIMUM_AVAILABLE 64
typedef struct _EXCEPTION_REGISTRATION_RECORD { typedef struct _EXCEPTION_REGISTRATION_RECORD {
skipping to change at line 11321 skipping to change at line 10918
#define THREAD_BASE_PRIORITY_MAX 2 // maximum thread base priority boost #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_MIN (-2) // minimum thread base priority boost
#define THREAD_BASE_PRIORITY_IDLE (-15) // value that gets a thread to idle #define THREAD_BASE_PRIORITY_IDLE (-15) // value that gets a thread to idle
typedef struct _UMS_CREATE_THREAD_ATTRIBUTES { typedef struct _UMS_CREATE_THREAD_ATTRIBUTES {
DWORD UmsVersion; DWORD UmsVersion;
PVOID UmsContext; PVOID UmsContext;
PVOID UmsCompletionList; PVOID UmsCompletionList;
} UMS_CREATE_THREAD_ATTRIBUTES, *PUMS_CREATE_THREAD_ATTRIBUTES; } UMS_CREATE_THREAD_ATTRIBUTES, *PUMS_CREATE_THREAD_ATTRIBUTES;
//
// Page/memory priorities.
//
#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 _QUOTA_LIMITS { typedef struct _QUOTA_LIMITS {
SIZE_T PagedPoolLimit; SIZE_T PagedPoolLimit;
SIZE_T NonPagedPoolLimit; SIZE_T NonPagedPoolLimit;
SIZE_T MinimumWorkingSetSize; SIZE_T MinimumWorkingSetSize;
SIZE_T MaximumWorkingSetSize; SIZE_T MaximumWorkingSetSize;
SIZE_T PagefileLimit; SIZE_T PagefileLimit;
LARGE_INTEGER TimeLimit; LARGE_INTEGER TimeLimit;
} QUOTA_LIMITS, *PQUOTA_LIMITS; } QUOTA_LIMITS, *PQUOTA_LIMITS;
#define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001 #define QUOTA_LIMITS_HARDWS_MIN_ENABLE 0x00000001
skipping to change at line 11384 skipping to change at line 10992
MaxHardwareCounterType MaxHardwareCounterType
} HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE; } HARDWARE_COUNTER_TYPE, *PHARDWARE_COUNTER_TYPE;
typedef enum _PROCESS_MITIGATION_POLICY { typedef enum _PROCESS_MITIGATION_POLICY {
ProcessDEPPolicy, ProcessDEPPolicy,
ProcessASLRPolicy, ProcessASLRPolicy,
ProcessDynamicCodePolicy, ProcessDynamicCodePolicy,
ProcessStrictHandleCheckPolicy, ProcessStrictHandleCheckPolicy,
ProcessSystemCallDisablePolicy, ProcessSystemCallDisablePolicy,
ProcessMitigationOptionsMask, ProcessMitigationOptionsMask,
ProcessExtensionPointDisablePolicy, ProcessExtensionPointDisablePolicy,
ProcessReserved1Policy, ProcessControlFlowGuardPolicy,
ProcessSignaturePolicy, ProcessSignaturePolicy,
ProcessFontDisablePolicy,
ProcessImageLoadPolicy,
MaxProcessMitigationPolicy MaxProcessMitigationPolicy
} PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY; } PROCESS_MITIGATION_POLICY, *PPROCESS_MITIGATION_POLICY;
// //
// N.B. High entropy mode is read only and can only be set at creation time // N.B. High entropy mode is read only and can only be set at creation time
// and not via the ProcessMitigationPolicy APIs. // and not via the ProcessMitigationPolicy APIs.
// //
typedef struct _PROCESS_MITIGATION_ASLR_POLICY { typedef struct _PROCESS_MITIGATION_ASLR_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD EnableBottomUpRandomization : 1; DWORD EnableBottomUpRandomization : 1;
DWORD EnableForceRelocateImages : 1; DWORD EnableForceRelocateImages : 1;
DWORD EnableHighEntropy : 1; DWORD EnableHighEntropy : 1;
DWORD DisallowStrippedImages : 1; DWORD DisallowStrippedImages : 1;
DWORD ReservedFlags : 28; DWORD ReservedFlags : 28;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
} PROCESS_MITIGATION_ASLR_POLICY, *PPROCESS_MITIGATION_ASLR_POLICY; } PROCESS_MITIGATION_ASLR_POLICY, *PPROCESS_MITIGATION_ASLR_POLICY;
typedef struct _PROCESS_MITIGATION_DEP_POLICY { typedef struct _PROCESS_MITIGATION_DEP_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD Enable : 1; DWORD Enable : 1;
DWORD DisableAtlThunkEmulation : 1; DWORD DisableAtlThunkEmulation : 1;
DWORD ReservedFlags : 30; DWORD ReservedFlags : 30;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
BOOLEAN Permanent; BOOLEAN Permanent;
} PROCESS_MITIGATION_DEP_POLICY, *PPROCESS_MITIGATION_DEP_POLICY; } PROCESS_MITIGATION_DEP_POLICY, *PPROCESS_MITIGATION_DEP_POLICY;
typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY { typedef struct _PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD RaiseExceptionOnInvalidHandleReference : 1; DWORD RaiseExceptionOnInvalidHandleReference : 1;
DWORD HandleExceptionsPermanentlyEnabled : 1; DWORD HandleExceptionsPermanentlyEnabled : 1;
DWORD ReservedFlags : 30; DWORD ReservedFlags : 30;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
} PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY, *PPROCESS_MITIGATION_STRICT_HAN DLE_CHECK_POLICY; } PROCESS_MITIGATION_STRICT_HANDLE_CHECK_POLICY, *PPROCESS_MITIGATION_STRICT_HAN DLE_CHECK_POLICY;
typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY { typedef struct _PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD DisallowWin32kSystemCalls : 1; DWORD DisallowWin32kSystemCalls : 1;
DWORD ReservedFlags : 31; DWORD ReservedFlags : 31;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
} PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY, *PPROCESS_MITIGATION_SYSTEM_CAL L_DISABLE_POLICY; } PROCESS_MITIGATION_SYSTEM_CALL_DISABLE_POLICY, *PPROCESS_MITIGATION_SYSTEM_CAL L_DISABLE_POLICY;
typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY { typedef struct _PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD DisableExtensionPoints : 1; DWORD DisableExtensionPoints : 1;
DWORD ReservedFlags : 31; DWORD ReservedFlags : 31;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
} PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY, *PPROCESS_MITIGATION_EXTENS ION_POINT_DISABLE_POLICY; } PROCESS_MITIGATION_EXTENSION_POINT_DISABLE_POLICY, *PPROCESS_MITIGATION_EXTENS ION_POINT_DISABLE_POLICY;
typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY { typedef struct _PROCESS_MITIGATION_DYNAMIC_CODE_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD ProhibitDynamicCode : 1; DWORD ProhibitDynamicCode : 1;
DWORD ReservedFlags : 31; DWORD ReservedFlags : 31;
}; } DUMMYSTRUCTNAME;
}; } DUMMYUNIONNAME;
} PROCESS_MITIGATION_DYNAMIC_CODE_POLICY, *PPROCESS_MITIGATION_DYNAMIC_CODE_POLI CY; } PROCESS_MITIGATION_DYNAMIC_CODE_POLICY, *PPROCESS_MITIGATION_DYNAMIC_CODE_POLI CY;
typedef struct _PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY {
union {
DWORD Flags;
struct {
DWORD EnableControlFlowGuard : 1;
DWORD ReservedFlags : 31;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_MITIGATION_CONTROL_FLOW_GUARD_POLICY, *PPROCESS_MITIGATION_CONTROL_FLO
W_GUARD_POLICY;
typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY { typedef struct _PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY {
union { union {
DWORD Flags; DWORD Flags;
struct { struct {
DWORD MicrosoftSignedOnly : 1; DWORD MicrosoftSignedOnly : 1;
DWORD ReservedFlags : 31; DWORD StoreSignedOnly : 1;
}; DWORD MitigationOptIn : 1;
}; DWORD ReservedFlags : 29;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY, *PPROCESS_MITIGATION_BINARY_SIGNAT URE_POLICY; } PROCESS_MITIGATION_BINARY_SIGNATURE_POLICY, *PPROCESS_MITIGATION_BINARY_SIGNAT URE_POLICY;
typedef struct _PROCESS_MITIGATION_FONT_DISABLE_POLICY {
union {
DWORD Flags;
struct {
DWORD DisableNonSystemFonts : 1;
DWORD AuditNonSystemFontLoading : 1;
DWORD ReservedFlags : 30;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_MITIGATION_FONT_DISABLE_POLICY, *PPROCESS_MITIGATION_FONT_DISABLE_POLI
CY;
typedef struct _PROCESS_MITIGATION_IMAGE_LOAD_POLICY {
union {
DWORD Flags;
struct {
DWORD NoRemoteImages : 1;
DWORD NoLowMandatoryLabelImages : 1;
DWORD ReservedFlags : 30;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} PROCESS_MITIGATION_IMAGE_LOAD_POLICY, *PPROCESS_MITIGATION_IMAGE_LOAD_POLICY;
typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { typedef struct _JOBOBJECT_BASIC_ACCOUNTING_INFORMATION {
LARGE_INTEGER TotalUserTime; LARGE_INTEGER TotalUserTime;
LARGE_INTEGER TotalKernelTime; LARGE_INTEGER TotalKernelTime;
LARGE_INTEGER ThisPeriodTotalUserTime; LARGE_INTEGER ThisPeriodTotalUserTime;
LARGE_INTEGER ThisPeriodTotalKernelTime; LARGE_INTEGER ThisPeriodTotalKernelTime;
DWORD TotalPageFaultCount; DWORD TotalPageFaultCount;
DWORD TotalProcesses; DWORD TotalProcesses;
DWORD ActiveProcesses; DWORD ActiveProcesses;
DWORD TotalTerminatedProcesses; DWORD TotalTerminatedProcesses;
} JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATI ON; } JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_ACCOUNTING_INFORMATI ON;
skipping to change at line 11546 skipping to change at line 11190
} JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUN TING_INFORMATION; } JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION, *PJOBOBJECT_BASIC_AND_IO_ACCOUN TING_INFORMATION;
typedef struct _JOBOBJECT_JOBSET_INFORMATION { typedef struct _JOBOBJECT_JOBSET_INFORMATION {
DWORD MemberLevel; DWORD MemberLevel;
} JOBOBJECT_JOBSET_INFORMATION, *PJOBOBJECT_JOBSET_INFORMATION; } JOBOBJECT_JOBSET_INFORMATION, *PJOBOBJECT_JOBSET_INFORMATION;
typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE { typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE {
ToleranceLow = 1, ToleranceLow = 1,
ToleranceMedium, ToleranceMedium,
ToleranceHigh ToleranceHigh
} JOBOBJECT_RATE_CONTROL_TOLERANCE; } JOBOBJECT_RATE_CONTROL_TOLERANCE, *PJOBOBJECT_RATE_CONTROL_TOLERANCE;
typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL { typedef enum _JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL {
ToleranceIntervalShort = 1, ToleranceIntervalShort = 1,
ToleranceIntervalMedium, ToleranceIntervalMedium,
ToleranceIntervalLong ToleranceIntervalLong
} JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL; } JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL,
*PJOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL;
typedef struct _JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION { typedef struct _JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION {
DWORD64 IoReadBytesLimit; DWORD64 IoReadBytesLimit;
DWORD64 IoWriteBytesLimit; DWORD64 IoWriteBytesLimit;
LARGE_INTEGER PerJobUserTimeLimit; LARGE_INTEGER PerJobUserTimeLimit;
DWORD64 JobMemoryLimit; DWORD64 JobMemoryLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance; JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval; JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
DWORD LimitFlags; DWORD LimitFlags;
} JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION, *PJOBOBJECT_NOTIFICATION_LIMIT_INFOR MATION; } JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION, *PJOBOBJECT_NOTIFICATION_LIMIT_INFOR MATION;
typedef struct JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2 {
DWORD64 IoReadBytesLimit;
DWORD64 IoWriteBytesLimit;
LARGE_INTEGER PerJobUserTimeLimit;
union {
DWORD64 JobHighMemoryLimit;
DWORD64 JobMemoryLimit;
} DUMMYUNIONNAME;
union {
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlTolerance;
} DUMMYUNIONNAME2;
union {
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceInterval;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL
CpuRateControlToleranceInterval;
} DUMMYUNIONNAME3;
DWORD LimitFlags;
JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlTolerance;
DWORD64 JobLowMemoryLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL IoRateControlToleranceInterval;
JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL NetRateControlToleranceInterval;
} JOBOBJECT_NOTIFICATION_LIMIT_INFORMATION_2;
typedef struct _JOBOBJECT_LIMIT_VIOLATION_INFORMATION { typedef struct _JOBOBJECT_LIMIT_VIOLATION_INFORMATION {
DWORD LimitFlags; DWORD LimitFlags;
DWORD ViolationLimitFlags; DWORD ViolationLimitFlags;
DWORD64 IoReadBytes; DWORD64 IoReadBytes;
DWORD64 IoReadBytesLimit; DWORD64 IoReadBytesLimit;
DWORD64 IoWriteBytes; DWORD64 IoWriteBytes;
DWORD64 IoWriteBytesLimit; DWORD64 IoWriteBytesLimit;
LARGE_INTEGER PerJobUserTime; LARGE_INTEGER PerJobUserTime;
LARGE_INTEGER PerJobUserTimeLimit; LARGE_INTEGER PerJobUserTimeLimit;
DWORD64 JobMemory; DWORD64 JobMemory;
DWORD64 JobMemoryLimit; DWORD64 JobMemoryLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance; JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE_INTERVAL RateControlToleranceLimit; JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlToleranceLimit;
} JOBOBJECT_LIMIT_VIOLATION_INFORMATION, *PJOBOBJECT_LIMIT_VIOLATION_INFORMATION ; } JOBOBJECT_LIMIT_VIOLATION_INFORMATION, *PJOBOBJECT_LIMIT_VIOLATION_INFORMATION ;
typedef struct JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2 {
DWORD LimitFlags;
DWORD ViolationLimitFlags;
DWORD64 IoReadBytes;
DWORD64 IoReadBytesLimit;
DWORD64 IoWriteBytes;
DWORD64 IoWriteBytesLimit;
LARGE_INTEGER PerJobUserTime;
LARGE_INTEGER PerJobUserTimeLimit;
DWORD64 JobMemory;
union {
DWORD64 JobHighMemoryLimit;
DWORD64 JobMemoryLimit;
} DUMMYUNIONNAME;
union {
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlTolerance;
} DUMMYUNIONNAME2;
union {
JOBOBJECT_RATE_CONTROL_TOLERANCE RateControlToleranceLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE CpuRateControlToleranceLimit;
} DUMMYUNIONNAME3;
DWORD64 JobLowMemoryLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE IoRateControlToleranceLimit;
JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlTolerance;
JOBOBJECT_RATE_CONTROL_TOLERANCE NetRateControlToleranceLimit;
} JOBOBJECT_LIMIT_VIOLATION_INFORMATION_2;
typedef struct _JOBOBJECT_CPU_RATE_CONTROL_INFORMATION { typedef struct _JOBOBJECT_CPU_RATE_CONTROL_INFORMATION {
DWORD ControlFlags; DWORD ControlFlags;
union { union {
DWORD CpuRate; DWORD CpuRate;
DWORD Weight; DWORD Weight;
}; struct {
WORD MinRate;
WORD MaxRate;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, *PJOBOBJECT_CPU_RATE_CONTROL_INFORMATI ON; } JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, *PJOBOBJECT_CPU_RATE_CONTROL_INFORMATI ON;
//
// Control flags for network rate control.
//
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)
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));
#endif
#define JOB_OBJECT_NET_RATE_CONTROL_MAX_DSCP_TAG 64
typedef struct JOBOBJECT_NET_RATE_CONTROL_INFORMATION {
DWORD64 MaxBandwidth;
JOB_OBJECT_NET_RATE_CONTROL_FLAGS ControlFlags;
BYTE DscpTag;
} JOBOBJECT_NET_RATE_CONTROL_INFORMATION;
//
// Control flags for IO rate control.
//
// begin_ntosifs
typedef enum JOB_OBJECT_IO_RATE_CONTROL_FLAGS {
JOB_OBJECT_IO_RATE_CONTROL_ENABLE = 0x1,
JOB_OBJECT_IO_RATE_CONTROL_VALID_FLAGS = JOB_OBJECT_IO_RATE_CONTROL_ENABLE
} 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)
C_ASSERT(JOB_OBJECT_IO_RATE_CONTROL_VALID_FLAGS ==
JOB_OBJECT_IO_RATE_CONTROL_ENABLE);
#endif
typedef struct JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE {
LONG64 MaxIops;
LONG64 MaxBandwidth;
LONG64 ReservationIops;
PWSTR VolumeName;
DWORD BaseIoSize;
JOB_OBJECT_IO_RATE_CONTROL_FLAGS ControlFlags;
WORD VolumeNameLength;
} JOBOBJECT_IO_RATE_CONTROL_INFORMATION_NATIVE;
// end_ntosifs
#define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0 #define JOB_OBJECT_TERMINATE_AT_END_OF_JOB 0
#define JOB_OBJECT_POST_AT_END_OF_JOB 1 #define JOB_OBJECT_POST_AT_END_OF_JOB 1
// //
// Completion Port Messages for job objects // Completion Port Messages for job objects
// //
// These values are returned via the lpNumberOfBytesTransferred parameter // These values are returned via the lpNumberOfBytesTransferred parameter
// //
#define JOB_OBJECT_MSG_END_OF_JOB_TIME 1 #define JOB_OBJECT_MSG_END_OF_JOB_TIME 1
#define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2 #define JOB_OBJECT_MSG_END_OF_PROCESS_TIME 2
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT 3
#define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4 #define JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO 4
#define JOB_OBJECT_MSG_NEW_PROCESS 6 #define JOB_OBJECT_MSG_NEW_PROCESS 6
#define JOB_OBJECT_MSG_EXIT_PROCESS 7 #define JOB_OBJECT_MSG_EXIT_PROCESS 7
#define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8 #define JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS 8
#define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9 #define JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT 9
#define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10 #define JOB_OBJECT_MSG_JOB_MEMORY_LIMIT 10
#define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 11 #define JOB_OBJECT_MSG_NOTIFICATION_LIMIT 11
#define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 12 #define JOB_OBJECT_MSG_JOB_CYCLE_TIME_LIMIT 12
#define JOB_OBJECT_MSG_SILO_TERMINATED 13
// //
// Define the valid notification filter values. // Define the valid notification filter values.
// //
#define JOB_OBJECT_MSG_MINIMUM 1 #define JOB_OBJECT_MSG_MINIMUM 1
#define JOB_OBJECT_MSG_MAXIMUM 12 #define JOB_OBJECT_MSG_MAXIMUM 13
#define JOB_OBJECT_VALID_COMPLETION_FILTER \ #define JOB_OBJECT_VALID_COMPLETION_FILTER \
(((1UL << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1) - \ (((1UL << (JOB_OBJECT_MSG_MAXIMUM + 1)) - 1) - \
((1UL << JOB_OBJECT_MSG_MINIMUM) - 1)) ((1UL << JOB_OBJECT_MSG_MINIMUM) - 1))
// //
// Basic Limits // Basic Limits
// //
#define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001 #define JOB_OBJECT_LIMIT_WORKINGSET 0x00000001
#define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002 #define JOB_OBJECT_LIMIT_PROCESS_TIME 0x00000002
skipping to change at line 11636 skipping to change at line 11406
#define JOB_OBJECT_LIMIT_AFFINITY 0x00000010 #define JOB_OBJECT_LIMIT_AFFINITY 0x00000010
#define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020 #define JOB_OBJECT_LIMIT_PRIORITY_CLASS 0x00000020
#define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040 #define JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME 0x00000040
#define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080 #define JOB_OBJECT_LIMIT_SCHEDULING_CLASS 0x00000080
// //
// Extended Limits // Extended Limits
// //
#define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100 #define JOB_OBJECT_LIMIT_PROCESS_MEMORY 0x00000100
#define JOB_OBJECT_LIMIT_JOB_MEMORY 0x00000200 #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_DIE_ON_UNHANDLED_EXCEPTION 0x00000400
#define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800 #define JOB_OBJECT_LIMIT_BREAKAWAY_OK 0x00000800
#define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000 #define JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK 0x00001000
#define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000 #define JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE 0x00002000
#define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000 #define JOB_OBJECT_LIMIT_SUBSET_AFFINITY 0x00004000
#define JOB_OBJECT_LIMIT_JOB_MEMORY_LOW 0x00008000
// //
// Notification Limits // Notification Limits
// //
#define JOB_OBJECT_LIMIT_JOB_READ_BYTES 0x00010000 #define JOB_OBJECT_LIMIT_JOB_READ_BYTES 0x00010000
#define JOB_OBJECT_LIMIT_JOB_WRITE_BYTES 0x00020000 #define JOB_OBJECT_LIMIT_JOB_WRITE_BYTES 0x00020000
#define JOB_OBJECT_LIMIT_RATE_CONTROL 0x00040000 #define JOB_OBJECT_LIMIT_RATE_CONTROL 0x00040000
#define JOB_OBJECT_LIMIT_CPU_RATE_CONTROL JOB_OBJECT_LIMIT_RATE_CONTRO
// L
// Reserved flags #define JOB_OBJECT_LIMIT_IO_RATE_CONTROL 0x00080000
// #define JOB_OBJECT_LIMIT_NET_RATE_CONTROL 0x00100000
#define JOB_OBJECT_LIMIT_RESERVED3 0x00008000
// //
// Valid Job Object Limits // Valid Job Object Limits
// //
#define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff #define JOB_OBJECT_LIMIT_VALID_FLAGS 0x0007ffff
#define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff #define JOB_OBJECT_BASIC_LIMIT_VALID_FLAGS 0x000000ff
#define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff #define JOB_OBJECT_EXTENDED_LIMIT_VALID_FLAGS 0x00007fff
#define JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS 0x00070204 #define JOB_OBJECT_NOTIFICATION_LIMIT_VALID_FLAGS \
#define JOB_OBJECT_RESERVED_LIMIT_VALID_FLAGS 0x0007ffff (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)
// //
// UI restrictions for jobs // UI restrictions for jobs
// //
#define JOB_OBJECT_UILIMIT_NONE 0x00000000 #define JOB_OBJECT_UILIMIT_NONE 0x00000000
#define JOB_OBJECT_UILIMIT_HANDLES 0x00000001 #define JOB_OBJECT_UILIMIT_HANDLES 0x00000001
#define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002 #define JOB_OBJECT_UILIMIT_READCLIPBOARD 0x00000002
#define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004 #define JOB_OBJECT_UILIMIT_WRITECLIPBOARD 0x00000004
skipping to change at line 11700 skipping to change at line 11476
#define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f #define JOB_OBJECT_SECURITY_VALID_FLAGS 0x0000000f
// //
// Control flags for CPU rate control. // Control flags for CPU rate control.
// //
#define JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x1 #define JOB_OBJECT_CPU_RATE_CONTROL_ENABLE 0x1
#define JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x2 #define JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED 0x2
#define JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x4 #define JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP 0x4
#define JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x8 #define JOB_OBJECT_CPU_RATE_CONTROL_NOTIFY 0x8
#define JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS 0xf #define JOB_OBJECT_CPU_RATE_CONTROL_MIN_MAX_RATE 0x10
#define JOB_OBJECT_CPU_RATE_CONTROL_VALID_FLAGS 0x1f
typedef enum _JOBOBJECTINFOCLASS { typedef enum _JOBOBJECTINFOCLASS {
JobObjectBasicAccountingInformation = 1, JobObjectBasicAccountingInformation = 1,
JobObjectBasicLimitInformation, JobObjectBasicLimitInformation,
JobObjectBasicProcessIdList, JobObjectBasicProcessIdList,
JobObjectBasicUIRestrictions, JobObjectBasicUIRestrictions,
JobObjectSecurityLimitInformation, // deprecated JobObjectSecurityLimitInformation, // deprecated
JobObjectEndOfJobTimeInformation, JobObjectEndOfJobTimeInformation,
JobObjectAssociateCompletionPortInformation, JobObjectAssociateCompletionPortInformation,
JobObjectBasicAndIoAccountingInformation, JobObjectBasicAndIoAccountingInformation,
skipping to change at line 11729 skipping to change at line 11506
JobObjectCompletionCounter, JobObjectCompletionCounter,
JobObjectReserved1Information = 18, JobObjectReserved1Information = 18,
JobObjectReserved2Information, JobObjectReserved2Information,
JobObjectReserved3Information, JobObjectReserved3Information,
JobObjectReserved4Information, JobObjectReserved4Information,
JobObjectReserved5Information, JobObjectReserved5Information,
JobObjectReserved6Information, JobObjectReserved6Information,
JobObjectReserved7Information, JobObjectReserved7Information,
JobObjectReserved8Information, JobObjectReserved8Information,
JobObjectReserved9Information, JobObjectReserved9Information,
JobObjectReserved10Information,
JobObjectReserved11Information,
JobObjectReserved12Information,
JobObjectReserved13Information,
JobObjectReserved14Information,
JobObjectNetRateControlInformation,
JobObjectNotificationLimitInformation2,
JobObjectLimitViolationInformation2,
JobObjectCreateSilo,
JobObjectSiloBasicInformation,
JobObjectSiloRootDirectory,
JobObjectServerSiloBasicInformation,
JobObjectServerSiloServiceSessionId,
JobObjectServerSiloInitialize,
JobObjectServerSiloRunningState,
MaxJobObjectInfoClass MaxJobObjectInfoClass
} JOBOBJECTINFOCLASS; } JOBOBJECTINFOCLASS;
#define SILO_OBJECT_ASSIGN_PROCESS (0x0001)
#define SILO_OBJECT_SET_ATTRIBUTES (0x0002)
#define SILO_OBJECT_QUERY (0x0004)
#define SILO_OBJECT_TERMINATE (0x0008)
#define SILO_OBJECT_SET_SECURITY_ATTRIBUTES (0x0010)
#define SILO_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | \
0x1F )
typedef struct _SILOOBJECT_BASIC_INFORMATION {
GUID SiloIdNumber;
GUID SiloParentIdNumber;
DWORD NumberOfProcesses;
DWORD NumberOfChildSilos;
BOOLEAN IsInServerSilo;
} SILOOBJECT_BASIC_INFORMATION, *PSILOOBJECT_BASIC_INFORMATION;
typedef struct _SILOOBJECT_ROOT_DIRECTORY {
HANDLE DirectoryHandle;
} SILOOBJECT_ROOT_DIRECTORY, *PSILOOBJECT_ROOT_DIRECTORY;
typedef enum _SERVERSILO_STATE {
SERVERSILO_INITING = 0,
SERVERSILO_STARTED,
SERVERSILO_SHUTTING_DOWN,
SERVERSILO_TERMINATING,
SERVERSILO_TERMINATED,
} SERVERSILO_STATE, *PSERVERSILO_STATE;
typedef struct _SERVERSILO_BASIC_INFORMATION {
DWORD ServiceSessionId;
SERVERSILO_STATE State;
DWORD ExitStatus;
} SERVERSILO_BASIC_INFORMATION, *PSERVERSILO_BASIC_INFORMATION;
//
typedef enum _FIRMWARE_TYPE { typedef enum _FIRMWARE_TYPE {
FirmwareTypeUnknown, FirmwareTypeUnknown,
FirmwareTypeBios, FirmwareTypeBios,
FirmwareTypeUefi, FirmwareTypeUefi,
FirmwareTypeMax FirmwareTypeMax
} FIRMWARE_TYPE, *PFIRMWARE_TYPE; } FIRMWARE_TYPE, *PFIRMWARE_TYPE;
#define EVENT_MODIFY_STATE 0x0002 #define EVENT_MODIFY_STATE 0x0002
#define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define EVENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
//
// Mutant Specific Access Rights
//
#define MUTANT_QUERY_STATE 0x0001 #define MUTANT_QUERY_STATE 0x0001
#define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\ #define MUTANT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|\
MUTANT_QUERY_STATE) MUTANT_QUERY_STATE)
#define SEMAPHORE_MODIFY_STATE 0x0002 #define SEMAPHORE_MODIFY_STATE 0x0002
#define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define SEMAPHORE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
// //
// Timer Specific Access Rights. // Timer Specific Access Rights.
skipping to change at line 11813 skipping to change at line 11644
struct { struct {
DWORD NodeNumber; DWORD NodeNumber;
} NumaNode; } NumaNode;
CACHE_DESCRIPTOR Cache; CACHE_DESCRIPTOR Cache;
ULONGLONG Reserved[2]; ULONGLONG Reserved[2];
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
} SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION; } SYSTEM_LOGICAL_PROCESSOR_INFORMATION, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION;
typedef struct _PROCESSOR_RELATIONSHIP { typedef struct _PROCESSOR_RELATIONSHIP {
BYTE Flags; BYTE Flags;
BYTE Reserved[21]; BYTE EfficiencyClass;
BYTE Reserved[20];
WORD GroupCount; WORD GroupCount;
_Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY]; _Field_size_(GroupCount) GROUP_AFFINITY GroupMask[ANYSIZE_ARRAY];
} PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP; } PROCESSOR_RELATIONSHIP, *PPROCESSOR_RELATIONSHIP;
typedef struct _NUMA_NODE_RELATIONSHIP { typedef struct _NUMA_NODE_RELATIONSHIP {
DWORD NodeNumber; DWORD NodeNumber;
BYTE Reserved[20]; BYTE Reserved[20];
GROUP_AFFINITY GroupMask; GROUP_AFFINITY GroupMask;
} NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP; } NUMA_NODE_RELATIONSHIP, *PNUMA_NODE_RELATIONSHIP;
skipping to change at line 11861 skipping to change at line 11693
union { union {
PROCESSOR_RELATIONSHIP Processor; PROCESSOR_RELATIONSHIP Processor;
NUMA_NODE_RELATIONSHIP NumaNode; NUMA_NODE_RELATIONSHIP NumaNode;
CACHE_RELATIONSHIP Cache; CACHE_RELATIONSHIP Cache;
GROUP_RELATIONSHIP Group; GROUP_RELATIONSHIP Group;
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
}; };
typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX SYSTEM_LOGICAL_PROCESSOR _INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX; typedef struct _SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX SYSTEM_LOGICAL_PROCESSOR _INFORMATION_EX, *PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX;
typedef enum _CPU_SET_INFORMATION_TYPE {
CpuSetInformation
} CPU_SET_INFORMATION_TYPE, *PCPU_SET_INFORMATION_TYPE;
_Struct_size_bytes_(Size) struct _SYSTEM_CPU_SET_INFORMATION {
DWORD Size;
CPU_SET_INFORMATION_TYPE Type;
union {
struct {
DWORD Id;
WORD Group;
BYTE LogicalProcessorIndex;
BYTE CoreIndex;
BYTE LastLevelCacheIndex;
BYTE NumaNodeIndex;
BYTE EfficiencyClass;
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
BYTE AllFlags;
struct {
BYTE Parked : 1;
BYTE Allocated : 1;
BYTE AllocatedToTargetProcess : 1;
BYTE RealTime : 1;
BYTE ReservedFlags : 4;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME2;
DWORD Reserved;
DWORD64 AllocationTag;
} CpuSet;
} DUMMYUNIONNAME;
};
typedef struct _SYSTEM_CPU_SET_INFORMATION SYSTEM_CPU_SET_INFORMATION, *PSYSTEM_
CPU_SET_INFORMATION;
// end_wdm end_ntminiport // end_wdm end_ntminiport
typedef struct _SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION { typedef struct _SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION {
DWORD64 CycleTime; DWORD64 CycleTime;
} SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION, *PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMA TION; } SYSTEM_PROCESSOR_CYCLE_TIME_INFORMATION, *PSYSTEM_PROCESSOR_CYCLE_TIME_INFORMA TION;
#define PROCESSOR_INTEL_386 386 #define PROCESSOR_INTEL_386 386
#define PROCESSOR_INTEL_486 486 #define PROCESSOR_INTEL_486 486
#define PROCESSOR_INTEL_PENTIUM 586 #define PROCESSOR_INTEL_PENTIUM 586
#define PROCESSOR_INTEL_IA64 2200 #define PROCESSOR_INTEL_IA64 2200
skipping to change at line 11903 skipping to change at line 11775
#define PROCESSOR_ARCHITECTURE_ALPHA 2 #define PROCESSOR_ARCHITECTURE_ALPHA 2
#define PROCESSOR_ARCHITECTURE_PPC 3 #define PROCESSOR_ARCHITECTURE_PPC 3
#define PROCESSOR_ARCHITECTURE_SHX 4 #define PROCESSOR_ARCHITECTURE_SHX 4
#define PROCESSOR_ARCHITECTURE_ARM 5 #define PROCESSOR_ARCHITECTURE_ARM 5
#define PROCESSOR_ARCHITECTURE_IA64 6 #define PROCESSOR_ARCHITECTURE_IA64 6
#define PROCESSOR_ARCHITECTURE_ALPHA64 7 #define PROCESSOR_ARCHITECTURE_ALPHA64 7
#define PROCESSOR_ARCHITECTURE_MSIL 8 #define PROCESSOR_ARCHITECTURE_MSIL 8
#define PROCESSOR_ARCHITECTURE_AMD64 9 #define PROCESSOR_ARCHITECTURE_AMD64 9
#define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10 #define PROCESSOR_ARCHITECTURE_IA32_ON_WIN64 10
#define PROCESSOR_ARCHITECTURE_NEUTRAL 11 #define PROCESSOR_ARCHITECTURE_NEUTRAL 11
#define PROCESSOR_ARCHITECTURE_ARM64 12
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF #define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
#define PF_FLOATING_POINT_PRECISION_ERRATA 0 #define PF_FLOATING_POINT_PRECISION_ERRATA 0
#define PF_FLOATING_POINT_EMULATED 1 #define PF_FLOATING_POINT_EMULATED 1
#define PF_COMPARE_EXCHANGE_DOUBLE 2 #define PF_COMPARE_EXCHANGE_DOUBLE 2
#define PF_MMX_INSTRUCTIONS_AVAILABLE 3 #define PF_MMX_INSTRUCTIONS_AVAILABLE 3
#define PF_PPC_MOVEMEM_64BIT_OK 4 #define PF_PPC_MOVEMEM_64BIT_OK 4
#define PF_ALPHA_BYTE_INSTRUCTIONS 5 #define PF_ALPHA_BYTE_INSTRUCTIONS 5
#define PF_XMMI_INSTRUCTIONS_AVAILABLE 6 #define PF_XMMI_INSTRUCTIONS_AVAILABLE 6
#define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7 #define PF_3DNOW_INSTRUCTIONS_AVAILABLE 7
#define PF_RDTSC_INSTRUCTION_AVAILABLE 8 #define PF_RDTSC_INSTRUCTION_AVAILABLE 8
#define PF_PAE_ENABLED 9 #define PF_PAE_ENABLED 9
#define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10 #define PF_XMMI64_INSTRUCTIONS_AVAILABLE 10
#define PF_SSE_DAZ_MODE_AVAILABLE 11 #define PF_SSE_DAZ_MODE_AVAILABLE 11
#define PF_NX_ENABLED 12 #define PF_NX_ENABLED 12
#define PF_SSE3_INSTRUCTIONS_AVAILABLE 13 #define PF_SSE3_INSTRUCTIONS_AVAILABLE 13
#define PF_COMPARE_EXCHANGE128 14 #define PF_COMPARE_EXCHANGE128 14
#define PF_COMPARE64_EXCHANGE128 15 #define PF_COMPARE64_EXCHANGE128 15
#define PF_CHANNELS_ENABLED 16 #define PF_CHANNELS_ENABLED 16
#define PF_XSAVE_ENABLED 17 #define PF_XSAVE_ENABLED 17
#define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18 #define PF_ARM_VFP_32_REGISTERS_AVAILABLE 18
#define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19 #define PF_ARM_NEON_INSTRUCTIONS_AVAILABLE 19
#define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20 #define PF_SECOND_LEVEL_ADDRESS_TRANSLATION 20
#define PF_VIRT_FIRMWARE_ENABLED 21 #define PF_VIRT_FIRMWARE_ENABLED 21
#define PF_RDWRFSGSBASE_AVAILABLE 22 #define PF_RDWRFSGSBASE_AVAILABLE 22
#define PF_FASTFAIL_AVAILABLE 23 #define PF_FASTFAIL_AVAILABLE 23
#define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24 #define PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE 24
#define PF_ARM_64BIT_LOADSTORE_ATOMIC 25 #define PF_ARM_64BIT_LOADSTORE_ATOMIC 25
#define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26 #define PF_ARM_EXTERNAL_CACHE_AVAILABLE 26
#define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27 #define PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE 27
#define PF_RDRAND_INSTRUCTION_AVAILABLE 28 #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
// //
// Known extended CPU state feature IDs // Known extended CPU state feature BITs
//
// 0 x87
// 1 SSE
// 2 AVX
// 3 BNDREGS (B0.LB-B3.LB B0.UB-B3.UB)
// 4 BNDCSR (BNDCFGU + BNDSTATUS) Persistent
// 5 KMASK (KMASK [63:0][0-7])
// 6 ZMM_H (ZMM_H[511:256][0-15])
// 7 ZMM (ZMM[511:0][16-31])
// 8 IPT Supervisor
//
// 62 LWP Persistent
//
// 63 RZ0 Reserved
// //
#define XSTATE_LEGACY_FLOATING_POINT (0) #define XSTATE_LEGACY_FLOATING_POINT (0)
#define XSTATE_LEGACY_SSE (1) #define XSTATE_LEGACY_SSE (1)
#define XSTATE_GSSE (2) #define XSTATE_GSSE (2)
#define XSTATE_AVX (XSTATE_GSSE) #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_LWP (62)
#define MAXIMUM_XSTATE_FEATURES (64)
//
// Known extended CPU state feature MASKs
//
#define XSTATE_MASK_LEGACY_FLOATING_POINT (1ui64 << (XSTATE_LEGACY_FLOATING_PO INT)) #define XSTATE_MASK_LEGACY_FLOATING_POINT (1ui64 << (XSTATE_LEGACY_FLOATING_PO INT))
#define XSTATE_MASK_LEGACY_SSE (1ui64 << (XSTATE_LEGACY_SSE)) #define XSTATE_MASK_LEGACY_SSE (1ui64 << (XSTATE_LEGACY_SSE))
#define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT | #define XSTATE_MASK_LEGACY (XSTATE_MASK_LEGACY_FLOATING_POINT |
XSTATE_MASK_LEGACY_SSE) \
XSTATE_MASK_LEGACY_SSE)
#define XSTATE_MASK_GSSE (1ui64 << (XSTATE_GSSE)) #define XSTATE_MASK_GSSE (1ui64 << (XSTATE_GSSE))
#define XSTATE_MASK_AVX (XSTATE_MASK_GSSE) #define XSTATE_MASK_AVX (XSTATE_MASK_GSSE)
#define XSTATE_MASK_MPX ((1ui64 << (XSTATE_MPX_BNDREGS)) | \
(1ui64 << (XSTATE_MPX_BNDCSR)))
#define MAXIMUM_XSTATE_FEATURES (64) #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_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_LWP)
#define XSTATE_MASK_PERSISTENT ((1ui64 << (XSTATE_MPX_BNDCSR)) | \
XSTATE_MASK_LWP)
//
// Flags associated with compaction mask
//
#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))
// //
// Extended processor state configuration // Extended processor state configuration
// //
typedef struct _XSTATE_FEATURE { typedef struct _XSTATE_FEATURE {
DWORD Offset; DWORD Offset;
DWORD Size; DWORD Size;
} XSTATE_FEATURE, *PXSTATE_FEATURE; } XSTATE_FEATURE, *PXSTATE_FEATURE;
typedef struct _XSTATE_CONFIGURATION { typedef struct _XSTATE_CONFIGURATION {
// Mask of all enabled features // Mask of all enabled features
DWORD64 EnabledFeatures; DWORD64 EnabledFeatures;
// Mask of volatile enabled features // Mask of volatile enabled features
DWORD64 EnabledVolatileFeatures; DWORD64 EnabledVolatileFeatures;
// Total size of the save area // Total size of the save area for user states
DWORD Size; DWORD Size;
// Control Flags
DWORD OptimizedSave : 1; DWORD OptimizedSave : 1;
DWORD CompactionEnabled : 1;
// List of features ( // List of features
XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES]; XSTATE_FEATURE Features[MAXIMUM_XSTATE_FEATURES];
// Mask of all supervisor features
DWORD64 EnabledSupervisorFeatures;
// Mask of features that require start address to be 64 byte aligned
DWORD64 AlignedFeatures;
// Total size of the save area for user and supervisor states
DWORD AllFeatureSize;
// List which holds size of each user and supervisor state supported by CPU
DWORD AllFeatures[MAXIMUM_XSTATE_FEATURES];
} XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION; } XSTATE_CONFIGURATION, *PXSTATE_CONFIGURATION;
// begin_ntifs
typedef struct _MEMORY_BASIC_INFORMATION { typedef struct _MEMORY_BASIC_INFORMATION {
PVOID BaseAddress; PVOID BaseAddress;
PVOID AllocationBase; PVOID AllocationBase;
DWORD AllocationProtect; DWORD AllocationProtect;
SIZE_T RegionSize; SIZE_T RegionSize;
DWORD State; DWORD State;
DWORD Protect; DWORD Protect;
DWORD Type; DWORD Type;
} MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION; } MEMORY_BASIC_INFORMATION, *PMEMORY_BASIC_INFORMATION;
// end_ntifs
typedef struct _MEMORY_BASIC_INFORMATION32 { typedef struct _MEMORY_BASIC_INFORMATION32 {
DWORD BaseAddress; DWORD BaseAddress;
DWORD AllocationBase; DWORD AllocationBase;
DWORD AllocationProtect; DWORD AllocationProtect;
DWORD RegionSize; DWORD RegionSize;
DWORD State; DWORD State;
DWORD Protect; DWORD Protect;
DWORD Type; DWORD Type;
} MEMORY_BASIC_INFORMATION32, *PMEMORY_BASIC_INFORMATION32; } MEMORY_BASIC_INFORMATION32, *PMEMORY_BASIC_INFORMATION32;
skipping to change at line 12011 skipping to change at line 11961
ULONGLONG AllocationBase; ULONGLONG AllocationBase;
DWORD AllocationProtect; DWORD AllocationProtect;
DWORD __alignment1; DWORD __alignment1;
ULONGLONG RegionSize; ULONGLONG RegionSize;
DWORD State; DWORD State;
DWORD Protect; DWORD Protect;
DWORD Type; DWORD Type;
DWORD __alignment2; DWORD __alignment2;
} MEMORY_BASIC_INFORMATION64, *PMEMORY_BASIC_INFORMATION64; } MEMORY_BASIC_INFORMATION64, *PMEMORY_BASIC_INFORMATION64;
//
// Define flags for setting process CFG valid call target entries.
//
//
// Call target should be made valid. If not set, the call target is made
// invalid. Input flag.
//
#define CFG_CALL_TARGET_VALID (0x00000001)
//
// Call target has been successfully processed. Used to report to the caller
// how much progress has been made. Output flag.
//
#define CFG_CALL_TARGET_PROCESSED (0x00000002)
typedef struct _CFG_CALL_TARGET_INFO {
ULONG_PTR Offset;
ULONG_PTR Flags;
} CFG_CALL_TARGET_INFO, *PCFG_CALL_TARGET_INFO;
#define SECTION_QUERY 0x0001 #define SECTION_QUERY 0x0001
#define SECTION_MAP_WRITE 0x0002 #define SECTION_MAP_WRITE 0x0002
#define SECTION_MAP_READ 0x0004 #define SECTION_MAP_READ 0x0004
#define SECTION_MAP_EXECUTE 0x0008 #define SECTION_MAP_EXECUTE 0x0008
#define SECTION_EXTEND_SIZE 0x0010 #define SECTION_EXTEND_SIZE 0x0010
#define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 // not included in SECTION_ALL_ACCES S #define SECTION_MAP_EXECUTE_EXPLICIT 0x0020 // not included in SECTION_ALL_ACCES S
#define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\ #define SECTION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SECTION_QUERY|\
SECTION_MAP_WRITE | \ SECTION_MAP_WRITE | \
SECTION_MAP_READ | \ SECTION_MAP_READ | \
SECTION_MAP_EXECUTE | \ SECTION_MAP_EXECUTE | \
SECTION_EXTEND_SIZE) SECTION_EXTEND_SIZE)
//
// Session Specific Access Rights.
//
#define SESSION_QUERY_ACCESS 0x0001 #define SESSION_QUERY_ACCESS 0x0001
#define SESSION_MODIFY_ACCESS 0x0002 #define SESSION_MODIFY_ACCESS 0x0002
#define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \ #define SESSION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
SESSION_QUERY_ACCESS | \ SESSION_QUERY_ACCESS | \
SESSION_MODIFY_ACCESS) SESSION_MODIFY_ACCESS)
//
// Partition Specific Access Rights.
//
#define MEMORY_PARTITION_QUERY_ACCESS 0x0001
#define MEMORY_PARTITION_MODIFY_ACCESS 0x0002
#define MEMORY_PARTITION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | \
SYNCHRONIZE | \
MEMORY_PARTITION_QUERY_ACCESS | \
MEMORY_PARTITION_MODIFY_ACCESS)
// end_access
#define PAGE_NOACCESS 0x01 #define PAGE_NOACCESS 0x01
#define PAGE_READONLY 0x02 #define PAGE_READONLY 0x02
#define PAGE_READWRITE 0x04 #define PAGE_READWRITE 0x04
#define PAGE_WRITECOPY 0x08 #define PAGE_WRITECOPY 0x08
#pragma region Desktop Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#define PAGE_EXECUTE 0x10 #define PAGE_EXECUTE 0x10
#define PAGE_EXECUTE_READ 0x20 #define PAGE_EXECUTE_READ 0x20
#define PAGE_EXECUTE_READWRITE 0x40 #define PAGE_EXECUTE_READWRITE 0x40
#define PAGE_EXECUTE_WRITECOPY 0x80 #define PAGE_EXECUTE_WRITECOPY 0x80
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#pragma endregion
#define PAGE_GUARD 0x100 #define PAGE_GUARD 0x100
#define PAGE_NOCACHE 0x200 #define PAGE_NOCACHE 0x200
#define PAGE_WRITECOMBINE 0x400 #define PAGE_WRITECOMBINE 0x400
#define PAGE_REVERT_TO_FILE_MAP 0x80000000 #define PAGE_REVERT_TO_FILE_MAP 0x80000000
#define PAGE_ENCLAVE_THREAD_CONTROL 0x80000000
#define PAGE_TARGETS_NO_UPDATE 0x40000000
#define PAGE_TARGETS_INVALID 0x40000000
#define PAGE_ENCLAVE_UNVALIDATED 0x20000000
#define MEM_COMMIT 0x1000 #define MEM_COMMIT 0x1000
#define MEM_RESERVE 0x2000 #define MEM_RESERVE 0x2000
#define MEM_DECOMMIT 0x4000 #define MEM_DECOMMIT 0x4000
#define MEM_RELEASE 0x8000 #define MEM_RELEASE 0x8000
#define MEM_FREE 0x10000 #define MEM_FREE 0x10000
#define MEM_PRIVATE 0x20000 #define MEM_PRIVATE 0x20000
#define MEM_MAPPED 0x40000 #define MEM_MAPPED 0x40000
#define MEM_RESET 0x80000 #define MEM_RESET 0x80000
#define MEM_TOP_DOWN 0x100000 #define MEM_TOP_DOWN 0x100000
#define MEM_WRITE_WATCH 0x200000 #define MEM_WRITE_WATCH 0x200000
skipping to change at line 12076 skipping to change at line 12066
#define SEC_RESERVE 0x4000000 #define SEC_RESERVE 0x4000000
#define SEC_COMMIT 0x8000000 #define SEC_COMMIT 0x8000000
#define SEC_NOCACHE 0x10000000 #define SEC_NOCACHE 0x10000000
#define SEC_WRITECOMBINE 0x40000000 #define SEC_WRITECOMBINE 0x40000000
#define SEC_LARGE_PAGES 0x80000000 #define SEC_LARGE_PAGES 0x80000000
#define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE) #define SEC_IMAGE_NO_EXECUTE (SEC_IMAGE | SEC_NOCACHE)
#define MEM_IMAGE SEC_IMAGE #define MEM_IMAGE SEC_IMAGE
#define WRITE_WATCH_FLAG_RESET 0x01 #define WRITE_WATCH_FLAG_RESET 0x01
#define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x01 #define MEM_UNMAP_WITH_TRANSIENT_BOOST 0x01
#define ENCLAVE_TYPE_SGX 0x00000001
typedef struct _ENCLAVE_CREATE_INFO_SGX {
BYTE Secs[4096];
} ENCLAVE_CREATE_INFO_SGX, *PENCLAVE_CREATE_INFO_SGX;
typedef struct _ENCLAVE_INIT_INFO_SGX {
BYTE SigStruct[1808];
BYTE Reserved1[240];
BYTE EInitToken[304];
BYTE Reserved2[1744];
} ENCLAVE_INIT_INFO_SGX, *PENCLAVE_INIT_INFO_SGX;
// begin_access
// //
// Define access rights to files and directories // Define access rights to files and directories
// //
// //
// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in // The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these // devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
// constants *MUST* always be in sync. // constants *MUST* always be in sync.
// The values are redefined in devioctl.h because they must be available to // The values are redefined in devioctl.h because they must be available to
// both DOS and NT. // both DOS and NT.
skipping to change at line 12131 skipping to change at line 12136
FILE_WRITE_ATTRIBUTES |\ FILE_WRITE_ATTRIBUTES |\
FILE_WRITE_EA |\ FILE_WRITE_EA |\
FILE_APPEND_DATA |\ FILE_APPEND_DATA |\
SYNCHRONIZE) SYNCHRONIZE)
#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ #define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
FILE_READ_ATTRIBUTES |\ FILE_READ_ATTRIBUTES |\
FILE_EXECUTE |\ FILE_EXECUTE |\
SYNCHRONIZE) SYNCHRONIZE)
// end_access
#define FILE_SHARE_READ 0x00000001 #define FILE_SHARE_READ 0x00000001
#define FILE_SHARE_WRITE 0x00000002 #define FILE_SHARE_WRITE 0x00000002
#define FILE_SHARE_DELETE 0x00000004 #define FILE_SHARE_DELETE 0x00000004
#define FILE_ATTRIBUTE_READONLY 0x00000001 #define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002 #define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004 #define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 #define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 #define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_DEVICE 0x00000040 #define FILE_ATTRIBUTE_DEVICE 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080 #define FILE_ATTRIBUTE_NORMAL 0x00000080
skipping to change at line 12188 skipping to change at line 12194
#define FILE_SUPPORTS_ENCRYPTION 0x00020000 #define FILE_SUPPORTS_ENCRYPTION 0x00020000
#define FILE_NAMED_STREAMS 0x00040000 #define FILE_NAMED_STREAMS 0x00040000
#define FILE_READ_ONLY_VOLUME 0x00080000 #define FILE_READ_ONLY_VOLUME 0x00080000
#define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000 #define FILE_SEQUENTIAL_WRITE_ONCE 0x00100000
#define FILE_SUPPORTS_TRANSACTIONS 0x00200000 #define FILE_SUPPORTS_TRANSACTIONS 0x00200000
#define FILE_SUPPORTS_HARD_LINKS 0x00400000 #define FILE_SUPPORTS_HARD_LINKS 0x00400000
#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000 #define FILE_SUPPORTS_EXTENDED_ATTRIBUTES 0x00800000
#define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000 #define FILE_SUPPORTS_OPEN_BY_FILE_ID 0x01000000
#define FILE_SUPPORTS_USN_JOURNAL 0x02000000 #define FILE_SUPPORTS_USN_JOURNAL 0x02000000
#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000 #define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000
#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000
#define FILE_SUPPORTS_SPARSE_VDL 0x10000000
#define FILE_INVALID_FILE_ID ((LONGLONG)-1LL) #define FILE_INVALID_FILE_ID ((LONGLONG)-1LL)
typedef struct _FILE_ID_128 { typedef struct _FILE_ID_128 {
BYTE Identifier[16]; BYTE Identifier[16];
} FILE_ID_128, *PFILE_ID_128; } FILE_ID_128, *PFILE_ID_128;
// //
// Define the file notification information structure // Define the file notification information structure
// //
typedef struct _FILE_NOTIFY_INFORMATION { typedef struct _FILE_NOTIFY_INFORMATION {
skipping to change at line 12354 skipping to change at line 12362
#define IO_REPARSE_TAG_SIS (0x80000007L) #define IO_REPARSE_TAG_SIS (0x80000007L)
#define IO_REPARSE_TAG_WIM (0x80000008L) #define IO_REPARSE_TAG_WIM (0x80000008L)
#define IO_REPARSE_TAG_CSV (0x80000009L) #define IO_REPARSE_TAG_CSV (0x80000009L)
#define IO_REPARSE_TAG_DFS (0x8000000AL) #define IO_REPARSE_TAG_DFS (0x8000000AL)
#define IO_REPARSE_TAG_SYMLINK (0xA000000CL) #define IO_REPARSE_TAG_SYMLINK (0xA000000CL)
#define IO_REPARSE_TAG_DFSR (0x80000012L) #define IO_REPARSE_TAG_DFSR (0x80000012L)
#define IO_REPARSE_TAG_DEDUP (0x80000013L) #define IO_REPARSE_TAG_DEDUP (0x80000013L)
#define IO_REPARSE_TAG_NFS (0x80000014L) #define IO_REPARSE_TAG_NFS (0x80000014L)
#define IO_REPARSE_TAG_FILE_PLACEHOLDER (0x80000015L) #define IO_REPARSE_TAG_FILE_PLACEHOLDER (0x80000015L)
#define IO_REPARSE_TAG_WOF (0x80000017L) #define IO_REPARSE_TAG_WOF (0x80000017L)
#define IO_REPARSE_TAG_WCI (0x80000018L)
#define IO_REPARSE_TAG_GLOBAL_REPARSE (0x80000019L)
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8) #if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
//======================= FSCTL_SCRUB_DATA ============================= //======================= FSCTL_SCRUB_DATA =============================
#define SCRUB_DATA_INPUT_FLAG_RESUME 0x00000001 #define SCRUB_DATA_INPUT_FLAG_RESUME 0x00000001
#define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x00000002 #define SCRUB_DATA_INPUT_FLAG_SKIP_IN_SYNC 0x00000002
#define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x00000004 #define SCRUB_DATA_INPUT_FLAG_SKIP_NON_INTEGRITY_DATA 0x00000004
#define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x00000001 #define SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE 0x00000001
skipping to change at line 12568 skipping to change at line 12578
// This field is only valid when SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE // This field is only valid when SCRUB_DATA_OUTPUT_FLAG_INCOMPLETE
// is set. // is set.
// //
BYTE ResumeContext[816]; BYTE ResumeContext[816];
} SCRUB_DATA_OUTPUT, *PSCRUB_DATA_OUTPUT; } SCRUB_DATA_OUTPUT, *PSCRUB_DATA_OUTPUT;
#endif /*_WIN32_WINNT >= _WIN32_WINNT_WIN8 */ #endif /*_WIN32_WINNT >= _WIN32_WINNT_WIN8 */
// WINBLUE_abracadabra #if (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
//
// N.B. The following #if check needs to be against NTDDI_WINBLUE when it become
s available.
#if (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
// //
//=============== FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT ==================== //=============== FSCTL_QUERY_SHARED_VIRTUAL_DISK_SUPPORT ====================
// //
// //
// Whether the file system supports shared virtual disks. // Whether the file system supports shared virtual disks.
// //
typedef enum _SharedVirtualDiskSupportType typedef enum _SharedVirtualDiskSupportType
{ {
// //
// Shared virtual disks are not supported. // Shared virtual disks are not supported.
// //
SharedVirtualDisksUnsupported = 0, SharedVirtualDisksUnsupported = 0,
// //
// Shared virtual disks are supported. // Shared virtual disks are supported.
// //
SharedVirtualDisksSupported = 1 SharedVirtualDisksSupported = 1,
//
// The target device supports taking virtual disk
// snapshots.
//
SharedVirtualDiskSnapshotsSupported = 3,
//
// The target device supports Continuous Data
// Protection (log based) snapshots.
//
SharedVirtualDiskCDPSnapshotsSupported = 7
} SharedVirtualDiskSupportType; } SharedVirtualDiskSupportType;
typedef enum _SharedVirtualDiskHandleState typedef enum _SharedVirtualDiskHandleState
{ {
// //
// The file handle is not related to a shared virtual disk. // The file handle is not related to a shared virtual disk.
// //
SharedVirtualDiskHandleStateNone = 0, SharedVirtualDiskHandleStateNone = 0,
// //
skipping to change at line 12636 skipping to change at line 12655
// //
SharedVirtualDiskHandleState HandleState; SharedVirtualDiskHandleState HandleState;
} SHARED_VIRTUAL_DISK_SUPPORT, *PSHARED_VIRTUAL_DISK_SUPPORT; } SHARED_VIRTUAL_DISK_SUPPORT, *PSHARED_VIRTUAL_DISK_SUPPORT;
// //
// Determines if the provided virtual disk handle state, from FSCTL_QUERY_SHARED _VIRTUAL_DISK_SUPPORT, // Determines if the provided virtual disk handle state, from FSCTL_QUERY_SHARED _VIRTUAL_DISK_SUPPORT,
// indicates that the target virtual disk file is opened in shared mode. // indicates that the target virtual disk file is opened in shared mode.
// //
#define IsVirtualDiskFileShared(HandleState) (((HandleState) & SharedVirtualDisk HandleStateFileShared) != 0) #define IsVirtualDiskFileShared(HandleState) (((HandleState) & SharedVirtualDisk HandleStateFileShared) != 0)
#endif // (_WIN32_WINNT >= _WIN32_WINNT_WIN8) #endif // (_WIN32_WINNT >= _WIN32_WINNT_WINBLUE)
// begin_winioctl begin_ntosifs // begin_access
//
//=============== END FileSystem FSCTL Structure Defintions ==================
//
// //
// I/O Completion Specific Access Rights. // I/O Completion Specific Access Rights.
// //
#define IO_COMPLETION_MODIFY_STATE 0x0002 #define IO_COMPLETION_MODIFY_STATE 0x0002
#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) #define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3)
#define IO_QOS_MAX_RESERVATION 1000000000ULL
//
// Some applications include both ntioapi_x.h and winioctl.h
//
#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)
//
// Define the SMB Cluster Client Failover AppInstance Extended Attribute name
// newer version of input payload assumes that EA is not just a GUID,
// but instead is a structure that contains additional information
//
//
// Is used only when file is opened directly on CSVFS. This flag is ignored when
file
// is opened over SMB.
// Tells CSVFS that this file open should be valid only on coordinating node.
// If open comes to CSVFS, and this node is not a coordinating then open would f
ail.
// If file is opened, and coordinating node is moved then file open will be inva
lidated
//
#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 _NETWORK_APP_INSTANCE_EA {
//
// The caller places a GUID that should always be unique for a single insta
nce of
// the application.
//
GUID AppInstanceID;
//
// Combination of the NETWORK_APP_INSTANCE_CSV_FLAGS_* flags
//
DWORD CsvFlags;
} NETWORK_APP_INSTANCE_EA, *PNETWORK_APP_INSTANCE_EA;
#endif // (NTDDI_VERSION >= NTDDI_WIN10)
#endif //_NETWORK_APP_INSTANCE_EA_DEFINED
// begin_access
// //
// Object Manager Symbolic Link Specific Access Rights. // Object Manager Symbolic Link Specific Access Rights.
// //
#define DUPLICATE_CLOSE_SOURCE 0x00000001 #define DUPLICATE_CLOSE_SOURCE 0x00000001
#define DUPLICATE_SAME_ACCESS 0x00000002 #define DUPLICATE_SAME_ACCESS 0x00000002
// //
// ========================================= // =========================================
// Define GUIDs which represent well-known power schemes // Define GUIDs which represent well-known power schemes
skipping to change at line 12765 skipping to change at line 12836
// //
// Specifies the subgroup which will contain all of the idle resiliency // Specifies the subgroup which will contain all of the idle resiliency
// settings for a single policy. // settings for a single policy.
// //
// {2E601130-5351-4d9d-8E04-252966BAD054} // {2E601130-5351-4d9d-8E04-252966BAD054}
DEFINE_GUID(GUID_IDLE_RESILIENCY_SUBGROUP, 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4 , 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54); DEFINE_GUID(GUID_IDLE_RESILIENCY_SUBGROUP, 0x2e601130, 0x5351, 0x4d9d, 0x8e, 0x4 , 0x25, 0x29, 0x66, 0xba, 0xd0, 0x54);
// //
// Specifies the maximum clock interrupt period (in ms) // Specifies the maximum clock interrupt period (in ms)
// //
// N.B. This power setting is DEPRECATED.
//
// {C42B79AA-AA3A-484b-A98F-2CF32AA90A28} // {C42B79AA-AA3A-484b-A98F-2CF32AA90A28}
DEFINE_GUID(GUID_IDLE_RESILIENCY_PERIOD, 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28); DEFINE_GUID(GUID_IDLE_RESILIENCY_PERIOD, 0xc42b79aa, 0xaa3a, 0x484b, 0xa9, 0x8f, 0x2c, 0xf3, 0x2a, 0xa9, 0xa, 0x28);
// //
// Specifies the deep sleep policy setting.
// This is intended to override the GUID_IDLE_RESILIENCY_PERIOD
// {d502f7ee-1dc7-4efd-a55d-f04b6f5c0545}
DEFINE_GUID(GUID_DEEP_SLEEP_ENABLED, 0xd502f7ee, 0x1dc7, 0x4efd, 0xa5, 0x5d, 0xf
0, 0x4b, 0x6f, 0x5c, 0x5, 0x45);
//
// Specifies the platform idle state index associated with idle resiliency // Specifies the platform idle state index associated with idle resiliency
// period. // period.
// //
// N.B. This power setting is DEPRECATED.
//
// {D23F2FB8-9536-4038-9C94-1CE02E5C2152} // {D23F2FB8-9536-4038-9C94-1CE02E5C2152}
DEFINE_GUID(GUID_IDLE_RESILIENCY_PLATFORM_STATE, 0xd23f2fb8, 0x9536, 0x4038, 0x9 c, 0x94, 0x1c, 0xe0, 0x2e, 0x5c, 0x21, 0x52); DEFINE_GUID(GUID_DEEP_SLEEP_PLATFORM_STATE, 0xd23f2fb8, 0x9536, 0x4038, 0x9c, 0x 94, 0x1c, 0xe0, 0x2e, 0x5c, 0x21, 0x52);
// //
// Specifies (in milliseconds) how long we wait after the last disk access // Specifies (in milliseconds) how long we wait after the last disk access
// before we power off the disk in case when IO coalescing is active. // before we power off the disk in case when IO coalescing is active.
// //
// {C36F0EB4-2988-4a70-8EEE-0884FC2C2433} // {C36F0EB4-2988-4a70-8EEE-0884FC2C2433}
DEFINE_GUID(GUID_DISK_COALESCING_POWERDOWN_TIMEOUT, 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33); DEFINE_GUID(GUID_DISK_COALESCING_POWERDOWN_TIMEOUT, 0xc36f0eb4, 0x2988, 0x4a70, 0x8e, 0xee, 0x8, 0x84, 0xfc, 0x2c, 0x24, 0x33);
// //
// Specifies (in seconds) how long we wait after the CS Enter before // Specifies (in seconds) how long we wait after the CS Enter before
skipping to change at line 12834 skipping to change at line 12915
// //
DEFINE_GUID( GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x3 5, 0xf6, 0x4d, 0xaa, 0xf1, 0xee); DEFINE_GUID( GUID_VIDEO_DIM_TIMEOUT, 0x17aaa29b, 0x8b43, 0x4b94, 0xaa, 0xfe, 0x3 5, 0xf6, 0x4d, 0xaa, 0xf1, 0xee);
// //
// Specifies if the operating system should use adaptive timers (based on // Specifies if the operating system should use adaptive timers (based on
// previous behavior) to power down the video, // previous behavior) to power down the video,
// //
DEFINE_GUID( GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x 93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B ); DEFINE_GUID( GUID_VIDEO_ADAPTIVE_POWERDOWN, 0x90959D22, 0xD6A1, 0x49B9, 0xAF, 0x 93, 0xBC, 0xE8, 0x85, 0xAD, 0x33, 0x5B );
// //
// Specifies a maximum power consumption level.
//
DEFINE_GUID(GUID_DISK_MAX_POWER, 0x51dea550, 0xbb38, 0x4bc4, 0x99, 0x1b, 0xea, 0
xcf, 0x37, 0xbe, 0x5e, 0xc8);
//
// Specifies if the monitor is currently being powered or not. // Specifies if the monitor is currently being powered or not.
// 02731015-4510-4526-99E6-E5A17EBD1AEA // 02731015-4510-4526-99E6-E5A17EBD1AEA
// //
DEFINE_GUID( GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5 , 0xA1, 0x7E, 0xBD, 0x1A, 0xEA ); DEFINE_GUID( GUID_MONITOR_POWER_ON, 0x02731015, 0x4510, 0x4526, 0x99, 0xE6, 0xE5 , 0xA1, 0x7E, 0xBD, 0x1A, 0xEA );
// //
// Monitor brightness policy when in normal state // Monitor brightness policy when in normal state
// {aded5e82-b909-4619-9949-f5d71dac0bcb} // {aded5e82-b909-4619-9949-f5d71dac0bcb}
DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x46 19, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb); DEFINE_GUID(GUID_DEVICE_POWER_POLICY_VIDEO_BRIGHTNESS, 0xaded5e82L, 0xb909, 0x46 19, 0x99, 0x49, 0xf5, 0xd7, 0x1d, 0xac, 0x0b, 0xcb);
skipping to change at line 12991 skipping to change at line 13077
// {B7A27025-E569-46c2-A504-2B96CAD225A1} // {B7A27025-E569-46c2-A504-2B96CAD225A1}
// //
DEFINE_GUID( GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1); DEFINE_GUID( GUID_CRITICAL_POWER_TRANSITION, 0xB7A27025, 0xE569, 0x46c2, 0xA5, 0x04, 0x2B, 0x96, 0xCA, 0xD2, 0x25, 0xA1);
// //
// Specifies if the system is entering or exiting 'away mode'. // Specifies if the system is entering or exiting 'away mode'.
// 98A7F580-01F7-48AA-9C0F-44352C29E5C0 // 98A7F580-01F7-48AA-9C0F-44352C29E5C0
// //
DEFINE_GUID( GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 ); DEFINE_GUID( GUID_SYSTEM_AWAYMODE, 0x98A7F580, 0x01F7, 0x48AA, 0x9C, 0x0F, 0x44, 0x35, 0x2C, 0x29, 0xE5, 0xC0 );
//
// Specify whether away mode is allowed // Specify whether away mode is allowed
// //
// {25DFA149-5DD1-4736-B5AB-E8A37B5B8187} // {25DFA149-5DD1-4736-B5AB-E8A37B5B8187}
// //
DEFINE_GUID( GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 ); DEFINE_GUID( GUID_ALLOW_AWAYMODE, 0x25dfa149, 0x5dd1, 0x4736, 0xb5, 0xab, 0xe8, 0xa3, 0x7b, 0x5b, 0x81, 0x87 );
// //
// Full-screen video playback GUID // Defines a guid to control User Presence Prediction mode.
// {3D5938F0-FF20-41EF-AE9F-EEA006F422E1}
//
DEFINE_GUID( GUID_VIDEO_FULLSCREEN_PLAYBACK, 0x3D5938F0, 0xFF20, 0x41EF, 0xAE, 0
x9F, 0xEE, 0xA0, 0x06, 0xF4, 0x22, 0xE1 );
// //
// Audio playback GUID // {82011705-FB95-4D46-8D35-4042B1D20DEF}
// {23B61359-2977-4c74-8207-37BCA1400D9D}
// //
DEFINE_GUID( GUID_USER_PRESENCE_PREDICTION, 0x82011705, 0xfb95, 0x4d46, 0x8d, 0x
DEFINE_GUID( GUID_AUDIO_PLAYBACK, 0x23b61359, 0x2977, 0x4c74, 0x82, 0x7, 0x37, 0 35, 0x40, 0x42, 0xb1, 0xd2, 0xd, 0xef );
xbc, 0xa1, 0x40, 0xd, 0x9d );
// //
// Defines a guid for enabling/disabling standby (S1-S3) states. This does not // Defines a guid for enabling/disabling standby (S1-S3) states. This does not
// affect hibernation (S4). // affect hibernation (S4).
// //
// {abfc2519-3608-4c2a-94ea-171b0ed546ab} // {abfc2519-3608-4c2a-94ea-171b0ed546ab}
// //
DEFINE_GUID( GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab ); DEFINE_GUID( GUID_ALLOW_STANDBY_STATES, 0xabfc2519, 0x3608, 0x4c2a, 0x94, 0xea, 0x17, 0x1b, 0x0e, 0xd5, 0x46, 0xab );
// //
skipping to change at line 13033 skipping to change at line 13114
DEFINE_GUID( GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D ); DEFINE_GUID( GUID_ALLOW_RTC_WAKE, 0xBD3B718A, 0x0680, 0x4D9D, 0x8A, 0xB2, 0xE1, 0xD2, 0xB4, 0xAC, 0x80, 0x6D );
// //
// Defines a guid for enabling/disabling the ability to create system required // Defines a guid for enabling/disabling the ability to create system required
// power requests. // power requests.
// //
// {A4B195F5-8225-47D8-8012-9D41369786E2} // {A4B195F5-8225-47D8-8012-9D41369786E2}
// //
DEFINE_GUID( GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 ); DEFINE_GUID( GUID_ALLOW_SYSTEM_REQUIRED, 0xA4B195F5, 0x8225, 0x47D8, 0x80, 0x12, 0x9D, 0x41, 0x36, 0x97, 0x86, 0xE2 );
// Energy Saver settings
// ---------------------
//
// Indicates if Enegry Saver is ON or OFF.
//
// {E00958C0-C213-4ACE-AC77-FECCED2EEEA5}
//
DEFINE_GUID( GUID_POWER_SAVING_STATUS, 0xe00958c0, 0xc213, 0x4ace, 0xac, 0x77, 0
xfe, 0xcc, 0xed, 0x2e, 0xee, 0xa5);
//
// Specifies the subgroup which will contain all of the Energy Saver settings
// for a single policy.
//
// {DE830923-A562-41AF-A086-E3A2C6BAD2DA}
//
DEFINE_GUID( GUID_ENERGY_SAVER_SUBGROUP, 0xDE830923, 0xA562, 0x41AF, 0xA0, 0x86,
0xE3, 0xA2, 0xC6, 0xBA, 0xD2, 0xDA );
//
// Defines a guid to engage Energy Saver at specific battery charge level
//
// {E69653CA-CF7F-4F05-AA73-CB833FA90AD4}
//
DEFINE_GUID( GUID_ENERGY_SAVER_BATTERY_THRESHOLD, 0xE69653CA, 0xCF7F, 0x4F05, 0x
AA, 0x73, 0xCB, 0x83, 0x3F, 0xA9, 0x0A, 0xD4 );
//
// Defines a guid to specify display brightness weight when Energy Saver is enga
ged
//
// {13D09884-F74E-474A-A852-B6BDE8AD03A8}
//
DEFINE_GUID( GUID_ENERGY_SAVER_BRIGHTNESS, 0x13D09884, 0xF74E, 0x474A, 0xA8, 0x5
2, 0xB6, 0xBD, 0xE8, 0xAD, 0x03, 0xA8 );
// System button actions // System button actions
// --------------------- // ---------------------
// //
// //
// Specifies the subgroup which will contain all of the system button // Specifies the subgroup which will contain all of the system button
// settings for a single policy. // settings for a single policy.
// //
DEFINE_GUID( GUID_SYSTEM_BUTTON_SUBGROUP, 0x4F971E89, 0xEEBD, 0x4455, 0xA8, 0xDE , 0x9E, 0x59, 0x04, 0x0E, 0x73, 0x47 ); 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_NOTHING 0
#define POWERBUTTON_ACTION_INDEX_SLEEP 1 #define POWERBUTTON_ACTION_INDEX_SLEEP 1
#define POWERBUTTON_ACTION_INDEX_HIBERNATE 2 #define POWERBUTTON_ACTION_INDEX_HIBERNATE 2
#define POWERBUTTON_ACTION_INDEX_SHUTDOWN 3 #define POWERBUTTON_ACTION_INDEX_SHUTDOWN 3
#define POWERBUTTON_ACTION_INDEX_TURN_OFF_THE_DISPLAY 4
// //
// System button values which contain the PowerAction* value for each action. // System button values which contain the PowerAction* value for each action.
// //
#define POWERBUTTON_ACTION_VALUE_NOTHING 0 #define POWERBUTTON_ACTION_VALUE_NOTHING 0
#define POWERBUTTON_ACTION_VALUE_SLEEP 2 #define POWERBUTTON_ACTION_VALUE_SLEEP 2
#define POWERBUTTON_ACTION_VALUE_HIBERNATE 3 #define POWERBUTTON_ACTION_VALUE_HIBERNATE 3
#define POWERBUTTON_ACTION_VALUE_SHUTDOWN 6 #define POWERBUTTON_ACTION_VALUE_SHUTDOWN 6
#define POWERBUTTON_ACTION_VALUE_TURN_OFF_THE_DISPLAY 8
// Specifies (in a POWER_ACTION_POLICY structure) the appropriate action to // Specifies (in a POWER_ACTION_POLICY structure) the appropriate action to
// take when the system power button is pressed. // take when the system power button is pressed.
// //
DEFINE_GUID( GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x 50, 0xF9, 0x29, 0x38, 0x62, 0x80 ); DEFINE_GUID( GUID_POWERBUTTON_ACTION, 0x7648EFA3, 0xDD9C, 0x4E3E, 0xB5, 0x66, 0x 50, 0xF9, 0x29, 0x38, 0x62, 0x80 );
// //
// Specifies (in a POWER_ACTION_POLICY structure) the appropriate action to // Specifies (in a POWER_ACTION_POLICY structure) the appropriate action to
// take when the system sleep button is pressed. // take when the system sleep button is pressed.
// //
skipping to change at line 13115 skipping to change at line 13229
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0 xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_1, 0xbcded951, 0x187b, 0x4d05, 0xbc, 0 xcc, 0xf7, 0xe5, 0x19, 0x60, 0xc2, 0x58 );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_2, 0x421CBA38, 0x1A8E, 0x4881, 0xAC, 0x89, 0xE3, 0x3A, 0x8B, 0x04, 0xEC, 0xE4 );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0 x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_2, 0x07A07CA2, 0xADAF, 0x40D7, 0xB0, 0 x77, 0x53, 0x3A, 0xAD, 0xED, 0x1B, 0xFA );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0 x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_2, 0x7fd2f0c4, 0xfeb7, 0x4da3, 0x81, 0 x17, 0xe3, 0xfb, 0xed, 0xc4, 0x65, 0x82 );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_ACTION_3, 0x80472613, 0x9780, 0x455E, 0xB3, 0x08, 0x72, 0xD3, 0x00, 0x3C, 0xF2, 0xF8 );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0 xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_LEVEL_3, 0x58AFD5A6, 0xC2DD, 0x47D2, 0x9F, 0 xBF, 0xEF, 0x70, 0xCC, 0x5C, 0x59, 0x65 );
DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0 x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 ); DEFINE_GUID( GUID_BATTERY_DISCHARGE_FLAGS_3, 0x73613ccf, 0xdbfa, 0x4279, 0x83, 0 x56, 0x49, 0x35, 0xf6, 0xbf, 0x62, 0xf3 );
DEFINE_GUID( GUID_CS_BATTERY_SAVER_THRESHOLD, 0x1e133d45, 0xa325, 0x48DA, 0x87,
0x69, 0x14, 0xAE, 0x6D, 0xC1, 0x17, 0x0B );
DEFINE_GUID( GUID_CS_BATTERY_SAVER_ACTION, 0xC10CE532, 0x2EB1, 0x4B3C, 0xB3, 0xF
E, 0x37, 0x46, 0x23, 0xCD, 0xCF, 0x07 );
DEFINE_GUID( GUID_CS_BATTERY_SAVER_TIMEOUT, 0x7398e821, 0x3937, 0x4469, 0xB0, 0x
7B, 0x33, 0xEB, 0x78, 0x5A, 0xAC, 0xA1);
// Processor power settings // Processor power settings
// ------------------------ // ------------------------
// //
// Specifies the subgroup which will contain all of the processor // Specifies the subgroup which will contain all of the processor
// settings for a single policy. // settings for a single policy.
// //
// {54533251-82be-4824-96c1-47b60b740d00}
//
DEFINE_GUID( GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 ); DEFINE_GUID( GUID_PROCESSOR_SETTINGS_SUBGROUP, 0x54533251, 0x82BE, 0x4824, 0x96, 0xC1, 0x47, 0xB6, 0x0B, 0x74, 0x0D, 0x00 );
// //
// Specifies various attributes that control processor performance/throttle // Specifies various attributes that control processor performance/throttle
// states. // states.
// //
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0 x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 ); DEFINE_GUID( GUID_PROCESSOR_THROTTLE_POLICY, 0x57027304, 0x4AF6, 0x4104, 0x92, 0 x60, 0xE3, 0xD9, 0x52, 0x48, 0xFC, 0x36 );
#define PERFSTATE_POLICY_CHANGE_IDEAL 0 #define PERFSTATE_POLICY_CHANGE_IDEAL 0
#define PERFSTATE_POLICY_CHANGE_SINGLE 1 #define PERFSTATE_POLICY_CHANGE_SINGLE 1
skipping to change at line 13148 skipping to change at line 13260
#define PERFSTATE_POLICY_CHANGE_DECREASE_MAX PERFSTATE_POLICY_CHANGE_ROCKET #define PERFSTATE_POLICY_CHANGE_DECREASE_MAX PERFSTATE_POLICY_CHANGE_ROCKET
#define PERFSTATE_POLICY_CHANGE_INCREASE_MAX PERFSTATE_POLICY_CHANGE_IDEAL_AGGRE SSIVE #define PERFSTATE_POLICY_CHANGE_INCREASE_MAX PERFSTATE_POLICY_CHANGE_IDEAL_AGGRE SSIVE
// //
// Specifies a percentage (between 0 and 100) that the processor frequency // Specifies a percentage (between 0 and 100) that the processor frequency
// should never go above. For example, if this value is set to 80, then // should never go above. For example, if this value is set to 80, then
// the processor frequency will never be throttled above 80 percent of its // the processor frequency will never be throttled above 80 percent of its
// maximum frequency by the system. // maximum frequency by the system.
// //
// {bc5038f7-23e0-4960-96da-33abaf5935ec}
//
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC ); DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM, 0xBC5038F7, 0x23E0, 0x4960, 0x96, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xEC );
// //
// Specifies a percentage (between 0 and 100) that the processor frequency // Specifies a percentage (between 0 and 100) that the processor frequency
// should never go above for Processor Power Efficiency Class 1.
// For example, if this value is set to 80, then the processor frequency will
// never be throttled above 80 percent of its maximum frequency by the system.
//
// {bc5038f7-23e0-4960-96da-33abaf5935ed}
//
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MAXIMUM_1, 0xBC5038F7, 0x23E0, 0x4960, 0x96
, 0xDA, 0x33, 0xAB, 0xAF, 0x59, 0x35, 0xED );
//
// Specifies a percentage (between 0 and 100) that the processor frequency
// should not drop below. For example, if this value is set to 50, then the // should not drop below. For example, if this value is set to 50, then the
// processor frequency will never be throttled below 50 percent of its // processor frequency will never be throttled below 50 percent of its
// maximum frequency by the system. // maximum frequency by the system.
// //
// {893dee8e-2bef-41e0-89c6-b55d0929964c}
//
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C ); DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4C );
// //
// Specifies a percentage (between 0 and 100) that the processor frequency
// should not drop below for Processor Power Efficiency Class 1.
// For example, if this value is set to 50, then the processor frequency will
// never be throttled below 50 percent of its maximum frequency by the system.
//
// {893dee8e-2bef-41e0-89c6-b55d0929964d}
//
DEFINE_GUID( GUID_PROCESSOR_THROTTLE_MINIMUM_1, 0x893DEE8E, 0x2BEF, 0x41E0, 0x89
, 0xC6, 0xB5, 0x5D, 0x09, 0x29, 0x96, 0x4D );
//
// Specifies whether throttle states are allowed to be used even when // Specifies whether throttle states are allowed to be used even when
// performance states are available. // performance states are available.
// //
// {3b04d4fd-1cc7-4f23-ab1c-d1337819c4bb} // {3b04d4fd-1cc7-4f23-ab1c-d1337819c4bb}
// //
DEFINE_GUID( GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb ); DEFINE_GUID( GUID_PROCESSOR_ALLOW_THROTTLING, 0x3b04d4fd, 0x1cc7, 0x4f23, 0xab, 0x1c, 0xd1, 0x33, 0x78, 0x19, 0xc4, 0xbb );
#define PROCESSOR_THROTTLE_DISABLED 0
#define PROCESSOR_THROTTLE_ENABLED 1
#define PROCESSOR_THROTTLE_AUTOMATIC 2
// //
// Specifies processor power settings for CState policy data // Specifies processor power settings for CState policy data
// {68F262A7-F621-4069-B9A5-4874169BE23C} // {68F262A7-F621-4069-B9A5-4874169BE23C}
// //
DEFINE_GUID( GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c); DEFINE_GUID( GUID_PROCESSOR_IDLESTATE_POLICY, 0x68f262a7, 0xf621, 0x4069, 0xb9, 0xa5, 0x48, 0x74, 0x16, 0x9b, 0xe2, 0x3c);
// //
// Specifies processor power settings for PerfState policy data // Specifies processor power settings for PerfState policy data
// {BBDC3814-18E9-4463-8A55-D197327C45C0} // {BBDC3814-18E9-4463-8A55-D197327C45C0}
// //
skipping to change at line 13187 skipping to change at line 13327
// //
// Specifies the increase busy percentage threshold that must be met before // Specifies the increase busy percentage threshold that must be met before
// increasing the processor performance state. // increasing the processor performance state.
// //
// {06cadf0e-64ed-448a-8927-ce7bf90eb35d} // {06cadf0e-64ed-448a-8927-ce7bf90eb35d}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d ); DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_THRESHOLD, 0x06cadf0e, 0x64ed, 0x448a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5d );
// //
// Specifies the increase busy percentage threshold that must be met before
// increasing the processor performance state for Processor Power Efficiency
// Class 1.
//
// {06cadf0e-64ed-448a-8927-ce7bf90eb35e}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_THRESHOLD_1, 0x06cadf0e, 0x64ed, 0x448
a, 0x89, 0x27, 0xce, 0x7b, 0xf9, 0x0e, 0xb3, 0x5e );
//
// Specifies the decrease busy percentage threshold that must be met before // Specifies the decrease busy percentage threshold that must be met before
// decreasing the processor performance state. // decreasing the processor performance state.
// //
// {12a0ab44-fe28-4fa9-b3bd-4b64f44960a6} // {12a0ab44-fe28-4fa9-b3bd-4b64f44960a6}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 ); DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_THRESHOLD, 0x12a0ab44, 0xfe28, 0x4fa9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa6 );
// //
// Specifies the decrease busy percentage threshold that must be met before
// decreasing the processor performance state for Processor Power Efficiency
// Class 1.
//
// {12a0ab44-fe28-4fa9-b3bd-4b64f44960a7}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_THRESHOLD_1, 0x12a0ab44, 0xfe28, 0x4fa
9, 0xb3, 0xbd, 0x4b, 0x64, 0xf4, 0x49, 0x60, 0xa7 );
//
// Specifies, either as ideal, single or rocket, how aggressive performance // Specifies, either as ideal, single or rocket, how aggressive performance
// states should be selected when increasing the processor performance state. // states should be selected when increasing the processor performance state.
// //
// {465E1F50-B610-473a-AB58-00D1077DC418} // {465E1F50-B610-473a-AB58-00D1077DC418}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0x ab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18); DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_POLICY, 0x465e1f50, 0xb610, 0x473a, 0x ab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x18);
// //
// Specifies, either as ideal, single or rocket, how aggressive performance // Specifies, either as ideal, single or rocket, how aggressive performance
// states should be selected when increasing the processor performance state
// for Processor Power Efficiency Class 1.
//
// {465E1F50-B610-473a-AB58-00D1077DC419}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_POLICY_1, 0x465e1f50, 0xb610, 0x473a,
0xab, 0x58, 0x0, 0xd1, 0x7, 0x7d, 0xc4, 0x19);
//
// Specifies, either as ideal, single or rocket, how aggressive performance
// states should be selected when decreasing the processor performance state. // states should be selected when decreasing the processor performance state.
// //
// {40FBEFC7-2E9D-4d25-A185-0CFD8574BAC6} // {40FBEFC7-2E9D-4d25-A185-0CFD8574BAC6}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0x a1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6); DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_POLICY, 0x40fbefc7, 0x2e9d, 0x4d25, 0x a1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc6);
// //
// Specifies, either as ideal, single or rocket, how aggressive performance
// states should be selected when decreasing the processor performance state for
// Processor Power Efficiency Class 1.
//
// {40FBEFC7-2E9D-4d25-A185-0CFD8574BAC7}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_POLICY_1, 0x40fbefc7, 0x2e9d, 0x4d25,
0xa1, 0x85, 0xc, 0xfd, 0x85, 0x74, 0xba, 0xc7);
//
// Specifies, in milliseconds, the minimum amount of time that must elapse after // Specifies, in milliseconds, the minimum amount of time that must elapse after
// the last processor performance state change before increasing the processor // the last processor performance state change before increasing the processor
// performance state. // performance state.
// //
// {984CF492-3BED-4488-A8F9-4286C97BF5AA} // {984CF492-3BED-4488-A8F9-4286C97BF5AA}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8 , 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa); DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_TIME, 0x984cf492, 0x3bed, 0x4488, 0xa8 , 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xaa);
// //
// Specifies, in milliseconds, the minimum amount of time that must elapse after // Specifies, in milliseconds, the minimum amount of time that must elapse after
// the last processor performance state change before increasing the processor // the last processor performance state change before increasing the processor
// performance state for Processor Power Efficiency Class 1.
//
// {984CF492-3BED-4488-A8F9-4286C97BF5AB}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_TIME_1, 0x984cf492, 0x3bed, 0x4488, 0x
a8, 0xf9, 0x42, 0x86, 0xc9, 0x7b, 0xf5, 0xab);
//
// Specifies, in milliseconds, the minimum amount of time that must elapse after
// the last processor performance state change before increasing the processor
// performance state. // performance state.
// //
// {D8EDEB9B-95CF-4f95-A73C-B061973693C8} // {D8EDEB9B-95CF-4f95-A73C-B061973693C8}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7 , 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8); DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_TIME, 0xd8edeb9b, 0x95cf, 0x4f95, 0xa7 , 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc8);
// //
// Specifies, in milliseconds, the minimum amount of time that must elapse after
// the last processor performance state change before increasing the processor
// performance state for Processor Power Efficiency Class 1.
//
// {D8EDEB9B-95CF-4f95-A73C-B061973693C9}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_TIME_1, 0xd8edeb9b, 0x95cf, 0x4f95, 0x
a7, 0x3c, 0xb0, 0x61, 0x97, 0x36, 0x93, 0xc9);
//
// Specifies the time, in milliseconds, that must expire before considering // Specifies the time, in milliseconds, that must expire before considering
// a change in the processor performance states or parked core set. // a change in the processor performance states or parked core set.
// //
// {4D2B0152-7D5C-498b-88E2-34345392A2C5} // {4D2B0152-7D5C-498b-88E2-34345392A2C5}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0 xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5); DEFINE_GUID( GUID_PROCESSOR_PERF_TIME_CHECK, 0x4d2b0152, 0x7d5c, 0x498b, 0x88, 0 xe2, 0x34, 0x34, 0x53, 0x92, 0xa2, 0xc5);
// //
// Specifies how the processor should manage performance and efficiency // Specifies how the processor should manage performance and efficiency
// tradeoffs when boosting frequency above the maximum. // tradeoffs when boosting frequency above the maximum.
skipping to change at line 13262 skipping to change at line 13456
// {BE337238-0D82-4146-A960-4F3749D470C7} // {BE337238-0D82-4146-A960-4F3749D470C7}
// //
DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_MODE, DEFINE_GUID(GUID_PROCESSOR_PERF_BOOST_MODE,
0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7); 0xbe337238, 0xd82, 0x4146, 0xa9, 0x60, 0x4f, 0x37, 0x49, 0xd4, 0x70, 0xc7);
#define PROCESSOR_PERF_BOOST_MODE_DISABLED 0 #define PROCESSOR_PERF_BOOST_MODE_DISABLED 0
#define PROCESSOR_PERF_BOOST_MODE_ENABLED 1 #define PROCESSOR_PERF_BOOST_MODE_ENABLED 1
#define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 2 #define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE 2
#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 3 #define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_ENABLED 3
#define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 4 #define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE 4
#define PROCESSOR_PERF_BOOST_MODE_MAX PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRES #define PROCESSOR_PERF_BOOST_MODE_AGGRESSIVE_AT_GUARANTEED 5
SIVE #define PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRESSIVE_AT_GUARANTEED 6
#define PROCESSOR_PERF_BOOST_MODE_MAX PROCESSOR_PERF_BOOST_MODE_EFFICIENT_AGGRES
SIVE_AT_GUARANTEED
//
// Specifies whether or not a procesor should autonomously select its
// operating performance state.
//
// {8BAA4A8A-14C6-4451-8E8B-14BDBD197537}
//
DEFINE_GUID(GUID_PROCESSOR_PERF_AUTONOMOUS_MODE,
0x8baa4a8a, 0x14c6, 0x4451, 0x8e, 0x8b, 0x14, 0xbd, 0xbd, 0x19, 0x75, 0x37);
#define PROCESSOR_PERF_AUTONOMOUS_MODE_DISABLED 0
#define PROCESSOR_PERF_AUTONOMOUS_MODE_ENABLED 1
//
// Specifies the tradeoff between performance and energy the processor should
// make when operating in autonomous mode.
//
// {36687F9E-E3A5-4dbf-B1DC-15EB381C6863}
DEFINE_GUID(GUID_PROCESSOR_PERF_ENERGY_PERFORMANCE_PREFERENCE,
0x36687f9e, 0xe3a5, 0x4dbf, 0xb1, 0xdc, 0x15, 0xeb, 0x38, 0x1c, 0x68, 0x63);
#define PROCESSOR_PERF_PERFORMANCE_PREFERENCE 0xff
#define PROCESSOR_PERF_ENERGY_PREFERENCE 0
//
// Specifies the window over which the processor should observe utilization when
// operating in autonomous mode, in microseconds.
//
// {CFEDA3D0-7697-4566-A922-A9086CD49DFA}
DEFINE_GUID(GUID_PROCESSOR_PERF_AUTONOMOUS_ACTIVITY_WINDOW,
0xcfeda3d0, 0x7697, 0x4566, 0xa9, 0x22, 0xa9, 0x8, 0x6c, 0xd4, 0x9d, 0xfa);
#define PROCESSOR_PERF_MINIMUM_ACTIVITY_WINDOW 0
#define PROCESSOR_PERF_MAXIMUM_ACTIVITY_WINDOW 1270000000
//
// Specifies whether the processor should perform duty cycling.
//
// {4E4450B3-6179-4e91-B8F1-5BB9938F81A1}
DEFINE_GUID(GUID_PROCESSOR_DUTY_CYCLING,
0x4e4450b3, 0x6179, 0x4e91, 0xb8, 0xf1, 0x5b, 0xb9, 0x93, 0x8f, 0x81, 0xa1);
#define PROCESSOR_DUTY_CYCLING_DISABLED 0
#define PROCESSOR_DUTY_CYCLING_ENABLED 1
// //
// Specifies if idle state promotion and demotion values should be scaled based // Specifies if idle state promotion and demotion values should be scaled based
// on the current peformance state. // on the current peformance state.
// //
// {6C2993B0-8F48-481f-BCC6-00DD2742AA06} // {6C2993B0-8F48-481f-BCC6-00DD2742AA06}
// //
DEFINE_GUID( GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc , 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6); DEFINE_GUID( GUID_PROCESSOR_IDLE_ALLOW_SCALING, 0x6c2993b0, 0x8f48, 0x481f, 0xbc , 0xc6, 0x0, 0xdd, 0x27, 0x42, 0xaa, 0x6);
// //
skipping to change at line 13316 skipping to change at line 13556
// Specifies the lower busy threshold that must be met before promoting the // Specifies the lower busy threshold that must be met before promoting the
// processor to a deeper idle state (in percentage). // processor to a deeper idle state (in percentage).
// //
// {7B224883-B3CC-4d79-819F-8374152CBE7C} // {7B224883-B3CC-4d79-819F-8374152CBE7C}
// //
DEFINE_GUID( GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c); DEFINE_GUID( GUID_PROCESSOR_IDLE_PROMOTE_THRESHOLD, 0x7b224883, 0xb3cc, 0x4d79, 0x81, 0x9f, 0x83, 0x74, 0x15, 0x2c, 0xbe, 0x7c);
// //
// Specifies the utilization threshold in percent that must be crossed in order to un-park cores. // Specifies the utilization threshold in percent that must be crossed in order to un-park cores.
// //
// N.B. This power setting is DEPRECATED.
//
// {df142941-20f3-4edf-9a4a-9c83d3d717d1} // {df142941-20f3-4edf-9a4a-9c83d3d717d1}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 ); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_THRESHOLD, 0xdf142941, 0x20f3, 0x4edf, 0x9a, 0x4a, 0x9c, 0x83, 0xd3, 0xd7, 0x17, 0xd1 );
// //
// Specifies the utilization threshold in percent that must be crossed in order to park cores. // Specifies the utilization threshold in percent that must be crossed in order to park cores.
// //
// N.B. This power setting is DEPRECATED.
//
// {68dd2f27-a4ce-4e11-8487-3794e4135dfa} // {68dd2f27-a4ce-4e11-8487-3794e4135dfa}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_THRESHOLD, 0x68dd2f27, 0xa4ce, 0x4e11, 0x84, 0x87, 0x37, 0x94, 0xe4, 0x13, 0x5d, 0xfa);
// //
// Specifies, either as ideal, single or rocket, how aggressive core parking is when cores must be unparked. // Specifies, either as ideal, single or rocket, how aggressive core parking is when cores must be unparked.
// //
// {c7be0679-2817-4d69-9d02-519a537ed0c6} // {c7be0679-2817-4d69-9d02-519a537ed0c6}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x 4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_POLICY, 0xc7be0679, 0x2817, 0x 4d69, 0x9d, 0x02, 0x51, 0x9a, 0x53, 0x7e, 0xd0, 0xc6);
skipping to change at line 13355 skipping to change at line 13599
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x 4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_DECREASE_POLICY, 0x71021b41, 0xc749, 0x 4d21, 0xbe, 0x74, 0xa0, 0x0f, 0x33, 0x5d, 0x58, 0x2b);
// //
// Specifies, on a per processor group basis, the maximum number of cores that c an be kept unparked. // Specifies, on a per processor group basis, the maximum number of cores that c an be kept unparked.
// //
// {ea062031-0e34-4ff1-9b6d-eb1059334028} // {ea062031-0e34-4ff1-9b6d-eb1059334028}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MAX_CORES, 0xea062031, 0x0e34, 0x4ff1, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x28);
// //
// Specifies, on a per processor group basis, the maximum number of cores that
// can be kept unparked for Processor Power Efficiency Class 1.
//
// {ea062031-0e34-4ff1-9b6d-eb1059334029}
//
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MAX_CORES_1, 0xea062031, 0x0e34, 0x4ff1
, 0x9b, 0x6d, 0xeb, 0x10, 0x59, 0x33, 0x40, 0x29);
//
// Specifies, on a per processor group basis, the minimum number of cores that m ust be kept unparked. // Specifies, on a per processor group basis, the minimum number of cores that m ust be kept unparked.
// //
// {0cc5b647-c1df-4637-891a-dec35c318583} // {0cc5b647-c1df-4637-891a-dec35c318583}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MIN_CORES, 0x0cc5b647, 0xc1df, 0x4637, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x83);
// //
// Specifies, on a per processor group basis, the minimum number of cores that
// must be kept unparked in Processor Power Efficiency Class 1.
//
// {0cc5b647-c1df-4637-891a-dec35c318584}
//
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_MIN_CORES_1, 0x0cc5b647, 0xc1df, 0x4637
, 0x89, 0x1a, 0xde, 0xc3, 0x5c, 0x31, 0x85, 0x84);
//
// Specifies, in milliseconds, the minimum amount of time a core must be parked before it can be unparked. // Specifies, in milliseconds, the minimum amount of time a core must be parked before it can be unparked.
// //
// {2ddd5a84-5a71-437e-912a-db0b8c788732} // {2ddd5a84-5a71-437e-912a-db0b8c788732}
// //
DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x43 7e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32); DEFINE_GUID( GUID_PROCESSOR_CORE_PARKING_INCREASE_TIME, 0x2ddd5a84, 0x5a71, 0x43 7e, 0x91, 0x2a, 0xdb, 0x0b, 0x8c, 0x78, 0x87, 0x32);
// //
// Specifies, in milliseconds, the minimum amount of time a core must be unparke d before it can be parked. // Specifies, in milliseconds, the minimum amount of time a core must be unparke d before it can be parked.
// //
// {dfd10d17-d5eb-45dd-877a-9a34ddd15c82} // {dfd10d17-d5eb-45dd-877a-9a34ddd15c82}
skipping to change at line 13441 skipping to change at line 13701
// //
// Specifies what performance state a processor should enter when first parked. // Specifies what performance state a processor should enter when first parked.
// //
// {447235c7-6a8d-4cc0-8e24-9eaf70b96e2b} // {447235c7-6a8d-4cc0-8e24-9eaf70b96e2b}
// //
DEFINE_GUID( GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e , 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b); DEFINE_GUID( GUID_PROCESSOR_PARKING_PERF_STATE, 0x447235c7, 0x6a8d, 0x4cc0, 0x8e , 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2b);
// //
// Specifies what performance state a processor should enter when first parked
// for Processor Power Efficiency Class 1.
//
// {447235c7-6a8d-4cc0-8e24-9eaf70b96e2c}
//
DEFINE_GUID( GUID_PROCESSOR_PARKING_PERF_STATE_1, 0x447235c7, 0x6a8d, 0x4cc0, 0x
8e, 0x24, 0x9e, 0xaf, 0x70, 0xb9, 0x6e, 0x2c);
//
// Specify the busy threshold that must be met when calculating the concurrency of a node's workload. // Specify the busy threshold that must be met when calculating the concurrency of a node's workload.
// //
// {2430ab6f-a520-44a2-9601-f7f23b5134b1} // {2430ab6f-a520-44a2-9601-f7f23b5134b1}
// //
DEFINE_GUID( GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD, 0x2430ab6f, 0xa520, 0 x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1); DEFINE_GUID( GUID_PROCESSOR_PARKING_CONCURRENCY_THRESHOLD, 0x2430ab6f, 0xa520, 0 x44a2, 0x96, 0x01, 0xf7, 0xf2, 0x3b, 0x51, 0x34, 0xb1);
// //
// Specify the busy threshold that must be met by all cores in a concurrency set to unpark an extra core. // Specify the busy threshold that must be met by all cores in a concurrency set to unpark an extra core.
// //
// {f735a673-2066-4f80-a0c5-ddee0cf1bf5d} // {f735a673-2066-4f80-a0c5-ddee0cf1bf5d}
// //
DEFINE_GUID( GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD, 0xf735a673, 0x2066, 0x4f 80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d); DEFINE_GUID( GUID_PROCESSOR_PARKING_HEADROOM_THRESHOLD, 0xf735a673, 0x2066, 0x4f 80, 0xa0, 0xc5, 0xdd, 0xee, 0x0c, 0xf1, 0xbf, 0x5d);
// //
// Specifies the number of perf time check intervals to average utility over. // Specify the percentage utilization used to calculate the distribution concurr ency.
// //
// N.B. This power setting is deprecated. // {4bdaf4e9-d103-46d7-a5f0-6280121616ef}
//
DEFINE_GUID( GUID_PROCESSOR_PARKING_DISTRIBUTION_THRESHOLD, 0x4bdaf4e9, 0xd103,
0x46d7, 0xa5, 0xf0, 0x62, 0x80, 0x12, 0x16, 0x16, 0xef);
//
// Specifies the number of perf time check intervals to average utility over.
// //
// {7d24baa7-0b84-480f-840c-1b0743c00f5f} // {7d24baa7-0b84-480f-840c-1b0743c00f5f}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c , 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f); DEFINE_GUID( GUID_PROCESSOR_PERF_HISTORY, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x0c , 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x5f);
// //
// Specifies the number of perf time check intervals to average utility over in
// Processor Power Efficiency Class 1.
//
// {7d24baa7-0b84-480f-840c-1b0743c00f60}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_HISTORY_1, 0x7d24baa7, 0x0b84, 0x480f, 0x84, 0x
0c, 0x1b, 0x07, 0x43, 0xc0, 0x0f, 0x60);
//
// Specifies the number of perf time check intervals to average utility over to // Specifies the number of perf time check intervals to average utility over to
// determine performance increase. // determine performance increase.
// //
// N.B. This power setting is DEPRECATED.
//
// {99B3EF01-752F-46a1-80FB-7730011F2354} // {99B3EF01-752F-46a1-80FB-7730011F2354}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_HISTORY, 0x99b3ef01, 0x752f, 0x46a1, 0 x80, 0xfb, 0x77, 0x30, 0x1, 0x1f, 0x23, 0x54); DEFINE_GUID( GUID_PROCESSOR_PERF_INCREASE_HISTORY, 0x99b3ef01, 0x752f, 0x46a1, 0 x80, 0xfb, 0x77, 0x30, 0x1, 0x1f, 0x23, 0x54);
// //
// Specifies the number of perf time check intervals to average utility over to // Specifies the number of perf time check intervals to average utility over to
// determine performance decrease. // determine performance decrease.
// //
// N.B. This power setting is DEPRECATED.
//
// {0300F6F8-ABD6-45a9-B74F-4908691A40B5} // {0300F6F8-ABD6-45a9-B74F-4908691A40B5}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_HISTORY, 0x300f6f8, 0xabd6, 0x45a9, 0x b7, 0x4f, 0x49, 0x8, 0x69, 0x1a, 0x40, 0xb5); DEFINE_GUID( GUID_PROCESSOR_PERF_DECREASE_HISTORY, 0x300f6f8, 0xabd6, 0x45a9, 0x b7, 0x4f, 0x49, 0x8, 0x69, 0x1a, 0x40, 0xb5);
// //
// Specifies the number of perf time check intervals to average utility over for // Specifies the number of perf time check intervals to average utility over for
// core parking. // core parking.
// //
// N.B. This power setting is DEPRECATED.
//
// {77D7F282-8F1A-42cd-8537-45450A839BE8} // {77D7F282-8F1A-42cd-8537-45450A839BE8}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY, 0x77d7f282, 0x8f1a, 0x42c d, 0x85, 0x37, 0x45, 0x45, 0xa, 0x83, 0x9b, 0xe8); DEFINE_GUID( GUID_PROCESSOR_PERF_CORE_PARKING_HISTORY, 0x77d7f282, 0x8f1a, 0x42c d, 0x85, 0x37, 0x45, 0x45, 0xa, 0x83, 0x9b, 0xe8);
// //
// Specifies whether latency sensitivity hints should be taken into account by // Specifies whether latency sensitivity hints should be taken into account by
// the perf state engine. // the perf state engine.
// //
// N.B. This power setting is deprecated. // N.B. This power setting is DEPRECATED.
// //
// {0822df31-9c83-441c-a079-0de4cf009c7b} // {0822df31-9c83-441c-a079-0de4cf009c7b}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT, 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b); DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT, 0x0822df31, 0x9c83, 0x441c, 0xa0, 0x79, 0x0d, 0xe4, 0xcf, 0x00, 0x9c, 0x7b);
// //
// Specifies the processor performance state in response to latency sensitivity hints. // Specifies the processor performance state in response to latency sensitivity hints.
// //
// {619b7505-003b-4e82-b7a6-4dd29c300971} // {619b7505-003b-4e82-b7a6-4dd29c300971}
// //
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT_PERF, 0x619b7505, 0x3b, 0x4e82, 0x b7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x71); DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT_PERF, 0x619b7505, 0x3b, 0x4e82, 0x b7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x71);
// //
// Specifies the processor performance state in response to latency sensitivity
// hints for Processor Power Efficiency Class 1.
//
// {619b7505-003b-4e82-b7a6-4dd29c300972}
//
DEFINE_GUID( GUID_PROCESSOR_PERF_LATENCY_HINT_PERF_1, 0x619b7505, 0x3b, 0x4e82,
0xb7, 0xa6, 0x4d, 0xd2, 0x9c, 0x30, 0x9, 0x72);
//
// Specifies the minimum unparked processors when a latency hint is active
// (in a percentage).
//
// {616cdaa5-695e-4545-97ad-97dc2d1bdd88}
//
DEFINE_GUID( GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK, 0x616cdaa5, 0x695e, 0x4545,
0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x88);
//
// Specifies the minimum unparked processors when a latency hint is active
// for Processor Power Efficiency Class 1 (in a percentage).
//
// {616cdaa5-695e-4545-97ad-97dc2d1bdd89}
//
DEFINE_GUID( GUID_PROCESSOR_LATENCY_HINT_MIN_UNPARK_1, 0x616cdaa5, 0x695e, 0x454
5, 0x97, 0xad, 0x97, 0xdc, 0x2d, 0x1b, 0xdd, 0x89);
//
// Specifies whether the core parking engine should distribute processor // Specifies whether the core parking engine should distribute processor
// utility. // utility.
// //
// {e0007330-f589-42ed-a401-5ddb10e785d3} // {e0007330-f589-42ed-a401-5ddb10e785d3}
// //
DEFINE_GUID( GUID_PROCESSOR_DISTRIBUTE_UTILITY, 0xe0007330, 0xf589, 0x42ed, 0xa4 , 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3); DEFINE_GUID( GUID_PROCESSOR_DISTRIBUTE_UTILITY, 0xe0007330, 0xf589, 0x42ed, 0xa4 , 0x01, 0x5d, 0xdb, 0x10, 0xe7, 0x85, 0xd3);
// //
// GUIDS to control PPM settings on computer system with more than one
// Processor Power Efficiency Classes (heterogeneous system).
// -----------------
//
// Specifies the current active heterogeneous policy.
//
// {7f2f5cfa-f10c-4823-b5e1-e93ae85f46b5}
//
DEFINE_GUID( GUID_PROCESSOR_HETEROGENEOUS_POLICY, 0x7f2f5cfa, 0xf10c, 0x4823, 0x
b5, 0xe1, 0xe9, 0x3a, 0xe8, 0x5f, 0x46, 0xb5);
//
// Specifies the number of perf check cycles required to decrease the number of
// Processor Power Efficiency Class 1 processors.
//
// {7f2492b6-60b1-45e5-ae55-773f8cd5caec}
//
DEFINE_GUID( GUID_PROCESSOR_HETERO_DECREASE_TIME, 0x7f2492b6, 0x60b1, 0x45e5, 0x
ae, 0x55, 0x77, 0x3f, 0x8c, 0xd5, 0xca, 0xec);
//
// Specifies the number of perf check cycles required to increase the number of
// Processor Power Efficiency Class 1 processors.
//
// {4009efa7-e72d-4cba-9edf-91084ea8cbc3}
//
DEFINE_GUID( GUID_PROCESSOR_HETERO_INCREASE_TIME, 0x4009efa7, 0xe72d, 0x4cba, 0x
9e, 0xdf, 0x91, 0x08, 0x4e, 0xa8, 0xcb, 0xc3);
//
// Specifies the performance level (in units of Processor Power Efficiency
// Class 0 processor performance) at which the number of Processor Power
// Efficiency Class 1 processors is decreased.
//
// {f8861c27-95e7-475c-865b-13c0cb3f9d6b}
//
DEFINE_GUID( GUID_PROCESSOR_HETERO_DECREASE_THRESHOLD, 0xf8861c27, 0x95e7, 0x475
c, 0x86, 0x5b, 0x13, 0xc0, 0xcb, 0x3f, 0x9d, 0x6b);
//
// Specifies the performance level (in units of Processor Power Efficiency
// Class 0 processor performance) at which the number of Processor Power
// Efficiency Class 1 processors is increased.
//
// {b000397d-9b0b-483d-98c9-692a6060cfbf}
//
DEFINE_GUID( GUID_PROCESSOR_HETERO_INCREASE_THRESHOLD, 0xb000397d, 0x9b0b, 0x483
d, 0x98, 0xc9, 0x69, 0x2a, 0x60, 0x60, 0xcf, 0xbf);
//
// Specifies the performance target floor of a Processor Power Efficiency
// Class 0 processor when the system unparks Processor Power Efficiency Class 1
// processor(s).
//
// {fddc842b-8364-4edc-94cf-c17f60de1c80}
//
DEFINE_GUID( GUID_PROCESSOR_CLASS0_FLOOR_PERF, 0xfddc842b, 0x8364, 0x4edc, 0x94,
0xcf, 0xc1, 0x7f, 0x60, 0xde, 0x1c, 0x80);
//
// Specifies the initial performance target of a Processor Power Efficiency
// Class 1 processor when the system makes a transition up from zero Processor
// Power Efficiency Class 1 processors.
//
// {1facfc65-a930-4bc5-9f38-504ec097bbc0}
//
DEFINE_GUID( GUID_PROCESSOR_CLASS1_INITIAL_PERF, 0x1facfc65, 0xa930, 0x4bc5, 0x9
f, 0x38, 0x50, 0x4e, 0xc0, 0x97, 0xbb, 0xc0);
//
// Specifies active vs passive cooling. Although not directly related to // Specifies active vs passive cooling. Although not directly related to
// processor settings, it is the processor that gets throttled if we're doing // processor settings, it is the processor that gets throttled if we're doing
// passive cooling, so it is fairly strongly related. // passive cooling, so it is fairly strongly related.
// {94D3A615-A899-4AC5-AE2B-E4D8F634367F} // {94D3A615-A899-4AC5-AE2B-E4D8F634367F}
// //
DEFINE_GUID( GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F); DEFINE_GUID( GUID_SYSTEM_COOLING_POLICY, 0x94D3A615, 0xA899, 0x4AC5, 0xAE, 0x2B, 0xE4, 0xD8, 0xF6, 0x34, 0x36, 0x7F);
// Lock Console on Wake // Lock Console on Wake
// -------------------- // --------------------
// //
skipping to change at line 13545 skipping to change at line 13920
// Specifies whether to use the "performance" or "conservative" timeouts for // Specifies whether to use the "performance" or "conservative" timeouts for
// device idle management. // device idle management.
// //
// 4faab71a-92e5-4726-b531-224559672d19 // 4faab71a-92e5-4726-b531-224559672d19
// //
DEFINE_GUID( GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x 22, 0x45, 0x59, 0x67, 0x2d, 0x19 ); DEFINE_GUID( GUID_DEVICE_IDLE_POLICY, 0x4faab71a, 0x92e5, 0x4726, 0xb5, 0x31, 0x 22, 0x45, 0x59, 0x67, 0x2d, 0x19 );
#define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0 #define POWER_DEVICE_IDLE_POLICY_PERFORMANCE 0
#define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1 #define POWER_DEVICE_IDLE_POLICY_CONSERVATIVE 1
//
// Specifies Disconnected Standby preference for WiFi devices.
//
// F15576E8-98B7-4186-B944-EAFA664402D9
DEFINE_GUID( GUID_WIFI_IN_STANDBY, 0xF15576E8, 0x98B7, 0x4186, 0xB9, 0x44, 0xEA,
0xFA, 0x66, 0x44, 0x02, 0xD9 );
#define POWER_WIFI_IN_STANDBY_DISABLED 0
#define POWER_WIFI_IN_STANDBY_ENABLED 1
// AC/DC power source // AC/DC power source
// ------------------ // ------------------
// //
// Specifies the power source for the system. consumers may register for // Specifies the power source for the system. consumers may register for
// notification when the power source changes and will be notified with // notification when the power source changes and will be notified with
// one of 3 values: // one of 3 values:
// 0 - Indicates the system is being powered by an AC power source. // 0 - Indicates the system is being powered by an AC power source.
// 1 - Indicates the system is being powered by a DC power source. // 1 - Indicates the system is being powered by a DC power source.
// 2 - Indicates the system is being powered by a short-term DC power // 2 - Indicates the system is being powered by a short-term DC power
skipping to change at line 13596 skipping to change at line 13980
// //
// Once registered, the consumer can expect to be notified as the battery // Once registered, the consumer can expect to be notified as the battery
// life percentage changes. // life percentage changes.
// //
// The consumer will recieve a value between 0 and 100 (inclusive) which // The consumer will recieve a value between 0 and 100 (inclusive) which
// indicates percent battery life remaining. // indicates percent battery life remaining.
// //
// { A7AD8041-B45A-4CAE-87A3-EECBB468A9E1 } // { A7AD8041-B45A-4CAE-87A3-EECBB468A9E1 }
DEFINE_GUID( GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87 , 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 ); DEFINE_GUID( GUID_BATTERY_PERCENTAGE_REMAINING, 0xA7AD8041, 0xB45A, 0x4CAE, 0x87 , 0xA3, 0xEE, 0xCB, 0xB4, 0x68, 0xA9, 0xE1 );
// Specifies change in number of batteries present on the system. The consumer
// may register for notification in order to track change in number of batteries
// available on a system.
//
// Once registered, the consumer can expect to be notified whenever the
// batteries are added or removed from the system.
//
// The consumer will recieve a value indicating number of batteries currently
// present on the system.
//
// {7D263F15-FCA4-49E5-854B-A9F2BFBD5C24}
DEFINE_GUID( GUID_BATTERY_COUNT, 0x7d263f15, 0xfca4, 0x49e5, 0x85, 0x4b, 0xa9, 0
xf2, 0xbf, 0xbd, 0x5c, 0x24 );
// //
// Global notification indicating to listeners user activity/presence accross // Global notification indicating to listeners user activity/presence accross
// all sessions in the system (Present, NotPresent, Inactive) // all sessions in the system (Present, NotPresent, Inactive)
// //
// {786E8A1D-B427-4344-9207-09E70BDCBEA9} // {786E8A1D-B427-4344-9207-09E70BDCBEA9}
DEFINE_GUID( GUID_GLOBAL_USER_PRESENCE, 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0 x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9 ); DEFINE_GUID( GUID_GLOBAL_USER_PRESENCE, 0x786e8a1d, 0xb427, 0x4344, 0x92, 0x7, 0 x9, 0xe7, 0xb, 0xdc, 0xbe, 0xa9 );
// //
// Session specific notification indicating to listeners whether or not the disp lay // Session specific notification indicating to listeners whether or not the disp lay
// related to the given session is on/off/dim // related to the given session is on/off/dim
skipping to change at line 13715 skipping to change at line 14112
#define POWER_SYSTEM_MAXIMUM 7 #define POWER_SYSTEM_MAXIMUM 7
typedef enum { typedef enum {
PowerActionNone = 0, PowerActionNone = 0,
PowerActionReserved, PowerActionReserved,
PowerActionSleep, PowerActionSleep,
PowerActionHibernate, PowerActionHibernate,
PowerActionShutdown, PowerActionShutdown,
PowerActionShutdownReset, PowerActionShutdownReset,
PowerActionShutdownOff, PowerActionShutdownOff,
PowerActionWarmEject PowerActionWarmEject,
PowerActionDisplayOff
} POWER_ACTION, *PPOWER_ACTION; } POWER_ACTION, *PPOWER_ACTION;
typedef enum _DEVICE_POWER_STATE { typedef enum _DEVICE_POWER_STATE {
PowerDeviceUnspecified = 0, PowerDeviceUnspecified = 0,
PowerDeviceD0, PowerDeviceD0,
PowerDeviceD1, PowerDeviceD1,
PowerDeviceD2, PowerDeviceD2,
PowerDeviceD3, PowerDeviceD3,
PowerDeviceMaximum PowerDeviceMaximum
} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE; } DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
skipping to change at line 13754 skipping to change at line 14152
#define ES_AWAYMODE_REQUIRED ((DWORD)0x00000040) #define ES_AWAYMODE_REQUIRED ((DWORD)0x00000040)
#define ES_CONTINUOUS ((DWORD)0x80000000) #define ES_CONTINUOUS ((DWORD)0x80000000)
typedef DWORD EXECUTION_STATE, *PEXECUTION_STATE; typedef DWORD EXECUTION_STATE, *PEXECUTION_STATE;
typedef enum { typedef enum {
LT_DONT_CARE, LT_DONT_CARE,
LT_LOWEST_LATENCY LT_LOWEST_LATENCY
} LATENCY_TIME; } LATENCY_TIME;
#define DIAGNOSTIC_REASON_VERSION 0 #define DIAGNOSTIC_REASON_VERSION 0
#define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001 #define DIAGNOSTIC_REASON_SIMPLE_STRING 0x00000001
#define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002 #define DIAGNOSTIC_REASON_DETAILED_STRING 0x00000002
#define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000 #define DIAGNOSTIC_REASON_NOT_SPECIFIED 0x80000000
#define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000003) #define DIAGNOSTIC_REASON_INVALID_FLAGS (~0x80000007)
// //
// Defines for power request APIs // Defines for power request APIs
// //
#define POWER_REQUEST_CONTEXT_VERSION 0 #define POWER_REQUEST_CONTEXT_VERSION DIAGNOSTIC_REASON_VERSION
#define POWER_REQUEST_CONTEXT_SIMPLE_STRING 0x00000001 #define POWER_REQUEST_CONTEXT_SIMPLE_STRING DIAGNOSTIC_REASON_SIMPLE_STR
#define POWER_REQUEST_CONTEXT_DETAILED_STRING 0x00000002 ING
#define POWER_REQUEST_CONTEXT_DETAILED_STRING DIAGNOSTIC_REASON_DETAILED_S
TRING
typedef enum _POWER_REQUEST_TYPE { typedef enum _POWER_REQUEST_TYPE {
PowerRequestDisplayRequired, PowerRequestDisplayRequired,
PowerRequestSystemRequired, PowerRequestSystemRequired,
PowerRequestAwayModeRequired, PowerRequestAwayModeRequired,
PowerRequestExecutionRequired PowerRequestExecutionRequired
} POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE; } POWER_REQUEST_TYPE, *PPOWER_REQUEST_TYPE;
// end_ntminiport // end_ntminiport
skipping to change at line 13897 skipping to change at line 14295
PlatformRole, PlatformRole,
LastResumePerformance, LastResumePerformance,
DisplayBurst, DisplayBurst,
ExitLatencySamplingPercentage, ExitLatencySamplingPercentage,
RegisterSpmPowerSettings, RegisterSpmPowerSettings,
PlatformIdleStates, PlatformIdleStates,
ProcessorIdleVeto, ProcessorIdleVeto,
PlatformIdleVeto, PlatformIdleVeto,
SystemBatteryStatePrecise, SystemBatteryStatePrecise,
ThermalEvent, ThermalEvent,
PowerRequestActionInternal,
BatteryDeviceState,
PowerInformationInternal,
ThermalStandby,
SystemHiberFileType,
PowerInformationLevelMaximum PowerInformationLevelMaximum
} POWER_INFORMATION_LEVEL; } POWER_INFORMATION_LEVEL;
// //
// User Presence Values // User Presence Values
// //
typedef enum { typedef enum {
UserNotPresent = 0, UserNotPresent = 0,
UserPresent = 1, UserPresent = 1,
UserUnknown = 0xff UserUnknown = 0xff
} POWER_USER_PRESENCE_TYPE, *PPOWER_USER_PRESENCE_TYPE; } POWER_USER_PRESENCE_TYPE, *PPOWER_USER_PRESENCE_TYPE;
typedef struct _POWER_USER_PRESENCE { typedef struct _POWER_USER_PRESENCE {
POWER_USER_PRESENCE_TYPE UserPresence; POWER_USER_PRESENCE_TYPE UserPresence;
} POWER_USER_PRESENCE, *PPOWER_USER_PRESENCE; } POWER_USER_PRESENCE, *PPOWER_USER_PRESENCE;
// //
// Session Connect/Disconnect // Session Connect/Disconnect
// //
typedef struct _POWER_SESSION_CONNECT { typedef struct _POWER_SESSION_CONNECT {
BOOLEAN Connected; // TRUE - connected, FALSE - disconnected BOOLEAN Connected; // TRUE - connected, FALSE - disconnected
BOOLEAN Console; // TRUE - console, FALSE - TS (not used for Connected = FALSE) BOOLEAN Console; // TRUE - console, FALSE - TS (not used for Connected = FALSE)
} POWER_SESSION_CONNECT, *PPOWER_SESSION_CONNECT; } POWER_SESSION_CONNECT, *PPOWER_SESSION_CONNECT;
skipping to change at line 13973 skipping to change at line 14376
MonitorRequestReasonPoSetSystemState, MonitorRequestReasonPoSetSystemState,
MonitorRequestReasonSetThreadExecutionState, MonitorRequestReasonSetThreadExecutionState,
MonitorRequestReasonFullWake, MonitorRequestReasonFullWake,
MonitorRequestReasonSessionUnlock, MonitorRequestReasonSessionUnlock,
MonitorRequestReasonScreenOffRequest, MonitorRequestReasonScreenOffRequest,
MonitorRequestReasonIdleTimeout, MonitorRequestReasonIdleTimeout,
MonitorRequestReasonPolicyChange, MonitorRequestReasonPolicyChange,
MonitorRequestReasonSleepButton, MonitorRequestReasonSleepButton,
MonitorRequestReasonLid, MonitorRequestReasonLid,
MonitorRequestReasonBatteryCountChange, MonitorRequestReasonBatteryCountChange,
MonitorRequestReasonGracePeriod,
MonitorRequestReasonPnP,
MonitorRequestReasonDP,
MonitorRequestReasonSxTransition,
MonitorRequestReasonSystemIdle,
MonitorRequestReasonNearProximity,
MonitorRequestReasonThermalStandby,
MonitorRequestReasonResumePdc,
MonitorRequestReasonResumeS4,
MonitorRequestReasonMax MonitorRequestReasonMax
} POWER_MONITOR_REQUEST_REASON; } POWER_MONITOR_REQUEST_REASON;
// //
// Monitor invocation // Monitor invocation
// //
typedef struct _POWER_MONITOR_INVOCATION { typedef struct _POWER_MONITOR_INVOCATION {
BOOLEAN On; BOOLEAN On;
BOOLEAN Console; BOOLEAN Console;
POWER_MONITOR_REQUEST_REASON RequestReason; POWER_MONITOR_REQUEST_REASON RequestReason;
skipping to change at line 14642 skipping to change at line 15054
// video policies // video policies
DWORD MinVideoTimeout; DWORD MinVideoTimeout;
DWORD MaxVideoTimeout; DWORD MaxVideoTimeout;
// disk policies // disk policies
DWORD MinSpindownTimeout; DWORD MinSpindownTimeout;
DWORD MaxSpindownTimeout; DWORD MaxSpindownTimeout;
} ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY; } ADMINISTRATOR_POWER_POLICY, *PADMINISTRATOR_POWER_POLICY;
typedef enum _HIBERFILE_BUCKET_SIZE {
HiberFileBucket1GB = 0,
HiberFileBucket2GB,
HiberFileBucket4GB,
HiberFileBucket8GB,
HiberFileBucket16GB,
HiberFileBucket32GB,
HiberFileBucketUnlimited,
HiberFileBucketMax
} HIBERFILE_BUCKET_SIZE, *PHIBERFILE_BUCKET_SIZE;
#define HIBERFILE_TYPE_NONE 0x00
#define HIBERFILE_TYPE_REDUCED 0x01
#define HIBERFILE_TYPE_FULL 0x02
#define HIBERFILE_TYPE_MAX 0x03
typedef struct _HIBERFILE_BUCKET {
DWORD64 MaxPhysicalMemory;
DWORD PhysicalMemoryPercent[HIBERFILE_TYPE_MAX];
} HIBERFILE_BUCKET, *PHIBERFILE_BUCKET;
typedef struct { typedef struct {
// Misc supported system features // Misc supported system features
BOOLEAN PowerButtonPresent; BOOLEAN PowerButtonPresent;
BOOLEAN SleepButtonPresent; BOOLEAN SleepButtonPresent;
BOOLEAN LidPresent; BOOLEAN LidPresent;
BOOLEAN SystemS1; BOOLEAN SystemS1;
BOOLEAN SystemS2; BOOLEAN SystemS2;
BOOLEAN SystemS3; BOOLEAN SystemS3;
BOOLEAN SystemS4; // hibernate BOOLEAN SystemS4; // hibernate
BOOLEAN SystemS5; // off BOOLEAN SystemS5; // off
skipping to change at line 14676 skipping to change at line 15109
#else #else
BYTE ProcessorMaxThrottle; BYTE ProcessorMaxThrottle;
BOOLEAN FastSystemS4; BOOLEAN FastSystemS4;
BOOLEAN Hiberboot; BOOLEAN Hiberboot;
BOOLEAN WakeAlarmPresent; BOOLEAN WakeAlarmPresent;
BOOLEAN AoAc; BOOLEAN AoAc;
#endif // (NTDDI_VERSION < NTDDI_WINXP) #endif // (NTDDI_VERSION < NTDDI_WINXP)
// Disk // Disk
BOOLEAN DiskSpinDown; BOOLEAN DiskSpinDown;
#if (NTDDI_VERSION < NTDDI_WINTHRESHOLD)
BYTE spare3[8]; BYTE spare3[8];
# else
// HiberFile
BYTE HiberFileType;
BOOLEAN AoAcConnectivitySupported;
BYTE spare3[6];
#endif // (NTDDI_VERSION < NTDDI_WINTHRESHOLD)
// System Battery // System Battery
BOOLEAN SystemBatteriesPresent; BOOLEAN SystemBatteriesPresent;
BOOLEAN BatteriesAreShortTerm; BOOLEAN BatteriesAreShortTerm;
BATTERY_REPORTING_SCALE BatteryScale[3]; BATTERY_REPORTING_SCALE BatteryScale[3];
// Wake // Wake
SYSTEM_POWER_STATE AcOnLineWake; SYSTEM_POWER_STATE AcOnLineWake;
SYSTEM_POWER_STATE SoftLidWake; SYSTEM_POWER_STATE SoftLidWake;
SYSTEM_POWER_STATE RtcWake; SYSTEM_POWER_STATE RtcWake;
skipping to change at line 14909 skipping to change at line 15350
#define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS #define IMAGE_FILE_MACHINE_MIPS16 0x0266 // MIPS
#define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64 #define IMAGE_FILE_MACHINE_ALPHA64 0x0284 // ALPHA64
#define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS #define IMAGE_FILE_MACHINE_MIPSFPU 0x0366 // MIPS
#define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS #define IMAGE_FILE_MACHINE_MIPSFPU16 0x0466 // MIPS
#define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64 #define IMAGE_FILE_MACHINE_AXP64 IMAGE_FILE_MACHINE_ALPHA64
#define IMAGE_FILE_MACHINE_TRICORE 0x0520 // Infineon #define IMAGE_FILE_MACHINE_TRICORE 0x0520 // Infineon
#define IMAGE_FILE_MACHINE_CEF 0x0CEF #define IMAGE_FILE_MACHINE_CEF 0x0CEF
#define IMAGE_FILE_MACHINE_EBC 0x0EBC // EFI Byte Code #define IMAGE_FILE_MACHINE_EBC 0x0EBC // EFI Byte Code
#define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8) #define IMAGE_FILE_MACHINE_AMD64 0x8664 // AMD64 (K8)
#define IMAGE_FILE_MACHINE_M32R 0x9041 // M32R little-endian #define IMAGE_FILE_MACHINE_M32R 0x9041 // M32R little-endian
#define IMAGE_FILE_MACHINE_ARM64 0xAA64 // ARM64 Little-Endian
#define IMAGE_FILE_MACHINE_CEE 0xC0EE #define IMAGE_FILE_MACHINE_CEE 0xC0EE
// //
// Directory format. // Directory format.
// //
typedef struct _IMAGE_DATA_DIRECTORY { typedef struct _IMAGE_DATA_DIRECTORY {
DWORD VirtualAddress; DWORD VirtualAddress;
DWORD Size; DWORD Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;
skipping to change at line 15081 skipping to change at line 15523
#define IMAGE_SUBSYSTEM_OS2_CUI 5 // image runs in the OS/2 chara cter subsystem. #define IMAGE_SUBSYSTEM_OS2_CUI 5 // image runs in the OS/2 chara cter subsystem.
#define IMAGE_SUBSYSTEM_POSIX_CUI 7 // image runs in the Posix char acter subsystem. #define IMAGE_SUBSYSTEM_POSIX_CUI 7 // image runs in the Posix char acter subsystem.
#define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 // image is a native Win9x driv er. #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS 8 // image is a native Win9x driv er.
#define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 // Image runs in the Windows CE subsystem. #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI 9 // Image runs in the Windows CE subsystem.
#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 // #define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 //
#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 // #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 //
#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 // #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 //
#define IMAGE_SUBSYSTEM_EFI_ROM 13 #define IMAGE_SUBSYSTEM_EFI_ROM 13
#define IMAGE_SUBSYSTEM_XBOX 14 #define IMAGE_SUBSYSTEM_XBOX 14
#define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16 #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
#define IMAGE_SUBSYSTEM_XBOX_CODE_CATALOG 17
// DllCharacteristics Entries // DllCharacteristics Entries
// IMAGE_LIBRARY_PROCESS_INIT 0x0001 // Reserved. // IMAGE_LIBRARY_PROCESS_INIT 0x0001 // Reserved.
// IMAGE_LIBRARY_PROCESS_TERM 0x0002 // Reserved. // IMAGE_LIBRARY_PROCESS_TERM 0x0002 // Reserved.
// IMAGE_LIBRARY_THREAD_INIT 0x0004 // Reserved. // IMAGE_LIBRARY_THREAD_INIT 0x0004 // Reserved.
// IMAGE_LIBRARY_THREAD_TERM 0x0008 // Reserved. // IMAGE_LIBRARY_THREAD_TERM 0x0008 // Reserved.
#define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA 0x0020 // Image can handle a high entropy 64-bit virtual address space. #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_DYNAMIC_BASE 0x0040 // DLL can move.
#define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 // Code Integrity Image #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY 0x0080 // Code Integrity Image
skipping to change at line 15496 skipping to change at line 15939
DWORD CheckSum; // checksum for communal DWORD CheckSum; // checksum for communal
SHORT Number; // section number to associate w ith SHORT Number; // section number to associate w ith
BYTE Selection; // communal selection type BYTE Selection; // communal selection type
BYTE bReserved; BYTE bReserved;
SHORT HighNumber; // high bits of the section numb er SHORT HighNumber; // high bits of the section numb er
BYTE rgbReserved[2]; BYTE rgbReserved[2];
} Section; } Section;
struct{ struct{
IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef; IMAGE_AUX_SYMBOL_TOKEN_DEF TokenDef;
BYTE rgbReserved[2]; BYTE rgbReserved[2];
}; } DUMMYSTRUCTNAME;
struct { struct {
DWORD crc; DWORD crc;
BYTE rgbReserved[16]; BYTE rgbReserved[16];
} CRC; } CRC;
} IMAGE_AUX_SYMBOL_EX; } IMAGE_AUX_SYMBOL_EX;
typedef IMAGE_AUX_SYMBOL_EX UNALIGNED *PIMAGE_AUX_SYMBOL_EX; typedef IMAGE_AUX_SYMBOL_EX UNALIGNED *PIMAGE_AUX_SYMBOL_EX;
typedef enum IMAGE_AUX_SYMBOL_TYPE { typedef enum IMAGE_AUX_SYMBOL_TYPE {
IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1, IMAGE_AUX_SYMBOL_TYPE_TOKEN_DEF = 1,
} IMAGE_AUX_SYMBOL_TYPE; } IMAGE_AUX_SYMBOL_TYPE;
skipping to change at line 15708 skipping to change at line 16151
#define IMAGE_REL_AM_ADDR32NB 0x0002 #define IMAGE_REL_AM_ADDR32NB 0x0002
#define IMAGE_REL_AM_CALL32 0x0003 #define IMAGE_REL_AM_CALL32 0x0003
#define IMAGE_REL_AM_FUNCINFO 0x0004 #define IMAGE_REL_AM_FUNCINFO 0x0004
#define IMAGE_REL_AM_REL32_1 0x0005 #define IMAGE_REL_AM_REL32_1 0x0005
#define IMAGE_REL_AM_REL32_2 0x0006 #define IMAGE_REL_AM_REL32_2 0x0006
#define IMAGE_REL_AM_SECREL 0x0007 #define IMAGE_REL_AM_SECREL 0x0007
#define IMAGE_REL_AM_SECTION 0x0008 #define IMAGE_REL_AM_SECTION 0x0008
#define IMAGE_REL_AM_TOKEN 0x0009 #define IMAGE_REL_AM_TOKEN 0x0009
// //
// ARM64 relocations types.
//
#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 zer
o shift, for page offset
#define IMAGE_REL_ARM64_PAGEOFFSET_12L 0x0007 // LDR (indexed, unsigned immedi
ate), for page offset
#define IMAGE_REL_ARM64_SECREL 0x0008 // Offset within section
#define IMAGE_REL_ARM64_SECREL_LOW12A 0x0009 // ADD/ADDS (immediate) with zer
o shift, for bit 0:11 of section offset
#define IMAGE_REL_ARM64_SECREL_HIGH12A 0x000A // ADD/ADDS (immediate) with zer
o shift, for bit 12:23 of section offset
#define IMAGE_REL_ARM64_SECREL_LOW12L 0x000B // LDR (indexed, unsigned immedi
ate), 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
//
// x64 relocations // x64 relocations
// //
#define IMAGE_REL_AMD64_ABSOLUTE 0x0000 // Reference is absolute, no rel ocation is necessary #define IMAGE_REL_AMD64_ABSOLUTE 0x0000 // Reference is absolute, no rel ocation is necessary
#define IMAGE_REL_AMD64_ADDR64 0x0001 // 64-bit address (VA). #define IMAGE_REL_AMD64_ADDR64 0x0001 // 64-bit address (VA).
#define IMAGE_REL_AMD64_ADDR32 0x0002 // 32-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_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 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_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_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_3 0x0007 // 32-bit relative address from byte distance 3 from reloc
skipping to change at line 16149 skipping to change at line 16612
WORD OffsetModuleName; WORD OffsetModuleName;
WORD Reserved; WORD Reserved;
} IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF; } IMAGE_BOUND_FORWARDER_REF, *PIMAGE_BOUND_FORWARDER_REF;
typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR { typedef struct _IMAGE_DELAYLOAD_DESCRIPTOR {
union { union {
DWORD AllAttributes; DWORD AllAttributes;
struct { struct {
DWORD RvaBased : 1; // Delay load version 2 DWORD RvaBased : 1; // Delay load version 2
DWORD ReservedAttributes : 31; DWORD ReservedAttributes : 31;
}; } DUMMYSTRUCTNAME;
} Attributes; } Attributes;
DWORD DllNameRVA; // RVA to the name of the target lib rary (NULL-terminate ASCII string) DWORD DllNameRVA; // RVA to the name of the target lib rary (NULL-terminate ASCII string)
DWORD ModuleHandleRVA; // RVA to the HMODULE caching locati on (PHMODULE) DWORD ModuleHandleRVA; // RVA to the HMODULE caching locati on (PHMODULE)
DWORD ImportAddressTableRVA; // RVA to the start of the IAT (PIMA GE_THUNK_DATA) DWORD ImportAddressTableRVA; // RVA to the start of the IAT (PIMA GE_THUNK_DATA)
DWORD ImportNameTableRVA; // RVA to the start of the name tabl e (PIMAGE_THUNK_DATA::AddressOfData) DWORD ImportNameTableRVA; // RVA to the start of the name tabl e (PIMAGE_THUNK_DATA::AddressOfData)
DWORD BoundImportAddressTableRVA; // RVA to an optional bound IAT DWORD BoundImportAddressTableRVA; // RVA to an optional bound IAT
DWORD UnloadInformationTableRVA; // RVA to an optional unload info ta ble DWORD UnloadInformationTableRVA; // RVA to an optional unload info ta ble
DWORD TimeDateStamp; // 0 if not bound, DWORD TimeDateStamp; // 0 if not bound,
// Otherwise, date/time of the targe t DLL // Otherwise, date/time of the targe t DLL
skipping to change at line 16264 skipping to change at line 16727
// //
typedef struct _IMAGE_RESOURCE_DATA_ENTRY { typedef struct _IMAGE_RESOURCE_DATA_ENTRY {
DWORD OffsetToData; DWORD OffsetToData;
DWORD Size; DWORD Size;
DWORD CodePage; DWORD CodePage;
DWORD Reserved; DWORD Reserved;
} IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY; } IMAGE_RESOURCE_DATA_ENTRY, *PIMAGE_RESOURCE_DATA_ENTRY;
// //
// Code Integrity in loadconfig (CI)
//
typedef struct _IMAGE_LOAD_CONFIG_CODE_INTEGRITY {
WORD Flags; // Flags to indicate if CI information is available,
etc.
WORD Catalog; // 0xFFFF means not available
DWORD CatalogOffset;
DWORD Reserved; // Additional bitmask to be defined later
} IMAGE_LOAD_CONFIG_CODE_INTEGRITY, *PIMAGE_LOAD_CONFIG_CODE_INTEGRITY;
//
// Load Configuration Directory Entry // Load Configuration Directory Entry
// //
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 { typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY32 {
DWORD Size; DWORD Size;
DWORD TimeDateStamp; DWORD TimeDateStamp;
WORD MajorVersion; WORD MajorVersion;
WORD MinorVersion; WORD MinorVersion;
DWORD GlobalFlagsClear; DWORD GlobalFlagsClear;
DWORD GlobalFlagsSet; DWORD GlobalFlagsSet;
skipping to change at line 16289 skipping to change at line 16763
DWORD VirtualMemoryThreshold; DWORD VirtualMemoryThreshold;
DWORD ProcessHeapFlags; DWORD ProcessHeapFlags;
DWORD ProcessAffinityMask; DWORD ProcessAffinityMask;
WORD CSDVersion; WORD CSDVersion;
WORD Reserved1; WORD Reserved1;
DWORD EditList; // VA DWORD EditList; // VA
DWORD SecurityCookie; // VA DWORD SecurityCookie; // VA
DWORD SEHandlerTable; // VA DWORD SEHandlerTable; // VA
DWORD SEHandlerCount; DWORD SEHandlerCount;
DWORD GuardCFCheckFunctionPointer; // VA DWORD GuardCFCheckFunctionPointer; // VA
DWORD Reserved2; DWORD GuardCFDispatchFunctionPointer; // VA
DWORD GuardCFFunctionTable; // VA DWORD GuardCFFunctionTable; // VA
DWORD GuardCFFunctionCount; DWORD GuardCFFunctionCount;
DWORD GuardFlags; DWORD GuardFlags;
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
} IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32; } IMAGE_LOAD_CONFIG_DIRECTORY32, *PIMAGE_LOAD_CONFIG_DIRECTORY32;
typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 { typedef struct _IMAGE_LOAD_CONFIG_DIRECTORY64 {
DWORD Size; DWORD Size;
DWORD TimeDateStamp; DWORD TimeDateStamp;
WORD MajorVersion; WORD MajorVersion;
WORD MinorVersion; WORD MinorVersion;
DWORD GlobalFlagsClear; DWORD GlobalFlagsClear;
DWORD GlobalFlagsSet; DWORD GlobalFlagsSet;
DWORD CriticalSectionDefaultTimeout; DWORD CriticalSectionDefaultTimeout;
ULONGLONG DeCommitFreeBlockThreshold; ULONGLONG DeCommitFreeBlockThreshold;
ULONGLONG DeCommitTotalFreeThreshold; ULONGLONG DeCommitTotalFreeThreshold;
ULONGLONG LockPrefixTable; // VA ULONGLONG LockPrefixTable; // VA
ULONGLONG MaximumAllocationSize; ULONGLONG MaximumAllocationSize;
ULONGLONG VirtualMemoryThreshold; ULONGLONG VirtualMemoryThreshold;
ULONGLONG ProcessAffinityMask; ULONGLONG ProcessAffinityMask;
DWORD ProcessHeapFlags; DWORD ProcessHeapFlags;
WORD CSDVersion; WORD CSDVersion;
WORD Reserved1; WORD Reserved1;
ULONGLONG EditList; // VA ULONGLONG EditList; // VA
ULONGLONG SecurityCookie; // VA ULONGLONG SecurityCookie; // VA
ULONGLONG SEHandlerTable; // VA ULONGLONG SEHandlerTable; // VA
ULONGLONG SEHandlerCount; ULONGLONG SEHandlerCount;
ULONGLONG GuardCFCheckFunctionPointer; // VA ULONGLONG GuardCFCheckFunctionPointer; // VA
ULONGLONG Reserved2; ULONGLONG GuardCFDispatchFunctionPointer; // VA
ULONGLONG GuardCFFunctionTable; // VA ULONGLONG GuardCFFunctionTable; // VA
ULONGLONG GuardCFFunctionCount; ULONGLONG GuardCFFunctionCount;
DWORD GuardFlags; DWORD GuardFlags;
IMAGE_LOAD_CONFIG_CODE_INTEGRITY CodeIntegrity;
} IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64; } IMAGE_LOAD_CONFIG_DIRECTORY64, *PIMAGE_LOAD_CONFIG_DIRECTORY64;
#ifdef _WIN64 #ifdef _WIN64
typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY; typedef IMAGE_LOAD_CONFIG_DIRECTORY64 IMAGE_LOAD_CONFIG_DIRECTORY;
typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY; typedef PIMAGE_LOAD_CONFIG_DIRECTORY64 PIMAGE_LOAD_CONFIG_DIRECTORY;
#else #else
typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY; typedef IMAGE_LOAD_CONFIG_DIRECTORY32 IMAGE_LOAD_CONFIG_DIRECTORY;
typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY; typedef PIMAGE_LOAD_CONFIG_DIRECTORY32 PIMAGE_LOAD_CONFIG_DIRECTORY;
#endif #endif
#define IMAGE_GUARD_CF_INSTRUMENTED 0x00000100 #define IMAGE_GUARD_CF_INSTRUMENTED 0x00000100 // Module perfo
#define IMAGE_GUARD_CFW_INSTRUMENTED 0x00000200 rms control flow integrity checks using system-supplied support
#define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x00000400 #define IMAGE_GUARD_CFW_INSTRUMENTED 0x00000200 // Module perfo
#define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x00000800 rms control flow and write integrity checks
#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x00001000 #define IMAGE_GUARD_CF_FUNCTION_TABLE_PRESENT 0x00000400 // Module conta
#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x00002000 ins valid control flow target metadata
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xF0000000 #define IMAGE_GUARD_SECURITY_COOKIE_UNUSED 0x00000800 // Module does
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 28 not make use of the /GS security cookie
#define IMAGE_GUARD_PROTECT_DELAYLOAD_IAT 0x00001000 // Module suppo
rts read only delay load IAT
#define IMAGE_GUARD_DELAYLOAD_IAT_IN_ITS_OWN_SECTION 0x00002000 // Delayload im
port table in its own .didat section (with nothing else in it) that can be freel
y reprotected
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_MASK 0xF0000000 // Stride of Gu
ard CF function table encoded in these bits (additional count of bytes per eleme
nt)
#define IMAGE_GUARD_CF_FUNCTION_TABLE_SIZE_SHIFT 28 // Shift to rig
ht-justify Guard CF function table stride
//
// GFIDS table entry flags.
//
#define IMAGE_GUARD_FLAG_FID_SUPPRESSED 0x01 // The containi
ng GFIDS entry is suppressed
// //
// WIN CE Exception table format // WIN CE Exception table format
// //
// //
// Function table entry format. Function table is pointed to by the // Function table entry format. Function table is pointed to by the
// IMAGE_DIRECTORY_ENTRY_EXCEPTION directory entry. // IMAGE_DIRECTORY_ENTRY_EXCEPTION directory entry.
// //
skipping to change at line 16375 skipping to change at line 16857
DWORD H : 1; DWORD H : 1;
DWORD Reg : 3; DWORD Reg : 3;
DWORD R : 1; DWORD R : 1;
DWORD L : 1; DWORD L : 1;
DWORD C : 1; DWORD C : 1;
DWORD StackAdjust : 10; DWORD StackAdjust : 10;
} DUMMYSTRUCTNAME; } DUMMYSTRUCTNAME;
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
} IMAGE_ARM_RUNTIME_FUNCTION_ENTRY, * PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY; } IMAGE_ARM_RUNTIME_FUNCTION_ENTRY, * PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY {
DWORD BeginAddress;
union {
DWORD UnwindData;
struct {
DWORD Flag : 2;
DWORD FunctionLength : 11;
DWORD RegF : 3;
DWORD RegI : 4;
DWORD H : 1;
DWORD CR : 2;
DWORD FrameSize : 9;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
} IMAGE_ARM64_RUNTIME_FUNCTION_ENTRY, * PIMAGE_ARM64_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY { typedef struct _IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY {
ULONGLONG BeginAddress; ULONGLONG BeginAddress;
ULONGLONG EndAddress; ULONGLONG EndAddress;
ULONGLONG ExceptionHandler; ULONGLONG ExceptionHandler;
ULONGLONG HandlerData; ULONGLONG HandlerData;
ULONGLONG PrologEndAddress; ULONGLONG PrologEndAddress;
} IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY; } IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY, *PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY;
typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY { typedef struct _IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY {
DWORD BeginAddress; DWORD BeginAddress;
skipping to change at line 16415 skipping to change at line 16913
typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTR Y; typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_AXP64_RUNTIME_FUNCTION_ENTR Y;
typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTR Y; typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_AXP64_RUNTIME_FUNCTION_ENTR Y;
typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; typedef IMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; typedef PIMAGE_ALPHA64_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#elif defined(_ALPHA_) #elif defined(_ALPHA_)
typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; typedef IMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ALPHA_RUNTIME_FUNCTION_ENTRY PIMAGE_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_) #elif defined(_ARM_)
typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; typedef IMAGE_ARM_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; typedef PIMAGE_ARM_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
#else #else
typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY; typedef _IMAGE_RUNTIME_FUNCTION_ENTRY IMAGE_RUNTIME_FUNCTION_ENTRY;
typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY; typedef _PIMAGE_RUNTIME_FUNCTION_ENTRY PIMAGE_RUNTIME_FUNCTION_ENTRY;
skipping to change at line 16454 skipping to change at line 16957
#define IMAGE_DEBUG_TYPE_CODEVIEW 2 #define IMAGE_DEBUG_TYPE_CODEVIEW 2
#define IMAGE_DEBUG_TYPE_FPO 3 #define IMAGE_DEBUG_TYPE_FPO 3
#define IMAGE_DEBUG_TYPE_MISC 4 #define IMAGE_DEBUG_TYPE_MISC 4
#define IMAGE_DEBUG_TYPE_EXCEPTION 5 #define IMAGE_DEBUG_TYPE_EXCEPTION 5
#define IMAGE_DEBUG_TYPE_FIXUP 6 #define IMAGE_DEBUG_TYPE_FIXUP 6
#define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7 #define IMAGE_DEBUG_TYPE_OMAP_TO_SRC 7
#define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8 #define IMAGE_DEBUG_TYPE_OMAP_FROM_SRC 8
#define IMAGE_DEBUG_TYPE_BORLAND 9 #define IMAGE_DEBUG_TYPE_BORLAND 9
#define IMAGE_DEBUG_TYPE_RESERVED10 10 #define IMAGE_DEBUG_TYPE_RESERVED10 10
#define IMAGE_DEBUG_TYPE_CLSID 11 #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
typedef struct _IMAGE_COFF_SYMBOLS_HEADER { typedef struct _IMAGE_COFF_SYMBOLS_HEADER {
DWORD NumberOfSymbols; DWORD NumberOfSymbols;
DWORD LvaToFirstSymbol; DWORD LvaToFirstSymbol;
DWORD NumberOfLinenumbers; DWORD NumberOfLinenumbers;
DWORD LvaToFirstLinenumber; DWORD LvaToFirstLinenumber;
DWORD RvaToFirstByteOfCode; DWORD RvaToFirstByteOfCode;
DWORD RvaToLastByteOfCode; DWORD RvaToLastByteOfCode;
DWORD RvaToFirstByteOfData; DWORD RvaToFirstByteOfData;
DWORD RvaToLastByteOfData; DWORD RvaToLastByteOfData;
skipping to change at line 16553 skipping to change at line 17060
DWORD CheckSum; DWORD CheckSum;
DWORD ImageBase; DWORD ImageBase;
DWORD SizeOfImage; DWORD SizeOfImage;
DWORD NumberOfSections; DWORD NumberOfSections;
DWORD ExportedNamesSize; DWORD ExportedNamesSize;
DWORD DebugDirectorySize; DWORD DebugDirectorySize;
DWORD SectionAlignment; DWORD SectionAlignment;
DWORD Reserved[2]; DWORD Reserved[2];
} IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER; } IMAGE_SEPARATE_DEBUG_HEADER, *PIMAGE_SEPARATE_DEBUG_HEADER;
// begin_ntoshvp
typedef struct _NON_PAGED_DEBUG_INFO { typedef struct _NON_PAGED_DEBUG_INFO {
WORD Signature; WORD Signature;
WORD Flags; WORD Flags;
DWORD Size; DWORD Size;
WORD Machine; WORD Machine;
WORD Characteristics; WORD Characteristics;
DWORD TimeDateStamp; DWORD TimeDateStamp;
DWORD CheckSum; DWORD CheckSum;
DWORD SizeOfImage; DWORD SizeOfImage;
ULONGLONG ImageBase; ULONGLONG ImageBase;
//DebugDirectorySize //DebugDirectorySize
//IMAGE_DEBUG_DIRECTORY //IMAGE_DEBUG_DIRECTORY
} NON_PAGED_DEBUG_INFO, *PNON_PAGED_DEBUG_INFO; } NON_PAGED_DEBUG_INFO, *PNON_PAGED_DEBUG_INFO;
// end_ntoshvp
#ifndef _MAC #ifndef _MAC
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944 #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4944
#define NON_PAGED_DEBUG_SIGNATURE 0x494E #define NON_PAGED_DEBUG_SIGNATURE 0x494E
#else #else
#define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4449 // DI #define IMAGE_SEPARATE_DEBUG_SIGNATURE 0x4449 // DI
#define NON_PAGED_DEBUG_SIGNATURE 0x4E49 // NI #define NON_PAGED_DEBUG_SIGNATURE 0x4E49 // NI
#endif #endif
#define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000 #define IMAGE_SEPARATE_DEBUG_FLAGS_MASK 0x8000
#define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000 // when DBG was updated, the #define IMAGE_SEPARATE_DEBUG_MISMATCH 0x8000 // when DBG was updated, the
skipping to change at line 16656 skipping to change at line 17167
typedef enum ReplacesCorHdrNumericDefines typedef enum ReplacesCorHdrNumericDefines
{ {
// COM+ Header entry point flags. // COM+ Header entry point flags.
COMIMAGE_FLAGS_ILONLY =0x00000001, COMIMAGE_FLAGS_ILONLY =0x00000001,
COMIMAGE_FLAGS_32BITREQUIRED =0x00000002, COMIMAGE_FLAGS_32BITREQUIRED =0x00000002,
COMIMAGE_FLAGS_IL_LIBRARY =0x00000004, COMIMAGE_FLAGS_IL_LIBRARY =0x00000004,
COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008, COMIMAGE_FLAGS_STRONGNAMESIGNED =0x00000008,
COMIMAGE_FLAGS_NATIVE_ENTRYPOINT =0x00000010, COMIMAGE_FLAGS_NATIVE_ENTRYPOINT =0x00000010,
COMIMAGE_FLAGS_TRACKDEBUGDATA =0x00010000, COMIMAGE_FLAGS_TRACKDEBUGDATA =0x00010000,
COMIMAGE_FLAGS_32BITPREFERRED =0x00020000,
// Version flags for image. // Version flags for image.
COR_VERSION_MAJOR_V2 =2, COR_VERSION_MAJOR_V2 =2,
COR_VERSION_MAJOR =COR_VERSION_MAJOR_V2, COR_VERSION_MAJOR =COR_VERSION_MAJOR_V2,
COR_VERSION_MINOR =5, COR_VERSION_MINOR =5,
COR_DELETED_NAME_LENGTH =8, COR_DELETED_NAME_LENGTH =8,
COR_VTABLEGAP_NAME_LENGTH =8, COR_VTABLEGAP_NAME_LENGTH =8,
// Maximum size of a NativeType descriptor. // Maximum size of a NativeType descriptor.
NATIVE_TYPE_MAX_CB =1, NATIVE_TYPE_MAX_CB =1,
skipping to change at line 16736 skipping to change at line 17248
// //
#include <apiset.h> #include <apiset.h>
// //
// prototypes // prototypes
// //
// begin_ntifs // begin_ntifs
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION > NTDDI_WINXP) #if (NTDDI_VERSION > NTDDI_WINXP)
NTSYSAPI NTSYSAPI
_Success_(return != 0) _Success_(return != 0)
WORD WORD
NTAPI NTAPI
RtlCaptureStackBackTrace( RtlCaptureStackBackTrace(
_In_ DWORD FramesToSkip, _In_ DWORD FramesToSkip,
_In_ DWORD FramesToCapture, _In_ DWORD FramesToCapture,
_Out_writes_to_(FramesToCapture, return) PVOID * BackTrace, _Out_writes_to_(FramesToCapture, return) PVOID * BackTrace,
_Out_opt_ PDWORD BackTraceHash _Out_opt_ PDWORD BackTraceHash
); );
#endif #endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if (NTDDI_VERSION > NTDDI_WIN2K) #if (NTDDI_VERSION > NTDDI_WIN2K)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlCaptureContext( RtlCaptureContext(
_Out_ PCONTEXT ContextRecord _Out_ PCONTEXT ContextRecord
); );
#endif #endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
// end_ntifs // end_ntifs
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlUnwind( RtlUnwind(
_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp, _In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue _In_ PVOID ReturnValue
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#if defined(_AMD64_) #if defined(_AMD64_)
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
BOOLEAN BOOLEAN
__cdecl __cdecl
RtlAddFunctionTable( RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable, _In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount, _In_ DWORD EntryCount,
_In_ DWORD64 BaseAddress _In_ DWORD64 BaseAddress
); );
skipping to change at line 16864 skipping to change at line 17376
VOID VOID
NTAPI NTAPI
RtlDeleteGrowableFunctionTable( RtlDeleteGrowableFunctionTable(
_In_ PVOID DynamicTable _In_ PVOID DynamicTable
); );
#endif // ((NTDDI_VERSION >= NTDDI_WIN8) && !defined(_CONTRACT_GEN)) || (_APISET _RTLSUPPORT_VER > 0x0100) #endif // ((NTDDI_VERSION >= NTDDI_WIN8) && !defined(_CONTRACT_GEN)) || (_APISET _RTLSUPPORT_VER > 0x0100)
// begin_1_0 // begin_1_0
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
PRUNTIME_FUNCTION PRUNTIME_FUNCTION
NTAPI NTAPI
RtlLookupFunctionEntry( RtlLookupFunctionEntry(
_In_ DWORD64 ControlPc, _In_ DWORD64 ControlPc,
_Out_ PDWORD64 ImageBase, _Out_ PDWORD64 ImageBase,
_Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable _Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
__cdecl __cdecl
RtlRestoreContext( RtlRestoreContext(
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord _In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlUnwindEx( RtlUnwindEx(
_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp, _In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue, _In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable _In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
PEXCEPTION_ROUTINE PEXCEPTION_ROUTINE
NTAPI NTAPI
RtlVirtualUnwind( RtlVirtualUnwind(
_In_ DWORD HandlerType, _In_ DWORD HandlerType,
_In_ DWORD64 ImageBase, _In_ DWORD64 ImageBase,
_In_ DWORD64 ControlPc, _In_ DWORD64 ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry, _In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord, _Inout_ PCONTEXT ContextRecord,
_Out_ PVOID * HandlerData, _Out_ PVOID * HandlerData,
_Out_ PDWORD64 EstablisherFrame, _Out_ PDWORD64 EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers _Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#endif // _AMD64_ #endif // _AMD64_
#if defined(_ARM_) #if defined(_ARM_)
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
BOOLEAN BOOLEAN
__cdecl __cdecl
RtlAddFunctionTable( RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable, _In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount, _In_ DWORD EntryCount,
_In_ DWORD BaseAddress _In_ DWORD BaseAddress
); );
skipping to change at line 17009 skipping to change at line 17521
VOID VOID
NTAPI NTAPI
RtlDeleteGrowableFunctionTable( RtlDeleteGrowableFunctionTable(
_In_ PVOID DynamicTable _In_ PVOID DynamicTable
); );
#endif // ((NTDDI_VERSION >= NTDDI_WIN8) && !defined(_CONTRACT_GEN)) || (_APISET _RTLSUPPORT_VER > 0x0100) #endif // ((NTDDI_VERSION >= NTDDI_WIN8) && !defined(_CONTRACT_GEN)) || (_APISET _RTLSUPPORT_VER > 0x0100)
// begin_1_0 // begin_1_0
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
PRUNTIME_FUNCTION PRUNTIME_FUNCTION
NTAPI NTAPI
RtlLookupFunctionEntry( RtlLookupFunctionEntry(
_In_ ULONG_PTR ControlPc, _In_ ULONG_PTR ControlPc,
_Out_ PDWORD ImageBase, _Out_ PDWORD ImageBase,
_Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable _Inout_opt_ PUNWIND_HISTORY_TABLE HistoryTable
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
__cdecl __cdecl
RtlRestoreContext( RtlRestoreContext(
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord _In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlUnwindEx( RtlUnwindEx(
_In_opt_ PVOID TargetFrame, _In_opt_ PVOID TargetFrame,
_In_opt_ PVOID TargetIp, _In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue, _In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable _In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
PEXCEPTION_ROUTINE PEXCEPTION_ROUTINE
NTAPI NTAPI
RtlVirtualUnwind( RtlVirtualUnwind(
_In_ DWORD HandlerType, _In_ DWORD HandlerType,
_In_ DWORD ImageBase, _In_ DWORD ImageBase,
_In_ DWORD ControlPc, _In_ DWORD ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry, _In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord, _Inout_ PCONTEXT ContextRecord,
_Out_ PVOID * HandlerData, _Out_ PVOID * HandlerData,
_Out_ PDWORD EstablisherFrame, _Out_ PDWORD EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers _Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#endif // _ARM_ #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
);
// end_1_0
#if ((NTDDI_VERSION >= NTDDI_WIN8) && !defined(_CONTRACT_GEN)) || (_APISET_RTLSU
PPORT_VER > 0x0100)
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) && !defined(_CONTRACT_GEN)) || (_APISET
_RTLSUPPORT_VER > 0x0100)
// begin_1_0
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY
STEM) */
#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_SY
STEM) */
#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
);
#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
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_DESKTOP | WINAPI_PARTITION_SY
STEM) */
#pragma endregion
#endif // _ARM64_
#if defined(_IA64_) #if defined(_IA64_)
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
_IRQL_requires_max_(PASSIVE_LEVEL) _IRQL_requires_max_(PASSIVE_LEVEL)
_Success_(return!=0) _Success_(return!=0)
NTSYSAPI NTSYSAPI
BOOLEAN BOOLEAN
NTAPI NTAPI
RtlAddFunctionTable( RtlAddFunctionTable(
_In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable, _In_reads_(EntryCount) PRUNTIME_FUNCTION FunctionTable,
_In_ DWORD EntryCount, _In_ DWORD EntryCount,
_In_ ULONGLONG BaseAddress, _In_ ULONGLONG BaseAddress,
skipping to change at line 17127 skipping to change at line 17784
RtlInstallFunctionTableCallback( RtlInstallFunctionTableCallback(
_In_ DWORD64 TableIdentifier, _In_ DWORD64 TableIdentifier,
_In_ DWORD64 BaseAddress, _In_ DWORD64 BaseAddress,
_In_ DWORD Length, _In_ DWORD Length,
_In_ DWORD64 TargetGp, _In_ DWORD64 TargetGp,
_In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback, _In_ PGET_RUNTIME_FUNCTION_CALLBACK Callback,
_In_opt_ PVOID Context, _In_opt_ PVOID Context,
_In_opt_ PCWSTR OutOfProcessCallbackDll _In_opt_ PCWSTR OutOfProcessCallbackDll
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
_IRQL_requires_max_(SYNCH_LEVEL) _IRQL_requires_max_(SYNCH_LEVEL)
_IRQL_requires_min_(PASSIVE_LEVEL) _IRQL_requires_min_(PASSIVE_LEVEL)
NTSYSAPI NTSYSAPI
PRUNTIME_FUNCTION PRUNTIME_FUNCTION
NTAPI NTAPI
RtlLookupFunctionEntry( RtlLookupFunctionEntry(
_In_ ULONGLONG ControlPc, _In_ ULONGLONG ControlPc,
_Out_ PULONGLONG ImageBase, _Out_ PULONGLONG ImageBase,
_Out_ PULONGLONG TargetGp _Out_ PULONGLONG TargetGp
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlRestoreContext( RtlRestoreContext(
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord _In_opt_ struct _EXCEPTION_RECORD * ExceptionRecord
); );
NTSYSAPI NTSYSAPI
skipping to change at line 17173 skipping to change at line 17830
RtlVirtualUnwind( RtlVirtualUnwind(
_In_ ULONGLONG ImageBase, _In_ ULONGLONG ImageBase,
_In_ ULONGLONG ControlPc, _In_ ULONGLONG ControlPc,
_In_ PRUNTIME_FUNCTION FunctionEntry, _In_ PRUNTIME_FUNCTION FunctionEntry,
_Inout_ PCONTEXT ContextRecord, _Inout_ PCONTEXT ContextRecord,
_Out_ PBOOLEAN InFunction, _Out_ PBOOLEAN InFunction,
_Out_ PFRAME_POINTERS EstablisherFrame, _Out_ PFRAME_POINTERS EstablisherFrame,
_Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers _Inout_opt_ PKNONVOLATILE_CONTEXT_POINTERS ContextPointers
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#endif // _IA64_ #endif // _IA64_
#if defined(_IA64_) #if defined(_IA64_)
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlUnwindEx( RtlUnwindEx(
_In_opt_ FRAME_POINTERS TargetFrame, _In_opt_ FRAME_POINTERS TargetFrame,
_In_opt_ PVOID TargetIp, _In_opt_ PVOID TargetIp,
_In_opt_ PEXCEPTION_RECORD ExceptionRecord, _In_opt_ PEXCEPTION_RECORD ExceptionRecord,
_In_ PVOID ReturnValue, _In_ PVOID ReturnValue,
_In_ PCONTEXT ContextRecord, _In_ PCONTEXT ContextRecord,
_In_opt_ PUNWIND_HISTORY_TABLE HistoryTable _In_opt_ PUNWIND_HISTORY_TABLE HistoryTable
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#endif // _IA64_ #endif // _IA64_
#pragma region Application Family #pragma region Application or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM)
#if !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defined(_X 86_)) #if !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defined(_X 86_))
NTSYSAPI NTSYSAPI
PVOID PVOID
NTAPI NTAPI
RtlPcToFileHeader( RtlPcToFileHeader(
_In_ PVOID PcValue, _In_ PVOID PcValue,
_Out_ PVOID * BaseOfImage _Out_ PVOID * BaseOfImage
); );
#endif // !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defi ned(_X86_)) #endif // !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defi ned(_X86_))
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM ) */
#pragma endregion #pragma endregion
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defined(_X 86_)) #if !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defined(_X 86_))
#if (NTDDI_VERSION >= NTDDI_WIN2K) #if (NTDDI_VERSION >= NTDDI_WIN2K)
_Check_return_ _Check_return_
NTSYSAPI NTSYSAPI
SIZE_T SIZE_T
NTAPI NTAPI
RtlCompareMemory( RtlCompareMemory(
_In_ const VOID * Source1, _In_ const VOID * Source1,
_In_ const VOID * Source2, _In_ const VOID * Source2,
_In_ SIZE_T Length _In_ SIZE_T Length
); );
#endif #endif
#endif // !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defi ned(_X86_)) #endif // !(defined(_CONTRACT_GEN) && (_APISET_RTLSUPPORT_VER <= 0x0100) && defi ned(_X86_))
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
// //
// for move macros // for move macros
// //
#ifdef _MAC #ifdef _MAC
#ifndef _INC_STRING #ifndef _INC_STRING
#include <string.h> #include <string.h>
#endif /* _INC_STRING */ #endif /* _INC_STRING */
#else #else
skipping to change at line 17299 skipping to change at line 17956
ULONGLONG Region; ULONGLONG Region;
} DUMMYSTRUCTNAME; } DUMMYSTRUCTNAME;
struct { // x64 16-byte header struct { // x64 16-byte header
ULONGLONG Depth:16; ULONGLONG Depth:16;
ULONGLONG Sequence:48; ULONGLONG Sequence:48;
ULONGLONG Reserved:4; ULONGLONG Reserved:4;
ULONGLONG NextEntry:60; // last 4 bits are always 0's ULONGLONG NextEntry:60; // last 4 bits are always 0's
} HeaderX64; } HeaderX64;
} SLIST_HEADER, *PSLIST_HEADER; } 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_) #elif defined(_X86_)
typedef union _SLIST_HEADER { typedef union _SLIST_HEADER {
ULONGLONG Alignment; ULONGLONG Alignment;
struct { struct {
SLIST_ENTRY Next; SLIST_ENTRY Next;
WORD Depth; WORD Depth;
WORD CpuId; WORD CpuId;
} DUMMYSTRUCTNAME; } DUMMYSTRUCTNAME;
} SLIST_HEADER, *PSLIST_HEADER; } SLIST_HEADER, *PSLIST_HEADER;
skipping to change at line 17325 skipping to change at line 17998
SLIST_ENTRY Next; SLIST_ENTRY Next;
WORD Depth; WORD Depth;
WORD Reserved; WORD Reserved;
} DUMMYSTRUCTNAME; } DUMMYSTRUCTNAME;
} SLIST_HEADER, *PSLIST_HEADER; } SLIST_HEADER, *PSLIST_HEADER;
#endif #endif
#endif // _SLIST_HEADER_ #endif // _SLIST_HEADER_
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
NTSYSAPI NTSYSAPI
VOID VOID
NTAPI NTAPI
RtlInitializeSListHead ( RtlInitializeSListHead (
_Out_ PSLIST_HEADER ListHead _Out_ PSLIST_HEADER ListHead
); );
_Must_inspect_result_ _Must_inspect_result_
NTSYSAPI NTSYSAPI
skipping to change at line 17382 skipping to change at line 18055
_Inout_ PSLIST_HEADER ListHead _Inout_ PSLIST_HEADER ListHead
); );
NTSYSAPI NTSYSAPI
WORD WORD
NTAPI NTAPI
RtlQueryDepthSList ( RtlQueryDepthSList (
_In_ PSLIST_HEADER ListHead _In_ PSLIST_HEADER ListHead
); );
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#ifndef _RTL_RUN_ONCE_DEF #ifndef _RTL_RUN_ONCE_DEF
#define _RTL_RUN_ONCE_DEF #define _RTL_RUN_ONCE_DEF
// //
// Run once // Run once
// //
#define RTL_RUN_ONCE_INIT {0} // Static initializer #define RTL_RUN_ONCE_INIT {0} // Static initializer
skipping to change at line 17424 skipping to change at line 18097
typedef struct _RTL_BARRIER { typedef struct _RTL_BARRIER {
DWORD Reserved1; DWORD Reserved1;
DWORD Reserved2; DWORD Reserved2;
ULONG_PTR Reserved3[2]; ULONG_PTR Reserved3[2];
DWORD Reserved4; DWORD Reserved4;
DWORD Reserved5; DWORD Reserved5;
} RTL_BARRIER, *PRTL_BARRIER; } RTL_BARRIER, *PRTL_BARRIER;
// begin_ntoshvp // begin_ntoshvp
// Include the more obscure SAL annotations (like __drv_aliasesMem) instead of a
ssuming the crtdefs.h will include them.
#include <specstrings.h>
// //
// Fast fail failure codes. // Fast fail failure codes.
// //
// N.B. Failure code zero should not be used, but is required to be reserved // N.B. Failure code zero should not be used, but is required to be reserved
// for compatibility with previous handling of the // for compatibility with previous handling of the
// STATUS_STACK_BUFFER_OVERRUN exception status code. // STATUS_STACK_BUFFER_OVERRUN exception status code.
// //
#define FAST_FAIL_LEGACY_GS_VIOLATION 0 #define FAST_FAIL_LEGACY_GS_VIOLATION 0
#define FAST_FAIL_VTGUARD_CHECK_FAILURE 1 #define FAST_FAIL_VTGUARD_CHECK_FAILURE 1
#define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2 #define FAST_FAIL_STACK_COOKIE_CHECK_FAILURE 2
#define FAST_FAIL_CORRUPT_LIST_ENTRY 3 #define FAST_FAIL_CORRUPT_LIST_ENTRY 3
#define FAST_FAIL_INCORRECT_STACK 4 #define FAST_FAIL_INCORRECT_STACK 4
#define FAST_FAIL_INVALID_ARG 5 #define FAST_FAIL_INVALID_ARG 5
#define FAST_FAIL_GS_COOKIE_INIT 6 #define FAST_FAIL_GS_COOKIE_INIT 6
#define FAST_FAIL_FATAL_APP_EXIT 7 #define FAST_FAIL_FATAL_APP_EXIT 7
#define FAST_FAIL_RANGE_CHECK_FAILURE 8 #define FAST_FAIL_RANGE_CHECK_FAILURE 8
#define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9 #define FAST_FAIL_UNSAFE_REGISTRY_ACCESS 9
#define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10 #define FAST_FAIL_GUARD_ICALL_CHECK_FAILURE 10
#define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11 #define FAST_FAIL_GUARD_WRITE_CHECK_FAILURE 11
#define FAST_FAIL_INVALID_FIBER_SWITCH 12 #define FAST_FAIL_INVALID_FIBER_SWITCH 12
#define FAST_FAIL_INVALID_SET_OF_CONTEXT 13 #define FAST_FAIL_INVALID_SET_OF_CONTEXT 13
#define FAST_FAIL_INVALID_REFERENCE_COUNT 14 #define FAST_FAIL_INVALID_REFERENCE_COUNT 14
#define FAST_FAIL_INVALID_JUMP_BUFFER 18 #define FAST_FAIL_INVALID_JUMP_BUFFER 18
#define FAST_FAIL_MRDATA_MODIFIED 19 #define FAST_FAIL_MRDATA_MODIFIED 19
#define FAST_FAIL_CERTIFICATION_FAILURE 20 #define FAST_FAIL_CERTIFICATION_FAILURE 20
#define FAST_FAIL_INVALID_EXCEPTION_CHAIN 21 #define FAST_FAIL_INVALID_EXCEPTION_CHAIN 21
#define FAST_FAIL_CRYPTO_LIBRARY 22 #define FAST_FAIL_CRYPTO_LIBRARY 22
#define FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23 #define FAST_FAIL_INVALID_CALL_IN_DLL_CALLOUT 23
#define FAST_FAIL_INVALID_IMAGE_BASE 24 #define FAST_FAIL_INVALID_IMAGE_BASE 24
#define FAST_FAIL_DLOAD_PROTECTION_FAILURE 25 #define FAST_FAIL_DLOAD_PROTECTION_FAILURE 25
#define FAST_FAIL_UNSAFE_EXTENSION_CALL 26 #define FAST_FAIL_UNSAFE_EXTENSION_CALL 26
#define FAST_FAIL_INVALID_FAST_FAIL_CODE 0xFFFFFFFF #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_FAST_FAIL_CODE 0xFFFFFFFF
#if _MSC_VER >= 1610 #if _MSC_VER >= 1610
DECLSPEC_NORETURN DECLSPEC_NORETURN
VOID VOID
__fastfail( __fastfail(
_In_ unsigned int Code _In_ unsigned int Code
); );
#pragma intrinsic(__fastfail) #pragma intrinsic(__fastfail)
skipping to change at line 17581 skipping to change at line 18266
volatile char *vptr = (volatile char *)ptr; volatile char *vptr = (volatile char *)ptr;
#if defined(_M_AMD64) #if defined(_M_AMD64)
__stosb((PBYTE )((DWORD64)vptr), 0, cnt); __stosb((PBYTE )((DWORD64)vptr), 0, cnt);
#else #else
while (cnt) { while (cnt) {
#if !defined(_M_CEE) && defined(_M_ARM) #if !defined(_M_CEE) && (defined(_M_ARM) || defined(_M_ARM64))
__iso_volatile_store8(vptr, 0); __iso_volatile_store8(vptr, 0);
#else #else
*vptr = 0; *vptr = 0;
#endif #endif
vptr++; vptr++;
cnt--; cnt--;
} }
#endif // _M_AMD64 #endif // _M_AMD64
return ptr; return ptr;
} }
#endif #endif
// begin_wdm
#define SEF_DACL_AUTO_INHERIT 0x01 #define SEF_DACL_AUTO_INHERIT 0x01
#define SEF_SACL_AUTO_INHERIT 0x02 #define SEF_SACL_AUTO_INHERIT 0x02
#define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04 #define SEF_DEFAULT_DESCRIPTOR_FOR_OBJECT 0x04
#define SEF_AVOID_PRIVILEGE_CHECK 0x08 #define SEF_AVOID_PRIVILEGE_CHECK 0x08
#define SEF_AVOID_OWNER_CHECK 0x10 #define SEF_AVOID_OWNER_CHECK 0x10
#define SEF_DEFAULT_OWNER_FROM_PARENT 0x20 #define SEF_DEFAULT_OWNER_FROM_PARENT 0x20
#define SEF_DEFAULT_GROUP_FROM_PARENT 0x40 #define SEF_DEFAULT_GROUP_FROM_PARENT 0x40
#define SEF_MACL_NO_WRITE_UP 0x100 #define SEF_MACL_NO_WRITE_UP 0x100
#define SEF_MACL_NO_READ_UP 0x200 #define SEF_MACL_NO_READ_UP 0x200
#define SEF_MACL_NO_EXECUTE_UP 0x400 #define SEF_MACL_NO_EXECUTE_UP 0x400
#define SEF_AI_USE_EXTRA_PARAMS 0x800 #define SEF_AI_USE_EXTRA_PARAMS 0x800
#define SEF_AVOID_OWNER_RESTRICTION 0x1000 #define SEF_AVOID_OWNER_RESTRICTION 0x1000
#define SEF_MACL_VALID_FLAGS (SEF_MACL_NO_WRITE_UP | \ #define SEF_MACL_VALID_FLAGS (SEF_MACL_NO_WRITE_UP | \
SEF_MACL_NO_READ_UP | \ SEF_MACL_NO_READ_UP | \
SEF_MACL_NO_EXECUTE_UP) SEF_MACL_NO_EXECUTE_UP)
// end_wdm
typedef struct _MESSAGE_RESOURCE_ENTRY { typedef struct _MESSAGE_RESOURCE_ENTRY {
WORD Length; WORD Length;
WORD Flags; WORD Flags;
BYTE Text[ 1 ]; BYTE Text[ 1 ];
} MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY; } MESSAGE_RESOURCE_ENTRY, *PMESSAGE_RESOURCE_ENTRY;
#define MESSAGE_RESOURCE_UNICODE 0x0001 #define MESSAGE_RESOURCE_UNICODE 0x0001
typedef struct _MESSAGE_RESOURCE_BLOCK { typedef struct _MESSAGE_RESOURCE_BLOCK {
DWORD LowId; DWORD LowId;
skipping to change at line 17701 skipping to change at line 18390
#ifdef UNICODE #ifdef UNICODE
typedef OSVERSIONINFOEXW OSVERSIONINFOEX; typedef OSVERSIONINFOEXW OSVERSIONINFOEX;
typedef POSVERSIONINFOEXW POSVERSIONINFOEX; typedef POSVERSIONINFOEXW POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX; typedef LPOSVERSIONINFOEXW LPOSVERSIONINFOEX;
#else #else
typedef OSVERSIONINFOEXA OSVERSIONINFOEX; typedef OSVERSIONINFOEXA OSVERSIONINFOEX;
typedef POSVERSIONINFOEXA POSVERSIONINFOEX; typedef POSVERSIONINFOEXA POSVERSIONINFOEX;
typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX; typedef LPOSVERSIONINFOEXA LPOSVERSIONINFOEX;
#endif // UNICODE #endif // UNICODE
// begin_wudfpwdm
// //
// RtlVerifyVersionInfo() conditions // RtlVerifyVersionInfo() conditions
// //
#define VER_EQUAL 1 #define VER_EQUAL 1
#define VER_GREATER 2 #define VER_GREATER 2
#define VER_GREATER_EQUAL 3 #define VER_GREATER_EQUAL 3
#define VER_LESS 4 #define VER_LESS 4
#define VER_LESS_EQUAL 5 #define VER_LESS_EQUAL 5
#define VER_AND 6 #define VER_AND 6
skipping to change at line 17745 skipping to change at line 18436
#define VER_NT_SERVER 0x0000003 #define VER_NT_SERVER 0x0000003
// //
// dwPlatformId defines: // dwPlatformId defines:
// //
#define VER_PLATFORM_WIN32s 0 #define VER_PLATFORM_WIN32s 0
#define VER_PLATFORM_WIN32_WINDOWS 1 #define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2 #define VER_PLATFORM_WIN32_NT 2
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
// //
// //
// VerifyVersionInfo() macro to set the condition mask // VerifyVersionInfo() macro to set the condition mask
// //
// For documentation sakes here's the old version of the macro that got // For documentation sakes here's the old version of the macro that got
// changed to call an API // changed to call an API
// #define VER_SET_CONDITION(_m_,_t_,_c_) _m_=(_m_|(_c_<<(1<<_t_))) // #define VER_SET_CONDITION(_m_,_t_,_c_) _m_=(_m_|(_c_<<(1<<_t_)))
// //
skipping to change at line 17777 skipping to change at line 18468
VerSetConditionMask( VerSetConditionMask(
_In_ ULONGLONG ConditionMask, _In_ ULONGLONG ConditionMask,
_In_ DWORD TypeMask, _In_ DWORD TypeMask,
_In_ BYTE Condition _In_ BYTE Condition
); );
#endif #endif
#endif // !defined(_WINBASE_) && !defined(MIDL_PASS) #endif // !defined(_WINBASE_) && !defined(MIDL_PASS)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
// //
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
// begin_ntddk // begin_ntddk
#if (NTDDI_VERSION >= NTDDI_VISTA) #if (NTDDI_VERSION >= NTDDI_VISTA)
NTSYSAPI NTSYSAPI
BOOLEAN BOOLEAN
NTAPI NTAPI
RtlGetProductInfo( RtlGetProductInfo(
_In_ DWORD OSMajorVersion, _In_ DWORD OSMajorVersion,
_In_ DWORD OSMinorVersion, _In_ DWORD OSMinorVersion,
_In_ DWORD SpMajorVersion, _In_ DWORD SpMajorVersion,
_In_ DWORD SpMinorVersion, _In_ DWORD SpMinorVersion,
_Out_ PDWORD ReturnedProductType _Out_ PDWORD ReturnedProductType
); );
#endif #endif
// end_ntddk // end_ntddk
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#define RTL_UMS_VERSION (0x0100) #define RTL_UMS_VERSION (0x0100)
typedef enum _RTL_UMS_THREAD_INFO_CLASS { typedef enum _RTL_UMS_THREAD_INFO_CLASS {
UmsThreadInvalidInfoClass = 0, UmsThreadInvalidInfoClass = 0,
UmsThreadUserContext, UmsThreadUserContext,
UmsThreadPriority, // Reserved UmsThreadPriority, // Reserved
UmsThreadAffinity, // Reserved UmsThreadAffinity, // Reserved
UmsThreadTeb, UmsThreadTeb,
skipping to change at line 17887 skipping to change at line 18578
#define CTMF_INCLUDE_APPCONTAINER 0x00000001UL #define CTMF_INCLUDE_APPCONTAINER 0x00000001UL
#define CTMF_VALID_FLAGS (CTMF_INCLUDE_APPCONTAINER) #define CTMF_VALID_FLAGS (CTMF_INCLUDE_APPCONTAINER)
#endif // (NTDDI_VERSION >= NTDDI_WIN8) #endif // (NTDDI_VERSION >= NTDDI_WIN8)
#if (NTDDI_VERSION >= NTDDI_WIN8) #if (NTDDI_VERSION >= NTDDI_WIN8)
// end_ntosp // end_ntosp
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
// begin_ntosp // begin_ntosp
// //
// Crc32 and Crc64 routines that use standardized algorithms // Crc32 and Crc64 routines that use standardized algorithms
// //
NTSYSAPI NTSYSAPI
DWORD DWORD
NTAPI NTAPI
skipping to change at line 17916 skipping to change at line 18607
ULONGLONG ULONGLONG
NTAPI NTAPI
RtlCrc64( RtlCrc64(
_In_reads_bytes_(Size) const void *Buffer, _In_reads_bytes_(Size) const void *Buffer,
_In_ size_t Size, _In_ size_t Size,
_In_ ULONGLONG InitialCrc _In_ ULONGLONG InitialCrc
); );
// end_ntosp // end_ntosp
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
// begin_ntosp // begin_ntosp
#endif // (NTDDI_VERSION >= NTDDI_WIN8) #endif // (NTDDI_VERSION >= NTDDI_WIN8)
#if (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
//
// API to detect what type of OS Deployment this is. Current valid values
// are listed below
//
//
// Valid OsDeployment values that can be returned
//
typedef enum _OS_DEPLOYEMENT_STATE_VALUES {
OS_DEPLOYMENT_STANDARD = 1,
OS_DEPLOYMENT_COMPACT
} OS_DEPLOYEMENT_STATE_VALUES;
NTSYSAPI
OS_DEPLOYEMENT_STATE_VALUES
NTAPI
RtlOsDeploymentState(
_In_ DWORD Flags /* No flags currently defined, passed 0 */
);
#endif // NTDDI_VERSION >= NTDDI_WINTHRESHOLD
typedef struct _RTL_CRITICAL_SECTION_DEBUG { typedef struct _RTL_CRITICAL_SECTION_DEBUG {
WORD Type; WORD Type;
WORD CreatorBackTraceIndex; WORD CreatorBackTraceIndex;
struct _RTL_CRITICAL_SECTION *CriticalSection; struct _RTL_CRITICAL_SECTION *CriticalSection;
LIST_ENTRY ProcessLocksList; LIST_ENTRY ProcessLocksList;
DWORD EntryCount; DWORD EntryCount;
DWORD ContentionCount; DWORD ContentionCount;
DWORD Flags; DWORD Flags;
WORD CreatorBackTraceIndexHigh; WORD CreatorBackTraceIndexHigh;
WORD SpareWORD ; WORD SpareWORD ;
} RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG; } RTL_CRITICAL_SECTION_DEBUG, *PRTL_CRITICAL_SECTION_DEBUG, RTL_RESOURCE_DEBUG, *PRTL_RESOURCE_DEBUG;
#define RTL_CRITSECT_TYPE 0
#define RTL_RESOURCE_TYPE 1
// //
// These flags define the upper byte of the critical section SpinCount field // These flags define the upper byte of the critical section SpinCount field
// //
#define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000 #define RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO 0x01000000
#define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000 #define RTL_CRITICAL_SECTION_FLAG_DYNAMIC_SPIN 0x02000000
#define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000 #define RTL_CRITICAL_SECTION_FLAG_STATIC_INIT 0x04000000
#define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000 #define RTL_CRITICAL_SECTION_FLAG_RESOURCE_TYPE 0x08000000
#define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000 #define RTL_CRITICAL_SECTION_FLAG_FORCE_DEBUG_INFO 0x10000000
#define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000 #define RTL_CRITICAL_SECTION_ALL_FLAG_BITS 0xFF000000
#define RTL_CRITICAL_SECTION_FLAG_RESERVED (RTL_CRITICAL_SECTION_AL L_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_FLAG_RESERVED (RTL_CRITICAL_SECTION_AL L_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)))
skipping to change at line 18157 skipping to change at line 18869
ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION ACTCTX_COMPATIBILITY_ELEMENT_TYPE_MITIGATION
} ACTCTX_COMPATIBILITY_ELEMENT_TYPE; } ACTCTX_COMPATIBILITY_ELEMENT_TYPE;
typedef struct _COMPATIBILITY_CONTEXT_ELEMENT { typedef struct _COMPATIBILITY_CONTEXT_ELEMENT {
GUID Id; GUID Id;
ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type; ACTCTX_COMPATIBILITY_ELEMENT_TYPE Type;
} COMPATIBILITY_CONTEXT_ELEMENT, *PCOMPATIBILITY_CONTEXT_ELEMENT; } COMPATIBILITY_CONTEXT_ELEMENT, *PCOMPATIBILITY_CONTEXT_ELEMENT;
typedef const struct _COMPATIBILITY_CONTEXT_ELEMENT *PCCOMPATIBILITY_CONTEXT_ELE MENT; typedef const struct _COMPATIBILITY_CONTEXT_ELEMENT *PCCOMPATIBILITY_CONTEXT_ELE MENT;
#ifdef _MSC_EXTENSIONS
#if _MSC_VER >= 1200
#pragma warning(push) #pragma warning(push)
#pragma warning(disable:4200) #pragma warning(disable:4200) // zero length array
#endif
typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION { typedef struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION {
DWORD ElementCount; DWORD ElementCount;
COMPATIBILITY_CONTEXT_ELEMENT Elements[]; COMPATIBILITY_CONTEXT_ELEMENT Elements[];
} ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION, * PACTIVATION_CONTEXT_COMPATIBIL ITY_INFORMATION; } ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION, * PACTIVATION_CONTEXT_COMPATIBIL ITY_INFORMATION;
#if _MSC_VER >= 1200
#pragma warning(pop) #pragma warning(pop)
#endif
typedef const struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION * PCACTIVATIO N_CONTEXT_COMPATIBILITY_INFORMATION; typedef const struct _ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION * PCACTIVATIO N_CONTEXT_COMPATIBILITY_INFORMATION;
#define MAX_SUPPORTED_OS_NUM (4) #endif
#define INVALID_OS_COUNT (0xffff)
typedef struct _SUPPORTED_OS_INFO { typedef struct _SUPPORTED_OS_INFO {
WORD OsCount; WORD MajorVersion;
WORD MitigationExist; WORD MinorVersion;
WORD OsList[MAX_SUPPORTED_OS_NUM];
} SUPPORTED_OS_INFO, *PSUPPORTED_OS_INFO; } SUPPORTED_OS_INFO, *PSUPPORTED_OS_INFO;
typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION { typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
DWORD dwFlags; DWORD dwFlags;
DWORD ulFormatVersion; DWORD ulFormatVersion;
DWORD ulAssemblyCount; DWORD ulAssemblyCount;
DWORD ulRootManifestPathType; DWORD ulRootManifestPathType;
DWORD ulRootManifestPathChars; DWORD ulRootManifestPathChars;
DWORD ulRootConfigurationPathType; DWORD ulRootConfigurationPathType;
DWORD ulRootConfigurationPathChars; DWORD ulRootConfigurationPathChars;
skipping to change at line 18219 skipping to change at line 18935
DWORD ContextSwitchCount; DWORD ContextSwitchCount;
DWORD64 WaitReasonBitMap; DWORD64 WaitReasonBitMap;
DWORD64 CycleTime; DWORD64 CycleTime;
DWORD RetryCount; DWORD RetryCount;
DWORD Reserved; DWORD Reserved;
HARDWARE_COUNTER_DATA HwCounters[MAX_HW_COUNTERS]; HARDWARE_COUNTER_DATA HwCounters[MAX_HW_COUNTERS];
} PERFORMANCE_DATA, *PPERFORMANCE_DATA; } PERFORMANCE_DATA, *PPERFORMANCE_DATA;
#define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x00000001 #define READ_THREAD_PROFILING_FLAG_DISPATCHING 0x00000001
#define READ_THREAD_PROFILING_FLAG_HARDWARE_COUNTERS 0x00000002 #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\\S
oftware\\Microsoft\\Windows NT\\CurrentVersion"
#define UNIFIEDBUILDREVISION_VALUE L"UBR"
#define UNIFIEDBUILDREVISION_MIN 0x00000000
#define DEVICEFAMILYDEVICEFORM_KEY L"\\Registry\\Machine\\S
oftware\\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_MAX 0x0000000C
#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_MAX 0x0000001D
VOID
NTAPI
RtlGetDeviceFamilyInfoEnum(
_Out_opt_ ULONGLONG *pullUAPInfo,
_Out_opt_ DWORD *pulDeviceFamily,
_Out_opt_ DWORD *pulDeviceForm
);
DWORD
NTAPI
RtlConvertDeviceFamilyInfoToString(
_Inout_ PDWORD pulDeviceFamilyBufferSize,
_Inout_ PDWORD pulDeviceFormBufferSize,
_Out_writes_bytes_(*pulDeviceFamilyBufferSize) PWSTR DeviceFamily,
_Out_writes_bytes_(*pulDeviceFormBufferSize) PWSTR DeviceForm
);
DWORD
NTAPI
RtlSwitchedVVI(
_In_ PRTL_OSVERSIONINFOEXW VersionInfo,
_In_ DWORD TypeMask,
_In_ ULONGLONG ConditionMask
);
#endif // (NTDDI_VERSION >= NTDDI_WINTHRESHOLD)
#endif // WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#pragma endregion
#define DLL_PROCESS_ATTACH 1 #define DLL_PROCESS_ATTACH 1
#define DLL_THREAD_ATTACH 2 #define DLL_THREAD_ATTACH 2
#define DLL_THREAD_DETACH 3 #define DLL_THREAD_DETACH 3
#define DLL_PROCESS_DETACH 0 #define DLL_PROCESS_DETACH 0
// //
// Defines for the READ flags for Eventlogging // Defines for the READ flags for Eventlogging
// //
#define EVENTLOG_SEQUENTIAL_READ 0x0001 #define EVENTLOG_SEQUENTIAL_READ 0x0001
#define EVENTLOG_SEEK_READ 0x0002 #define EVENTLOG_SEEK_READ 0x0002
skipping to change at line 18335 skipping to change at line 19144
#if _MSC_VER >= 1200 #if _MSC_VER >= 1200
#pragma warning(pop) #pragma warning(pop)
#else #else
#pragma warning(default : 4200) /* nonstandard extension used : zero-sized array in struct/union */ #pragma warning(default : 4200) /* nonstandard extension used : zero-sized array in struct/union */
#endif #endif
//SS: end of changes to support clustering //SS: end of changes to support clustering
// //
// begin_wdm // begin_wdm
// begin_access
// //
// Registry Specific Access Rights. // Registry Specific Access Rights.
// //
#define KEY_QUERY_VALUE (0x0001) #define KEY_QUERY_VALUE (0x0001)
#define KEY_SET_VALUE (0x0002) #define KEY_SET_VALUE (0x0002)
#define KEY_CREATE_SUB_KEY (0x0004) #define KEY_CREATE_SUB_KEY (0x0004)
#define KEY_ENUMERATE_SUB_KEYS (0x0008) #define KEY_ENUMERATE_SUB_KEYS (0x0008)
#define KEY_NOTIFY (0x0010) #define KEY_NOTIFY (0x0010)
#define KEY_CREATE_LINK (0x0020) #define KEY_CREATE_LINK (0x0020)
skipping to change at line 18376 skipping to change at line 19187
#define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\ #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
KEY_QUERY_VALUE |\ KEY_QUERY_VALUE |\
KEY_SET_VALUE |\ KEY_SET_VALUE |\
KEY_CREATE_SUB_KEY |\ KEY_CREATE_SUB_KEY |\
KEY_ENUMERATE_SUB_KEYS |\ KEY_ENUMERATE_SUB_KEYS |\
KEY_NOTIFY |\ KEY_NOTIFY |\
KEY_CREATE_LINK) \ KEY_CREATE_LINK) \
& \ & \
(~SYNCHRONIZE)) (~SYNCHRONIZE))
// end_access
// //
// Open/Create Options // Open/Create Options
// //
#define REG_OPTION_RESERVED (0x00000000L) // Parameter is reserved #define REG_OPTION_RESERVED (0x00000000L) // Parameter is reserved
#define REG_OPTION_NON_VOLATILE (0x00000000L) // Key is preserved #define REG_OPTION_NON_VOLATILE (0x00000000L) // Key is preserved
// when system is rebooted // when system is rebooted
#define REG_OPTION_VOLATILE (0x00000001L) // Key is not preserved #define REG_OPTION_VOLATILE (0x00000001L) // Key is not preserved
skipping to change at line 18441 skipping to change at line 19254
#define REG_FORCE_RESTORE (0x00000008L) // Force the restore pro cess even when we have open handles on subkeys #define REG_FORCE_RESTORE (0x00000008L) // Force the restore pro cess even when we have open handles on subkeys
#define REG_APP_HIVE (0x00000010L) // Loads the hive visibl e to the calling process #define REG_APP_HIVE (0x00000010L) // Loads the hive visibl e to the calling process
#define REG_PROCESS_PRIVATE (0x00000020L) // Hive cannot be mounte d by any other process while in use #define REG_PROCESS_PRIVATE (0x00000020L) // Hive cannot be mounte d by any other process while in use
#define REG_START_JOURNAL (0x00000040L) // Starts Hive Journal #define REG_START_JOURNAL (0x00000040L) // Starts Hive Journal
#define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) // Grow hive file in exa ct 4k increments #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L) // Grow hive file in exa ct 4k increments
#define REG_HIVE_NO_RM (0x00000100L) // No RM is started for this hive (no transactions) #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_HIVE_SINGLE_LOG (0x00000200L) // Legacy single logging is used for this hive
#define REG_BOOT_HIVE (0x00000400L) // This hive might be us ed by the OS loader #define REG_BOOT_HIVE (0x00000400L) // This hive might be us ed by the OS loader
#define REG_LOAD_HIVE_OPEN_HANDLE (0x00000800L) // Load the hive and ret urn a handle to its root kcb #define REG_LOAD_HIVE_OPEN_HANDLE (0x00000800L) // Load the hive and ret urn a handle to its root kcb
#define REG_FLUSH_HIVE_FILE_GROWTH (0x00001000L) // Flush changes to prim ary hive file size as part of all flushes #define REG_FLUSH_HIVE_FILE_GROWTH (0x00001000L) // Flush changes to prim ary hive file size as part of all flushes
#define REG_OPEN_READ_ONLY (0x00002000L) // Open a hive's files i
n read-only mode
#define REG_APP_HIVE_OPEN_READ_ONLY (REG_OPEN_READ_ONLY) // Open an app hi
ve's files in read-only mode (if the hive was not previously loaded)
// //
// Unload Flags // Unload Flags
// //
#define REG_FORCE_UNLOAD 1 #define REG_FORCE_UNLOAD 1
// //
// Notify filter values // Notify filter values
// //
skipping to change at line 18507 skipping to change at line 19322
#define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \ #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
SERVICE_FILE_SYSTEM_DRIVER | \ SERVICE_FILE_SYSTEM_DRIVER | \
SERVICE_RECOGNIZER_DRIVER) SERVICE_RECOGNIZER_DRIVER)
#define SERVICE_WIN32_OWN_PROCESS 0x00000010 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
#define SERVICE_WIN32_SHARE_PROCESS 0x00000020 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
#define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \ #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
SERVICE_WIN32_SHARE_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_INTERACTIVE_PROCESS 0x00000100
#define SERVICE_TYPE_ALL (SERVICE_WIN32 | \ #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
SERVICE_ADAPTER | \ SERVICE_ADAPTER | \
SERVICE_DRIVER | \ SERVICE_DRIVER | \
SERVICE_INTERACTIVE_PROCESS) SERVICE_INTERACTIVE_PROCESS | \
SERVICE_USER_SERVICE | \
SERVICE_USERSERVICE_INSTANCE)
// //
// Start Type // Start Type
// //
#define SERVICE_BOOT_START 0x00000000 #define SERVICE_BOOT_START 0x00000000
#define SERVICE_SYSTEM_START 0x00000001 #define SERVICE_SYSTEM_START 0x00000001
#define SERVICE_AUTO_START 0x00000002 #define SERVICE_AUTO_START 0x00000002
#define SERVICE_DEMAND_START 0x00000003 #define SERVICE_DEMAND_START 0x00000003
#define SERVICE_DISABLED 0x00000004 #define SERVICE_DISABLED 0x00000004
skipping to change at line 18880 skipping to change at line 19705
#endif #endif
#ifndef _NTTMAPI_ #ifndef _NTTMAPI_
#define _NTTMAPI_ #define _NTTMAPI_
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#include <ktmtypes.h> #include <ktmtypes.h>
#if _MSC_VER >= 1200
#pragma warning(push)
#pragma warning(disable:4820) // padding added after data member
#endif
// //
// Types for Nt level TM calls // Types for Nt level TM calls
// //
// begin_access
// //
// KTM Tm object rights // KTM Tm object rights
// //
#define TRANSACTIONMANAGER_QUERY_INFORMATION ( 0x0001 ) #define TRANSACTIONMANAGER_QUERY_INFORMATION ( 0x0001 )
#define TRANSACTIONMANAGER_SET_INFORMATION ( 0x0002 ) #define TRANSACTIONMANAGER_SET_INFORMATION ( 0x0002 )
#define TRANSACTIONMANAGER_RECOVER ( 0x0004 ) #define TRANSACTIONMANAGER_RECOVER ( 0x0004 )
#define TRANSACTIONMANAGER_RENAME ( 0x0008 ) #define TRANSACTIONMANAGER_RENAME ( 0x0008 )
#define TRANSACTIONMANAGER_CREATE_RM ( 0x0010 ) #define TRANSACTIONMANAGER_CREATE_RM ( 0x0010 )
// The following right is intended for DTC's use only; it will be // The following right is intended for DTC's use only; it will be
skipping to change at line 19037 skipping to change at line 19869
#define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\ #define ENLISTMENT_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
ENLISTMENT_RECOVER |\ ENLISTMENT_RECOVER |\
ENLISTMENT_SUBORDINATE_RIGHTS |\ ENLISTMENT_SUBORDINATE_RIGHTS |\
ENLISTMENT_SUPERIOR_RIGHTS) ENLISTMENT_SUPERIOR_RIGHTS)
#define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\ #define ENLISTMENT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED |\
ENLISTMENT_GENERIC_READ |\ ENLISTMENT_GENERIC_READ |\
ENLISTMENT_GENERIC_WRITE |\ ENLISTMENT_GENERIC_WRITE |\
ENLISTMENT_GENERIC_EXECUTE) ENLISTMENT_GENERIC_EXECUTE)
// end_access
// //
// Transaction outcomes. // Transaction outcomes.
// //
// TODO: warning, must match values in KTRANSACTION_OUTCOME duplicated def // TODO: warning, must match values in KTRANSACTION_OUTCOME duplicated def
// in tm.h. // in tm.h.
// //
typedef enum _TRANSACTION_OUTCOME { typedef enum _TRANSACTION_OUTCOME {
TransactionOutcomeUndetermined = 1, TransactionOutcomeUndetermined = 1,
TransactionOutcomeCommitted, TransactionOutcomeCommitted,
skipping to change at line 19243 skipping to change at line 20077
// //
// ObjectIdCount GUIDs from the namespace specified. // ObjectIdCount GUIDs from the namespace specified.
// //
GUID ObjectIds[1]; GUID ObjectIds[1];
} KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR; } KTMOBJECT_CURSOR, *PKTMOBJECT_CURSOR;
// begin_wdm // begin_wdm
#if _MSC_VER >= 1200
#pragma warning(pop)
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // _NTTMAPI_ #endif // _NTTMAPI_
typedef DWORD TP_VERSION, *PTP_VERSION; typedef DWORD TP_VERSION, *PTP_VERSION;
typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE, *PTP_CALLBACK_INSTANC E; typedef struct _TP_CALLBACK_INSTANCE TP_CALLBACK_INSTANCE, *PTP_CALLBACK_INSTANC E;
typedef VOID (NTAPI *PTP_SIMPLE_CALLBACK)( typedef VOID (NTAPI *PTP_SIMPLE_CALLBACK)(
skipping to change at line 19575 skipping to change at line 20413
GetFiberData ( GetFiberData (
VOID VOID
) )
{ {
return *(PVOID *)GetCurrentFiber(); return *(PVOID *)GetCurrentFiber();
} }
#endif // _M_ARM && !defined(__midl) && !defined(_M_CEE_PURE) #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) #if defined(_M_IX86) && !defined(MIDL_PASS)
#define PcTeb 0x18 #define PcTeb 0x18
#if !defined(_M_CEE_PURE) #if !defined(_M_CEE_PURE)
__inline struct _TEB * NtCurrentTeb( void ) { return (struct _TEB *) (ULONG_PTR) __readfsdword (PcTeb); } __inline struct _TEB * NtCurrentTeb( void ) { return (struct _TEB *) (ULONG_PTR) __readfsdword (PcTeb); }
#endif // !defined(_M_CEE_PURE) #endif // !defined(_M_CEE_PURE)
skipping to change at line 19608 skipping to change at line 20478
#define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO (11) #define ACTIVATION_CONTEXT_SECTION_COMPATIBILITY_INFO (11)
#endif // winnt_only #endif // winnt_only
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#if _MSC_VER >= 1200 #if _MSC_VER >= 1200
#pragma warning(pop) #pragma warning(pop)
#else #else
#pragma warning(default:4201) #pragma warning(default:4200) // nonstandard extension used : zero-sized array i
#pragma warning(default:4214) n struct/union
#pragma warning(default:4201) // named type definition in parentheses
#pragma warning(default:4214) // bit field types other than int
#endif #endif
#endif /* _WINNT_ */ #endif /* _WINNT_ */
 End of changes. 337 change blocks. 
2276 lines changed or deleted 3223 lines changed or added


 winternl.h (6.3.9600.17415-Windows 8.1)   winternl.h (10.0.10586.306-Windows 10 1511 10586.494) 
skipping to change at line 34 skipping to change at line 34
* functionality. * * functionality. *
* * * *
* Copyright (c) Microsoft Corp. All rights reserved. * * Copyright (c) Microsoft Corp. All rights reserved. *
* * * *
************************************************************************/ ************************************************************************/
#ifndef _WINTERNL_ #ifndef _WINTERNL_
#define _WINTERNL_ #define _WINTERNL_
#include <winapifamily.h> #include <winapifamily.h>
#pragma region Desktop Family #pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if (_WIN32_WINNT >= 0x0500) #if (_WIN32_WINNT >= 0x0500)
#include <windef.h> #include <windef.h>
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
// //
skipping to change at line 686 skipping to change at line 686
POEM_STRING OemString POEM_STRING OemString
); );
VOID VOID
NTAPI NTAPI
RtlInitString ( RtlInitString (
PSTRING DestinationString, PSTRING DestinationString,
PCSZ SourceString PCSZ SourceString
); );
NTSTATUS
NTAPI
RtlInitStringEx (
PSTRING DestinationString,
PCSZ SourceString
);
VOID VOID
NTAPI NTAPI
RtlInitAnsiString ( RtlInitAnsiString (
PANSI_STRING DestinationString, PANSI_STRING DestinationString,
PCSZ SourceString PCSZ SourceString
); );
NTSTATUS
NTAPI
RtlInitAnsiStringEx (
PANSI_STRING DestinationString,
PCSZ SourceString
);
VOID VOID
NTAPI NTAPI
RtlInitUnicodeString ( RtlInitUnicodeString (
PUNICODE_STRING DestinationString, PUNICODE_STRING DestinationString,
PCWSTR SourceString PCWSTR SourceString
); );
NTSTATUS NTSTATUS
NTAPI NTAPI
RtlAnsiStringToUnicodeString ( RtlAnsiStringToUnicodeString (
skipping to change at line 855 skipping to change at line 869
(p)->ObjectName = n; \ (p)->ObjectName = n; \
(p)->SecurityDescriptor = s; \ (p)->SecurityDescriptor = s; \
(p)->SecurityQualityOfService = NULL; \ (p)->SecurityQualityOfService = NULL; \
} }
#endif #endif
// //
// Valid values for the Attributes field // Valid values for the Attributes field
// //
#define OBJ_INHERIT 0x00000002L #define OBJ_INHERIT 0x00000002L
#define OBJ_PERMANENT 0x00000010L #define OBJ_PERMANENT 0x00000010L
#define OBJ_EXCLUSIVE 0x00000020L #define OBJ_EXCLUSIVE 0x00000020L
#define OBJ_CASE_INSENSITIVE 0x00000040L #define OBJ_CASE_INSENSITIVE 0x00000040L
#define OBJ_OPENIF 0x00000080L #define OBJ_OPENIF 0x00000080L
#define OBJ_OPENLINK 0x00000100L #define OBJ_OPENLINK 0x00000100L
#define OBJ_KERNEL_HANDLE 0x00000200L #define OBJ_KERNEL_HANDLE 0x00000200L
#define OBJ_FORCE_ACCESS_CHECK 0x00000400L #define OBJ_FORCE_ACCESS_CHECK 0x00000400L
#define OBJ_VALID_ATTRIBUTES 0x000007F2L #define OBJ_IGNORE_IMPERSONATED_DEVICEMAP 0x00000800L
#define OBJ_DONT_REPARSE 0x00001000L
#define OBJ_VALID_ATTRIBUTES 0x00001FF2L
// //
// Define the create disposition values // Define the create disposition values
// //
#define FILE_SUPERSEDE 0x00000000 #define FILE_SUPERSEDE 0x00000000
#define FILE_OPEN 0x00000001 #define FILE_OPEN 0x00000001
#define FILE_CREATE 0x00000002 #define FILE_CREATE 0x00000002
#define FILE_OPEN_IF 0x00000003 #define FILE_OPEN_IF 0x00000003
#define FILE_OVERWRITE 0x00000004 #define FILE_OVERWRITE 0x00000004
skipping to change at line 932 skipping to change at line 948
#define FILE_OVERWRITTEN 0x00000003 #define FILE_OVERWRITTEN 0x00000003
#define FILE_EXISTS 0x00000004 #define FILE_EXISTS 0x00000004
#define FILE_DOES_NOT_EXIST 0x00000005 #define FILE_DOES_NOT_EXIST 0x00000005
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
#endif // (_WIN32_WINNT >= 0x0500) #endif // (_WIN32_WINNT >= 0x0500)
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */ #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SY STEM) */
#pragma endregion #pragma endregion
#endif // _WINTERNL_ #endif // _WINTERNL_
 End of changes. 5 change blocks. 
12 lines changed or deleted 28 lines changed or added

This html diff was produced by rfcdiff 1.41.