📄 ntddmmc.h
字号:
UCHAR Reserved1[4];
} FEATURE_DATA_CDRW_CAV_WRITE, *PFEATURE_DATA_CDRW_CAV_WRITE;
// 0x0028 - FeatureMrw
typedef struct _FEATURE_DATA_MRW {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_DATA_MRW, *PFEATURE_DATA_MRW;
// 0x0029 is Reserved
// 0x002A - FeatureDvdPlusRW
typedef struct _FEATURE_DATA_DVD_PLUS_RW {
FEATURE_HEADER Header;
UCHAR Write : 1;
UCHAR Reserved1 : 7;
UCHAR Reserved2[3];
} FEATURE_DATA_DVD_PLUS_RW, *PFEATURE_DATA_DVD_PLUS_RW;
// 0x002b is Reserved
// 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 Reserved2 : 3;
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
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
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 - 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 Reserved2;
} 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
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;
} FEATURE_DATA_MICROCODE_UPDATE, *PFEATURE_DATA_MICROCODE_UPDATE;
// 0x0105 - FeatureTimeout
typedef struct _FEATURE_DATA_TIMEOUT {
FEATURE_HEADER Header;
} 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;
UCHAR SerialNumber[0];
} FEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER, *PFEATURE_DATA_LOGICAL_UNIT_SERIAL_NUMBER;
// 0x0109 is Reserved
// 0x010a
// 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;
FEATURE_DATA_DISC_CONTROL_BLOCKS_EX Data[0];
} FEATURE_DATA_DISC_CONTROL_BLOCKS, *PFEATURE_DATA_DISC_CONTROL_BLOCKS;
// 0x010b
typedef struct _FEATURE_DATA_DVD_CPRM {
FEATURE_HEADER Header;
UCHAR Reserved0[3];
UCHAR CPRMVersion;
} FEATURE_DATA_DVD_CPRM, *PFEATURE_DATA_DVD_CPRM;
// 0x010c - 0xfeff are Reserved
typedef struct _FEATURE_DATA_RESERVED {
FEATURE_HEADER Header;
UCHAR Data[0];
} FEATURE_DATA_RESERVED, *PFEATURE_DATA_RESERVED;
// 0xff00 - 0xffff are Vendor Specific
typedef struct _FEATURE_DATA_VENDOR_SPECIFIC {
FEATURE_HEADER Header;
UCHAR VendorSpecificData[0];
} 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.
// *** Programmers beware! ***
//
//
// NOTE: This is based on MMC 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 _MSC_VER >= 1200
#pragma warning(pop) // un-sets any local warning changes
#endif
#pragma warning(default:4200) // array[0] is not a warning for this file
#endif // __NTDDMMC__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -