Home | History | Annotate | Download | only in include
      1 /**
      2  * This file has no copyright assigned and is placed in the Public Domain.
      3  * This file is part of the ReactOS PSDK package.
      4  * No warranty is given; refer to the file DISCLAIMER within this package.
      5  */
      6 
      7 #pragma once
      8 
      9 #define __NTDDMMC__
     10 
     11 #ifdef __cplusplus
     12 extern "C" {
     13 #endif
     14 
     15 #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ALL          0x0
     16 #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT      0x1
     17 #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ONE          0x2
     18 
     19 typedef struct _GET_CONFIGURATION_HEADER {
     20   UCHAR DataLength[4];
     21   UCHAR Reserved[2];
     22   UCHAR CurrentProfile[2];
     23 #if !defined(__midl) && !defined(__WIDL__)
     24   UCHAR Data[0];
     25 #endif
     26 } GET_CONFIGURATION_HEADER, *PGET_CONFIGURATION_HEADER;
     27 
     28 typedef struct _FEATURE_HEADER {
     29   UCHAR FeatureCode[2];
     30   UCHAR Current:1;
     31   UCHAR Persistent:1;
     32   UCHAR Version:4;
     33   UCHAR Reserved0:2;
     34   UCHAR AdditionalLength;
     35 } FEATURE_HEADER, *PFEATURE_HEADER;
     36 
     37 typedef enum _FEATURE_PROFILE_TYPE {
     38   ProfileInvalid = 0x0000,
     39   ProfileNonRemovableDisk = 0x0001,
     40   ProfileRemovableDisk = 0x0002,
     41   ProfileMOErasable = 0x0003,
     42   ProfileMOWriteOnce = 0x0004,
     43   ProfileAS_MO = 0x0005,
     44   ProfileCdrom = 0x0008,
     45   ProfileCdRecordable = 0x0009,
     46   ProfileCdRewritable = 0x000a,
     47   ProfileDvdRom = 0x0010,
     48   ProfileDvdRecordable = 0x0011,
     49   ProfileDvdRam = 0x0012,
     50   ProfileDvdRewritable = 0x0013,
     51   ProfileDvdRWSequential = 0x0014,
     52   ProfileDvdDashRDualLayer = 0x0015,
     53   ProfileDvdDashRLayerJump = 0x0016,
     54   ProfileDvdPlusRW = 0x001A,
     55   ProfileDvdPlusR = 0x001B,
     56   ProfileDDCdrom = 0x0020,
     57   ProfileDDCdRecordable = 0x0021,
     58   ProfileDDCdRewritable = 0x0022,
     59   ProfileDvdPlusRWDualLayer = 0x002A,
     60   ProfileDvdPlusRDualLayer = 0x002B,
     61   ProfileBDRom = 0x0040,
     62   ProfileBDRSequentialWritable = 0x0041,
     63   ProfileBDRRandomWritable = 0x0042,
     64   ProfileBDRewritable = 0x0043,
     65   ProfileHDDVDRom = 0x0050,
     66   ProfileHDDVDRecordable = 0x0051,
     67   ProfileHDDVDRam = 0x0052,
     68   ProfileHDDVDRewritable = 0x0053,
     69   ProfileHDDVDRDualLayer = 0x0058,
     70   ProfileHDDVDRWDualLayer = 0x005A,
     71   ProfileNonStandard = 0xffff
     72 } FEATURE_PROFILE_TYPE, *PFEATURE_PROFILE_TYPE;
     73 
     74 typedef enum _FEATURE_NUMBER {
     75   FeatureProfileList = 0x0000,
     76   FeatureCore = 0x0001,
     77   FeatureMorphing = 0x0002,
     78   FeatureRemovableMedium = 0x0003,
     79   FeatureWriteProtect = 0x0004,
     80   FeatureRandomReadable = 0x0010,
     81   FeatureMultiRead = 0x001D,
     82   FeatureCdRead = 0x001E,
     83   FeatureDvdRead = 0x001F,
     84   FeatureRandomWritable = 0x0020,
     85   FeatureIncrementalStreamingWritable = 0x0021,
     86   FeatureSectorErasable = 0x0022,
     87   FeatureFormattable = 0x0023,
     88   FeatureDefectManagement = 0x0024,
     89   FeatureWriteOnce = 0x0025,
     90   FeatureRestrictedOverwrite = 0x0026,
     91   FeatureCdrwCAVWrite = 0x0027,
     92   FeatureMrw = 0x0028,
     93   FeatureEnhancedDefectReporting = 0x0029,
     94   FeatureDvdPlusRW = 0x002A,
     95   FeatureDvdPlusR = 0x002B,
     96   FeatureRigidRestrictedOverwrite = 0x002C,
     97   FeatureCdTrackAtOnce = 0x002D,
     98   FeatureCdMastering = 0x002E,
     99   FeatureDvdRecordableWrite = 0x002F,
    100   FeatureDDCDRead = 0x0030,
    101   FeatureDDCDRWrite = 0x0031,
    102   FeatureDDCDRWWrite = 0x0032,
    103   FeatureLayerJumpRecording = 0x0033,
    104   FeatureCDRWMediaWriteSupport = 0x0037,
    105   FeatureBDRPseudoOverwrite = 0x0038,
    106   FeatureDvdPlusRWDualLayer = 0x003A,
    107   FeatureDvdPlusRDualLayer = 0x003B,
    108   FeatureBDRead = 0x0040,
    109   FeatureBDWrite = 0x0041,
    110   FeatureTSR = 0x0042,
    111   FeatureHDDVDRead = 0x0050,
    112   FeatureHDDVDWrite = 0x0051,
    113   FeatureHybridDisc = 0x0080,
    114   FeaturePowerManagement = 0x0100,
    115   FeatureSMART = 0x0101,
    116   FeatureEmbeddedChanger = 0x0102,
    117   FeatureCDAudioAnalogPlay = 0x0103,
    118   FeatureMicrocodeUpgrade = 0x0104,
    119   FeatureTimeout = 0x0105,
    120   FeatureDvdCSS = 0x0106,
    121   FeatureRealTimeStreaming = 0x0107,
    122   FeatureLogicalUnitSerialNumber = 0x0108,
    123   FeatureMediaSerialNumber = 0x0109,
    124   FeatureDiscControlBlocks = 0x010A,
    125   FeatureDvdCPRM = 0x010B,
    126   FeatureFirmwareDate = 0x010C,
    127   FeatureAACS = 0x010D,
    128   FeatureVCPS = 0x0110,
    129 } FEATURE_NUMBER, *PFEATURE_NUMBER;
    130 
    131 typedef struct _FEATURE_DATA_PROFILE_LIST_EX {
    132   UCHAR ProfileNumber[2];
    133   UCHAR Current:1;
    134   UCHAR Reserved1:7;
    135   UCHAR Reserved2;
    136 } FEATURE_DATA_PROFILE_LIST_EX, *PFEATURE_DATA_PROFILE_LIST_EX;
    137 
    138 typedef struct _FEATURE_DATA_PROFILE_LIST {
    139   FEATURE_HEADER Header;
    140 #if !defined(__midl) && !defined(__WIDL__)
    141   FEATURE_DATA_PROFILE_LIST_EX Profiles[0];
    142 #endif
    143 } FEATURE_DATA_PROFILE_LIST, *PFEATURE_DATA_PROFILE_LIST;
    144 
    145 typedef struct _FEATURE_DATA_CORE {
    146   FEATURE_HEADER Header;
    147   UCHAR PhysicalInterface[4];
    148   UCHAR DeviceBusyEvent:1;
    149   UCHAR INQUIRY2:1;
    150   UCHAR Reserved1:6;
    151   UCHAR Reserved2[3];
    152 } FEATURE_DATA_CORE, *PFEATURE_DATA_CORE;
    153 
    154 typedef struct _FEATURE_DATA_MORPHING {
    155   FEATURE_HEADER Header;
    156   UCHAR Asynchronous:1;
    157   UCHAR OCEvent:1;
    158   UCHAR Reserved01:6;
    159   UCHAR Reserved2[3];
    160 } FEATURE_DATA_MORPHING, *PFEATURE_DATA_MORPHING;
    161 
    162 typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM {
    163   FEATURE_HEADER Header;
    164   UCHAR Lockable:1;
    165   UCHAR Reserved1:1;
    166   UCHAR DefaultToPrevent:1;
    167   UCHAR Eject:1;
    168   UCHAR Reserved2:1;
    169   UCHAR LoadingMechanism:3;
    170   UCHAR Reserved3[3];
    171 } FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM;
    172 
    173 typedef struct _FEATURE_DATA_WRITE_PROTECT {
    174   FEATURE_HEADER Header;
    175   UCHAR SupportsSWPPBit:1;
    176   UCHAR SupportsPersistentWriteProtect:1;
    177   UCHAR WriteInhibitDCB:1;
    178   UCHAR DiscWriteProtectPAC:1;
    179   UCHAR Reserved01:4;
    180   UCHAR Reserved2[3];
    181 } FEATURE_DATA_WRITE_PROTECT, *PFEATURE_DATA_WRITE_PROTECT;
    182 
    183 typedef struct _FEATURE_DATA_RANDOM_READABLE {
    184   FEATURE_HEADER Header;
    185   UCHAR LogicalBlockSize[4];
    186   UCHAR Blocking[2];
    187   UCHAR ErrorRecoveryPagePresent:1;
    188   UCHAR Reserved1:7;
    189   UCHAR Reserved2;
    190 } FEATURE_DATA_RANDOM_READABLE, *PFEATURE_DATA_RANDOM_READABLE;
    191 
    192 typedef struct _FEATURE_DATA_MULTI_READ {
    193   FEATURE_HEADER Header;
    194 } FEATURE_DATA_MULTI_READ, *PFEATURE_DATA_MULTI_READ;
    195 
    196 typedef struct _FEATURE_DATA_CD_READ {
    197   FEATURE_HEADER Header;
    198   UCHAR CDText:1;
    199   UCHAR C2ErrorData:1;
    200   UCHAR Reserved01:5;
    201   UCHAR DigitalAudioPlay:1;
    202   UCHAR Reserved2[3];
    203 } FEATURE_DATA_CD_READ, *PFEATURE_DATA_CD_READ;
    204 
    205 typedef struct _FEATURE_DATA_DVD_READ {
    206   FEATURE_HEADER Header;
    207   UCHAR Multi110:1;
    208   UCHAR Reserved1:7;
    209   UCHAR Reserved2;
    210   UCHAR DualDashR:1;
    211   UCHAR Reserved3:7;
    212   UCHAR Reserved4;
    213 } FEATURE_DATA_DVD_READ, *PFEATURE_DATA_DVD_READ;
    214 
    215 typedef struct _FEATURE_DATA_RANDOM_WRITABLE {
    216   FEATURE_HEADER Header;
    217   UCHAR LastLBA[4];
    218   UCHAR LogicalBlockSize[4];
    219   UCHAR Blocking[2];
    220   UCHAR ErrorRecoveryPagePresent:1;
    221   UCHAR Reserved1:7;
    222   UCHAR Reserved2;
    223 } FEATURE_DATA_RANDOM_WRITABLE, *PFEATURE_DATA_RANDOM_WRITABLE;
    224 
    225 typedef struct _FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE {
    226   FEATURE_HEADER Header;
    227   UCHAR DataTypeSupported[2];
    228   UCHAR BufferUnderrunFree:1;
    229   UCHAR AddressModeReservation:1;
    230   UCHAR TrackRessourceInformation:1;
    231   UCHAR Reserved01:5;
    232   UCHAR NumberOfLinkSizes;
    233 #if !defined(__midl) && !defined(__WIDL__)
    234   UCHAR LinkSize[0];
    235 #endif
    236 } FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE, *PFEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE;
    237 
    238 typedef struct _FEATURE_DATA_SECTOR_ERASABLE {
    239   FEATURE_HEADER Header;
    240 } FEATURE_DATA_SECTOR_ERASABLE, *PFEATURE_DATA_SECTOR_ERASABLE;
    241 
    242 typedef struct _FEATURE_DATA_FORMATTABLE {
    243   FEATURE_HEADER Header;
    244   UCHAR FullCertification:1;
    245   UCHAR QuickCertification:1;
    246   UCHAR SpareAreaExpansion:1;
    247   UCHAR RENoSpareAllocated:1;
    248   UCHAR Reserved1:4;
    249   UCHAR Reserved2[3];
    250   UCHAR RRandomWritable:1;
    251   UCHAR Reserved3:7;
    252   UCHAR Reserved4[3];
    253 } FEATURE_DATA_FORMATTABLE, *PFEATURE_DATA_FORMATTABLE;
    254 
    255 typedef struct _FEATURE_DATA_DEFECT_MANAGEMENT {
    256   FEATURE_HEADER Header;
    257   UCHAR Reserved1:7;
    258   UCHAR SupplimentalSpareArea:1;
    259   UCHAR Reserved2[3];
    260 } FEATURE_DATA_DEFECT_MANAGEMENT, *PFEATURE_DATA_DEFECT_MANAGEMENT;
    261 
    262 typedef struct _FEATURE_DATA_WRITE_ONCE {
    263   FEATURE_HEADER Header;
    264   UCHAR LogicalBlockSize[4];
    265   UCHAR Blocking[2];
    266   UCHAR ErrorRecoveryPagePresent:1;
    267   UCHAR Reserved1:7;
    268   UCHAR Reserved2;
    269 } FEATURE_DATA_WRITE_ONCE, *PFEATURE_DATA_WRITE_ONCE;
    270 
    271 typedef struct _FEATURE_DATA_RESTRICTED_OVERWRITE {
    272   FEATURE_HEADER Header;
    273 } FEATURE_DATA_RESTRICTED_OVERWRITE, *PFEATURE_DATA_RESTRICTED_OVERWRITE;
    274 
    275 typedef struct _FEATURE_DATA_CDRW_CAV_WRITE {
    276   FEATURE_HEADER Header;
    277   UCHAR Reserved1[4];
    278 } FEATURE_DATA_CDRW_CAV_WRITE, *PFEATURE_DATA_CDRW_CAV_WRITE;
    279 
    280 typedef struct _FEATURE_DATA_MRW {
    281   FEATURE_HEADER Header;
    282   UCHAR Write:1;
    283   UCHAR DvdPlusRead:1;
    284   UCHAR DvdPlusWrite:1;
    285   UCHAR Reserved01:5;
    286   UCHAR Reserved2[3];
    287 } FEATURE_DATA_MRW, *PFEATURE_DATA_MRW;
    288 
    289 typedef struct _FEATURE_ENHANCED_DEFECT_REPORTING {
    290   FEATURE_HEADER Header;
    291   UCHAR DRTDMSupported:1;
    292   UCHAR Reserved0:7;
    293   UCHAR NumberOfDBICacheZones;
    294   UCHAR NumberOfEntries[2];
    295 } FEATURE_ENHANCED_DEFECT_REPORTING, *PFEATURE_ENHANCED_DEFECT_REPORTING;
    296 
    297 typedef struct _FEATURE_DATA_DVD_PLUS_RW {
    298   FEATURE_HEADER Header;
    299   UCHAR Write:1;
    300   UCHAR Reserved1:7;
    301   UCHAR CloseOnly:1;
    302   UCHAR QuickStart:1;
    303   UCHAR Reserved02:6;
    304   UCHAR Reserved03[2];
    305 } FEATURE_DATA_DVD_PLUS_RW, *PFEATURE_DATA_DVD_PLUS_RW;
    306 
    307 typedef struct _FEATURE_DATA_DVD_PLUS_R {
    308   FEATURE_HEADER Header;
    309   UCHAR Write:1;
    310   UCHAR Reserved1:7;
    311   UCHAR Reserved2[3];
    312 } FEATURE_DATA_DVD_PLUS_R, *PFEATURE_DATA_DVD_PLUS_R;
    313 
    314 typedef struct _FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE {
    315   FEATURE_HEADER Header;
    316   UCHAR Blank:1;
    317   UCHAR Intermediate:1;
    318   UCHAR DefectStatusDataRead:1;
    319   UCHAR DefectStatusDataGenerate:1;
    320   UCHAR Reserved0:4;
    321   UCHAR Reserved1[3];
    322 } FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE, *PFEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE;
    323 
    324 typedef struct _FEATURE_DATA_CD_TRACK_AT_ONCE {
    325   FEATURE_HEADER Header;
    326   UCHAR RWSubchannelsRecordable:1;
    327   UCHAR CdRewritable:1;
    328   UCHAR TestWriteOk:1;
    329   UCHAR RWSubchannelPackedOk:1;
    330   UCHAR RWSubchannelRawOk:1;
    331   UCHAR Reserved1:1;
    332   UCHAR BufferUnderrunFree:1;
    333   UCHAR Reserved3:1;
    334   UCHAR Reserved2;
    335   UCHAR DataTypeSupported[2];
    336 } FEATURE_DATA_CD_TRACK_AT_ONCE, *PFEATURE_DATA_CD_TRACK_AT_ONCE;
    337 
    338 typedef struct _FEATURE_DATA_CD_MASTERING {
    339   FEATURE_HEADER Header;
    340   UCHAR RWSubchannelsRecordable:1;
    341   UCHAR CdRewritable:1;
    342   UCHAR TestWriteOk:1;
    343   UCHAR RawRecordingOk:1;
    344   UCHAR RawMultiSessionOk:1;
    345   UCHAR SessionAtOnceOk:1;
    346   UCHAR BufferUnderrunFree:1;
    347   UCHAR Reserved1:1;
    348   UCHAR MaximumCueSheetLength[3];
    349 } FEATURE_DATA_CD_MASTERING, *PFEATURE_DATA_CD_MASTERING;
    350 
    351 typedef struct _FEATURE_DATA_DVD_RECORDABLE_WRITE {
    352   FEATURE_HEADER Header;
    353   UCHAR Reserved1:1;
    354   UCHAR DVD_RW:1;
    355   UCHAR TestWrite:1;
    356   UCHAR RDualLayer:1;
    357   UCHAR Reserved02:2;
    358   UCHAR BufferUnderrunFree:1;
    359   UCHAR Reserved3:1;
    360   UCHAR Reserved4[3];
    361 } FEATURE_DATA_DVD_RECORDABLE_WRITE, *PFEATURE_DATA_DVD_RECORDABLE_WRITE;
    362 
    363 typedef struct _FEATURE_DATA_DDCD_READ {
    364   FEATURE_HEADER Header;
    365 } FEATURE_DATA_DDCD_READ, *PFEATURE_DATA_DDCD_READ;
    366 
    367 typedef struct _FEATURE_DATA_DDCD_R_WRITE {
    368   FEATURE_HEADER Header;
    369   UCHAR Reserved1:2;
    370   UCHAR TestWrite:1;
    371   UCHAR Reserved2:5;
    372   UCHAR Reserved3[3];
    373 } FEATURE_DATA_DDCD_R_WRITE, *PFEATURE_DATA_DDCD_R_WRITE;
    374 
    375 typedef struct _FEATURE_DATA_DDCD_RW_WRITE {
    376   FEATURE_HEADER Header;
    377   UCHAR Blank:1;
    378   UCHAR Intermediate:1;
    379   UCHAR Reserved1:6;
    380   UCHAR Reserved2[3];
    381 } FEATURE_DATA_DDCD_RW_WRITE, *PFEATURE_DATA_DDCD_RW_WRITE;
    382 
    383 typedef struct _FEATURE_DATA_LAYER_JUMP_RECORDING {
    384   FEATURE_HEADER Header;
    385   UCHAR Reserved0[3];
    386   UCHAR NumberOfLinkSizes;
    387 #if !defined(__midl) && !defined(__WIDL__)
    388   UCHAR LinkSizes[0];
    389 #endif
    390 } FEATURE_DATA_LAYER_JUMP_RECORDING, *PFEATURE_DATA_LAYER_JUMP_RECORDING;
    391 
    392 typedef struct _FEATURE_CD_RW_MEDIA_WRITE_SUPPORT {
    393   FEATURE_HEADER Header;
    394   UCHAR Reserved1;
    395   struct{
    396     UCHAR Subtype0:1;
    397     UCHAR Subtype1:1;
    398     UCHAR Subtype2:1;
    399     UCHAR Subtype3:1;
    400     UCHAR Subtype4:1;
    401     UCHAR Subtype5:1;
    402     UCHAR Subtype6:1;
    403     UCHAR Subtype7:1;
    404   } CDRWMediaSubtypeSupport;
    405   UCHAR Reserved2[2];
    406 } FEATURE_CD_RW_MEDIA_WRITE_SUPPORT, *PFEATURE_CD_RW_MEDIA_WRITE_SUPPORT;
    407 
    408 typedef struct _FEATURE_BD_R_PSEUDO_OVERWRITE {
    409   FEATURE_HEADER Header;
    410   UCHAR Reserved[4];
    411 } FEATURE_BD_R_PSEUDO_OVERWRITE, *PFEATURE_BD_R_PSEUDO_OVERWRITE;
    412 
    413 typedef struct _FEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER {
    414   FEATURE_HEADER Header;
    415   UCHAR Write:1;
    416   UCHAR Reserved1:7;
    417   UCHAR CloseOnly:1;
    418   UCHAR QuickStart:1;
    419   UCHAR Reserved2:6;
    420   UCHAR Reserved3[2];
    421 } FEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER, *PFEATURE_DATA_DVD_PLUS_RW_DUAL_LAYER;
    422 
    423 typedef struct _FEATURE_DATA_DVD_PLUS_R_DUAL_LAYER {
    424   FEATURE_HEADER Header;
    425   UCHAR Write:1;
    426   UCHAR Reserved1:7;
    427   UCHAR Reserved2[3];
    428 } FEATURE_DATA_DVD_PLUS_R_DUAL_LAYER, *PFEATURE_DATA_DVD_PLUS_R_DUAL_LAYER;
    429 
    430 typedef struct _BD_CLASS_SUPPORT_BITMAP {
    431   UCHAR Version8:1;
    432   UCHAR Version9:1;
    433   UCHAR Version10:1;
    434   UCHAR Version11:1;
    435   UCHAR Version12:1;
    436   UCHAR Version13:1;
    437   UCHAR Version14:1;
    438   UCHAR Version15:1;
    439   UCHAR Version0:1;
    440   UCHAR Version1:1;
    441   UCHAR Version2:1;
    442   UCHAR Version3:1;
    443   UCHAR Version4:1;
    444   UCHAR Version5:1;
    445   UCHAR Version6:1;
    446   UCHAR Version7:1;
    447 } BD_CLASS_SUPPORT_BITMAP, *PBD_CLASS_SUPPORT_BITMAP;
    448 
    449 typedef struct _FEATURE_BD_READ {
    450   FEATURE_HEADER Header;
    451   UCHAR Reserved[4];
    452   BD_CLASS_SUPPORT_BITMAP Class0BitmapBDREReadSupport;
    453   BD_CLASS_SUPPORT_BITMAP Class1BitmapBDREReadSupport;
    454   BD_CLASS_SUPPORT_BITMAP Class2BitmapBDREReadSupport;
    455   BD_CLASS_SUPPORT_BITMAP Class3BitmapBDREReadSupport;
    456   BD_CLASS_SUPPORT_BITMAP Class0BitmapBDRReadSupport;
    457   BD_CLASS_SUPPORT_BITMAP Class1BitmapBDRReadSupport;
    458   BD_CLASS_SUPPORT_BITMAP Class2BitmapBDRReadSupport;
    459   BD_CLASS_SUPPORT_BITMAP Class3BitmapBDRReadSupport;
    460   BD_CLASS_SUPPORT_BITMAP Class0BitmapBDROMReadSupport;
    461   BD_CLASS_SUPPORT_BITMAP Class1BitmapBDROMReadSupport;
    462   BD_CLASS_SUPPORT_BITMAP Class2BitmapBDROMReadSupport;
    463   BD_CLASS_SUPPORT_BITMAP Class3BitmapBDROMReadSupport;
    464 } FEATURE_BD_READ, *PFEATURE_BD_READ;
    465 
    466 typedef struct _FEATURE_BD_WRITE {
    467   FEATURE_HEADER Header;
    468   UCHAR SupportsVerifyNotRequired:1;
    469   UCHAR Reserved1:7;
    470   UCHAR Reserved2[3];
    471   BD_CLASS_SUPPORT_BITMAP Class0BitmapBDREWriteSupport;
    472   BD_CLASS_SUPPORT_BITMAP Class1BitmapBDREWriteSupport;
    473   BD_CLASS_SUPPORT_BITMAP Class2BitmapBDREWriteSupport;
    474   BD_CLASS_SUPPORT_BITMAP Class3BitmapBDREWriteSupport;
    475   BD_CLASS_SUPPORT_BITMAP Class0BitmapBDRWriteSupport;
    476   BD_CLASS_SUPPORT_BITMAP Class1BitmapBDRWriteSupport;
    477   BD_CLASS_SUPPORT_BITMAP Class2BitmapBDRWriteSupport;
    478   BD_CLASS_SUPPORT_BITMAP Class3BitmapBDRWriteSupport;
    479 } FEATURE_BD_WRITE, *PFEATURE_BD_WRITE;
    480 
    481 typedef struct _FEATURE_TSR {
    482   FEATURE_HEADER Header;
    483 } FEATURE_TSR, *PFEATURE_TSR;
    484 
    485 typedef struct _FEATURE_DATA_HDDVD_READ {
    486   FEATURE_HEADER Header;
    487   UCHAR Recordable:1;
    488   UCHAR Reserved0:7;
    489   UCHAR Reserved1;
    490   UCHAR Rewritable:1;
    491   UCHAR Reserved2:7;
    492   UCHAR Reserved3;
    493 } FEATURE_DATA_HDDVD_READ, *PFEATURE_DATA_HDDVD_READ;
    494 
    495 typedef struct _FEATURE_DATA_HDDVD_WRITE {
    496   FEATURE_HEADER Header;
    497   UCHAR Recordable:1;
    498   UCHAR Reserved0:7;
    499   UCHAR Reserved1;
    500   UCHAR Rewritable:1;
    501   UCHAR Reserved2:7;
    502   UCHAR Reserved3;
    503 } FEATURE_DATA_HDDVD_WRITE, *PFEATURE_DATA_HDDVD_WRITE;
    504 
    505 typedef struct _FEATURE_HYBRID_DISC {
    506   FEATURE_HEADER Header;
    507   UCHAR ResetImmunity:1;
    508   UCHAR Reserved1:7;
    509   UCHAR Reserved2[3];
    510 } FEATURE_HYBRID_DISC, *PFEATURE_HYBRID_DISC;
    511 
    512 typedef struct _FEATURE_DATA_POWER_MANAGEMENT {
    513   FEATURE_HEADER Header;
    514 } FEATURE_DATA_POWER_MANAGEMENT, *PFEATURE_DATA_POWER_MANAGEMENT;
    515 
    516 typedef struct _FEATURE_DATA_SMART {
    517   FEATURE_HEADER Header;
    518   UCHAR FaultFailureReportingPagePresent:1;
    519   UCHAR Reserved1:7;
    520   UCHAR Reserved02[3];
    521 } FEATURE_DATA_SMART, *PFEATURE_DATA_SMART;
    522 
    523 typedef struct _FEATURE_DATA_EMBEDDED_CHANGER {
    524   FEATURE_HEADER Header;
    525   UCHAR Reserved1:2;
    526   UCHAR SupportsDiscPresent:1;
    527   UCHAR Reserved2:1;
    528   UCHAR SideChangeCapable:1;
    529   UCHAR Reserved3:3;
    530   UCHAR Reserved4[2];
    531   UCHAR HighestSlotNumber:5;
    532   UCHAR Reserved:3;
    533 } FEATURE_DATA_EMBEDDED_CHANGER, *PFEATURE_DATA_EMBEDDED_CHANGER;
    534 
    535 typedef struct _FEATURE_DATA_CD_AUDIO_ANALOG_PLAY {
    536   FEATURE_HEADER Header;
    537   UCHAR SeperateVolume:1;
    538   UCHAR SeperateChannelMute:1;
    539   UCHAR ScanSupported:1;
    540   UCHAR Reserved1:5;
    541   UCHAR Reserved2;
    542   UCHAR NumerOfVolumeLevels[2];
    543 } FEATURE_DATA_CD_AUDIO_ANALOG_PLAY, *PFEATURE_DATA_CD_AUDIO_ANALOG_PLAY;
    544 
    545 typedef struct _FEATURE_DATA_MICROCODE_UPDATE {
    546   FEATURE_HEADER Header;
    547   UCHAR M5:1;
    548   UCHAR Reserved1:7;
    549   UCHAR Reserved2[3];
    550 } FEATURE_DATA_MICROCODE_UPDATE, *PFEATURE_DATA_MICROCODE_UPDATE;
    551 
    552 typedef struct _FEATURE_DATA_TIMEOUT {
    553   FEATURE_HEADER Header;
    554   UCHAR Group3:1;
    555   UCHAR Reserved1:7;
    556   UCHAR Reserved2;
    557   UCHAR UnitLength[2];
    558 } FEATURE_DATA_TIMEOUT, *PFEATURE_DATA_TIMEOUT;
    559 
    560 typedef struct _FEATURE_DATA_DVD_CSS {
    561   FEATURE_HEADER Header;
    562   UCHAR Reserved1[3];
    563   UCHAR CssVersion;
    564 } FEATURE_DATA_DVD_CSS, *PFEATURE_DATA_DVD_CSS;
    565 
    566 typedef struct _FEATURE_DATA_REAL_TIME_STREAMING {
    567   FEATURE_HEADER Header;
    568   UCHAR StreamRecording:1;
    569   UCHAR WriteSpeedInGetPerf:1;
    570   UCHAR WriteSpeedInMP2A:1;
    571   UCHAR SetCDSpeed:1;
    572   UCHAR ReadBufferCapacityBlock:1;
    573   UCHAR Reserved1:3;
    574   UCHAR Reserved2[3];
    575 } FEATURE_DATA_REAL_TIME_STREAMING, *PFEATURE_DATA_REAL_TIME_STREAMING;
    576 
    577 typedef struct _FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER {
    578   FEATURE_HEADER Header;
    579 #if !defined(__midl) && !defined(__WIDL__)
    580   UCHAR SerialNumber[0];
    581 #endif
    582 } FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER, *PFEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER;
    583 
    584 typedef struct _FEATURE_MEDIA_SERIAL_NUMBER {
    585   FEATURE_HEADER Header;
    586 } FEATURE_MEDIA_SERIAL_NUMBER, *PFEATURE_MEDIA_SERIAL_NUMBER;
    587 
    588 typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS_EX {
    589   UCHAR ContentDescriptor[4];
    590 } FEATURE_DATA_DISC_CONTROL_BLOCKS_EX, *PFEATURE_DATA_DISC_CONTROL_BLOCKS_EX;
    591 
    592 typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS {
    593   FEATURE_HEADER Header;
    594 #if !defined(__midl) && !defined(__WIDL__)
    595   FEATURE_DATA_DISC_CONTROL_BLOCKS_EX Data[0];
    596 #endif
    597 } FEATURE_DATA_DISC_CONTROL_BLOCKS, *PFEATURE_DATA_DISC_CONTROL_BLOCKS;
    598 
    599 typedef struct _FEATURE_DATA_DVD_CPRM {
    600   FEATURE_HEADER Header;
    601   UCHAR Reserved0[3];
    602   UCHAR CPRMVersion;
    603 } FEATURE_DATA_DVD_CPRM, *PFEATURE_DATA_DVD_CPRM;
    604 
    605 typedef struct _FEATURE_DATA_FIRMWARE_DATE {
    606   FEATURE_HEADER Header;
    607   UCHAR Year[4];
    608   UCHAR Month[2];
    609   UCHAR Day[2];
    610   UCHAR Hour[2];
    611   UCHAR Minute[2];
    612   UCHAR Seconds[2];
    613   UCHAR Reserved[2];
    614 } FEATURE_DATA_FIRMWARE_DATE, *PFEATURE_DATA_FIRMWARE_DATE;
    615 
    616 typedef struct _FEATURE_DATA_AACS {
    617   FEATURE_HEADER Header;
    618   UCHAR BindingNonceGeneration:1;
    619   UCHAR Reserved0:7;
    620   UCHAR BindingNonceBlockCount;
    621   UCHAR NumberOfAGIDs:4;
    622   UCHAR Reserved1:4;
    623   UCHAR AACSVersion;
    624 } FEATURE_DATA_AACS, *PFEATURE_DATA_AACS;
    625 
    626 typedef struct _FEATURE_VCPS {
    627   FEATURE_HEADER Header;
    628   UCHAR Reserved[4];
    629 } FEATURE_VCPS, *PFEATURE_VCPS;
    630 
    631 typedef struct _FEATURE_DATA_RESERVED {
    632   FEATURE_HEADER Header;
    633 #if !defined(__midl) && !defined(__WIDL__)
    634   UCHAR Data[0];
    635 #endif
    636 } FEATURE_DATA_RESERVED, *PFEATURE_DATA_RESERVED;
    637 
    638 typedef struct _FEATURE_DATA_VENDOR_SPECIFIC {
    639   FEATURE_HEADER Header;
    640 #if !defined(__midl) && !defined(__WIDL__)
    641   UCHAR VendorSpecificData[0];
    642 #endif
    643 } FEATURE_DATA_VENDOR_SPECIFIC, *PFEATURE_DATA_VENDOR_SPECIFIC;
    644 
    645 typedef struct _GET_CONFIGURATION_IOCTL_INPUT {
    646   FEATURE_NUMBER Feature;
    647   ULONG RequestType;
    648   PVOID Reserved[2];
    649 } GET_CONFIGURATION_IOCTL_INPUT, *PGET_CONFIGURATION_IOCTL_INPUT;
    650 
    651 #if defined(_WIN64)
    652 typedef struct _GET_CONFIGURATION_IOCTL_INPUT32 {
    653   FEATURE_NUMBER Feature;
    654   ULONG RequestType;
    655   VOID* UPOINTER_32 Reserved[2];
    656 } GET_CONFIGURATION_IOCTL_INPUT32, *PGET_CONFIGURATION_IOCTL_INPUT32;
    657 #endif
    658 
    659 #ifdef __cplusplus
    660 }
    661 #endif
    662