ntddcdvd.h, ntddcdrm.h: sync with r/os svn@48878.
ntddmmc.h: add from r/os svn@48894.


git-svn-id: svn+ssh://svn.code.sf.net/p/mingw-w64/code/trunk@3642 4407c894-4637-0410-b4f5-ada5f102cad1
diff --git a/mingw-w64-headers/include/ntddcdrm.h b/mingw-w64-headers/include/ntddcdrm.h
index 0641166..c23487d 100644
--- a/mingw-w64-headers/include/ntddcdrm.h
+++ b/mingw-w64-headers/include/ntddcdrm.h
@@ -37,12 +37,18 @@
 #define IOCTL_CDROM_FIND_NEW_DEVICES \
   CTL_CODE(IOCTL_CDROM_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS)
 
+#define IOCTL_CDROM_GET_CONFIGURATION \
+  CTL_CODE(IOCTL_CDROM_BASE, 0x0016, METHOD_BUFFERED, FILE_READ_ACCESS)
+
 #define IOCTL_CDROM_GET_CONTROL \
   CTL_CODE(IOCTL_CDROM_BASE, 0x000D, METHOD_BUFFERED, FILE_READ_ACCESS)
 
 #define IOCTL_CDROM_GET_DRIVE_GEOMETRY \
   CTL_CODE(IOCTL_CDROM_BASE, 0x0013, METHOD_BUFFERED, FILE_READ_ACCESS)
 
+#define IOCTL_CDROM_GET_DRIVE_GEOMETRY_EX \
+  CTL_CODE(IOCTL_CDROM_BASE, 0x0014, METHOD_BUFFERED, FILE_READ_ACCESS)
+
 #define IOCTL_CDROM_GET_LAST_SESSION \
   CTL_CODE(IOCTL_CDROM_BASE, 0x000E, METHOD_BUFFERED, FILE_READ_ACCESS)
 
@@ -159,6 +165,13 @@
 
 #define CDROM_TOC_SIZE sizeof(CDROM_TOC)
 
+typedef struct _CDROM_TOC_SESSION_DATA {
+  UCHAR Length[2];
+  UCHAR FirstCompleteSession;
+  UCHAR LastCompleteSession;
+  TRACK_DATA TrackData[1];
+} CDROM_TOC_SESSION_DATA, *PCDROM_TOC_SESSION_DATA;
+
 typedef struct _CDROM_TOC_ATIP_DATA_BLOCK {
   UCHAR  CdrwReferenceSpeed : 3;
   UCHAR  Reserved3 : 1;
diff --git a/mingw-w64-headers/include/ntddcdvd.h b/mingw-w64-headers/include/ntddcdvd.h
index 9bd4b3c..c07164d 100644
--- a/mingw-w64-headers/include/ntddcdvd.h
+++ b/mingw-w64-headers/include/ntddcdvd.h
@@ -31,12 +31,18 @@
 
 #define IOCTL_DVD_BASE                    FILE_DEVICE_DVD
 
+#define IOCTL_STORAGE_SET_READ_AHEAD \
+  CTL_CODE(IOCTL_STORAGE_BASE, 0x0100, METHOD_BUFFERED, FILE_READ_ACCESS)
+
 #define IOCTL_DVD_END_SESSION \
   CTL_CODE(IOCTL_DVD_BASE, 0x0403, 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)
 
diff --git a/mingw-w64-headers/include/ntddmmc.h b/mingw-w64-headers/include/ntddmmc.h
new file mode 100644
index 0000000..f98368a
--- /dev/null
+++ b/mingw-w64-headers/include/ntddmmc.h
@@ -0,0 +1,661 @@
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the ReactOS PSDK package.
+ * No warranty is given; refer to the file DISCLAIMER within this package.
+ */
+
+#pragma once
+
+#define __NTDDMMC__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#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_HEADER {
+  UCHAR DataLength[4];
+  UCHAR Reserved[2];
+  UCHAR CurrentProfile[2];
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR Data[0];
+#endif
+} GET_CONFIGURATION_HEADER, *PGET_CONFIGURATION_HEADER;
+
+typedef struct _FEATURE_HEADER {
+  UCHAR FeatureCode[2];
+  UCHAR Current:1;
+  UCHAR Persistent:1;
+  UCHAR Version:4;
+  UCHAR Reserved0:2;
+  UCHAR AdditionalLength;
+} FEATURE_HEADER, *PFEATURE_HEADER;
+
+typedef enum _FEATURE_PROFILE_TYPE {
+  ProfileInvalid = 0x0000,
+  ProfileNonRemovableDisk = 0x0001,
+  ProfileRemovableDisk = 0x0002,
+  ProfileMOErasable = 0x0003,
+  ProfileMOWriteOnce = 0x0004,
+  ProfileAS_MO = 0x0005,
+  ProfileCdrom = 0x0008,
+  ProfileCdRecordable = 0x0009,
+  ProfileCdRewritable = 0x000a,
+  ProfileDvdRom = 0x0010,
+  ProfileDvdRecordable = 0x0011,
+  ProfileDvdRam = 0x0012,
+  ProfileDvdRewritable = 0x0013,
+  ProfileDvdRWSequential = 0x0014,
+  ProfileDvdDashRDualLayer = 0x0015,
+  ProfileDvdDashRLayerJump = 0x0016,
+  ProfileDvdPlusRW = 0x001A,
+  ProfileDvdPlusR = 0x001B,
+  ProfileDDCdrom = 0x0020,
+  ProfileDDCdRecordable = 0x0021,
+  ProfileDDCdRewritable = 0x0022,
+  ProfileDvdPlusRWDualLayer = 0x002A,
+  ProfileDvdPlusRDualLayer = 0x002B,
+  ProfileBDRom = 0x0040,
+  ProfileBDRSequentialWritable = 0x0041,
+  ProfileBDRRandomWritable = 0x0042,
+  ProfileBDRewritable = 0x0043,
+  ProfileHDDVDRom = 0x0050,
+  ProfileHDDVDRecordable = 0x0051,
+  ProfileHDDVDRam = 0x0052,
+  ProfileHDDVDRewritable = 0x0053,
+  ProfileHDDVDRDualLayer = 0x0058,
+  ProfileHDDVDRWDualLayer = 0x005A,
+  ProfileNonStandard = 0xffff
+} FEATURE_PROFILE_TYPE, *PFEATURE_PROFILE_TYPE;
+
+typedef enum _FEATURE_NUMBER {
+  FeatureProfileList = 0x0000,
+  FeatureCore = 0x0001,
+  FeatureMorphing = 0x0002,
+  FeatureRemovableMedium = 0x0003,
+  FeatureWriteProtect = 0x0004,
+  FeatureRandomReadable = 0x0010,
+  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,
+  FeatureDDCDRead = 0x0030,
+  FeatureDDCDRWrite = 0x0031,
+  FeatureDDCDRWWrite = 0x0032,
+  FeatureLayerJumpRecording = 0x0033,
+  FeatureCDRWMediaWriteSupport = 0x0037,
+  FeatureBDRPseudoOverwrite = 0x0038,
+  FeatureDvdPlusRWDualLayer = 0x003A,
+  FeatureDvdPlusRDualLayer = 0x003B,
+  FeatureBDRead = 0x0040,
+  FeatureBDWrite = 0x0041,
+  FeatureTSR = 0x0042,
+  FeatureHDDVDRead = 0x0050,
+  FeatureHDDVDWrite = 0x0051,
+  FeatureHybridDisc = 0x0080,
+  FeaturePowerManagement = 0x0100,
+  FeatureSMART = 0x0101,
+  FeatureEmbeddedChanger = 0x0102,
+  FeatureCDAudioAnalogPlay = 0x0103,
+  FeatureMicrocodeUpgrade = 0x0104,
+  FeatureTimeout = 0x0105,
+  FeatureDvdCSS = 0x0106,
+  FeatureRealTimeStreaming = 0x0107,
+  FeatureLogicalUnitSerialNumber = 0x0108,
+  FeatureMediaSerialNumber = 0x0109,
+  FeatureDiscControlBlocks = 0x010A,
+  FeatureDvdCPRM = 0x010B,
+  FeatureFirmwareDate = 0x010C,
+  FeatureAACS = 0x010D,
+  FeatureVCPS = 0x0110,
+} FEATURE_NUMBER, *PFEATURE_NUMBER;
+
+typedef struct _FEATURE_DATA_PROFILE_LIST_EX {
+  UCHAR ProfileNumber[2];
+  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) && !defined(__WIDL__)
+  FEATURE_DATA_PROFILE_LIST_EX Profiles[0];
+#endif
+} FEATURE_DATA_PROFILE_LIST, *PFEATURE_DATA_PROFILE_LIST;
+
+typedef struct _FEATURE_DATA_CORE {
+  FEATURE_HEADER Header;
+  UCHAR PhysicalInterface[4];
+  UCHAR DeviceBusyEvent:1;
+  UCHAR INQUIRY2:1;
+  UCHAR Reserved1:6;
+  UCHAR Reserved2[3];
+} FEATURE_DATA_CORE, *PFEATURE_DATA_CORE;
+
+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;
+
+typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM {
+  FEATURE_HEADER Header;
+  UCHAR Lockable:1;
+  UCHAR Reserved1:1;
+  UCHAR DefaultToPrevent:1;
+  UCHAR Eject:1;
+  UCHAR Reserved2:1;
+  UCHAR LoadingMechanism:3;
+  UCHAR Reserved3[3];
+} FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_MULTI_READ {
+  FEATURE_HEADER Header;
+} FEATURE_DATA_MULTI_READ, *PFEATURE_DATA_MULTI_READ;
+
+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;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE {
+  FEATURE_HEADER Header;
+  UCHAR DataTypeSupported[2];
+  UCHAR BufferUnderrunFree:1;
+  UCHAR AddressModeReservation:1;
+  UCHAR TrackRessourceInformation:1;
+  UCHAR Reserved01:5;
+  UCHAR NumberOfLinkSizes;
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR LinkSize[0];
+#endif
+} FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE, *PFEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE;
+
+typedef struct _FEATURE_DATA_SECTOR_ERASABLE {
+  FEATURE_HEADER Header;
+} FEATURE_DATA_SECTOR_ERASABLE, *PFEATURE_DATA_SECTOR_ERASABLE;
+
+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;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_RESTRICTED_OVERWRITE {
+  FEATURE_HEADER Header;
+} FEATURE_DATA_RESTRICTED_OVERWRITE, *PFEATURE_DATA_RESTRICTED_OVERWRITE;
+
+typedef struct _FEATURE_DATA_CDRW_CAV_WRITE {
+  FEATURE_HEADER Header;
+  UCHAR Reserved1[4];
+} FEATURE_DATA_CDRW_CAV_WRITE, *PFEATURE_DATA_CDRW_CAV_WRITE;
+
+typedef struct _FEATURE_DATA_MRW {
+  FEATURE_HEADER Header;
+  UCHAR Write:1;
+  UCHAR DvdPlusRead:1;
+  UCHAR DvdPlusWrite:1;
+  UCHAR Reserved01:5;
+  UCHAR Reserved2[3];
+} FEATURE_DATA_MRW, *PFEATURE_DATA_MRW;
+
+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;
+
+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;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_CD_TRACK_AT_ONCE {
+  FEATURE_HEADER Header;
+  UCHAR RWSubchannelsRecordable:1;
+  UCHAR CdRewritable:1;
+  UCHAR TestWriteOk:1;
+  UCHAR RWSubchannelPackedOk:1;
+  UCHAR RWSubchannelRawOk:1;
+  UCHAR Reserved1:1;
+  UCHAR BufferUnderrunFree:1;
+  UCHAR Reserved3:1;
+  UCHAR Reserved2;
+  UCHAR DataTypeSupported[2];
+} FEATURE_DATA_CD_TRACK_AT_ONCE, *PFEATURE_DATA_CD_TRACK_AT_ONCE;
+
+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];
+} FEATURE_DATA_CD_MASTERING, *PFEATURE_DATA_CD_MASTERING;
+
+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;
+
+typedef struct _FEATURE_DATA_DDCD_READ {
+  FEATURE_HEADER Header;
+} FEATURE_DATA_DDCD_READ, *PFEATURE_DATA_DDCD_READ;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_LAYER_JUMP_RECORDING {
+  FEATURE_HEADER Header;
+  UCHAR Reserved0[3];
+  UCHAR NumberOfLinkSizes;
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR LinkSizes[0];
+#endif
+} FEATURE_DATA_LAYER_JUMP_RECORDING, *PFEATURE_DATA_LAYER_JUMP_RECORDING;
+
+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;
+
+typedef struct _FEATURE_BD_R_PSEUDO_OVERWRITE {
+  FEATURE_HEADER Header;
+  UCHAR Reserved[4];
+} FEATURE_BD_R_PSEUDO_OVERWRITE, *PFEATURE_BD_R_PSEUDO_OVERWRITE;
+
+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;
+
+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;
+
+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;
+
+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;
+
+typedef struct _FEATURE_TSR {
+  FEATURE_HEADER Header;
+} FEATURE_TSR, *PFEATURE_TSR;
+
+typedef struct _FEATURE_DATA_HDDVD_READ {
+  FEATURE_HEADER Header;
+  UCHAR Recordable:1;
+  UCHAR Reserved0:7;
+  UCHAR Reserved1;
+  UCHAR Rewritable:1;
+  UCHAR Reserved2:7;
+  UCHAR Reserved3;
+} FEATURE_DATA_HDDVD_READ, *PFEATURE_DATA_HDDVD_READ;
+
+typedef struct _FEATURE_DATA_HDDVD_WRITE {
+  FEATURE_HEADER Header;
+  UCHAR Recordable:1;
+  UCHAR Reserved0:7;
+  UCHAR Reserved1;
+  UCHAR Rewritable:1;
+  UCHAR Reserved2:7;
+  UCHAR Reserved3;
+} FEATURE_DATA_HDDVD_WRITE, *PFEATURE_DATA_HDDVD_WRITE;
+
+typedef struct _FEATURE_HYBRID_DISC {
+  FEATURE_HEADER Header;
+  UCHAR ResetImmunity:1;
+  UCHAR Reserved1:7;
+  UCHAR Reserved2[3];
+} FEATURE_HYBRID_DISC, *PFEATURE_HYBRID_DISC;
+
+typedef struct _FEATURE_DATA_POWER_MANAGEMENT {
+  FEATURE_HEADER Header;
+} FEATURE_DATA_POWER_MANAGEMENT, *PFEATURE_DATA_POWER_MANAGEMENT;
+
+typedef struct _FEATURE_DATA_SMART {
+  FEATURE_HEADER Header;
+  UCHAR FaultFailureReportingPagePresent:1;
+  UCHAR Reserved1:7;
+  UCHAR Reserved02[3];
+} FEATURE_DATA_SMART, *PFEATURE_DATA_SMART;
+
+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;
+
+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];
+} FEATURE_DATA_CD_AUDIO_ANALOG_PLAY, *PFEATURE_DATA_CD_AUDIO_ANALOG_PLAY;
+
+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;
+
+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;
+
+typedef struct _FEATURE_DATA_DVD_CSS {
+  FEATURE_HEADER Header;
+  UCHAR Reserved1[3];
+  UCHAR CssVersion;
+} FEATURE_DATA_DVD_CSS, *PFEATURE_DATA_DVD_CSS;
+
+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;
+
+typedef struct _FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER {
+  FEATURE_HEADER Header;
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR SerialNumber[0];
+#endif
+} FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER, *PFEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER;
+
+typedef struct _FEATURE_MEDIA_SERIAL_NUMBER {
+  FEATURE_HEADER Header;
+} FEATURE_MEDIA_SERIAL_NUMBER, *PFEATURE_MEDIA_SERIAL_NUMBER;
+
+typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS_EX {
+  UCHAR ContentDescriptor[4];
+} FEATURE_DATA_DISC_CONTROL_BLOCKS_EX, *PFEATURE_DATA_DISC_CONTROL_BLOCKS_EX;
+
+typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS {
+  FEATURE_HEADER Header;
+#if !defined(__midl) && !defined(__WIDL__)
+  FEATURE_DATA_DISC_CONTROL_BLOCKS_EX Data[0];
+#endif
+} FEATURE_DATA_DISC_CONTROL_BLOCKS, *PFEATURE_DATA_DISC_CONTROL_BLOCKS;
+
+typedef struct _FEATURE_DATA_DVD_CPRM {
+  FEATURE_HEADER Header;
+  UCHAR Reserved0[3];
+  UCHAR CPRMVersion;
+} FEATURE_DATA_DVD_CPRM, *PFEATURE_DATA_DVD_CPRM;
+
+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;
+
+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;
+
+typedef struct _FEATURE_VCPS {
+  FEATURE_HEADER Header;
+  UCHAR Reserved[4];
+} FEATURE_VCPS, *PFEATURE_VCPS;
+
+typedef struct _FEATURE_DATA_RESERVED {
+  FEATURE_HEADER Header;
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR Data[0];
+#endif
+} FEATURE_DATA_RESERVED, *PFEATURE_DATA_RESERVED;
+
+typedef struct _FEATURE_DATA_VENDOR_SPECIFIC {
+  FEATURE_HEADER Header;
+#if !defined(__midl) && !defined(__WIDL__)
+  UCHAR VendorSpecificData[0];
+#endif
+} FEATURE_DATA_VENDOR_SPECIFIC, *PFEATURE_DATA_VENDOR_SPECIFIC;
+
+typedef struct _GET_CONFIGURATION_IOCTL_INPUT {
+  FEATURE_NUMBER Feature;
+  ULONG RequestType;
+  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;
+  VOID* UPOINTER_32 Reserved[2];
+} GET_CONFIGURATION_IOCTL_INPUT32, *PGET_CONFIGURATION_IOCTL_INPUT32;
+#endif
+
+#ifdef __cplusplus
+}
+#endif