Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

512 lines
18 KiB

  1. #ifndef __NTDDMMC__
  2. #if _MSC_VER >= 1200
  3. #pragma warning(push)
  4. #endif
  5. #pragma warning(disable:4200) // array[0] is not a warning for this file
  6. //
  7. // NOTE: All FEATURE_* structures may be extended. use of these structures
  8. // requires verification that the FeatureHeader->AdditionLength field
  9. // contains AT LEAST enough data to cover the data fields being accessed.
  10. // This is due to the design, which allows extending the size of the
  11. // various structures, which will result in these structures sizes
  12. // being changed over time.
  13. // *** Programmers beware! ***
  14. //
  15. //
  16. // NOTE: This is based on MMC 3
  17. // Further revisions will maintain backward compatibility
  18. // with the non-reserved fields listed here. If you need
  19. // to access a new field, please typecast to FEATURE_DATA_RESERVED
  20. // and access the appropriate bits there.
  21. //
  22. typedef struct _GET_CONFIGURATION_HEADER {
  23. UCHAR DataLength[4]; // [0] == MSB, [3] == LSB
  24. UCHAR Reserved[2];
  25. UCHAR CurrentProfile[2]; // [0] == MSB, [1] == LSB
  26. UCHAR Data[0]; // extra data, typically FEATURE_HEADER
  27. } GET_CONFIGURATION_HEADER, *PGET_CONFIGURATION_HEADER;
  28. typedef struct _FEATURE_HEADER {
  29. UCHAR FeatureCode[2]; // [0] == MSB, [1] == LSB
  30. UCHAR Current : 1; // The feature is currently active
  31. UCHAR Persistent : 1; // The feature is always current
  32. UCHAR Version : 4;
  33. UCHAR Reserved0 : 2;
  34. UCHAR AdditionalLength; // sizeof(Header) + AdditionalLength = size
  35. } FEATURE_HEADER, *PFEATURE_HEADER;
  36. typedef enum _FEATURE_PROFILE_TYPE {
  37. ProfileInvalid = 0x0000,
  38. ProfileNonRemovableDisk = 0x0001,
  39. ProfileRemovableDisk = 0x0002,
  40. ProfileMOErasable = 0x0003,
  41. ProfileMOWriteOnce = 0x0004,
  42. ProfileAS_MO = 0x0005,
  43. // Reserved 0x0006 - 0x0007
  44. ProfileCdrom = 0x0008,
  45. ProfileCdRecordable = 0x0009,
  46. ProfileCdRewritable = 0x000a,
  47. // Reserved 0x000b - 0x000f
  48. ProfileDvdRom = 0x0010,
  49. ProfileDvdRecordable = 0x0011,
  50. ProfileDvdRam = 0x0012, // also DVD+RW
  51. ProfileDvdRewritable = 0x0013, // restricted overwrite
  52. ProfileDvdRWSequential = 0x0014,
  53. // Reserved 0x0014 - 0x0019
  54. ProfileDvdPlusRW = 0x001A,
  55. // Reserved 0x001B - 001F
  56. ProfileDDCdrom = 0x0020,
  57. ProfileDDCdRecordable = 0x0021,
  58. ProfileDDCdRewritable = 0x0022,
  59. // Reserved 0x0023 - 0xfffe
  60. ProfileNonStandard = 0xffff
  61. } FEATURE_PROFILE_TYPE, *PFEATURE_PROFILE_TYPE;
  62. typedef enum _FEATURE_NUMBER {
  63. FeatureProfileList = 0x0000,
  64. FeatureCore = 0x0001,
  65. FeatureMorphing = 0x0002,
  66. FeatureRemovableMedium = 0x0003,
  67. FeatureWriteProtect = 0x0004,
  68. // Reserved 0x0005 - 0x000f
  69. FeatureRandomReadable = 0x0010,
  70. // Reserved 0x0011 - 0x001c
  71. FeatureMultiRead = 0x001d,
  72. FeatureCdRead = 0x001e,
  73. FeatureDvdRead = 0x001f,
  74. FeatureRandomWritable = 0x0020,
  75. FeatureIncrementalStreamingWritable = 0x0021,
  76. FeatureSectorErasable = 0x0022,
  77. FeatureFormattable = 0x0023,
  78. FeatureDefectManagement = 0x0024,
  79. FeatureWriteOnce = 0x0025,
  80. FeatureRestrictedOverwrite = 0x0026,
  81. FeatureCdrwCAVWrite = 0x0027,
  82. FeatureMrw = 0x0028,
  83. // Reserved 0x0029
  84. FeatureDvdPlusRW = 0x002A,
  85. // Reserved 0x002b
  86. FeatureRigidRestrictedOverwrite = 0x002c,
  87. FeatureCdTrackAtOnce = 0x002d,
  88. FeatureCdMastering = 0x002e,
  89. FeatureDvdRecordableWrite = 0x002f, // both -R and -RW
  90. FeatureDDCDRead = 0x0030,
  91. FeatureDDCDRWrite = 0x0031,
  92. FeatureDDCDRWWrite = 0x0032,
  93. // Reserved 0x0033 - 0x00ff
  94. FeaturePowerManagement = 0x0100,
  95. FeatureSMART = 0x0101,
  96. FeatureEmbeddedChanger = 0x0102,
  97. FeatureCDAudioAnalogPlay = 0x0103,
  98. FeatureMicrocodeUpgrade = 0x0104,
  99. FeatureTimeout = 0x0105,
  100. FeatureDvdCSS = 0x0106,
  101. FeatureRealTimeStreaming = 0x0107,
  102. FeatureLogicalUnitSerialNumber = 0x0108,
  103. // Reserved 0x0109
  104. FeatureDiscControlBlocks = 0x010a,
  105. FeatureDvdCPRM = 0x010b
  106. // Reserved 0x010c - 0xfeff
  107. // Vendor Unique 0xff00 - 0xffff
  108. } FEATURE_NUMBER, *PFEATURE_NUMBER;
  109. // 0x0000 - FeatureProfileList
  110. // an integral multiple of the _EX structures are returned for page 0000
  111. typedef struct _FEATURE_DATA_PROFILE_LIST_EX {
  112. UCHAR ProfileNumber[2]; // [0] == MSB, [1] == LSB
  113. UCHAR Current : 1;
  114. UCHAR Reserved1 : 7;
  115. UCHAR Reserved2;
  116. } FEATURE_DATA_PROFILE_LIST_EX, *PFEATURE_DATA_PROFILE_LIST_EX;
  117. typedef struct _FEATURE_DATA_PROFILE_LIST {
  118. FEATURE_HEADER Header;
  119. FEATURE_DATA_PROFILE_LIST_EX Profiles[0];
  120. } FEATURE_DATA_PROFILE_LIST, *PFEATURE_DATA_PROFILE_LIST;
  121. // 0x0001 - FeatureCore
  122. typedef struct _FEATURE_DATA_CORE {
  123. FEATURE_HEADER Header;
  124. UCHAR PhysicalInterface[4]; // [0] == MSB, [3] == LSB
  125. } FEATURE_DATA_CORE, *PFEATURE_DATA_CORE;
  126. // 0x0002 - FeatureMorphing
  127. typedef struct _FEATURE_DATA_MORPHING {
  128. FEATURE_HEADER Header;
  129. UCHAR Asynchronous : 1;
  130. UCHAR Reserved1 : 7;
  131. UCHAR Reserved2[3];
  132. } FEATURE_DATA_MORPHING, *PFEATURE_DATA_MORPHING;
  133. // 0x0003 - FeatureRemovableMedium
  134. typedef struct _FEATURE_DATA_REMOVABLE_MEDIUM {
  135. FEATURE_HEADER Header;
  136. UCHAR Lockable : 1;
  137. UCHAR Reserved1 : 1;
  138. UCHAR DefaultToPrevent : 1;
  139. UCHAR Eject : 1;
  140. UCHAR Reserved2 : 1;
  141. UCHAR LoadingMechanism : 3;
  142. UCHAR Reserved3[3];
  143. } FEATURE_DATA_REMOVABLE_MEDIUM, *PFEATURE_DATA_REMOVABLE_MEDIUM;
  144. // 0x0004 - FeatureWriteProtect
  145. typedef struct _FEATURE_DATA_WRITE_PROTECT {
  146. FEATURE_HEADER Header;
  147. UCHAR SupportsSWPPBit : 1;
  148. UCHAR SupportsPersistentWriteProtect : 1;
  149. UCHAR Reserved1 : 6;
  150. UCHAR Reserved2[3];
  151. } FEATURE_DATA_WRITE_PROTECT, *PFEATURE_DATA_WRITE_PROTECT;
  152. // 0x0005 - 0x000f are Reserved
  153. // 0x0010 - FeatureRandomReadable
  154. typedef struct _FEATURE_DATA_RANDOM_READABLE {
  155. FEATURE_HEADER Header;
  156. UCHAR LogicalBlockSize[4];
  157. UCHAR Blocking[2];
  158. UCHAR ErrorRecoveryPagePresent : 1;
  159. UCHAR Reserved1 : 7;
  160. UCHAR Reserved2;
  161. } FEATURE_DATA_RANDOM_READABLE, *PFEATURE_DATA_RANDOM_READABLE;
  162. // 0x0011 - 0x001c are Reserved
  163. // 0x001d - FeatureMultiRead
  164. typedef struct _FEATURE_DATA_MULTI_READ {
  165. FEATURE_HEADER Header;
  166. } FEATURE_DATA_MULTI_READ, *PFEATURE_DATA_MULTI_READ;
  167. // 0x001e - FeatureCdRead
  168. typedef struct _FEATURE_DATA_CD_READ {
  169. FEATURE_HEADER Header;
  170. UCHAR CDText : 1;
  171. UCHAR C2ErrorData : 1;
  172. UCHAR Reserved1 : 6;
  173. UCHAR Reserved2[3];
  174. } FEATURE_DATA_CD_READ, *PFEATURE_DATA_CD_READ;
  175. // 0x001f - FeatureDvdRead
  176. typedef struct _FEATURE_DATA_DVD_READ {
  177. FEATURE_HEADER Header;
  178. } FEATURE_DATA_DVD_READ, *PFEATURE_DATA_DVD_READ;
  179. // 0x0020 - FeatureRandomWritable
  180. typedef struct _FEATURE_DATA_RANDOM_WRITABLE {
  181. FEATURE_HEADER Header;
  182. UCHAR LastLBA[4];
  183. UCHAR LogicalBlockSize[4];
  184. UCHAR Blocking[2];
  185. UCHAR ErrorRecoveryPagePresent : 1;
  186. UCHAR Reserved1 : 7;
  187. UCHAR Reserved2;
  188. } FEATURE_DATA_RANDOM_WRITABLE, *PFEATURE_DATA_RANDOM_WRITABLE;
  189. // 0x0021 - FeatureIncrementalStreamingWritable
  190. typedef struct _FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE {
  191. FEATURE_HEADER Header;
  192. UCHAR DataTypeSupported[2]; // [0] == MSB, [1] == LSB // see also FeatureCdTrackAtOnce
  193. UCHAR BufferUnderrunFree : 1;
  194. UCHAR Reserved1 : 7;
  195. UCHAR NumberOfLinkSizes;
  196. UCHAR LinkSize[0];
  197. } FEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE, *PFEATURE_DATA_INCREMENTAL_STREAMING_WRITABLE;
  198. // 0x0022 - FeatureSectorErasable
  199. typedef struct _FEATURE_DATA_SECTOR_ERASABLE {
  200. FEATURE_HEADER Header;
  201. } FEATURE_DATA_SECTOR_ERASABLE, *PFEATURE_DATA_SECTOR_ERASABLE;
  202. // 0x0023 - FeatureFormattable
  203. typedef struct _FEATURE_DATA_FORMATTABLE {
  204. FEATURE_HEADER Header;
  205. } FEATURE_DATA_FORMATTABLE, *PFEATURE_DATA_FORMATTABLE;
  206. // 0x0024 - FeatureDefectManagement
  207. typedef struct _FEATURE_DATA_DEFECT_MANAGEMENT {
  208. FEATURE_HEADER Header;
  209. UCHAR Reserved1 : 7;
  210. UCHAR SupplimentalSpareArea : 1;
  211. UCHAR Reserved2[3];
  212. } FEATURE_DATA_DEFECT_MANAGEMENT, *PFEATURE_DATA_DEFECT_MANAGEMENT;
  213. // 0x0025 - FeatureWriteOnce
  214. typedef struct _FEATURE_DATA_WRITE_ONCE {
  215. FEATURE_HEADER Header;
  216. UCHAR LogicalBlockSize[4];
  217. UCHAR Blocking[2];
  218. UCHAR ErrorRecoveryPagePresent : 1;
  219. UCHAR Reserved1 : 7;
  220. UCHAR Reserved2;
  221. } FEATURE_DATA_WRITE_ONCE, *PFEATURE_DATA_WRITE_ONCE;
  222. // 0x0026 - FeatureRestrictedOverwrite
  223. typedef struct _FEATURE_DATA_RESTRICTED_OVERWRITE {
  224. FEATURE_HEADER Header;
  225. } FEATURE_DATA_RESTRICTED_OVERWRITE;
  226. // 0x0027 - FeatureCdrwCAVWrite
  227. typedef struct _FEATURE_DATA_CDRW_CAV_WRITE {
  228. FEATURE_HEADER Header;
  229. UCHAR Reserved1[4];
  230. } FEATURE_DATA_CDRW_CAV_WRITE, *PFEATURE_DATA_CDRW_CAV_WRITE;
  231. // 0x0028 - FeatureMrw
  232. typedef struct _FEATURE_DATA_MRW {
  233. FEATURE_HEADER Header;
  234. UCHAR Write : 1;
  235. UCHAR Reserved1 : 7;
  236. UCHAR Reserved2[3];
  237. } FEATURE_DATA_MRW, *PFEATURE_DATA_MRW;
  238. // 0x0029 is Reserved
  239. // 0x002A - FeatureDvdPlusRW
  240. typedef struct _FEATURE_DATA_DVD_PLUS_RW {
  241. FEATURE_HEADER Header;
  242. UCHAR Write : 1;
  243. UCHAR Reserved1 : 7;
  244. UCHAR Reserved2[3];
  245. } FEATURE_DATA_DVD_PLUS_RW, *PFEATURE_DATA_DVD_PLUS_RW;
  246. // 0x002b is Reserved
  247. // 0x002c - FeatureDvdRwRestrictedOverwrite
  248. typedef struct _FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE {
  249. FEATURE_HEADER Header;
  250. UCHAR Blank : 1;
  251. UCHAR Intermediate : 1;
  252. UCHAR DefectStatusDataRead : 1;
  253. UCHAR DefectStatusDataGenerate : 1;
  254. UCHAR Reserved0 : 4;
  255. UCHAR Reserved1[3];
  256. } FEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE, *PFEATURE_DATA_DVD_RW_RESTRICTED_OVERWRITE;
  257. // 0x002d - FeatureCdTrackAtOnce
  258. typedef struct _FEATURE_DATA_CD_TRACK_AT_ONCE {
  259. FEATURE_HEADER Header;
  260. UCHAR RWSubchannelsRecordable : 1;
  261. UCHAR CdRewritable : 1;
  262. UCHAR TestWriteOk : 1;
  263. UCHAR RWSubchannelPackedOk : 1; // MMC 3 +
  264. UCHAR RWSubchannelRawOk : 1; // MMC 3 +
  265. UCHAR Reserved1 : 1;
  266. UCHAR BufferUnderrunFree : 1; // MMC 3 +
  267. UCHAR Reserved3 : 1;
  268. UCHAR Reserved2;
  269. UCHAR DataTypeSupported[2]; // [0] == MSB, [1] == LSB // see also FeatureIncrementalStreamingWritable
  270. } FEATURE_DATA_CD_TRACK_AT_ONCE, *PFEATURE_DATA_CD_TRACK_AT_ONCE;
  271. // 0x002e - FeatureCdMastering
  272. typedef struct _FEATURE_DATA_CD_MASTERING {
  273. FEATURE_HEADER Header;
  274. UCHAR RWSubchannelsRecordable : 1;
  275. UCHAR CdRewritable : 1;
  276. UCHAR TestWriteOk : 1;
  277. UCHAR RawRecordingOk : 1;
  278. UCHAR RawMultiSessionOk : 1;
  279. UCHAR SessionAtOnceOk : 1;
  280. UCHAR BufferUnderrunFree : 1;
  281. UCHAR Reserved1 : 1;
  282. UCHAR MaximumCueSheetLength[3]; // [0] == MSB, [2] == LSB
  283. } FEATURE_DATA_CD_MASTERING, *PFEATURE_DATA_CD_MASTERING;
  284. // 0x002f - FeatureDvdRecordableWrite
  285. typedef struct _FEATURE_DATA_DVD_RECORDABLE_WRITE {
  286. FEATURE_HEADER Header;
  287. UCHAR Reserved1 : 1;
  288. UCHAR DVD_RW : 1;
  289. UCHAR TestWrite : 1;
  290. UCHAR Reserved2 : 3;
  291. UCHAR BufferUnderrunFree : 1;
  292. UCHAR Reserved3 : 1;
  293. UCHAR Reserved4[3];
  294. } FEATURE_DATA_DVD_RECORDABLE_WRITE, *PFEATURE_DATA_DVD_RECORDABLE_WRITE;
  295. // 0x0030 - FeatureDDCDRead
  296. typedef struct _FEATURE_DATA_DDCD_READ {
  297. FEATURE_HEADER Header;
  298. } FEATURE_DATA_DDCD_READ, *PFEATURE_DATA_DDCD_READ;
  299. // 0x0031 - FeatureDDCDRWrite
  300. typedef struct _FEATURE_DATA_DDCD_R_WRITE {
  301. FEATURE_HEADER Header;
  302. UCHAR Reserved1 : 2;
  303. UCHAR TestWrite : 1;
  304. UCHAR Reserved2 : 5;
  305. UCHAR Reserved3[3];
  306. } FEATURE_DATA_DDCD_R_WRITE, *PFEATURE_DATA_DDCD_R_WRITE;
  307. // 0x0032 - FeatureDDCDRWWrite
  308. typedef struct _FEATURE_DATA_DDCD_RW_WRITE {
  309. FEATURE_HEADER Header;
  310. UCHAR Blank : 1;
  311. UCHAR Intermediate : 1;
  312. UCHAR Reserved1 : 6;
  313. UCHAR Reserved2[3];
  314. } FEATURE_DATA_DDCD_RW_WRITE, *PFEATURE_DATA_DDCD_RW_WRITE;
  315. // 0x0033 - 0x00ff are Reserved
  316. // 0x0100 - FeaturePowerManagement
  317. typedef struct _FEATURE_DATA_POWER_MANAGEMENT {
  318. FEATURE_HEADER Header;
  319. } FEATURE_DATA_POWER_MANAGEMENT, *PFEATURE_DATA_POWER_MANAGEMENT;
  320. // 0x0101 - FeatureSMART (not in MMC 2)
  321. typedef struct _FEATURE_DATA_SMART {
  322. FEATURE_HEADER Header;
  323. UCHAR FaultFailureReportingPagePresent : 1;
  324. UCHAR Reserved1 : 7;
  325. UCHAR Reserved2;
  326. } FEATURE_DATA_SMART, *PFEATURE_DATA_SMART;
  327. // 0x0102 - FeatureEmbeddedChanger
  328. typedef struct _FEATURE_DATA_EMBEDDED_CHANGER {
  329. FEATURE_HEADER Header;
  330. UCHAR Reserved1 : 2;
  331. UCHAR SupportsDiscPresent : 1;
  332. UCHAR Reserved2 : 1;
  333. UCHAR SideChangeCapable : 1;
  334. UCHAR Reserved3 : 3;
  335. UCHAR Reserved4[2];
  336. UCHAR HighestSlotNumber : 5;
  337. UCHAR Reserved : 3;
  338. } FEATURE_DATA_EMBEDDED_CHANGER, *PFEATURE_DATA_EMBEDDED_CHANGER;
  339. // 0x0103 - FeatureCDAudioAnalogPlay
  340. typedef struct _FEATURE_DATA_CD_AUDIO_ANALOG_PLAY {
  341. FEATURE_HEADER Header;
  342. UCHAR SeperateVolume : 1;
  343. UCHAR SeperateChannelMute : 1;
  344. UCHAR ScanSupported : 1;
  345. UCHAR Reserved1 : 5;
  346. UCHAR Reserved2;
  347. UCHAR NumerOfVolumeLevels[2]; // [0] == MSB, [1] == LSB
  348. } FEATURE_DATA_CD_AUDIO_ANALOG_PLAY, *PFEATURE_DATA_CD_AUDIO_ANALOG_PLAY;
  349. // 0x0104 - FeatureMicrocodeUpgrade
  350. typedef struct _FEATURE_DATA_MICROCODE_UPDATE {
  351. FEATURE_HEADER Header;
  352. } FEATURE_DATA_MICROCODE_UPDATE, *PFEATURE_DATA_MICROCODE_UPDATE;
  353. // 0x0105 - FeatureTimeout
  354. typedef struct _FEATURE_DATA_TIMEOUT {
  355. FEATURE_HEADER Header;
  356. } FEATURE_DATA_TIMEOUT, *PFEATURE_DATA_TIMEOUT;
  357. // 0x0106 - FeatureDvdCSS
  358. typedef struct _FEATURE_DATA_DVD_CSS {
  359. FEATURE_HEADER Header;
  360. UCHAR Reserved1[3];
  361. UCHAR CssVersion;
  362. } FEATURE_DATA_DVD_CSS, *PFEATURE_DATA_DVD_CSS;
  363. // 0x0107 - FeatureRealTimeStreaming
  364. typedef struct _FEATURE_DATA_REAL_TIME_STREAMING {
  365. FEATURE_HEADER Header;
  366. UCHAR StreamRecording : 1;
  367. UCHAR WriteSpeedInGetPerf : 1;
  368. UCHAR WriteSpeedInMP2A : 1;
  369. UCHAR SetCDSpeed : 1;
  370. UCHAR ReadBufferCapacityBlock : 1;
  371. UCHAR Reserved1 : 3;
  372. UCHAR Reserved2[3];
  373. } FEATURE_DATA_REAL_TIME_STREAMING, *PFEATURE_DATA_REAL_TIME_STREAMING;
  374. // 0x0108 - FeatureLogicalUnitSerialNumber
  375. typedef struct _FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER {
  376. FEATURE_HEADER Header;
  377. UCHAR SerialNumber[0];
  378. } FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER, *PFEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER;
  379. // 0x0109 is Reserved
  380. // 0x010a
  381. // an integral multiple of the _EX structures are returned for page 010A
  382. typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS_EX {
  383. UCHAR ContentDescriptor[4];
  384. } FEATURE_DATA_DISC_CONTROL_BLOCKS_EX, *PFEATURE_DATA_DISC_CONTROL_BLOCKS_EX;
  385. // use a zero-sized array for this....
  386. typedef struct _FEATURE_DATA_DISC_CONTROL_BLOCKS {
  387. FEATURE_HEADER Header;
  388. FEATURE_DATA_DISC_CONTROL_BLOCKS_EX Data[0];
  389. } FEATURE_DATA_DISC_CONTROL_BLOCKS, *PFEATURE_DATA_DISC_CONTROL_BLOCKS;
  390. // 0x010b
  391. typedef struct _FEATURE_DATA_DVD_CPRM {
  392. FEATURE_HEADER Header;
  393. UCHAR Reserved0[3];
  394. UCHAR CPRMVersion;
  395. } FEATURE_DATA_DVD_CPRM, *PFEATURE_DATA_DVD_CPRM;
  396. // 0x010c - 0xfeff are Reserved
  397. typedef struct _FEATURE_DATA_RESERVED {
  398. FEATURE_HEADER Header;
  399. UCHAR Data[0];
  400. } FEATURE_DATA_RESERVED, *PFEATURE_DATA_RESERVED;
  401. // 0xff00 - 0xffff are Vendor Specific
  402. typedef struct _FEATURE_DATA_VENDOR_SPECIFIC {
  403. FEATURE_HEADER Header;
  404. UCHAR VendorSpecificData[0];
  405. } FEATURE_DATA_VENDOR_SPECIFIC, *PFEATURE_DATA_VENDOR_SPECIFIC;
  406. //
  407. // NOTE: All FEATURE_* structures may be extended. use of these structures
  408. // requires verification that the FeatureHeader->AdditionLength field
  409. // contains AT LEAST enough data to cover the data fields being accessed.
  410. // This is due to the design, which allows extending the size of the
  411. // various structures, which will result in these structures sizes
  412. // being changed over time.
  413. // *** Programmers beware! ***
  414. //
  415. //
  416. // NOTE: This is based on MMC 3
  417. // Further revisions will maintain backward compatibility
  418. // with the non-reserved fields listed here. If you need
  419. // to access a new field, please typecast to FEATURE_DATA_RESERVED
  420. // and access the appropriate bits there.
  421. //
  422. //
  423. // IOCTL_CDROM_GET_CONFIGURATION returns a FEATURE_* struct, which always
  424. // starts with a FEATURE_HEADER structure.
  425. //
  426. //
  427. // these are to be used for the request type
  428. //
  429. #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ALL 0x0
  430. #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_CURRENT 0x1
  431. #define SCSI_GET_CONFIGURATION_REQUEST_TYPE_ONE 0x2
  432. typedef struct _GET_CONFIGURATION_IOCTL_INPUT {
  433. FEATURE_NUMBER Feature;
  434. ULONG RequestType; // SCSI_GET_CONFIGURATION_REQUEST_TYPE_*
  435. PVOID Reserved[2];
  436. } GET_CONFIGURATION_IOCTL_INPUT, *PGET_CONFIGURATION_IOCTL_INPUT;
  437. #if _MSC_VER >= 1200
  438. #pragma warning(pop) // un-sets any local warning changes
  439. #endif
  440. #pragma warning(default:4200) // array[0] is not a warning for this file
  441. #endif // __NTDDMMC__