| Server IP : 209.209.40.120 / Your IP : 216.73.217.112 Web Server : Microsoft-IIS/10.0 System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586 User : NEWWWW$ ( 0) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/shared/ |
Upload File : |
/* Copyright (c) Microsoft Corporation. All rights reserved. */
#ifndef __NTDDMMC__
#define __NTDDMMC__
#include <winapifamily.h>
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#ifdef __cplusplus
extern "C" {
#endif
#if _MSC_VER >= 1200
#pragma warning(push)
#endif
#pragma warning(disable:4200) // array[0] is not a warning for this file
#pragma warning(disable:4214) // bitfield other than int
//
// NOTE: All FEATURE_* structures may be extended. use of these structures
// requires verification that the FeatureHeader->AdditionLength field
// contains AT LEAST enough data to cover the data fields being accessed.
// This is due to the design, which allows extending the size of the
// various structures, which will result in these structures sizes
// being changed over time.
// A 0-element array is however not declared in the variable size
// structures. Such array is declared on some structures to preserve
// legacy, yet it is deprecated. To access variable size structures,
// as they are always at the end of the fixed size structure, use a sizeof
// of the declared fixed size structure as an offset.
// *** Programmers beware! ***
//
//
// NOTE: This is based on MMC 3, extended to MMC 5 rev 3
// Further revisions will maintain backward compatibility
// with the non-reserved fields listed here. If you need
// to access a new field, please typecast to FEATURE_DATA_RESERVED
// and access the appropriate bits there.
//
//
// NOTE: The definition of FEATURE_DATA_REMOVABLE_MEDIUM is based on MMC 6 rev 2.
// MMC 5 rev 4, section 5.3.4, specified bit 4 after feature header as reserved.
// MMC 6 rev 2, section 5.3.4, specifies this bit as the Load bit.
//
typedef struct _GET_CONFIGURATION_HEADER {
UCHAR DataLength[4]; // [0] == MSB, [3] == LSB
UCHAR Reserved[2];
UCHAR CurrentProfile[2]; // [0] == MSB, [1] == LSB
#if !defined(__midl)
UCHAR Data[0]; // extra data, typically FEATURE_HEADER
#endif
} GET_CONFIGURATION_HEADER, *PGET_CONFIGURATION_HEADER;
typedef struct _FEATURE_HEADER {
UCHAR FeatureCode[2]; // [0] == MSB, [1] == LSB
UCHAR Current : 1; // The feature is currently active
UCHAR Persistent : 1; // The feature is always current
UCHAR Version : 4;
UCHAR Reserved0 : 2;
UCHAR AdditionalLength; // sizeof(Header) + AdditionalLength = size
} FEATURE_HEADER, *PFEATURE_HEADER;
typedef enum _FEATURE_PROFILE_TYPE {
ProfileInvalid = 0x0000,
ProfileNonRemovableDisk = 0x0001,
ProfileRemovableDisk = 0x0002,
ProfileMOErasable = 0x0003,
ProfileMOWriteOnce = 0x0004,
ProfileAS_MO = 0x0005,
// Reserved 0x0006 - 0x0007
ProfileCdrom = 0x0008,
ProfileCdRecordable = 0x0009,
ProfileCdRewritable = 0x000a,
// Reserved 0x000b - 0x000f
ProfileDvdRom = 0x0010,
ProfileDvdRecordable = 0x0011,
ProfileDvdRam = 0x0012,
ProfileDvdRewritable = 0x0013, // restricted overwrite
ProfileDvdRWSequential = 0x0014,
ProfileDvdDashRDualLayer = 0x0015,
ProfileDvdDashRLayerJump = 0x0016,
// Reserved 0x0017 - 0x0019
ProfileDvdPlusRW = 0x001A,
ProfileDvdPlusR = 0x001B,
// Reserved 0x001C - 001F
ProfileDDCdrom = 0x0020, // obsolete
ProfileDDCdRecordable = 0x0021, // obsolete
ProfileDDCdRewritable = 0x0022, // obsolete
// Reserved 0x0023 - 0x0029
ProfileDvdPlusRWDualLayer = 0x002A,
ProfileDvdPlusRDualLayer = 0x002B,
// Reserved 0x002C - 0x003F
ProfileBDRom = 0x0040,
ProfileBDRSequentialWritable = 0x0041, // BD-R 'SRM'
ProfileBDRRandomWritable = 0x0042, // BD-R 'RRM'
ProfileBDRewritable = 0x0043,
// Reserved 0x0044 - 0x004F
ProfileHDDVDRom = 0x0050,
ProfileHDDVDRecordable = 0x0051,
ProfileHDDVDRam = 0x0052,
ProfileHDDVDRewritable = 0x0053,
// Reserved 0x0054 - 0x0057
ProfileHDDVDRDualLayer = 0x0058,
// Reserved 0x0059 - 0x0059
ProfileHDDVDRWDualLayer = 0x005A,
// Reserved 0x005B - 0xfffe
ProfileNonStandard = 0xffff
} FEATURE_PROFILE_TYPE, *PFEATURE_PROFILE_TYPE;
typedef enum _FEATURE_NUMBER {
FeatureProfileList = 0x0000,
FeatureCore = 0x0001,
FeatureMorphing = 0x0002,
FeatureRemovableMedium = 0x0003,
FeatureWriteProtect = 0x0004,
// Reserved 0x0005 - 0x000f
FeatureRandomReadable = 0x0010,
// Reserved 0x0011 - 0x001c
FeatureMultiRead = 0x001D,
FeatureCdRead = 0x001E,
FeatureDvdRead = 0x001F,
FeatureRandomWritable = 0x0020,
FeatureIncrementalStreamingWritable = 0x0021,
FeatureSectorErasable = 0x0022,
FeatureFormattable = 0x0023,
FeatureDefectManagement = 0x0024,
FeatureWriteOnce = 0x0025,
FeatureRestrictedOverwrite = 0x0026,
FeatureCdrwCAVWrite = 0x0027,
FeatureMrw = 0x0028,
FeatureEnhancedDefectReporting = 0x0029,
FeatureDvdPlusRW = 0x002A,
FeatureDvdPlusR = 0x002B,
FeatureRigidRestrictedOverwrite = 0x002C,
FeatureCdTrackAtOnce = 0x002D,
FeatureCdMastering = 0x002E,
FeatureDvdRecordableWrite = 0x002F, // both -R and -RW
FeatureDDCDRead = 0x0030, // obsolete
FeatureDDCDRWrite = 0x0031, // obsolete
FeatureDDCDRWWrite = 0x0032, // obsolete
FeatureLayerJumpRecording = 0x0033,
// Reserved 0x0034 - 0x0036
FeatureCDRWMediaWriteSupport = 0x0037,
FeatureBDRPseudoOverwrite = 0x0038,
// Reserved 0x0039
FeatureDvdPlusRWDualLayer = 0x003A,
FeatureDvdPlusRDualLayer = 0x003B,
// Reserved 0x003c - 0x003f
FeatureBDRead = 0x0040,
FeatureBDWrite = 0x0041,
FeatureTSR = 0x0042,
// Reserved 0x0043 - 0x004f
FeatureHDDVDRead = 0x0050,
FeatureHDDVDWrite = 0x0051,
// Reserved 0x0052 - 0x007f
FeatureHybridDisc = 0x0080,
// Reserved 0x0081 - 0x00ff
FeaturePowerManagement = 0x0100,
FeatureSMART = 0x0101,
FeatureEmbeddedChanger = 0x0102,
FeatureCDAudioAnalogPlay = 0x0103, // obsolete
FeatureMicrocodeUpgrade = 0x0104,
FeatureTimeout = 0x0105,
FeatureDvdCSS = 0x0106,
FeatureRealTimeStreaming = 0x0107,
FeatureLogicalUnitSerialNumber = 0x0108,
FeatureMediaSerialNumber = 0x0109,
FeatureDiscControlBlocks = 0x010A,
FeatureDvdCPRM = 0x010B,
FeatureFirmwareDate = 0x010C,
FeatureAACS = 0x010D,
// Reserved 0x010e - 0x010f
FeatureVCPS = 0x0110,
// Reserved 0x0111 - 0xfeff
// Vendor Unique 0xff00 - 0xffff
} FEATURE_NUMBER, *PFEATURE_NUMBER;
// 0x0000 - FeatureProfileList
// an integral multiple of the _EX structures are returned for page 0000
typedef struct _FEATURE_DATA_PROFILE_LIST_EX {
UCHAR ProfileNumber[2]; // [0] == MSB, [1] == LSB
UCHAR Current : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
} FEATURE_DATA_PROFILE_LIST_EX, *PFEATURE_DATA_PROFILE_LIST_EX;
typedef struct _FEATURE_DATA_PROFILE_LIST {
FEATURE_HEADER Header;
#if !defined(__midl)
FEATURE_DATA_PROFILE_LIST_EX Profiles[0];
#endif
} FEATURE_DATA_PROFILE_LIST, *PFEATURE_DATA_PROFILE_LIST;
// 0x0001 - FeatureCore
typedef struct _FEATURE_DATA_CORE {
FEATURE_HEADER Header;
UCHAR PhysicalInterface[4]; // [0] == MSB, [3] == LSB
UCHAR DeviceBusyEvent : 1;
UCHAR INQUIRY2 : 1;
UCHAR Reserved1 : 6;
UCHAR Reserved2[3];
} FEATURE_DATA_CORE, *PFEATURE_DATA_CORE;
// 0x0002 - FeatureMorphing
typedef struct _FEATURE_DATA_MORPHING {
FEATURE_HEADER Header;
UCHAR Asynchronous : 1;
UCHAR OCEvent : 1;
UCHAR Reserved01 : 6;
UCHAR Reserved2[3];
} FEATURE_DATA_MORPHING, *PFEATURE_DATA_MORPHING;
// 0x0003 - FeatureRemovableMedium
typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM {
FEATURE_HEADER Header;
UCHAR Lockable : 1;
UCHAR DBML : 1; // MMC 6 rev 2g
UCHAR DefaultToPrevent : 1;
UCHAR Eject : 1;
UCHAR Load : 1; // MMC 6 rev 2
UCHAR LoadingMechanism : 3;
UCHAR Reserved3[3];
} FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM;
// 0x0004 - FeatureWriteProtect
typedef struct _FEATURE_DATA_WRITE_PROTECT {
FEATURE_HEADER Header;
UCHAR SupportsSWPPBit : 1;
UCHAR SupportsPersistentWriteProtect : 1;
UCHAR WriteInhibitDCB : 1;
UCHAR DiscWriteProtectPAC : 1;
UCHAR Reserved01 : 4;
UCHAR Reserved2[3];
} FEATURE_DATA_WRITE_PROTECT, *PFEATURE_DATA_WRITE_PROTECT;
// 0x0005 - 0x000f are Reserved
// 0x0010 - FeatureRandomReadable
typedef struct _FEATURE_DATA_RANDOM_READABLE {
FEATURE_HEADER Header;
UCHAR LogicalBlockSize[4];
UCHAR Blocking[2];
UCHAR ErrorRecoveryPagePresent : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
} FEATURE_DATA_RANDOM_READABLE, *PFEATURE_DATA_RANDOM_READABLE;
// 0x0011 - 0x001c are Reserved
// 0x001D - FeatureMultiRead
typedef struct _FEATURE_DATA_MULTI_READ {
FEATURE_HEADER Header;
} FEATURE_DATA_MULTI_READ, *PFEATURE_DATA_MULTI_READ;
// 0x001E - FeatureCdRead
typedef struct _FEATURE_DATA_CD_READ {
FEATURE_HEADER Header;
UCHAR CDText : 1;
UCHAR C2ErrorData : 1;
UCHAR Reserved01 : 5;
UCHAR DigitalAudioPlay : 1;
UCHAR Reserved2[3];
} FEATURE_DATA_CD_READ, *PFEATURE_DATA_CD_READ;
// 0x001F - FeatureDvdRead
typedef struct _FEATURE_DATA_DVD_READ {
FEATURE_HEADER Header;
UCHAR Multi110 : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
UCHAR DualDashR : 1;
UCHAR Reserved3 : 7;
UCHAR Reserved4;
} FEATURE_DATA_DVD_READ, *PFEATURE_DATA_DVD_READ;
// 0x0020 - FeatureRandomWritable
typedef struct _FEATURE_DATA_RANDOM_WRITABLE {
FEATURE_HEADER Header;
UCHAR LastLBA[4];
UCHAR LogicalBlockSize[4];
UCHAR Blocking[2];
UCHAR ErrorRecoveryPagePresent : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
} FEATURE_DATA_RANDOM_WRITABLE, *PFEATURE_DATA_RANDOM_WRITABLE;
// 0x0021 - FeatureIncrementalStreamingWritable
typedef struct _FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE {
FEATURE_HEADER Header;
UCHAR DataTypeSupported[2]; // [0] == MSB, [1] == LSB // see also FeatureCdTrackAtOnce
UCHAR BufferUnderrunFree : 1;
UCHAR AddressModeReservation : 1;
UCHAR TrackRessourceInformation : 1;
UCHAR Reserved01 : 5;
UCHAR NumberOfLinkSizes;
#if !defined(__midl)
UCHAR LinkSize[0];
#endif
} FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE, *PFEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE;
// 0x0022 - FeatureSectorErasable
typedef struct _FEATURE_DATA_SECTOR_ERASABLE {
FEATURE_HEADER Header;
} FEATURE_DATA_SECTOR_ERASABLE, *PFEATURE_DATA_SECTOR_ERASABLE;
// 0x0023 - FeatureFormattable
typedef struct _FEATURE_DATA_FORMATTABLE {
FEATURE_HEADER Header;
UCHAR FullCertification : 1;
UCHAR QuickCertification : 1;
UCHAR SpareAreaExpansion : 1;
UCHAR RENoSpareAllocated : 1;
UCHAR Reserved1 : 4;
UCHAR Reserved2[3];
UCHAR RRandomWritable : 1;
UCHAR Reserved3 : 7;
UCHAR Reserved4[3];
} FEATURE_DATA_FORMATTABLE, *PFEATURE_DATA_FORMATTABLE;
// 0x0024 - FeatureDefectManagement
typedef struct _FEATURE_DATA_DEFECT_MANAGEMENT {
FEATURE_HEADER Header;
UCHAR Reserved1 : 7;
UCHAR SupplimentalSpareArea : 1;
UCHAR Reserved2[3];
} FEATURE_DATA_DEFECT_MANAGEMENT, *PFEATURE_DATA_DEFECT_MANAGEMENT;
// 0x0025 - FeatureWriteOnce
typedef struct _FEATURE_DATA_WRITE_ONCE {
FEATURE_HEADER Header;
UCHAR LogicalBlockSize[4];
UCHAR Blocking[2];
UCHAR ErrorRecoveryPagePresent : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
} FEATURE_DATA_WRITE_ONCE, *PFEATURE_DATA_WRITE_ONCE;
// 0x0026 - FeatureRestrictedOverwrite
typedef struct _FEATURE_DATA_RESTRICTED_OVERWRITE {
FEATURE_HEADER Header;
} FEATURE_DATA_RESTRICTED_OVERWRITE, *PFEATURE_DATA_RESTRICTED_OVERWRITE;
// 0x0027 - FeatureCdrwCAVWrite
typedef struct _FEATURE_DATA_CDRW_CAV_WRITE {
FEATURE_HEADER Header;
UCHAR Reserved1[4];
/*
UCHAR SupportsWritingCDRWSubType0 : 1; // 1x - 4x media
UCHAR SupportsWritingCDRWSubType1 : 1; // 4x - 10x media ??
UCHAR SupportsWritingCDRWSubType2 : 1; // ???
UCHAR SupportsWritingCDRWSubType3 : 1; // ???
UCHAR SupportsWritingCDRWSubType4 : 1; // ???
UCHAR SupportsWritingCDRWSubType5 : 1; // ???
UCHAR SupportsWritingCDRWSubType6 : 1; // ???
UCHAR SupportsWritingCDRWSubType7 : 1; // ???
UCHAR Reserved2[3];
*/
} FEATURE_DATA_CDRW_CAV_WRITE, *PFEATURE_DATA_CDRW_CAV_WRITE;
// 0x0028 - FeatureMrw
typedef struct _FEATURE_DATA_MRW {
FEATURE_HEADER Header;
UCHAR Write : 1; // Cd Write
UCHAR DvdPlusRead : 1;
UCHAR DvdPlusWrite : 1;
UCHAR Reserved01 : 5;
UCHAR Reserved2[3];
} FEATURE_DATA_MRW, *PFEATURE_DATA_MRW;
// 0x0029 - Enhanced Defect Reporting
typedef struct _FEATURE_ENHANCED_DEFECT_REPORTING {
FEATURE_HEADER Header;
UCHAR DRTDMSupported : 1;
UCHAR Reserved0 : 7;
UCHAR NumberOfDBICacheZones;
UCHAR NumberOfEntries[2];
} FEATURE_ENHANCED_DEFECT_REPORTING, *PFEATURE_ENHANCED_DEFECT_REPORTING;
// 0x002A - FeatureDvdPlusRW
typedef struct _FEATURE_DATA_DVD_PLUS_RW {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR CloseOnly : 1;
UCHAR QuickStart : 1;
UCHAR Reserved02 : 6;
UCHAR Reserved03[2];
} FEATURE_DATA_DVD_PLUS_RW, *PFEATURE_DATA_DVD_PLUS_RW;
// 0x002B - FeatureDvdPlusR
typedef struct _FEATURE_DATA_DVD_PLUS_R {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_DATA_DVD_PLUS_R, *PFEATURE_DATA_DVD_PLUS_R;
// 0x002C - FeatureDvdRwRestrictedOverwrite
typedef struct _FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE {
FEATURE_HEADER Header;
UCHAR Blank : 1;
UCHAR Intermediate : 1;
UCHAR DefectStatusDataRead : 1;
UCHAR DefectStatusDataGenerate : 1;
UCHAR Reserved0 : 4;
UCHAR Reserved1[3];
} FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE, *PFEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE;
// 0x002D - FeatureCdTrackAtOnce
typedef struct _FEATURE_DATA_CD_TRACK_AT_ONCE {
FEATURE_HEADER Header;
UCHAR RWSubchannelsRecordable : 1;
UCHAR CdRewritable : 1;
UCHAR TestWriteOk : 1;
UCHAR RWSubchannelPackedOk : 1; // MMC 3 +
UCHAR RWSubchannelRawOk : 1; // MMC 3 +
UCHAR Reserved1 : 1;
UCHAR BufferUnderrunFree : 1; // MMC 3 +
UCHAR Reserved3 : 1;
UCHAR Reserved2;
UCHAR DataTypeSupported[2]; // [0] == MSB, [1] == LSB // see also FeatureIncrementalStreamingWritable
} FEATURE_DATA_CD_TRACK_AT_ONCE, *PFEATURE_DATA_CD_TRACK_AT_ONCE;
// 0x002E - FeatureCdMastering
typedef struct _FEATURE_DATA_CD_MASTERING {
FEATURE_HEADER Header;
UCHAR RWSubchannelsRecordable : 1;
UCHAR CdRewritable : 1;
UCHAR TestWriteOk : 1;
UCHAR RawRecordingOk : 1;
UCHAR RawMultiSessionOk : 1;
UCHAR SessionAtOnceOk : 1;
UCHAR BufferUnderrunFree : 1;
UCHAR Reserved1 : 1;
UCHAR MaximumCueSheetLength[3]; // [0] == MSB, [2] == LSB
} FEATURE_DATA_CD_MASTERING, *PFEATURE_DATA_CD_MASTERING;
// 0x002F - FeatureDvdRecordableWrite
typedef struct _FEATURE_DATA_DVD_RECORDABLE_WRITE {
FEATURE_HEADER Header;
UCHAR Reserved1 : 1;
UCHAR DVD_RW : 1;
UCHAR TestWrite : 1;
UCHAR RDualLayer : 1;
UCHAR Reserved02 : 2;
UCHAR BufferUnderrunFree : 1;
UCHAR Reserved3 : 1;
UCHAR Reserved4[3];
} FEATURE_DATA_DVD_RECORDABLE_WRITE, *PFEATURE_DATA_DVD_RECORDABLE_WRITE;
// 0x0030 - FeatureDDCDRead
typedef struct _FEATURE_DATA_DDCD_READ {
FEATURE_HEADER Header;
} FEATURE_DATA_DDCD_READ, *PFEATURE_DATA_DDCD_READ;
// 0x0031 - FeatureDDCDRWrite (obsolete)
typedef struct _FEATURE_DATA_DDCD_R_WRITE {
FEATURE_HEADER Header;
UCHAR Reserved1 : 2;
UCHAR TestWrite : 1;
UCHAR Reserved2 : 5;
UCHAR Reserved3[3];
} FEATURE_DATA_DDCD_R_WRITE, *PFEATURE_DATA_DDCD_R_WRITE;
// 0x0032 - FeatureDDCDRWWrite (obsolete)
typedef struct _FEATURE_DATA_DDCD_RW_WRITE {
FEATURE_HEADER Header;
UCHAR Blank : 1;
UCHAR Intermediate : 1;
UCHAR Reserved1 : 6;
UCHAR Reserved2[3];
} FEATURE_DATA_DDCD_RW_WRITE, *PFEATURE_DATA_DDCD_RW_WRITE;
// 0x0033 - FeatureLayerJumpRecording
typedef struct _FEATURE_DATA_LAYER_JUMP_RECORDING {
FEATURE_HEADER Header;
UCHAR Reserved0[3];
UCHAR NumberOfLinkSizes;
#if !defined(__midl)
UCHAR LinkSizes[0];
#endif
} FEATURE_DATA_LAYER_JUMP_RECORDING, *PFEATURE_DATA_LAYER_JUMP_RECORDING;
// 0x0034 - 0x0036 are Reserved
// 0x0037 - FeatureCDRWMediaWriteSupport
typedef struct _FEATURE_CD_RW_MEDIA_WRITE_SUPPORT {
FEATURE_HEADER Header;
UCHAR Reserved1;
struct{
UCHAR Subtype0 :1;
UCHAR Subtype1 :1;
UCHAR Subtype2 :1;
UCHAR Subtype3 :1;
UCHAR Subtype4 :1;
UCHAR Subtype5 :1;
UCHAR Subtype6 :1;
UCHAR Subtype7 :1;
} CDRWMediaSubtypeSupport;
UCHAR Reserved2[2];
} FEATURE_CD_RW_MEDIA_WRITE_SUPPORT, *PFEATURE_CD_RW_MEDIA_WRITE_SUPPORT;
// 0x0038 - FeatureBDRPseudoOverwrite
typedef struct _FEATURE_BD_R_PSEUDO_OVERWRITE {
FEATURE_HEADER Header;
UCHAR Reserved[4];
} FEATURE_BD_R_PSEUDO_OVERWRITE, *PFEATURE_BD_R_PSEUDO_OVERWRITE;
// 0x0039 is Reserved
// 0x003A - FeatureDvdPlusRWDualLayer
typedef struct _FEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR CloseOnly : 1;
UCHAR QuickStart : 1;
UCHAR Reserved2 : 6;
UCHAR Reserved3[2];
} FEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER, *PFEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER;
// 0x003B - FeatureDvdPlusRDualLayer
typedef struct _FEATURE_DATA_DVD_PLUS_R_DUAL_LAYER {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_DATA_DVD_PLUS_R_DUAL_LAYER, *PFEATURE_DATA_DVD_PLUS_R_DUAL_LAYER;
// 0x003C - 0x0039 are Reserved
// 0x0040 - FeatureBDRead
typedef struct _BD_CLASS_SUPPORT_BITMAP {
UCHAR Version8 :1;
UCHAR Version9 :1;
UCHAR Version10 :1;
UCHAR Version11 :1;
UCHAR Version12 :1;
UCHAR Version13 :1;
UCHAR Version14 :1;
UCHAR Version15 :1;
UCHAR Version0 :1;
UCHAR Version1 :1;
UCHAR Version2 :1;
UCHAR Version3 :1;
UCHAR Version4 :1;
UCHAR Version5 :1;
UCHAR Version6 :1;
UCHAR Version7 :1;
} BD_CLASS_SUPPORT_BITMAP, *PBD_CLASS_SUPPORT_BITMAP;
typedef struct _FEATURE_BD_READ {
FEATURE_HEADER Header;
UCHAR Reserved[4];
BD_CLASS_SUPPORT_BITMAP Class0BitmapBDREReadSupport;
BD_CLASS_SUPPORT_BITMAP Class1BitmapBDREReadSupport;
BD_CLASS_SUPPORT_BITMAP Class2BitmapBDREReadSupport;
BD_CLASS_SUPPORT_BITMAP Class3BitmapBDREReadSupport;
BD_CLASS_SUPPORT_BITMAP Class0BitmapBDRReadSupport;
BD_CLASS_SUPPORT_BITMAP Class1BitmapBDRReadSupport;
BD_CLASS_SUPPORT_BITMAP Class2BitmapBDRReadSupport;
BD_CLASS_SUPPORT_BITMAP Class3BitmapBDRReadSupport;
BD_CLASS_SUPPORT_BITMAP Class0BitmapBDROMReadSupport;
BD_CLASS_SUPPORT_BITMAP Class1BitmapBDROMReadSupport;
BD_CLASS_SUPPORT_BITMAP Class2BitmapBDROMReadSupport;
BD_CLASS_SUPPORT_BITMAP Class3BitmapBDROMReadSupport;
} FEATURE_BD_READ, *PFEATURE_BD_READ;
// 0x0041 - FeatureBDWrite
typedef struct _FEATURE_BD_WRITE {
FEATURE_HEADER Header;
UCHAR SupportsVerifyNotRequired :1;
UCHAR Reserved1 :7;
UCHAR Reserved2[3];
BD_CLASS_SUPPORT_BITMAP Class0BitmapBDREWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class1BitmapBDREWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class2BitmapBDREWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class3BitmapBDREWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class0BitmapBDRWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class1BitmapBDRWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class2BitmapBDRWriteSupport;
BD_CLASS_SUPPORT_BITMAP Class3BitmapBDRWriteSupport;
} FEATURE_BD_WRITE, *PFEATURE_BD_WRITE;
// 0x0042 - FeatureTSR
typedef struct _FEATURE_TSR {
FEATURE_HEADER Header;
} FEATURE_TSR, *PFEATURE_TSR;
// 0x0043 - 0x004F are Reserved
// 0x0050 - FeatureHDDVDRead
typedef struct _FEATURE_DATA_HDDVD_READ {
FEATURE_HEADER Header;
UCHAR Recordable : 1;
UCHAR Reserved0 : 7;
UCHAR Reserved1;
UCHAR Rewritable : 1; // Stands for HD DVD-RAM
UCHAR Reserved2 : 7;
UCHAR Reserved3;
} FEATURE_DATA_HDDVD_READ, *PFEATURE_DATA_HDDVD_READ;
// 0x0051 - FeatureHDDVDWrite
typedef struct _FEATURE_DATA_HDDVD_WRITE {
FEATURE_HEADER Header;
UCHAR Recordable : 1;
UCHAR Reserved0 : 7;
UCHAR Reserved1;
UCHAR Rewritable : 1; // Stands for HD DVD-RAM
UCHAR Reserved2 : 7;
UCHAR Reserved3;
} FEATURE_DATA_HDDVD_WRITE, *PFEATURE_DATA_HDDVD_WRITE;
// 0x0052 - 0x007F are Reserved
// 0x0080 - FeatureHybridDisc
typedef struct _FEATURE_HYBRID_DISC {
FEATURE_HEADER Header;
UCHAR ResetImmunity : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_HYBRID_DISC, *PFEATURE_HYBRID_DISC;
// 0x0081 - 0x00FF are Reserved
// 0x0100 - FeaturePowerManagement
typedef struct _FEATURE_DATA_POWER_MANAGEMENT {
FEATURE_HEADER Header;
} FEATURE_DATA_POWER_MANAGEMENT, *PFEATURE_DATA_POWER_MANAGEMENT;
// 0x0101 - FeatureSMART (not in MMC 2)
typedef struct _FEATURE_DATA_SMART {
FEATURE_HEADER Header;
UCHAR FaultFailureReportingPagePresent : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved02[3];
} FEATURE_DATA_SMART, *PFEATURE_DATA_SMART;
// 0x0102 - FeatureEmbeddedChanger
typedef struct _FEATURE_DATA_EMBEDDED_CHANGER {
FEATURE_HEADER Header;
UCHAR Reserved1 : 2;
UCHAR SupportsDiscPresent : 1;
UCHAR Reserved2 : 1;
UCHAR SideChangeCapable : 1;
UCHAR Reserved3 : 3;
UCHAR Reserved4[2];
UCHAR HighestSlotNumber : 5;
UCHAR Reserved : 3;
} FEATURE_DATA_EMBEDDED_CHANGER, *PFEATURE_DATA_EMBEDDED_CHANGER;
// 0x0103 - FeatureCDAudioAnalogPlay (obsolete)
typedef struct _FEATURE_DATA_CD_AUDIO_ANALOG_PLAY {
FEATURE_HEADER Header;
UCHAR SeperateVolume : 1;
UCHAR SeperateChannelMute : 1;
UCHAR ScanSupported : 1;
UCHAR Reserved1 : 5;
UCHAR Reserved2;
UCHAR NumerOfVolumeLevels[2]; // [0] == MSB, [1] == LSB
} FEATURE_DATA_CD_AUDIO_ANALOG_PLAY, *PFEATURE_DATA_CD_AUDIO_ANALOG_PLAY;
// 0x0104 - FeatureMicrocodeUpgrade
typedef struct _FEATURE_DATA_MICROCODE_UPDATE {
FEATURE_HEADER Header;
UCHAR M5 : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_DATA_MICROCODE_UPDATE, *PFEATURE_DATA_MICROCODE_UPDATE;
// 0x0105 - FeatureTimeout
typedef struct _FEATURE_DATA_TIMEOUT {
FEATURE_HEADER Header;
UCHAR Group3 : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2;
UCHAR UnitLength[2];
} FEATURE_DATA_TIMEOUT, *PFEATURE_DATA_TIMEOUT;
// 0x0106 - FeatureDvdCSS
typedef struct _FEATURE_DATA_DVD_CSS {
FEATURE_HEADER Header;
UCHAR Reserved1[3];
UCHAR CssVersion;
} FEATURE_DATA_DVD_CSS, *PFEATURE_DATA_DVD_CSS;
// 0x0107 - FeatureRealTimeStreaming
typedef struct _FEATURE_DATA_REAL_TIME_STREAMING {
FEATURE_HEADER Header;
UCHAR StreamRecording : 1;
UCHAR WriteSpeedInGetPerf : 1;
UCHAR WriteSpeedInMP2A : 1;
UCHAR SetCDSpeed : 1;
UCHAR ReadBufferCapacityBlock : 1;
UCHAR Reserved1 : 3;
UCHAR Reserved2[3];
} FEATURE_DATA_REAL_TIME_STREAMING, *PFEATURE_DATA_REAL_TIME_STREAMING;
// 0x0108 - FeatureLogicalUnitSerialNumber
typedef struct _FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER {
FEATURE_HEADER Header;
#if !defined(__midl)
UCHAR SerialNumber[0];
#endif
} FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER, *PFEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER;
// 0x0109 - FeatureMediaSerialNumber
typedef struct _FEATURE_MEDIA_SERIAL_NUMBER {
FEATURE_HEADER Header;
} FEATURE_MEDIA_SERIAL_NUMBER, *PFEATURE_MEDIA_SERIAL_NUMBER;
// 0x010A - FeatureDiscControlBlocks
// an integral multiple of the _EX structures are returned for page 010A
typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS_EX {
UCHAR ContentDescriptor[4];
} FEATURE_DATA_DISC_CONTROL_BLOCKS_EX, *PFEATURE_DATA_DISC_CONTROL_BLOCKS_EX;
// use a zero-sized array for this....
typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS {
FEATURE_HEADER Header;
#if !defined(__midl)
FEATURE_DATA_DISC_CONTROL_BLOCKS_EX Data[0];
#endif
} FEATURE_DATA_DISC_CONTROL_BLOCKS, *PFEATURE_DATA_DISC_CONTROL_BLOCKS;
// 0x010B - FeatureDvdCPRM
typedef struct _FEATURE_DATA_DVD_CPRM {
FEATURE_HEADER Header;
UCHAR Reserved0[3];
UCHAR CPRMVersion;
} FEATURE_DATA_DVD_CPRM, *PFEATURE_DATA_DVD_CPRM;
// 0x010C - FeatureFirmwareDate
typedef struct _FEATURE_DATA_FIRMWARE_DATE {
FEATURE_HEADER Header;
UCHAR Year[4];
UCHAR Month[2];
UCHAR Day[2];
UCHAR Hour[2];
UCHAR Minute[2];
UCHAR Seconds[2];
UCHAR Reserved[2];
} FEATURE_DATA_FIRMWARE_DATE, *PFEATURE_DATA_FIRMWARE_DATE;
// 0x010D - FeatureAACS
typedef struct _FEATURE_DATA_AACS {
FEATURE_HEADER Header;
UCHAR BindingNonceGeneration : 1;
UCHAR Reserved0 : 7;
UCHAR BindingNonceBlockCount;
UCHAR NumberOfAGIDs : 4;
UCHAR Reserved1 : 4;
UCHAR AACSVersion;
} FEATURE_DATA_AACS, *PFEATURE_DATA_AACS;
// 0x010E - 0x010F are Reserved
// 0x0110 - FeatureVCPS
typedef struct _FEATURE_VCPS {
FEATURE_HEADER Header;
UCHAR Reserved[4];
} FEATURE_VCPS, *PFEATURE_VCPS;
// 0x0111 - 0xFEFF are Reserved
typedef struct _FEATURE_DATA_RESERVED {
FEATURE_HEADER Header;
#if !defined(__midl)
UCHAR Data[0];
#endif
} FEATURE_DATA_RESERVED, *PFEATURE_DATA_RESERVED;
// 0xff00 - 0xffff are Vendor Specific
typedef struct _FEATURE_DATA_VENDOR_SPECIFIC {
FEATURE_HEADER Header;
#if !defined(__midl)
UCHAR VendorSpecificData[0];
#endif
} FEATURE_DATA_VENDOR_SPECIFIC, *PFEATURE_DATA_VENDOR_SPECIFIC;
//
// NOTE: All FEATURE_* structures may be extended. use of these structures
// requires verification that the FeatureHeader->AdditionLength field
// contains AT LEAST enough data to cover the data fields being accessed.
// This is due to the design, which allows extending the size of the
// various structures, which will result in these structures sizes
// being changed over time.
// A 0-element array is however not declared in the variable size
// structures. Such array is declared on some structures to preserve
// legacy, yet it is deprecated. To access variable size structures,
// as they are always at the end of the fixed size structure, use a sizeof
// of the declared fixed size structure as an offset.
// *** Programmers beware! ***
//
//
// NOTE: This is based on MMC 3, extended to MMC 5 rev 3
// Further revisions will maintain backward compatibility
// with the non-reserved fields listed here. If you need
// to access a new field, please typecast to FEATURE_DATA_RESERVED
// and access the appropriate bits there.
//
//
// IOCTL_CDROM_GET_CONFIGURATION returns a FEATURE_* struct, which always
// starts with a FEATURE_HEADER structure.
//
//
// these are to be used for the request type
//
#define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ALL 0x0
#define SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT 0x1
#define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ONE 0x2
typedef struct _GET_CONFIGURATION_IOCTL_INPUT {
FEATURE_NUMBER Feature;
ULONG RequestType; // SCSI_GET_CONFIGURATION_REQUEST_TYPE_*
PVOID Reserved[2];
} GET_CONFIGURATION_IOCTL_INPUT, *PGET_CONFIGURATION_IOCTL_INPUT;
#if defined(_WIN64)
typedef struct _GET_CONFIGURATION_IOCTL_INPUT32 {
FEATURE_NUMBER Feature;
ULONG RequestType; // SCSI_GET_CONFIGURATION_REQUEST_TYPE_*
VOID* UPOINTER_32 Reserved[2];
} GET_CONFIGURATION_IOCTL_INPUT32, *PGET_CONFIGURATION_IOCTL_INPUT32;
#endif
#if _MSC_VER >= 1200
#pragma warning(pop) // un-sets any local warning changes
#else
#pragma warning(default:4200) // array[0] is not a warning for this file
#endif
#ifdef __cplusplus
}
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#endif // __NTDDMMC__