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