[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_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_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_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_sameIRQL
#define __drv_savesIRQL
#define __drv_savesIRQLGlobal
#define __drv_savesIRQLGlobal(kind,param)
#define __drv_strictType(typename,mode)
#define __drv_strictTypeMatch(mode)
#define __drv_unit(p)
@ -306,7 +306,7 @@ __ANNOTATION(SAL_callbackType(__In_impl_ __AuToQuOtE char *);)
#define __drv_ret(annotes)
#define __drv_sameIRQL
#define __drv_savesIRQL
#define __drv_savesIRQLGlobal
#define __drv_savesIRQLGlobal(kind,param)
#define __drv_setsIRQL(irql)
#define __drv_strictType(typename,mode)
#define __drv_strictTypeMatch(mode)

View file

@ -95,6 +95,41 @@ extern "C" {
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_CDROM_SIZE 804
#define MINIMUM_CDROM_READ_TOC_EX_SIZE 2
@ -334,8 +369,8 @@ typedef union _SUB_Q_CHANNEL_DATA {
#define TWO_FOUR_CHANNEL_AUDIO 0x8
typedef struct _CDROM_AUDIO_CONTROL {
UCHAR LbaFormat;
USHORT LogicalBlocksPerSecond;
UCHAR LbaFormat;
USHORT LogicalBlocksPerSecond;
} CDROM_AUDIO_CONTROL, *PCDROM_AUDIO_CONTROL;
typedef struct _VOLUME_CONTROL {
@ -343,17 +378,209 @@ typedef struct _VOLUME_CONTROL {
} VOLUME_CONTROL, *PVOLUME_CONTROL;
typedef enum _TRACK_MODE_TYPE {
YellowMode2,
XAForm2,
CDDA
YellowMode2,
XAForm2,
CDDA,
RawWithC2AndSubCode,
RawWithC2,
RawWithSubCode
} 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 {
LARGE_INTEGER DiskOffset;
ULONG SectorCount;
TRACK_MODE_TYPE TrackMode;
LARGE_INTEGER DiskOffset;
ULONG SectorCount;
TRACK_MODE_TYPE TrackMode;
} 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
}
#endif

View file

@ -34,36 +34,75 @@ extern "C" {
#define IOCTL_STORAGE_SET_READ_AHEAD \
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 \
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 \
CTL_CODE(IOCTL_DVD_BASE, 0x0405, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_DVD_SEND_KEY2 \
CTL_CODE(IOCTL_DVD_BASE, 0x0406, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_DVD_READ_KEY \
CTL_CODE(IOCTL_DVD_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_AACS_READ_MEDIA_KEY_BLOCK_SIZE \
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 \
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 struct _STORAGE_SET_READ_AHEAD {
LARGE_INTEGER TriggerAddress;
LARGE_INTEGER TargetAddress;
LARGE_INTEGER TriggerAddress;
LARGE_INTEGER TargetAddress;
} STORAGE_SET_READ_AHEAD, *PSTORAGE_SET_READ_AHEAD;
typedef enum DVD_STRUCTURE_FORMAT {
@ -122,27 +161,27 @@ typedef struct _DVD_DISK_KEY_DESCRIPTOR {
} DVD_DISK_KEY_DESCRIPTOR, *PDVD_DISK_KEY_DESCRIPTOR;
typedef enum _DVD_KEY_TYPE {
DvdChallengeKey = 0x01,
DvdBusKey1,
DvdBusKey2,
DvdTitleKey,
DvdAsf,
DvdSetRpcKey = 0x6,
DvdGetRpcKey = 0x8,
DvdDiskKey = 0x80,
DvdInvalidateAGID = 0x3f
DvdChallengeKey = 0x01,
DvdBusKey1,
DvdBusKey2,
DvdTitleKey,
DvdAsf,
DvdSetRpcKey = 0x6,
DvdGetRpcKey = 0x8,
DvdDiskKey = 0x80,
DvdInvalidateAGID = 0x3f
} DVD_KEY_TYPE;
typedef struct _DVD_COPY_PROTECT_KEY {
ULONG KeyLength;
DVD_SESSION_ID SessionId;
DVD_KEY_TYPE KeyType;
ULONG KeyFlags;
union {
HANDLE FileHandle;
LARGE_INTEGER TitleOffset;
} Parameters;
UCHAR KeyData[0];
ULONG KeyLength;
DVD_SESSION_ID SessionId;
DVD_KEY_TYPE KeyType;
ULONG KeyFlags;
union {
HANDLE FileHandle;
LARGE_INTEGER TitleOffset;
} Parameters;
UCHAR KeyData[0];
} DVD_COPY_PROTECT_KEY, *PDVD_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;
typedef struct _DVD_REGION {
UCHAR CopySystem;
UCHAR RegionData;
UCHAR SystemRegion;
UCHAR ResetCount;
UCHAR CopySystem;
UCHAR RegionData;
UCHAR SystemRegion;
UCHAR ResetCount;
} DVD_REGION, *PDVD_REGION;
#ifdef __cplusplus
}
#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_ */

View file

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

View file

@ -80,6 +80,17 @@ DEFINE_GUID(GUID_DEVINTERFACE_HIDDEN_VOLUME,
#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_
#define IOCTL_STORAGE_BASE FILE_DEVICE_MASS_STORAGE
@ -808,7 +819,7 @@ typedef struct _STORAGE_PRIORITY_HINT_SUPPORT {
#pragma warning(disable:4200)
#endif
#if defined(_MSC_EXTENSIONS)
// #if defined(_MSC_EXTENSIONS)
typedef struct _STORAGE_MEDIA_SERIAL_NUMBER_DATA {
USHORT Reserved;
@ -835,7 +846,7 @@ typedef struct _PERSISTENT_RESERVE_COMMAND {
} DUMMYUNIONNAME;
} PERSISTENT_RESERVE_COMMAND, *PPERSISTENT_RESERVE_COMMAND;
#endif /* defined(_MSC_EXTENSIONS) */
// #endif /* defined(_MSC_EXTENSIONS) */
#ifdef _MSC_VER
#pragma warning(pop) /* disable:4200 */
@ -1075,6 +1086,24 @@ typedef struct _STORAGE_IDLE_POWER {
ULONG D3IdleTimeout;
} 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
}
#endif

View file

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

View file

@ -2667,6 +2667,10 @@ buffer, use the table in the buffer annotations section.
#define __out _SAL1_Source_(__out, (), _Out_)
#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 __bcount(size) _SAL1_Source_(__bcount, (size), __notnull __byte_writableTo(size))
#define __in_ecount(size) _SAL1_Source_(__in_ecount, (size), _In_reads_(size))

View file

@ -48,6 +48,13 @@
#define __nullnullterminated
#define __in_data_source(src_sym)
#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_)

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_