[PSDK] Add definitions required for newer storage class drivers (cdrom)

CORE-17129
This commit is contained in:
Victor Perevertkin 2020-09-24 17:31:15 +03:00
parent d7d716a64c
commit 99489553fc
No known key found for this signature in database
GPG key ID: C750B7222E9C7830
11 changed files with 634 additions and 119 deletions

View file

@ -57,6 +57,7 @@ DEFINE_DEVPROPKEY(DEVPKEY_Device_InstallState, 0xa45c254e,0xdf1c,0x4efd,0x80,0x2
DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37); DEFINE_DEVPROPKEY(DEVPKEY_Device_LocationPaths, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 37);
DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38); DEFINE_DEVPROPKEY(DEVPKEY_Device_BaseContainerId, 0xa45c254e,0xdf1c,0x4efd,0x80,0x20,0x67,0xd1,0x46,0xa8,0x50,0xe0, 38);
DEFINE_DEVPROPKEY(DEVPKEY_Device_InLocalMachineContainer, 0x8c7ed206, 0x3f8a, 0x4827, 0xb3, 0xab, 0xae, 0x9e, 0x1f, 0xae, 0xfc, 0x6c, 4); DEFINE_DEVPROPKEY(DEVPKEY_Device_InLocalMachineContainer, 0x8c7ed206, 0x3f8a, 0x4827, 0xb3, 0xab, 0xae, 0x9e, 0x1f, 0xae, 0xfc, 0x6c, 4);
DEFINE_DEVPROPKEY(DEVPKEY_Device_SessionId, 0x83da6326,0x97a6,0x4088,0x94,0x53,0xa1,0x92,0x3f,0x57,0x3b,0x29, 6);
DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2); DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_FriendlyName, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 2);
DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3); DEFINE_DEVPROPKEY(DEVPKEY_DeviceInterface_Enabled, 0x026e516e,0x8b14,0x414b,0x83,0xcd,0x85,0x6d,0x6f,0xef,0x48,0x22, 3);

View file

@ -124,7 +124,7 @@
#define __drv_ret(annotes) #define __drv_ret(annotes)
#define __drv_sameIRQL #define __drv_sameIRQL
#define __drv_savesIRQL #define __drv_savesIRQL
#define __drv_savesIRQLGlobal #define __drv_savesIRQLGlobal(kind,param)
#define __drv_strictType(typename,mode) #define __drv_strictType(typename,mode)
#define __drv_strictTypeMatch(mode) #define __drv_strictTypeMatch(mode)
#define __drv_unit(p) #define __drv_unit(p)
@ -306,7 +306,7 @@ __ANNOTATION(SAL_callbackType(__In_impl_ __AuToQuOtE char *);)
#define __drv_ret(annotes) #define __drv_ret(annotes)
#define __drv_sameIRQL #define __drv_sameIRQL
#define __drv_savesIRQL #define __drv_savesIRQL
#define __drv_savesIRQLGlobal #define __drv_savesIRQLGlobal(kind,param)
#define __drv_setsIRQL(irql) #define __drv_setsIRQL(irql)
#define __drv_strictType(typename,mode) #define __drv_strictType(typename,mode)
#define __drv_strictTypeMatch(mode) #define __drv_strictTypeMatch(mode)

View file

@ -95,6 +95,41 @@ extern "C" {
CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
// #define IOCTL_CDROM_GET_LAST_SESSION CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
// #define IOCTL_CDROM_GET_CONFIGURATION CTL_CODE(IOCTL_CDROM_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_EXCLUSIVE_ACCESS CTL_CODE(IOCTL_CDROM_BASE, 0x0017, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_CDROM_SET_SPEED CTL_CODE(IOCTL_CDROM_BASE, 0x0018, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_GET_INQUIRY_DATA CTL_CODE(IOCTL_CDROM_BASE, 0x0019, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_ENABLE_STREAMING CTL_CODE(IOCTL_CDROM_BASE, 0x001A, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_SEND_OPC_INFORMATION CTL_CODE(IOCTL_CDROM_BASE, 0x001B, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_CDROM_GET_PERFORMANCE CTL_CODE(IOCTL_CDROM_BASE, 0x001C, METHOD_BUFFERED, FILE_READ_ACCESS)
// end_winioctl
//
// The following device control codes are common for all class drivers. The
// functions codes defined here must match all of the other class drivers.
//
// Warning: these codes will be replaced in the future with the IOCTL_STORAGE
// codes included below
//
// #define IOCTL_CDROM_CHECK_VERIFY CTL_CODE(IOCTL_CDROM_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_MEDIA_REMOVAL CTL_CODE(IOCTL_CDROM_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS)
// #define IOCTL_CDROM_EJECT_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_LOAD_MEDIA CTL_CODE(IOCTL_CDROM_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_RESERVE CTL_CODE(IOCTL_CDROM_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_CDROM_RELEASE CTL_CODE(IOCTL_CDROM_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS)
// #define IOCTL_CDROM_FIND_NEW_DEVICES CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
#define MINIMUM_CDROM_INQUIRY_SIZE 36 // RTL_SIZEOF_THROUGH_FIELD(INQUIRYDATA, ProductRevisionLevel)
#define MAXIMUM_CDROM_INQUIRY_SIZE 260 // MAXUCHAR + RTL_SIZEOF_THROUGH_FIELD(INQUIRYDATA, AdditionalLength)
#define MAXIMUM_NUMBER_TRACKS 100 #define MAXIMUM_NUMBER_TRACKS 100
#define MAXIMUM_CDROM_SIZE 804 #define MAXIMUM_CDROM_SIZE 804
#define MINIMUM_CDROM_READ_TOC_EX_SIZE 2 #define MINIMUM_CDROM_READ_TOC_EX_SIZE 2
@ -334,8 +369,8 @@ typedef union _SUB_Q_CHANNEL_DATA {
#define TWO_FOUR_CHANNEL_AUDIO 0x8 #define TWO_FOUR_CHANNEL_AUDIO 0x8
typedef struct _CDROM_AUDIO_CONTROL { typedef struct _CDROM_AUDIO_CONTROL {
UCHAR LbaFormat; UCHAR LbaFormat;
USHORT LogicalBlocksPerSecond; USHORT LogicalBlocksPerSecond;
} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL; } CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
typedef struct _VOLUME_CONTROL { typedef struct _VOLUME_CONTROL {
@ -343,17 +378,209 @@ typedef struct _VOLUME_CONTROL {
} VOLUME_CONTROL, *PVOLUME_CONTROL; } VOLUME_CONTROL, *PVOLUME_CONTROL;
typedef enum _TRACK_MODE_TYPE { typedef enum _TRACK_MODE_TYPE {
YellowMode2, YellowMode2,
XAForm2, XAForm2,
CDDA CDDA,
RawWithC2AndSubCode,
RawWithC2,
RawWithSubCode
} TRACK_MODE_TYPE, *PTRACK_MODE_TYPE; } TRACK_MODE_TYPE, *PTRACK_MODE_TYPE;
#define CD_RAW_READ_C2_SIZE ( 296 )
#define CD_RAW_READ_SUBCODE_SIZE ( 96)
#define CD_RAW_SECTOR_WITH_C2_SIZE (2352+296 )
#define CD_RAW_SECTOR_WITH_SUBCODE_SIZE (2352 +96)
#define CD_RAW_SECTOR_WITH_C2_AND_SUBCODE_SIZE (2352+296+96)
typedef struct __RAW_READ_INFO { typedef struct __RAW_READ_INFO {
LARGE_INTEGER DiskOffset; LARGE_INTEGER DiskOffset;
ULONG SectorCount; ULONG SectorCount;
TRACK_MODE_TYPE TrackMode; TRACK_MODE_TYPE TrackMode;
} RAW_READ_INFO, *PRAW_READ_INFO; } RAW_READ_INFO, *PRAW_READ_INFO;
// for IOCTL_CDROM_EXCLUSIVE_ACCESS
#define CDROM_EXCLUSIVE_CALLER_LENGTH 64
#define CDROM_LOCK_IGNORE_VOLUME (1 << 0)
#define CDROM_NO_MEDIA_NOTIFICATIONS (1 << 1)
#define CDROM_NOT_IN_EXCLUSIVE_MODE 0
#define CDROM_IN_EXCLUSIVE_MODE 1
typedef enum _EXCLUSIVE_ACCESS_REQUEST_TYPE
{
ExclusiveAccessQueryState,
ExclusiveAccessLockDevice,
ExclusiveAccessUnlockDevice
} EXCLUSIVE_ACCESS_REQUEST_TYPE, *PEXCLUSIVE_ACCESS_REQUEST_TYPE;
typedef struct _CDROM_EXCLUSIVE_ACCESS
{
EXCLUSIVE_ACCESS_REQUEST_TYPE RequestType;
ULONG Flags;
} CDROM_EXCLUSIVE_ACCESS, *PCDROM_EXCLUSIVE_ACCESS;
typedef struct _CDROM_EXCLUSIVE_LOCK
{
CDROM_EXCLUSIVE_ACCESS Access;
UCHAR CallerName[CDROM_EXCLUSIVE_CALLER_LENGTH];
} CDROM_EXCLUSIVE_LOCK, *PCDROM_EXCLUSIVE_LOCK;
typedef struct _CDROM_EXCLUSIVE_LOCK_STATE
{
BOOLEAN LockState;
UCHAR CallerName[CDROM_EXCLUSIVE_CALLER_LENGTH];
} CDROM_EXCLUSIVE_LOCK_STATE, *PCDROM_EXCLUSIVE_LOCK_STATE;
// for IOCTL_CDROM_SET_SPEED
typedef enum _CDROM_SPEED_REQUEST
{
CdromSetSpeed,
CdromSetStreaming
} CDROM_SPEED_REQUEST, *PCDROM_SPEED_REQUEST;
typedef enum _WRITE_ROTATION
{
CdromDefaultRotation,
CdromCAVRotation
} WRITE_ROTATION, *PWRITE_ROTATION;
typedef struct _CDROM_SET_SPEED
{
CDROM_SPEED_REQUEST RequestType;
USHORT ReadSpeed;
USHORT WriteSpeed;
WRITE_ROTATION RotationControl;
} CDROM_SET_SPEED, *PCDROM_SET_SPEED;
typedef struct _CDROM_SET_STREAMING
{
CDROM_SPEED_REQUEST RequestType;
ULONG ReadSize;
ULONG ReadTime;
ULONG WriteSize;
ULONG WriteTime;
ULONG StartLba;
ULONG EndLba;
WRITE_ROTATION RotationControl;
BOOLEAN RestoreDefaults;
BOOLEAN SetExact;
BOOLEAN RandomAccess;
BOOLEAN Persistent;
} CDROM_SET_STREAMING, *PCDROM_SET_STREAMING;
// for IOCTL_CDROM_ENABLE_STREAMING
typedef enum _STREAMING_CONTROL_REQUEST_TYPE
{
CdromStreamingDisable = 1,
CdromStreamingEnableForReadOnly = 2,
CdromStreamingEnableForWriteOnly = 3,
CdromStreamingEnableForReadWrite = 4
} STREAMING_CONTROL_REQUEST_TYPE, *PSTREAMING_CONTROL_REQUEST_TYPE;
typedef struct _CDROM_STREAMING_CONTROL {
STREAMING_CONTROL_REQUEST_TYPE RequestType;
} CDROM_STREAMING_CONTROL, *PCDROM_STREAMING_CONTROL;
// for IOCTL_CDROM_SEND_OPC_INFORMATION
typedef enum _CDROM_OPC_INFO_TYPE
{
SimpleOpcInfo = 1
} CDROM_OPC_INFO_TYPE, *PCDROM_OPC_INFO_TYPE;
typedef struct _CDROM_SIMPLE_OPC_INFO
{
CDROM_OPC_INFO_TYPE RequestType;
BOOLEAN Exclude0;
BOOLEAN Exclude1;
} CDROM_SIMPLE_OPC_INFO, *PCDROM_SIMPLE_OPC_INFO;
// for IOCTL_CDROM_GET_PERFORMANCE
typedef enum _CDROM_PERFORMANCE_REQUEST_TYPE
{
CdromPerformanceRequest = 1,
CdromWriteSpeedRequest = 2
} CDROM_PERFORMANCE_REQUEST_TYPE, *PCDROM_PERFORMANCE_REQUEST_TYPE;
typedef enum _CDROM_PERFORMANCE_TYPE
{
CdromReadPerformance = 1,
CdromWritePerformance = 2
} CDROM_PERFORMANCE_TYPE, *PCDROM_PERFORMANCE_TYPE;
typedef enum _CDROM_PERFORMANCE_EXCEPTION_TYPE
{
CdromNominalPerformance = 1,
CdromEntirePerformanceList = 2,
CdromPerformanceExceptionsOnly = 3
} CDROM_PERFORMANCE_EXCEPTION_TYPE, *PCDROM_PERFORMANCE_EXCEPTION_TYPE;
typedef enum _CDROM_PERFORMANCE_TOLERANCE_TYPE
{
Cdrom10Nominal20Exceptions = 1
} CDROM_PERFORMANCE_TOLERANCE_TYPE, *PCDROM_PERFORMANCE_TOLERANCE_TYPE;
typedef struct _CDROM_PERFORMANCE_REQUEST
{
CDROM_PERFORMANCE_REQUEST_TYPE RequestType;
CDROM_PERFORMANCE_TYPE PerformanceType;
CDROM_PERFORMANCE_EXCEPTION_TYPE Exceptions;
CDROM_PERFORMANCE_TOLERANCE_TYPE Tolerance;
ULONG StaringLba;
} CDROM_PERFORMANCE_REQUEST, *PCDROM_PERFORMANCE_REQUEST;
typedef struct _CDROM_WRITE_SPEED_REQUEST
{
CDROM_PERFORMANCE_REQUEST_TYPE RequestType;
} CDROM_WRITE_SPEED_REQUEST, *PCDROM_WRITE_SPEED_REQUEST;
typedef struct _CDROM_PERFORMANCE_HEADER
{
UCHAR DataLength[4];
UCHAR Except:1;
UCHAR Write:1;
UCHAR Reserved1:6;
UCHAR Reserved2[3];
UCHAR Data[0];
} CDROM_PERFORMANCE_HEADER, *PCDROM_PERFORMANCE_HEADER;
typedef struct _CDROM_NOMINAL_PERFORMANCE_DESCRIPTOR
{
UCHAR StartLba[4];
UCHAR StartPerformance[4];
UCHAR EndLba[4];
UCHAR EndPerformance[4];
} CDROM_NOMINAL_PERFORMANCE_DESCRIPTOR, *PCDROM_NOMINAL_PERFORMANCE_DESCRIPTOR;
typedef struct _CDROM_EXCEPTION_PERFORMANCE_DESCRIPTOR
{
UCHAR Lba[4];
UCHAR Time[2];
} CDROM_EXCEPTION_PERFORMANCE_DESCRIPTOR, *PCDROM_EXCEPTION_PERFORMANCE_DESCRIPTOR;
typedef struct _CDROM_WRITE_SPEED_DESCRIPTOR
{
UCHAR MixedReadWrite:1;
UCHAR Exact:1;
UCHAR Reserved1:1;
UCHAR WriteRotationControl:2;
UCHAR Reserved2:3;
UCHAR Reserved3[3];
UCHAR EndLba[4];
UCHAR ReadSpeed[4];
UCHAR WriteSpeed[4];
} CDROM_WRITE_SPEED_DESCRIPTOR, *PCDROM_WRITE_SPEED_DESCRIPTOR;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -34,36 +34,75 @@ extern "C" {
#define IOCTL_STORAGE_SET_READ_AHEAD \ #define IOCTL_STORAGE_SET_READ_AHEAD \
CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_START_SESSION \
CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_READ_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SEND_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_END_SESSION \ #define IOCTL_DVD_END_SESSION \
CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_DVD_BASE, 0x0403, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SET_READ_AHEAD \
CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_GET_REGION \ #define IOCTL_DVD_GET_REGION \
CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SEND_KEY2 \ #define IOCTL_DVD_SEND_KEY2 \
CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS) CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_DVD_READ_KEY \ #define IOCTL_AACS_READ_MEDIA_KEY_BLOCK_SIZE \
CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_DVD_BASE, 0x430, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_MEDIA_KEY_BLOCK \
CTL_CODE(IOCTL_DVD_BASE, 0x431, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_START_SESSION \
CTL_CODE(IOCTL_DVD_BASE, 0x432, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_END_SESSION \
CTL_CODE(IOCTL_DVD_BASE, 0x433, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_SEND_CERTIFICATE \
CTL_CODE(IOCTL_DVD_BASE, 0x434, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_GET_CERTIFICATE \
CTL_CODE(IOCTL_DVD_BASE, 0x435, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_GET_CHALLENGE_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x436, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_SEND_CHALLENGE_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x437, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_VOLUME_ID \
CTL_CODE(IOCTL_DVD_BASE, 0x438, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_SERIAL_NUMBER \
CTL_CODE(IOCTL_DVD_BASE, 0x439, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_MEDIA_ID \
CTL_CODE(IOCTL_DVD_BASE, 0x43A, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_BINDING_NONCE \
CTL_CODE(IOCTL_DVD_BASE, 0x43B, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_GENERATE_BINDING_NONCE \
CTL_CODE(IOCTL_DVD_BASE, 0x43C, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_DVD_READ_STRUCTURE \ #define IOCTL_DVD_READ_STRUCTURE \
CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS) CTL_CODE(IOCTL_DVD_BASE, 0x0450, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SEND_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x0402, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_START_SESSION \
CTL_CODE(IOCTL_DVD_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SET_READ_AHEAD \
CTL_CODE(IOCTL_DVD_BASE, 0x0404, METHOD_BUFFERED, FILE_READ_ACCESS)
typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID; typedef ULONG DVD_SESSION_ID, *PDVD_SESSION_ID;
typedef struct _STORAGE_SET_READ_AHEAD { typedef struct _STORAGE_SET_READ_AHEAD {
LARGE_INTEGER TriggerAddress; LARGE_INTEGER TriggerAddress;
LARGE_INTEGER TargetAddress; LARGE_INTEGER TargetAddress;
} STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD; } STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
typedef enum DVD_STRUCTURE_FORMAT { typedef enum DVD_STRUCTURE_FORMAT {
@ -122,27 +161,27 @@ typedef struct _DVD_DISK_KEY_DESCRIPTOR {
} DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR; } DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
typedef enum _DVD_KEY_TYPE { typedef enum _DVD_KEY_TYPE {
DvdChallengeKey = 0x01, DvdChallengeKey = 0x01,
DvdBusKey1, DvdBusKey1,
DvdBusKey2, DvdBusKey2,
DvdTitleKey, DvdTitleKey,
DvdAsf, DvdAsf,
DvdSetRpcKey = 0x6, DvdSetRpcKey = 0x6,
DvdGetRpcKey = 0x8, DvdGetRpcKey = 0x8,
DvdDiskKey = 0x80, DvdDiskKey = 0x80,
DvdInvalidateAGID = 0x3f DvdInvalidateAGID = 0x3f
} DVD_KEY_TYPE; } DVD_KEY_TYPE;
typedef struct _DVD_COPY_PROTECT_KEY { typedef struct _DVD_COPY_PROTECT_KEY {
ULONG KeyLength; ULONG KeyLength;
DVD_SESSION_ID SessionId; DVD_SESSION_ID SessionId;
DVD_KEY_TYPE KeyType; DVD_KEY_TYPE KeyType;
ULONG KeyFlags; ULONG KeyFlags;
union { union {
HANDLE FileHandle; HANDLE FileHandle;
LARGE_INTEGER TitleOffset; LARGE_INTEGER TitleOffset;
} Parameters; } Parameters;
UCHAR KeyData[0]; UCHAR KeyData[0];
} DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY; } DVD_COPY_PROTECT_KEY, *PDVD_COPY_PROTECT_KEY;
#define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY)) #define DVD_CHALLENGE_KEY_LENGTH (12 + sizeof(DVD_COPY_PROTECT_KEY))
@ -201,14 +240,93 @@ typedef struct _DVD_ASF {
} DVD_ASF, *PDVD_ASF; } DVD_ASF, *PDVD_ASF;
typedef struct _DVD_REGION { typedef struct _DVD_REGION {
UCHAR CopySystem; UCHAR CopySystem;
UCHAR RegionData; UCHAR RegionData;
UCHAR SystemRegion; UCHAR SystemRegion;
UCHAR ResetCount; UCHAR ResetCount;
} DVD_REGION, *PDVD_REGION; } DVD_REGION, *PDVD_REGION;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
// for IOCTLS_AACS_*
typedef _Field_range_(0,255) ULONG AACS_LAYER_NUMBER, *PAACS_LAYER_NUMBER;
typedef _Field_range_(0,255) const ULONG CAACS_LAYER_NUMBER, *PCAACS_LAYER_NUMBER;
typedef struct _AACS_CERTIFICATE
{
UCHAR Nonce[20];
UCHAR Certificate[92];
} AACS_CERTIFICATE, *PAACS_CERTIFICATE;
typedef const AACS_CERTIFICATE CAACS_CERTIFICATE, *PCAACS_CERTIFICATE;
C_ASSERT(sizeof(AACS_CERTIFICATE) == 112);
typedef struct _AACS_CHALLENGE_KEY
{
UCHAR EllipticCurvePoint[40];
UCHAR Signature[40];
} AACS_CHALLENGE_KEY, *PAACS_CHALLENGE_KEY;
typedef const AACS_CHALLENGE_KEY CAACS_CHALLENGE_KEY, *PCAACS_CHALLENGE_KEY;
C_ASSERT(sizeof(AACS_CHALLENGE_KEY) == 80);
typedef struct _AACS_VOLUME_ID
{
UCHAR VolumeID[16];
UCHAR MAC[16];
} AACS_VOLUME_ID, *PAACS_VOLUME_ID;
typedef const AACS_VOLUME_ID CAACS_VOLUME_ID, *PCAACS_VOLUME_ID;
C_ASSERT(sizeof(AACS_VOLUME_ID) == 32);
typedef struct _AACS_SERIAL_NUMBER
{
UCHAR PrerecordedSerialNumber[16];
UCHAR MAC[16];
} AACS_SERIAL_NUMBER, *PAACS_SERIAL_NUMBER;
typedef const AACS_SERIAL_NUMBER CAACS_SERIAL_NUMBER, *PCAACS_SERIAL_NUMBER;
C_ASSERT(sizeof(AACS_SERIAL_NUMBER) == 32);
typedef struct _AACS_MEDIA_ID
{
UCHAR MediaID[16];
UCHAR MAC[16];
} AACS_MEDIA_ID, *PAACS_MEDIA_ID;
typedef const AACS_MEDIA_ID CAACS_MEDIA_ID, *PCAACS_MEDIA_ID;
C_ASSERT(sizeof(AACS_MEDIA_ID) == 32);
typedef struct _AACS_SEND_CERTIFICATE
{
DVD_SESSION_ID SessionId;
AACS_CERTIFICATE Certificate;
} AACS_SEND_CERTIFICATE, *PAACS_SEND_CERTIFICATE;
typedef const AACS_SEND_CERTIFICATE CAACS_SEND_CERTIFICATE, *PCAACS_SEND_CERTIFICATE;
typedef struct _AACS_SEND_CHALLENGE_KEY
{
DVD_SESSION_ID SessionId;
AACS_CHALLENGE_KEY ChallengeKey;
} AACS_SEND_CHALLENGE_KEY, *PAACS_SEND_CHALLENGE_KEY;
typedef const AACS_SEND_CHALLENGE_KEY CAACS_SEND_CHALLENGE_KEY, *PCAACS_SEND_CHALLENGE_KEY;
typedef struct _AACS_BINDING_NONCE
{
UCHAR BindingNonce[16];
UCHAR MAC[16];
} AACS_BINDING_NONCE, *PAACS_BINDING_NONCE;
typedef const AACS_BINDING_NONCE CAACS_BINDING_NONCE, *PCAACS_BINDING_NONCE;
C_ASSERT(sizeof(AACS_BINDING_NONCE) == 32);
typedef struct _AACS_READ_BINDING_NONCE
{
DVD_SESSION_ID SessionId;
_Field_range_(0,255) ULONG NumberOfSectors;
ULONGLONG StartLba;
union
{
HANDLE Handle;
ULONGLONG ForceStructureLengthToMatch64bit;
};
} AACS_READ_BINDING_NONCE, *PAACS_READ_BINDING_NONCE;
#endif /* _NTDDCDVD_ */ #endif /* _NTDDCDVD_ */

View file

@ -162,10 +162,10 @@ typedef struct _FEATURE_DATA_MORPHING {
typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM { typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM {
FEATURE_HEADER Header; FEATURE_HEADER Header;
UCHAR Lockable:1; UCHAR Lockable:1;
UCHAR Reserved1:1; UCHAR DBML:1;
UCHAR DefaultToPrevent:1; UCHAR DefaultToPrevent:1;
UCHAR Eject:1; UCHAR Eject:1;
UCHAR Reserved2:1; UCHAR Load:1;
UCHAR LoadingMechanism:3; UCHAR LoadingMechanism:3;
UCHAR Reserved3[3]; UCHAR Reserved3[3];
} FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM; } FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM;

View file

@ -80,6 +80,17 @@ DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,
#endif /* defined(DEFINE_GUID) */ #endif /* defined(DEFINE_GUID) */
#if defined(DEFINE_DEVPROPKEY)
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Portable, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 2);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Removable_Media, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 3);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_System_Critical, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 4);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Disk_Number, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 5);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Partition_Number, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 6);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Mbr_Type, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 7);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Type, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 8);
DEFINE_DEVPROPKEY(DEVPKEY_Storage_Gpt_Name, 0x4d1ebee8, 0x803, 0x4774, 0x98, 0x42, 0xb7, 0x7d, 0xb5, 0x2, 0x65, 0xe9, 9);
#endif
#ifndef _WINIOCTL_ #ifndef _WINIOCTL_
#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE #define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
@ -808,7 +819,7 @@ typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
#pragma warning(disable:4200) #pragma warning(disable:4200)
#endif #endif
#if defined(_MSC_EXTENSIONS) // #if defined(_MSC_EXTENSIONS)
typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA { typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
USHORT Reserved; USHORT Reserved;
@ -835,7 +846,7 @@ typedef struct _PERSISTENT_RESERVE_COMMAND {
} DUMMYUNIONNAME; } DUMMYUNIONNAME;
} PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND; } PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND;
#endif /* defined(_MSC_EXTENSIONS) */ // #endif /* defined(_MSC_EXTENSIONS) */
#ifdef _MSC_VER #ifdef _MSC_VER
#pragma warning(pop) /* disable:4200 */ #pragma warning(pop) /* disable:4200 */
@ -1075,6 +1086,24 @@ typedef struct _STORAGE_IDLE_POWER {
ULONG D3IdleTimeout; ULONG D3IdleTimeout;
} STORAGE_IDLE_POWER, *PSTORAGE_IDLE_POWER; } STORAGE_IDLE_POWER, *PSTORAGE_IDLE_POWER;
// for IOCTL_STORAGE_GET_IDLE_POWERUP_REASON
typedef enum _STORAGE_POWERUP_REASON_TYPE {
StoragePowerupUnknown = 0,
StoragePowerupIO,
StoragePowerupDeviceAttention
} STORAGE_POWERUP_REASON_TYPE, *PSTORAGE_POWERUP_REASON_TYPE;
typedef struct _STORAGE_IDLE_POWERUP_REASON
{
ULONG Version;
ULONG Size;
STORAGE_POWERUP_REASON_TYPE PowerupReason;
} STORAGE_IDLE_POWERUP_REASON, *PSTORAGE_IDLE_POWERUP_REASON;
#define STORAGE_IDLE_POWERUP_REASON_VERSION_V1 1
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -74,6 +74,8 @@ extern "C" {
#define IOCTL_VOLUME_QUERY_FAILOVER_SET \ #define IOCTL_VOLUME_QUERY_FAILOVER_SET \
CTL_CODE(IOCTL_VOLUME_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS) CTL_CODE(IOCTL_VOLUME_BASE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define IOCTL_VOLUME_POST_ONLINE \
CTL_CODE(IOCTL_VOLUME_BASE, 25, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
typedef struct _VOLUME_LOGICAL_OFFSET { typedef struct _VOLUME_LOGICAL_OFFSET {
LONGLONG LogicalOffset; LONGLONG LogicalOffset;
@ -100,32 +102,32 @@ typedef struct _VOLUME_GET_GPT_ATTRIBUTES_INFORMATION {
} VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION; } VOLUME_GET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_GET_GPT_ATTRIBUTES_INFORMATION;
typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION { typedef struct _VOLUME_SET_GPT_ATTRIBUTES_INFORMATION {
ULONGLONG GptAttributes; ULONGLONG GptAttributes;
BOOLEAN RevertOnClose; BOOLEAN RevertOnClose;
BOOLEAN ApplyToAllConnectedVolumes; BOOLEAN ApplyToAllConnectedVolumes;
USHORT Reserved1; USHORT Reserved1;
ULONG Reserved2; ULONG Reserved2;
} VOLUME_SET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_SET_GPT_ATTRIBUTES_INFORMATION; } VOLUME_SET_GPT_ATTRIBUTES_INFORMATION, *PVOLUME_SET_GPT_ATTRIBUTES_INFORMATION;
typedef struct _DISK_EXTENT { typedef struct _DISK_EXTENT {
ULONG DiskNumber; ULONG DiskNumber;
LARGE_INTEGER StartingOffset; LARGE_INTEGER StartingOffset;
LARGE_INTEGER ExtentLength; LARGE_INTEGER ExtentLength;
} DISK_EXTENT, *PDISK_EXTENT; } DISK_EXTENT, *PDISK_EXTENT;
typedef struct _VOLUME_DISK_EXTENTS { typedef struct _VOLUME_DISK_EXTENTS {
ULONG NumberOfDiskExtents; ULONG NumberOfDiskExtents;
DISK_EXTENT Extents[1]; DISK_EXTENT Extents[1];
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS; } VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS;
typedef struct _VOLUME_NUMBER { typedef struct _VOLUME_NUMBER {
ULONG VolumeNumber; ULONG VolumeNumber;
WCHAR VolumeManagerName[8]; WCHAR VolumeManagerName[8];
} VOLUME_NUMBER, *PVOLUME_NUMBER; } VOLUME_NUMBER, *PVOLUME_NUMBER;
typedef struct _VOLUME_FAILOVER_SET { typedef struct _VOLUME_FAILOVER_SET {
ULONG NumberOfDisks; ULONG NumberOfDisks;
ULONG DiskNumbers[1]; ULONG DiskNumbers[1];
} VOLUME_FAILOVER_SET, *PVOLUME_FAILOVER_SET; } VOLUME_FAILOVER_SET, *PVOLUME_FAILOVER_SET;
#ifdef __cplusplus #ifdef __cplusplus

View file

@ -191,7 +191,7 @@
#else #else
// Disable expansion of SAL macros in non-Prefast mode to // Disable expansion of SAL macros in non-Prefast mode to
// improve compiler throughput. // improve compiler throughput.
#ifndef _USE_DECLSPECS_FOR_SAL // [ #ifndef _USE_DECLSPECS_FOR_SAL // [
#define _USE_DECLSPECS_FOR_SAL 0 #define _USE_DECLSPECS_FOR_SAL 0
@ -436,7 +436,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
#define _Outptr_result_maybenull_z_ _SAL2_Source_(_Outptr_result_maybenull_z_, (), _Out_impl_ _Deref_post_opt_z_) #define _Outptr_result_maybenull_z_ _SAL2_Source_(_Outptr_result_maybenull_z_, (), _Out_impl_ _Deref_post_opt_z_)
#define _Outptr_opt_result_maybenull_z_ _SAL2_Source_(_Outptr_opt_result_maybenull_z_, (), _Out_opt_impl_ _Deref_post_opt_z_) #define _Outptr_opt_result_maybenull_z_ _SAL2_Source_(_Outptr_opt_result_maybenull_z_, (), _Out_opt_impl_ _Deref_post_opt_z_)
// Annotations for _Outptr_ parameters where the output pointer is set to NULL if the function fails. // Annotations for _Outptr_ parameters where the output pointer is set to NULL if the function fails.
#define _Outptr_result_nullonfailure_ _SAL2_Source_(_Outptr_result_nullonfailure_, (), _Outptr_ _On_failure_(_Deref_post_null_)) #define _Outptr_result_nullonfailure_ _SAL2_Source_(_Outptr_result_nullonfailure_, (), _Outptr_ _On_failure_(_Deref_post_null_))
#define _Outptr_opt_result_nullonfailure_ _SAL2_Source_(_Outptr_opt_result_nullonfailure_, (), _Outptr_opt_ _On_failure_(_Deref_post_null_)) #define _Outptr_opt_result_nullonfailure_ _SAL2_Source_(_Outptr_opt_result_nullonfailure_, (), _Outptr_opt_ _On_failure_(_Deref_post_null_))
@ -787,10 +787,10 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
with _Out_. The default unit is elements. Use 'bytecap' if the size is given in bytes with _Out_. The default unit is elements. Use 'bytecap' if the size is given in bytes
'count' describes the readable size of the buffer and is typically used with _In_. 'count' describes the readable size of the buffer and is typically used with _In_.
The default unit is elements. Use 'bytecount' if the size is given in bytes. The default unit is elements. Use 'bytecount' if the size is given in bytes.
Argument syntax for cap_, bytecap_, count_, bytecount_: Argument syntax for cap_, bytecap_, count_, bytecount_:
(<parameter>|return)[+n] e.g. cch, return, cb+2 (<parameter>|return)[+n] e.g. cch, return, cb+2
If the buffer size is a constant expression use the c_ postfix. If the buffer size is a constant expression use the c_ postfix.
E.g. cap_c_(20), count_c_(MAX_PATH), bytecount_c_(16) E.g. cap_c_(20), count_c_(MAX_PATH), bytecount_c_(16)
@ -911,7 +911,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
#define _Out_z_bytecap_post_bytecount_(cap,count) _SAL1_1_Source_(_Out_z_bytecap_post_bytecount_, (cap,count), _Pre_bytecap_(cap) _Post_valid_impl_ _Post_z_bytecount_(count)) #define _Out_z_bytecap_post_bytecount_(cap,count) _SAL1_1_Source_(_Out_z_bytecap_post_bytecount_, (cap,count), _Pre_bytecap_(cap) _Post_valid_impl_ _Post_z_bytecount_(count))
#define _Out_opt_z_bytecap_post_bytecount_(cap,count) _SAL1_1_Source_(_Out_opt_z_bytecap_post_bytecount_, (cap,count), _Pre_opt_bytecap_(cap) _Post_valid_impl_ _Post_z_bytecount_(count)) #define _Out_opt_z_bytecap_post_bytecount_(cap,count) _SAL1_1_Source_(_Out_opt_z_bytecap_post_bytecount_, (cap,count), _Pre_opt_bytecap_(cap) _Post_valid_impl_ _Post_z_bytecount_(count))
// only use with dereferenced arguments e.g. '*pcch' // only use with dereferenced arguments e.g. '*pcch'
#define _Out_capcount_(capcount) _SAL1_1_Source_(_Out_capcount_, (capcount), _Pre_cap_(capcount) _Post_valid_impl_ _Post_count_(capcount)) #define _Out_capcount_(capcount) _SAL1_1_Source_(_Out_capcount_, (capcount), _Pre_cap_(capcount) _Post_valid_impl_ _Post_count_(capcount))
#define _Out_opt_capcount_(capcount) _SAL1_1_Source_(_Out_opt_capcount_, (capcount), _Pre_opt_cap_(capcount) _Post_valid_impl_ _Post_count_(capcount)) #define _Out_opt_capcount_(capcount) _SAL1_1_Source_(_Out_opt_capcount_, (capcount), _Pre_opt_cap_(capcount) _Post_valid_impl_ _Post_count_(capcount))
#define _Out_bytecapcount_(capcount) _SAL1_1_Source_(_Out_bytecapcount_, (capcount), _Pre_bytecap_(capcount) _Post_valid_impl_ _Post_bytecount_(capcount)) #define _Out_bytecapcount_(capcount) _SAL1_1_Source_(_Out_bytecapcount_, (capcount), _Pre_bytecap_(capcount) _Post_valid_impl_ _Post_bytecount_(capcount))
@ -1080,7 +1080,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
#define _Deref_pre_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_pre_valid_bytecap_x_, (size), _Deref_pre1_impl_(__notnull_impl_notref) _Deref_pre1_impl_(__bytecap_x_impl(size)) _Pre_valid_impl_) #define _Deref_pre_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_pre_valid_bytecap_x_, (size), _Deref_pre1_impl_(__notnull_impl_notref) _Deref_pre1_impl_(__bytecap_x_impl(size)) _Pre_valid_impl_)
#define _Deref_pre_opt_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_pre_opt_valid_bytecap_x_, (size), _Deref_pre1_impl_(__maybenull_impl_notref) _Deref_pre1_impl_(__bytecap_x_impl(size)) _Pre_valid_impl_) #define _Deref_pre_opt_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_pre_opt_valid_bytecap_x_, (size), _Deref_pre1_impl_(__maybenull_impl_notref) _Deref_pre1_impl_(__bytecap_x_impl(size)) _Pre_valid_impl_)
// e.g. void SaveMatrix( _In_count_(n) _Deref_pre_count_(n) const Elem** matrix, size_t n ); // e.g. void SaveMatrix( _In_count_(n) _Deref_pre_count_(n) const Elem** matrix, size_t n );
// valid buffer extent is described by another parameter // valid buffer extent is described by another parameter
#define _Deref_pre_count_(size) _SAL1_1_Source_(_Deref_pre_count_, (size), _Deref_pre1_impl_(__notnull_impl_notref) _Deref_pre1_impl_(__count_impl(size)) _Pre_valid_impl_) #define _Deref_pre_count_(size) _SAL1_1_Source_(_Deref_pre_count_, (size), _Deref_pre1_impl_(__notnull_impl_notref) _Deref_pre1_impl_(__count_impl(size)) _Pre_valid_impl_)
#define _Deref_pre_opt_count_(size) _SAL1_1_Source_(_Deref_pre_opt_count_, (size), _Deref_pre1_impl_(__maybenull_impl_notref) _Deref_pre1_impl_(__count_impl(size)) _Pre_valid_impl_) #define _Deref_pre_opt_count_(size) _SAL1_1_Source_(_Deref_pre_opt_count_, (size), _Deref_pre1_impl_(__maybenull_impl_notref) _Deref_pre1_impl_(__count_impl(size)) _Pre_valid_impl_)
@ -1161,12 +1161,12 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
#define _Deref_post_opt_valid_cap_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_impl(size)) _Post_valid_impl_) #define _Deref_post_opt_valid_cap_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_impl(size)) _Post_valid_impl_)
#define _Deref_post_valid_bytecap_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_impl(size)) _Post_valid_impl_) #define _Deref_post_valid_bytecap_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_impl(size)) _Post_valid_impl_)
#define _Deref_post_opt_valid_bytecap_(size) _SAL1_1_Source_(_Deref_post_opt_valid_bytecap_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__bytecap_impl(size)) _Post_valid_impl_) #define _Deref_post_opt_valid_bytecap_(size) _SAL1_1_Source_(_Deref_post_opt_valid_bytecap_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__bytecap_impl(size)) _Post_valid_impl_)
#define _Deref_post_valid_cap_c_(size) _SAL1_1_Source_(_Deref_post_valid_cap_c_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__cap_c_impl(size)) _Post_valid_impl_) #define _Deref_post_valid_cap_c_(size) _SAL1_1_Source_(_Deref_post_valid_cap_c_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__cap_c_impl(size)) _Post_valid_impl_)
#define _Deref_post_opt_valid_cap_c_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_c_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_c_impl(size)) _Post_valid_impl_) #define _Deref_post_opt_valid_cap_c_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_c_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_c_impl(size)) _Post_valid_impl_)
#define _Deref_post_valid_bytecap_c_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_c_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_c_impl(size)) _Post_valid_impl_) #define _Deref_post_valid_bytecap_c_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_c_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_c_impl(size)) _Post_valid_impl_)
#define _Deref_post_opt_valid_bytecap_c_(size) _SAL1_1_Source_(_Deref_post_opt_valid_bytecap_c_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__bytecap_c_impl(size)) _Post_valid_impl_) #define _Deref_post_opt_valid_bytecap_c_(size) _SAL1_1_Source_(_Deref_post_opt_valid_bytecap_c_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__bytecap_c_impl(size)) _Post_valid_impl_)
#define _Deref_post_valid_cap_x_(size) _SAL1_1_Source_(_Deref_post_valid_cap_x_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__cap_x_impl(size)) _Post_valid_impl_) #define _Deref_post_valid_cap_x_(size) _SAL1_1_Source_(_Deref_post_valid_cap_x_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__cap_x_impl(size)) _Post_valid_impl_)
#define _Deref_post_opt_valid_cap_x_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_x_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_x_impl(size)) _Post_valid_impl_) #define _Deref_post_opt_valid_cap_x_(size) _SAL1_1_Source_(_Deref_post_opt_valid_cap_x_, (size), _Deref_post1_impl_(__maybenull_impl_notref) _Deref_post1_impl_(__cap_x_impl(size)) _Post_valid_impl_)
#define _Deref_post_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_x_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_x_impl(size)) _Post_valid_impl_) #define _Deref_post_valid_bytecap_x_(size) _SAL1_1_Source_(_Deref_post_valid_bytecap_x_, (size), _Deref_post1_impl_(__notnull_impl_notref) _Deref_post1_impl_(__bytecap_x_impl(size)) _Post_valid_impl_)
@ -1489,7 +1489,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
// not required to be a legal standalone annotation, and in the case // not required to be a legal standalone annotation, and in the case
// of attribute annotations, usually is not. (In the case of some declspec // of attribute annotations, usually is not. (In the case of some declspec
// annotations, it might be, but it should not be assumed so.) Those // annotations, it might be, but it should not be assumed so.) Those
// symols will be used in the _PreN..., _PostN... and _RetN... annotations // symols will be used in the _PreN..., _PostN... and _RetN... annotations
// to build up more complete annotations. // to build up more complete annotations.
// A symbol ending in _impl_ is reserved to the implementation as well, // A symbol ending in _impl_ is reserved to the implementation as well,
@ -1603,7 +1603,7 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
// Done this way so that they don't appear in the regular compiler's // Done this way so that they don't appear in the regular compiler's
// namespace. // namespace.
#define __ANNOTATION(fun) _SA_annotes0(SAL_annotation) void __SA_##fun #define __ANNOTATION(fun) _SA_annotes0(SAL_annotation) void __SA_##fun
#define __PRIMOP(type, fun) _SA_annotes0(SAL_primop) type __SA_##fun #define __PRIMOP(type, fun) _SA_annotes0(SAL_primop) type __SA_##fun
#define __QUALIFIER(fun) _SA_annotes0(SAL_qualifier) void __SA_##fun; #define __QUALIFIER(fun) _SA_annotes0(SAL_qualifier) void __SA_##fun;
@ -1619,9 +1619,9 @@ enum __SAL_YesNo {_SAL_notpresent, _SAL_no, _SAL_maybe, _SAL_yes, _SAL_default};
#define _SA_annotes2(n,pp1,pp2) #define _SA_annotes2(n,pp1,pp2)
#define _SA_annotes3(n,pp1,pp2,pp3) #define _SA_annotes3(n,pp1,pp2,pp3)
#define __ANNOTATION(fun) #define __ANNOTATION(fun)
#define __PRIMOP(type, fun) #define __PRIMOP(type, fun)
#define __QUALIFIER(type, fun) #define __QUALIFIER(type, fun)
#endif // ] #endif // ]
@ -2124,15 +2124,15 @@ typedef struct __F_ __F_;
#define _Pre3_impl_(p1,p2,p3) #define _Pre3_impl_(p1,p2,p3)
#define _Post_impl_ #define _Post_impl_
#define _Post1_impl_(p1) #define _Post1_impl_(p1)
#define _Post2_impl_(p1,p2) #define _Post2_impl_(p1,p2)
#define _Post3_impl_(p1,p2,p3) #define _Post3_impl_(p1,p2,p3)
#define _Ret1_impl_(p1) #define _Ret1_impl_(p1)
#define _Ret2_impl_(p1,p2) #define _Ret2_impl_(p1,p2)
#define _Ret3_impl_(p1,p2,p3) #define _Ret3_impl_(p1,p2,p3)
#define _Deref_pre1_impl_(p1) #define _Deref_pre1_impl_(p1)
#define _Deref_pre2_impl_(p1,p2) #define _Deref_pre2_impl_(p1,p2)
#define _Deref_pre3_impl_(p1,p2,p3) #define _Deref_pre3_impl_(p1,p2,p3)
@ -2164,7 +2164,7 @@ typedef struct __F_ __F_;
// This section contains the deprecated annotations // This section contains the deprecated annotations
/* /*
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Introduction Introduction
@ -2355,7 +2355,7 @@ typedef struct __F_ __F_;
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Advanced Annotation Examples Advanced Annotation Examples
__success(return != FALSE) LWSTDAPI_(BOOL) __success(return != FALSE) LWSTDAPI_(BOOL)
PathCanonicalizeA(__out_ecount(MAX_PATH) LPSTR pszBuf, LPCSTR pszPath) : PathCanonicalizeA(__out_ecount(MAX_PATH) LPSTR pszBuf, LPCSTR pszPath) :
pszBuf is only guaranteed to be NULL-terminated when TRUE is returned. pszBuf is only guaranteed to be NULL-terminated when TRUE is returned.
@ -2391,8 +2391,8 @@ extern "C" {
*/ */
/* /*
The helper annotations are only understood by the compiler version used by The helper annotations are only understood by the compiler version used by
various defect detection tools. When the regular compiler is running, they various defect detection tools. When the regular compiler is running, they
are defined into nothing, and do not affect the compiled code. are defined into nothing, and do not affect the compiled code.
*/ */
@ -2411,7 +2411,7 @@ extern "C" {
__null p __null p
__notnull p __notnull p
__maybenull p __maybenull p
Annotates a pointer p. States that pointer p is null. Commonly used Annotates a pointer p. States that pointer p is null. Commonly used
in the negated form __notnull or the possibly null form __maybenull. in the negated form __notnull or the possibly null form __maybenull.
*/ */
@ -2426,7 +2426,7 @@ extern "C" {
__readonly l __readonly l
__notreadonly l __notreadonly l
__mabyereadonly l __mabyereadonly l
Annotates a location l. States that location l is not modified after Annotates a location l. States that location l is not modified after
this point. If the annotation is placed on the precondition state of this point. If the annotation is placed on the precondition state of
a function, the restriction only applies until the postcondition state a function, the restriction only applies until the postcondition state
@ -2443,7 +2443,7 @@ extern "C" {
__valid v __valid v
__notvalid v __notvalid v
__maybevalid v __maybevalid v
Annotates any value v. States that the value satisfies all properties of Annotates any value v. States that the value satisfies all properties of
valid values of its type. For example, for a string buffer, valid means valid values of its type. For example, for a string buffer, valid means
that the buffer pointer is either NULL or points to a NULL-terminated string. that the buffer pointer is either NULL or points to a NULL-terminated string.
@ -2455,7 +2455,7 @@ extern "C" {
/* /*
__readableTo(extent) p __readableTo(extent) p
Annotates a buffer pointer p. If the buffer can be read, extent describes Annotates a buffer pointer p. If the buffer can be read, extent describes
how much of the buffer is readable. For a reader of the buffer, this is how much of the buffer is readable. For a reader of the buffer, this is
an explicit permission to read up to that amount, rather than a restriction to an explicit permission to read up to that amount, rather than a restriction to
@ -2465,24 +2465,24 @@ extern "C" {
#define __readableTo(extent) _SA_annotes1(SAL_readableTo, extent) #define __readableTo(extent) _SA_annotes1(SAL_readableTo, extent)
/* /*
__elem_readableTo(size) __elem_readableTo(size)
Annotates a buffer pointer p as being readable to size elements. Annotates a buffer pointer p as being readable to size elements.
*/ */
#define __elem_readableTo(size) _SA_annotes1(SAL_readableTo, elementCount( size )) #define __elem_readableTo(size) _SA_annotes1(SAL_readableTo, elementCount( size ))
/* /*
__byte_readableTo(size) __byte_readableTo(size)
Annotates a buffer pointer p as being readable to size bytes. Annotates a buffer pointer p as being readable to size bytes.
*/ */
#define __byte_readableTo(size) _SA_annotes1(SAL_readableTo, byteCount(size)) #define __byte_readableTo(size) _SA_annotes1(SAL_readableTo, byteCount(size))
/* /*
__writableTo(extent) p __writableTo(extent) p
Annotates a buffer pointer p. If the buffer can be modified, extent Annotates a buffer pointer p. If the buffer can be modified, extent
describes how much of the buffer is writable (usually the allocation describes how much of the buffer is writable (usually the allocation
size). For a writer of the buffer, this is an explicit permission to size). For a writer of the buffer, this is an explicit permission to
@ -2492,45 +2492,45 @@ extern "C" {
/* /*
__elem_writableTo(size) __elem_writableTo(size)
Annotates a buffer pointer p as being writable to size elements. Annotates a buffer pointer p as being writable to size elements.
*/ */
#define __elem_writableTo(size) _SA_annotes1(SAL_writableTo, elementCount( size )) #define __elem_writableTo(size) _SA_annotes1(SAL_writableTo, elementCount( size ))
/* /*
__byte_writableTo(size) __byte_writableTo(size)
Annotates a buffer pointer p as being writable to size bytes. Annotates a buffer pointer p as being writable to size bytes.
*/ */
#define __byte_writableTo(size) _SA_annotes1(SAL_writableTo, byteCount( size)) #define __byte_writableTo(size) _SA_annotes1(SAL_writableTo, byteCount( size))
/* /*
__deref p __deref p
Annotates a pointer p. The next annotation applies one dereference down Annotates a pointer p. The next annotation applies one dereference down
in the type. If readableTo(p, size) then the next annotation applies to in the type. If readableTo(p, size) then the next annotation applies to
all elements *(p+i) for which i satisfies the size. If p is a pointer all elements *(p+i) for which i satisfies the size. If p is a pointer
to a struct, the next annotation applies to all fields of the struct. to a struct, the next annotation applies to all fields of the struct.
*/ */
#define __deref _Deref_impl_ #define __deref _Deref_impl_
/* /*
__pre __next_annotation __pre __next_annotation
The next annotation applies in the precondition state The next annotation applies in the precondition state
*/ */
#define __pre _Pre_impl_ #define __pre _Pre_impl_
/* /*
__post __next_annotation __post __next_annotation
The next annotation applies in the postcondition state The next annotation applies in the postcondition state
*/ */
#define __post _Post_impl_ #define __post _Post_impl_
/* /*
__precond(<expr>) __precond(<expr>)
When <expr> is true, the next annotation applies in the precondition state When <expr> is true, the next annotation applies in the precondition state
(currently not enabled) (currently not enabled)
*/ */
@ -2538,7 +2538,7 @@ extern "C" {
/* /*
__postcond(<expr>) __postcond(<expr>)
When <expr> is true, the next annotation applies in the postcondition state When <expr> is true, the next annotation applies in the postcondition state
(currently not enabled) (currently not enabled)
*/ */
@ -2546,26 +2546,26 @@ extern "C" {
/* /*
__exceptthat __exceptthat
Given a set of annotations Q containing __exceptthat maybeP, the effect of Given a set of annotations Q containing __exceptthat maybeP, the effect of
the except clause is to erase any P or notP annotations (explicit or the except clause is to erase any P or notP annotations (explicit or
implied) within Q at the same level of dereferencing that the except implied) within Q at the same level of dereferencing that the except
clause appears, and to replace it with maybeP. clause appears, and to replace it with maybeP.
Example 1: __valid __pre_except_maybenull on a pointer p means that the Example 1: __valid __pre_except_maybenull on a pointer p means that the
pointer may be null, and is otherwise valid, thus overriding pointer may be null, and is otherwise valid, thus overriding
the implicit notnull annotation implied by __valid on the implicit notnull annotation implied by __valid on
pointers. pointers.
Example 2: __valid __deref __pre_except_maybenull on an int **p means Example 2: __valid __deref __pre_except_maybenull on an int **p means
that p is not null (implied by valid), but the elements that p is not null (implied by valid), but the elements
pointed to by p could be null, and are otherwise valid. pointed to by p could be null, and are otherwise valid.
*/ */
#define __exceptthat __inner_exceptthat #define __exceptthat __inner_exceptthat
/* /*
_refparam _refparam
Added to all out parameter macros to indicate that they are all reference Added to all out parameter macros to indicate that they are all reference
parameters. parameters.
*/ */
@ -2573,16 +2573,16 @@ extern "C" {
/* /*
__inner_* __inner_*
Helper macros that directly correspond to certain high-level annotations. Helper macros that directly correspond to certain high-level annotations.
*/ */
/* /*
Macros to classify the entrypoints and indicate their category. Macros to classify the entrypoints and indicate their category.
Pre-defined control point categories include: RPC, LPC, DeviceDriver, UserToKernel, ISAPI, COM. Pre-defined control point categories include: RPC, LPC, DeviceDriver, UserToKernel, ISAPI, COM.
*/ */
#define __inner_control_entrypoint(category) _SA_annotes2(SAL_entrypoint, controlEntry, category) #define __inner_control_entrypoint(category) _SA_annotes2(SAL_entrypoint, controlEntry, category)
@ -2651,7 +2651,7 @@ extern "C" {
#endif /* #if !defined(__midl) && defined(_PREFAST_) */ // ] #endif /* #if !defined(__midl) && defined(_PREFAST_) */ // ]
/* /*
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
Buffer Annotation Definitions Buffer Annotation Definitions
@ -2667,6 +2667,10 @@ buffer, use the table in the buffer annotations section.
#define __out _SAL1_Source_(__out, (), _Out_) #define __out _SAL1_Source_(__out, (), _Out_)
#endif // !PAL_STDCPP_COMPAT #endif // !PAL_STDCPP_COMPAT
#define __in_xcount(size) _SAL1_Source_(__in_xcount, (size), __in _Pre_ __inexpressible_readableTo(size))
#define __in_xcount_opt(size) _SAL1_Source_(__in_xcount_opt, (size), __in_xcount(size) __exceptthat __maybenull)
#define __out_xcount(size) _SAL1_Source_(__out_xcount, (size), __xcount(size) _Post_ __valid __refparam)
#define __ecount(size) _SAL1_Source_(__ecount, (size), __notnull __elem_writableTo(size)) #define __ecount(size) _SAL1_Source_(__ecount, (size), __notnull __elem_writableTo(size))
#define __bcount(size) _SAL1_Source_(__bcount, (size), __notnull __byte_writableTo(size)) #define __bcount(size) _SAL1_Source_(__bcount, (size), __notnull __byte_writableTo(size))
#define __in_ecount(size) _SAL1_Source_(__in_ecount, (size), _In_reads_(size)) #define __in_ecount(size) _SAL1_Source_(__in_ecount, (size), _In_reads_(size))
@ -2880,7 +2884,7 @@ of each annotation, see the advanced annotations section.
#define __data_entrypoint(category) __inner_data_entrypoint(category) #define __data_entrypoint(category) __inner_data_entrypoint(category)
#define __useHeader _Use_decl_anno_impl_ #define __useHeader _Use_decl_anno_impl_
#define __on_failure(annotes) _On_failure_impl_(annotes _SAL_nop_impl_) #define __on_failure(annotes) _On_failure_impl_(annotes _SAL_nop_impl_)
#ifndef __fallthrough // [ #ifndef __fallthrough // [
__inner_fallthrough_dec __inner_fallthrough_dec
#define __fallthrough __inner_fallthrough #define __fallthrough __inner_fallthrough
@ -2890,7 +2894,7 @@ of each annotation, see the advanced annotations section.
#ifdef _PREFAST_ // [ #ifdef _PREFAST_ // [
#define __analysis_assume(expr) __assume(expr) #define __analysis_assume(expr) __assume(expr)
#else // ][ #else // ][
#define __analysis_assume(expr) #define __analysis_assume(expr)
#endif // ] #endif // ]
#endif // ] #endif // ]
@ -2898,14 +2902,14 @@ of each annotation, see the advanced annotations section.
#ifdef _PREFAST_ // [ #ifdef _PREFAST_ // [
#define _Analysis_assume_(expr) __assume(expr) #define _Analysis_assume_(expr) __assume(expr)
#else // ][ #else // ][
#define _Analysis_assume_(expr) #define _Analysis_assume_(expr)
#endif // ] #endif // ]
#endif // ] #endif // ]
#define _Analysis_noreturn_ _SAL2_Source_(_Analysis_noreturn_, (), _SA_annotes0(SAL_terminates)) #define _Analysis_noreturn_ _SAL2_Source_(_Analysis_noreturn_, (), _SA_annotes0(SAL_terminates))
#ifdef _PREFAST_ // [ #ifdef _PREFAST_ // [
__inline __nothrow __inline __nothrow
void __AnalysisAssumeNullterminated(_Post_ __nullterminated void *p); void __AnalysisAssumeNullterminated(_Post_ __nullterminated void *p);
#define _Analysis_assume_nullterminated_(x) __AnalysisAssumeNullterminated(x) #define _Analysis_assume_nullterminated_(x) __AnalysisAssumeNullterminated(x)

View file

@ -48,6 +48,13 @@
#define __nullnullterminated #define __nullnullterminated
#define __in_data_source(src_sym) #define __in_data_source(src_sym)
#define __kernel_entry #define __kernel_entry
#define __range(lb,ub)
#define __in_bound
#define __out_bound
#define __in_range(lb,ub)
#define __out_range(lb,ub)
#define __deref_in_range(lb,ub)
#define __deref_out_range(lb,ub)
#if (_MSC_VER >= 1000) && !defined(__midl) && defined(_PREFAST_) #if (_MSC_VER >= 1000) && !defined(__midl) && defined(_PREFAST_)

View file

@ -0,0 +1,71 @@
#ifndef _WINAPIFAMILY_H_
#define _WINAPIFAMILY_H_
#include <winpackagefamily.h>
#define WINAPI_FAMILY_PC_APP 2
#define WINAPI_FAMILY_PHONE_APP 3
#define WINAPI_FAMILY_SYSTEM 4
#define WINAPI_FAMILY_SERVER 5
#define WINAPI_FAMILY_GAMES 6
#define WINAPI_FAMILY_DESKTOP_APP 100
#define WINAPI_FAMILY_APP WINAPI_FAMILY_PC_APP
#ifndef WINAPI_FAMILY
#define WINAPI_FAMILY WINAPI_FAMILY_DESKTOP_APP
#endif
#if WINAPI_FAMILY != WINAPI_FAMILY_DESKTOP_APP && \
WINAPI_FAMILY != WINAPI_FAMILY_PC_APP && \
WINAPI_FAMILY != WINAPI_FAMILY_PHONE_APP && \
WINAPI_FAMILY != WINAPI_FAMILY_SYSTEM && \
WINAPI_FAMILY != WINAPI_FAMILY_GAMES && \
WINAPI_FAMILY != WINAPI_FAMILY_SERVER
#error Unknown WINAPI_FAMILY value?
#endif
#ifndef WINAPI_PARTITION_DESKTOP
#define WINAPI_PARTITION_DESKTOP (WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
#endif
#ifndef WINAPI_PARTITION_APP
#define WINAPI_PARTITION_APP \
(WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \
WINAPI_FAMILY == WINAPI_FAMILY_PC_APP || \
WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
#endif
#ifndef WINAPI_PARTITION_PC_APP
#define WINAPI_PARTITION_PC_APP \
(WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP || \
WINAPI_FAMILY == WINAPI_FAMILY_PC_APP)
#endif
#ifndef WINAPI_PARTITION_PHONE_APP
#define WINAPI_PARTITION_PHONE_APP (WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP)
#endif
#ifndef WINAPI_PARTITION_GAMES
#define WINAPI_PARTITION_GAMES \
(WINAPI_FAMILY == WINAPI_FAMILY_GAMES || \
WINAPI_FAMILY == WINAPI_FAMILY_DESKTOP_APP)
#endif
#ifndef WINAPI_PARTITION_SYSTEM
#define WINAPI_PARTITION_SYSTEM \
(WINAPI_FAMILY == WINAPI_FAMILY_SYSTEM || \
WINAPI_FAMILY == WINAPI_FAMILY_SERVER)
#endif
#define WINAPI_PARTITION_PHONE WINAPI_PARTITION_PHONE_APP
#define WINAPI_FAMILY_PARTITION(Partitions) (Partitions)
#define _WINAPI_DEPRECATED_DECLARATION
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#define APP_DEPRECATED_HRESULT HRESULT _WINAPI_DEPRECATED_DECLARATION
#endif
#endif // _WINAPIFAMILY_H_

View file

@ -0,0 +1,56 @@
#ifndef _WINPACKAGEFAMILY_H_
#define _WINPACKAGEFAMILY_H_
#ifndef WINAPI_PARTITION_SERVER
#define WINAPI_PARTITION_SERVER (WINAPI_FAMILY == WINAPI_FAMILY_SERVER)
#endif
#undef WINAPI_PARTITION_PKG_WINTRUST
#undef WINAPI_PARTITION_PKG_WEBSERVICES
#undef WINAPI_PARTITION_PKG_EVENTLOGSERVICE
#undef WINAPI_PARTITION_PKG_VHD
#undef WINAPI_PARTITION_PKG_PERFCOUNTER
#undef WINAPI_PARTITION_PKG_SECURESTARTUP
#undef WINAPI_PARTITION_PKG_REMOTEFS
#undef WINAPI_PARTITION_PKG_BOOTABLESKU
#undef WINAPI_PARTITION_PKG_CMDTOOLS
#undef WINAPI_PARTITION_PKG_DISM
#undef WINAPI_PARTITION_PKG_CORESETUP
#undef WINAPI_PARTITION_PKG_APPRUNTIME
#undef WINAPI_PARTITION_PKG_ESENT
#undef WINAPI_PARTITION_PKG_WINMGMT
#undef WINAPI_PARTITION_PKG_WNV
#undef WINAPI_PARTITION_PKG_CLUSTER
#undef WINAPI_PARTITION_PKG_VSS
#undef WINAPI_PARTITION_PKG_TRAFFIC
#undef WINAPI_PARTITION_PKG_ISCSI
#undef WINAPI_PARTITION_PKG_STORAGE
#undef WINAPI_PARTITION_PKG_MPSSVC
#undef WINAPI_PARTITION_PKG_APPXDEPLOYMENT
#undef WINAPI_PARTITION_PKG_WER
#define WINAPI_PARTITION_PKG_WINTRUST (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_WEBSERVICES (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_EVENTLOGSERVICE (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_VHD (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_PERFCOUNTER (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_SECURESTARTUP (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_REMOTEFS (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_BOOTABLESKU (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_CMDTOOLS (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_DISM (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_CORESETUP (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_APPRUNTIME (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_ESENT (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_WINMGMT (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_WNV (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_CLUSTER (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_VSS (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_TRAFFIC (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_ISCSI (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_STORAGE (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_MPSSVC (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_APPXDEPLOYMENT (WINAPI_PARTITION_SERVER == 1)
#define WINAPI_PARTITION_PKG_WER (WINAPI_PARTITION_SERVER == 1)
#endif // _WINPACKAGEFAMILY_H_