📄 scsi.h
字号:
#define DVD_FORMAT_COPYRIGHT 0x01
#define DVD_FORMAT_DISK_KEY 0x02
#define DVD_FORMAT_BCA 0x03
#define DVD_FORMAT_MANUFACTURING 0x04
typedef struct _READ_DVD_STRUCTURES_HEADER {
UCHAR Length[2];
UCHAR Reserved[2];
UCHAR Data[0];
} READ_DVD_STRUCTURES_HEADER, *PREAD_DVD_STRUCTURES_HEADER;
#if 0
typedef struct _DVD_LAYER_DESCRIPTOR {
UCHAR Length[2]; // [0]=MSB, [1]=LSB
UCHAR BookVersion : 4;
UCHAR BookType : 4;
UCHAR MinimumRate : 4;
UCHAR DiskSize : 4;
UCHAR LayerType : 4;
UCHAR TrackPath : 1;
UCHAR NumberOfLayers : 2;
UCHAR Reserved : 1;
UCHAR TrackDensity : 4;
UCHAR LinearDensity : 4;
UCHAR Zero1;
UCHAR StartingDataSector[4]; // [0]=MSB, [3]=LSB
UCHAR Zero2;
UCHAR EndDataSector[4];
UCHAR Zero3;
UCHAR EndLayerZeroSector[4];
UCHAR Reserved2 : 7;
UCHAR BCAFlag : 1;
UCHAR Reserved3;
} DVD_LAYER_DESCRIPTOR, *PDVD_LAYER_DESCRIPTOR;
typedef struct _DVD_COPYRIGHT_INFORMATION {
UCHAR CopyrightProtectionSystemType;
UCHAR RegionManagementInformation;
UCHAR Reserved[2];
} DVD_COPYRIGHT_INFORMATION, *PDVD_COPYRIGHT_INFORMATION;
typedef struct _DVD_DISK_KEY_STRUCTURES {
UCHAR DiskKeyData[2048];
} DVD_DISK_KEY_STRUCTURES, *PDVD_DISK_KEY_STRUCTURES;
#endif
//
// DiskKey, BCA & Manufacturer information will provide byte arrays as their
// data.
//
//
// CDVD 0.9 Send & Report Key Definitions and Structures
//
#define DVD_REPORT_AGID 0x00
#define DVD_CHALLENGE_KEY 0x01
#define DVD_KEY_1 0x02
#define DVD_KEY_2 0x03
#define DVD_TITLE_KEY 0x04
#define DVD_REPORT_ASF 0x05
#define DVD_INVALIDATE_AGID 0x3F
typedef struct _CDVD_KEY_HEADER {
UCHAR DataLength[2];
UCHAR Reserved[2];
UCHAR Data[0];
} CDVD_KEY_HEADER, *PCDVD_KEY_HEADER;
typedef struct _CDVD_REPORT_AGID_DATA {
UCHAR Reserved1[3];
UCHAR Reserved2 : 6;
UCHAR AGID : 2;
} CDVD_REPORT_AGID_DATA, *PCDVD_REPORT_AGID_DATA;
typedef struct _CDVD_CHALLENGE_KEY_DATA {
UCHAR ChallengeKeyValue[10];
UCHAR Reserved[2];
} CDVD_CHALLENGE_KEY_DATA, *PCDVD_CHALLENGE_KEY_DATA;
typedef struct _CDVD_KEY_DATA {
UCHAR Key[5];
UCHAR Reserved[3];
} CDVD_KEY_DATA, *PCDVD_KEY_DATA;
typedef struct _CDVD_REPORT_ASF_DATA {
UCHAR Reserved1[3];
UCHAR Success : 1;
UCHAR Reserved2 : 7;
} CDVD_REPORT_ASF_DATA, *PCDVD_REPORT_ASF_DATA;
typedef struct _CDVD_TITLE_KEY_HEADER {
UCHAR DataLength[2];
UCHAR Reserved1[1];
UCHAR Reserved2 : 3;
UCHAR CGMS : 2;
UCHAR CP_SEC : 1;
UCHAR CPM : 1;
UCHAR Zero : 1;
CDVD_KEY_DATA TitleKey;
} CDVD_TITLE_KEY_HEADER, *PCDVD_TITLE_KEY_HEADER;
//
// Read Formatted Capacity Data - returned in Big Endian Format
//
typedef struct _FORMATTED_CAPACITY_DESCRIPTOR {
UCHAR NumberOfBlocks[4];
UCHAR Maximum : 1;
UCHAR Valid : 1;
UCHAR BlockLength[3];
} FORMATTED_CAPACITY_DESCRIPTOR, *PFORMATTED_CAPACITY_DESCRIPTOR;
typedef struct _FORMATTED_CAPACITY_LIST {
UCHAR Reserved[3];
UCHAR CapacityListLength;
FORMATTED_CAPACITY_DESCRIPTOR Descriptors[0];
} FORMATTED_CAPACITY_LIST, *PFORMATTED_CAPACITY_LIST;
//
// PLAY_CD definitions and constants
//
#define CD_EXPECTED_SECTOR_ANY 0x0
#define CD_EXPECTED_SECTOR_CDDA 0x1
#define CD_EXPECTED_SECTOR_MODE1 0x2
#define CD_EXPECTED_SECTOR_MODE2 0x3
#define CD_EXPECTED_SECTOR_MODE2_FORM1 0x4
#define CD_EXPECTED_SECTOR_MODE2_FORM2 0x5
//
// Read Disk Information Definitions and Capabilities
//
#define DISK_STATUS_EMPTY 0x00
#define DISK_STATUS_INCOMPLETE 0x01
#define DISK_STATUS_COMPLETE 0x02
#define LAST_SESSION_EMPTY 0x00
#define LAST_SESSION_INCOMPLETE 0x01
#define LAST_SESSION_COMPLETE 0x03
#define DISK_TYPE_CDDA 0x01
#define DISK_TYPE_CDI 0x10
#define DISK_TYPE_XA 0x20
#define DISK_TYPE_UNDEFINED 0xFF
typedef struct _OPC_TABLE_ENTRY {
UCHAR Speed[2];
UCHAR OPCValue[6];
} OPC_TABLE_ENTRY, *POPC_TABLE_ENTRY;
typedef struct _DISK_INFORMATION {
UCHAR Length[2];
UCHAR DiskStatus : 2;
UCHAR LastSessionStatus : 2;
UCHAR Erasable : 1;
UCHAR Reserved1 : 3;
UCHAR FirstTrackNumber;
UCHAR NumberOfSessions;
UCHAR LastSessionFirstTrack;
UCHAR LastSessionLastTrack;
UCHAR Reserved2 : 5;
UCHAR GEN : 1;
UCHAR DBC_V : 1;
UCHAR DID_V : 1;
UCHAR DiskType;
UCHAR Reserved3[3];
UCHAR DiskIdentification[4];
UCHAR LastSessionLeadIn[4]; // MSF
UCHAR LastPossibleStartTime[4]; // MSF
UCHAR DiskBarCode[8];
UCHAR Reserved4;
UCHAR NumberOPCEntries;
OPC_TABLE_ENTRY OPCTable[0];
} DISK_INFORMATION, *PDISK_INFORMATION;
//
// Read Header definitions and structures
//
typedef struct _DATA_BLOCK_HEADER {
UCHAR DataMode;
UCHAR Reserved[4];
union {
UCHAR LogicalBlockAddress[4];
struct {
UCHAR Reserved;
UCHAR M;
UCHAR S;
UCHAR F;
} MSF;
};
} DATA_BLOCK_HEADER, *PDATA_BLOCK_HEADER;
#define DATA_BLOCK_MODE0 0x0
#define DATA_BLOCK_MODE1 0x1
#define DATA_BLOCK_MODE2 0x2
//
// Read TOC Format Codes
//
#define READ_TOC_FORMAT_TOC 0x00
#define READ_TOC_FORMAT_SESSION 0x01
#define READ_TOC_FORMAT_FULL_TOC 0x02
#define READ_TOC_FORMAT_PMA 0x03
#define READ_TOC_FORMAT_ATIP 0x04
typedef struct _TRACK_INFORMATION {
UCHAR Length[2];
UCHAR TrackNumber;
UCHAR SessionNumber;
UCHAR Reserved1;
UCHAR TrackMode : 4;
UCHAR Copy : 1;
UCHAR Damage : 1;
UCHAR Reserved2 : 2;
UCHAR DataMode : 4;
UCHAR FP : 1;
UCHAR Packet : 1;
UCHAR Blank : 1;
UCHAR RT : 1;
UCHAR NWA_V : 1;
UCHAR Reserved3 : 7;
UCHAR TrackStartAddress[4];
UCHAR NextWritableAddress[4];
UCHAR FreeBlocks[4];
UCHAR FixedPacketSize[4];
} TRACK_INFORMATION, *PTRACK_INFORMATION;
//
// Command Descriptor Block constants.
//
#define CDB6GENERIC_LENGTH 6
#define CDB10GENERIC_LENGTH 10
#define CDB12GENERIC_LENGTH 12
#define SETBITON 1
#define SETBITOFF 0
//
// Mode Sense/Select page constants.
//
#define MODE_PAGE_ERROR_RECOVERY 0x01
#define MODE_PAGE_DISCONNECT 0x02
#define MODE_PAGE_FORMAT_DEVICE 0x03
#define MODE_PAGE_RIGID_GEOMETRY 0x04
#define MODE_PAGE_FLEXIBILE 0x05
#define MODE_PAGE_VERIFY_ERROR 0x07
#define MODE_PAGE_CACHING 0x08
#define MODE_PAGE_PERIPHERAL 0x09
#define MODE_PAGE_CONTROL 0x0A
#define MODE_PAGE_MEDIUM_TYPES 0x0B
#define MODE_PAGE_NOTCH_PARTITION 0x0C
#define MODE_PAGE_CD_AUDIO_CONTROL 0x0E
#define MODE_PAGE_DATA_COMPRESS 0x0F
#define MODE_PAGE_DEVICE_CONFIG 0x10
#define MODE_PAGE_MEDIUM_PARTITION 0x11
#define MODE_PAGE_CDVD_FEATURE_SET 0x18
#define MODE_PAGE_POWER_CONDITION 0x1A
#define MODE_PAGE_FAULT_REPORTING 0x1C
#define MODE_PAGE_CDVD_INACTIVITY 0x1D
#define MODE_PAGE_ELEMENT_ADDRESS 0x1D
#define MODE_PAGE_TRANSPORT_GEOMETRY 0x1E
#define MODE_PAGE_DEVICE_CAPABILITIES 0x1F
#define MODE_PAGE_CAPABILITIES 0x2A
#define MODE_SENSE_RETURN_ALL 0x3f
#define MODE_SENSE_CURRENT_VALUES 0x00
#define MODE_SENSE_CHANGEABLE_VALUES 0x40
#define MODE_SENSE_DEFAULT_VAULES 0x80
#define MODE_SENSE_SAVED_VALUES 0xc0
//
// SCSI CDB operation codes
//
#define SCSIOP_TEST_UNIT_READY 0x00
#define SCSIOP_REZERO_UNIT 0x01
#define SCSIOP_REWIND 0x01
#define SCSIOP_REQUEST_BLOCK_ADDR 0x02
#define SCSIOP_REQUEST_SENSE 0x03
#define SCSIOP_FORMAT_UNIT 0x04
#define SCSIOP_READ_BLOCK_LIMITS 0x05
#define SCSIOP_REASSIGN_BLOCKS 0x07
#define SCSIOP_INIT_ELEMENT_STATUS 0x07
#define SCSIOP_READ6 0x08
#define SCSIOP_RECEIVE 0x08
#define SCSIOP_WRITE6 0x0A
#define SCSIOP_PRINT 0x0A
#define SCSIOP_SEND 0x0A
#define SCSIOP_SEEK6 0x0B
#define SCSIOP_TRACK_SELECT 0x0B
#define SCSIOP_SLEW_PRINT 0x0B
#define SCSIOP_SEEK_BLOCK 0x0C
#define SCSIOP_PARTITION 0x0D
#define SCSIOP_READ_REVERSE 0x0F
#define SCSIOP_WRITE_FILEMARKS 0x10
#define SCSIOP_FLUSH_BUFFER 0x10
#define SCSIOP_SPACE 0x11
#define SCSIOP_INQUIRY 0x12
#define SCSIOP_VERIFY6 0x13
#define SCSIOP_RECOVER_BUF_DATA 0x14
#define SCSIOP_MODE_SELECT 0x15
#define SCSIOP_RESERVE_UNIT 0x16
#define SCSIOP_RELEASE_UNIT 0x17
#define SCSIOP_COPY 0x18
#define SCSIOP_ERASE 0x19
#define SCSIOP_MODE_SENSE 0x1A
#define SCSIOP_START_STOP_UNIT 0x1B
#define SCSIOP_STOP_PRINT 0x1B
#define SCSIOP_LOAD_UNLOAD 0x1B
#define SCSIOP_RECEIVE_DIAGNOSTIC 0x1C
#define SCSIOP_SEND_DIAGNOSTIC 0x1D
#define SCSIOP_MEDIUM_REMOVAL 0x1E
#define SCSIOP_READ_FORMATTED_CAPACITY 0x23
#define SCSIOP_READ_CAPACITY 0x25
#define SCSIOP_READ 0x28
#define SCSIOP_WRITE 0x2A
#define SCSIOP_SEEK 0x2B
#define SCSIOP_LOCATE 0x2B
#define SCSIOP_POSITION_TO_ELEMENT 0x2B
#define SCSIOP_WRITE_VERIFY 0x2E
#define SCSIOP_VERIFY 0x2F
#define SCSIOP_SEARCH_DATA_HIGH 0x30
#define SCSIOP_SEARCH_DATA_EQUAL 0x31
#define SCSIOP_SEARCH_DATA_LOW 0x32
#define SCSIOP_SET_LIMITS 0x33
#define SCSIOP_READ_POSITION 0x34
#define SCSIOP_SYNCHRONIZE_CACHE 0x35
#define SCSIOP_COMPARE 0x39
#define SCSIOP_COPY_COMPARE 0x3A
#define SCSIOP_WRITE_DATA_BUFF 0x3B
#define SCSIOP_READ_DATA_BUFF 0x3C
#define SCSIOP_CHANGE_DEFINITION 0x40
#define SCSIOP_READ_SUB_CHANNEL 0x42
#define SCSIOP_READ_TOC 0x43
#define SCSIOP_READ_HEADER 0x44
#define SCSIOP_PLAY_AUDIO 0x45
#define SCSIOP_PLAY_AUDIO_MSF 0x47
#define SCSIOP_PLAY_TRACK_INDEX 0x48
#define SCSIOP_PLAY_TRACK_RELATIVE 0x49
#define SCSIOP_PAUSE_RESUME 0x4B
#define SCSIOP_LOG_SELECT 0x4C
#define SCSIOP_LOG_SENSE 0x4D
#define SCSIOP_STOP_PLAY_SCAN 0x4E
#define SCSIOP_READ_DISK_INFORMATION 0x51
#define SCSIOP_READ_TRACK_INFORMATION 0x52
#define SCSIOP_MODE_SELECT10 0x55
#define SCSIOP_MODE_SENSE10 0x5A
#define SCSIOP_REPORT_LUNS 0xA0
#define SCSIOP_SEND_KEY 0xA3
#define SCSIOP_REPORT_KEY 0xA4
#define SCSIOP_MOVE_MEDIUM 0xA5
#define SCSIOP_LOAD_UNLOAD_SLOT 0xA6
#define SCSIOP_EXCHANGE_MEDIUM 0xA6
#define SCSIOP_SET_READ_AHEAD 0xA7
#define SCSIOP_READ_DVD_STRUCTURE 0xAD
#define SCSIOP_REQUEST_VOL_ELEMENT 0xB5
#define SCSIOP_SEND_VOLUME_TAG 0xB6
#define SCSIOP_READ_ELEMENT_STATUS 0xB8
#define SCSIOP_READ_CD_MSF 0xB9
#define SCSIOP_SCAN_CD 0xBA
#define SCSIOP_PLAY_CD 0xBC
#define SCSIOP_MECHANISM_STATUS 0xBD
#define SCSIOP_READ_CD 0xBE
#define SCSIOP_INIT_ELEMENT_RANGE 0xE7
//
// If the IMMED bit is 1, status is returned as soon
// as the operation is initiated. If the IMMED bit
// is 0, status is not returned until the operation
// is completed.
//
#define CDB_RETURN_ON_COMPLETION 0
#define CDB_RETURN_IMMEDIATE 1
// end_ntminitape
//
// CDB Force media access used in extended read and write commands.
//
#define CDB_FORCE_MEDIA_ACCESS 0x08
//
// Denon CD ROM operation codes
//
#define SCSIOP_DENON_EJECT_DISC 0xE6
#define SCSIOP_DENON_STOP_AUDIO 0xE7
#define SCSIOP_DENON_PLAY_AUDIO 0xE8
#define SCSIOP_DENON_READ_TOC 0xE9
#define SCSIOP_DENON_READ_SUBCODE 0xEB
//
// SCSI Bus Messages
//
#define SCSIMESS_ABORT 0x06
#define SCSIMESS_ABORT_WITH_TAG 0x0D
#define SCSIMESS_BUS_DEVICE_RESET 0X0C
#define SCSIMESS_CLEAR_QUEUE 0X0E
#define SCSIMESS_COMMAND_COMPLETE 0X00
#define SCSIMESS_DISCONNECT 0X04
#define SCSIMESS_EXTENDED_MESSAGE 0X01
#define SCSIMESS_IDENTIFY 0X80
#define SCSIMESS_IDENTIFY_WITH_DISCON 0XC0
#define SCSIMESS_IGNORE_WIDE_RESIDUE 0X23
#define SCSIMESS_INITIATE_RECOVERY 0X0F
#define SCSIMESS_INIT_DETECTED_ERROR 0X05
#define SCSIMESS_LINK_CMD_COMP 0X0A
#define SCSIMESS_LINK_CMD_COMP_W_FLAG 0X0B
#define SCSIMESS_MESS_PARITY_ERROR 0X09
#define SCSIMESS_MESSAGE_REJECT 0X07
#define SCSIMESS_NO_OPERATION 0X08
#define SCSIMESS_HEAD_OF_QUEUE_TAG 0X21
#define SCSIMESS_ORDERED_QUEUE_TAG 0X22
#define SCSIMESS_SIMPLE_QUEUE_TAG 0X20
#define SCSIMESS_RELEASE_RECOVERY 0X10
#define SCSIMESS_RESTORE_POINTERS 0X03
#define SCSIMESS_SAVE_DATA_POINTER 0X02
#define SCSIMESS_TERMINATE_IO_PROCESS 0X11
//
// SCSI Extended Message operation codes
//
#define SCSIMESS_MODIFY_DATA_POINTER 0X00
#define SCSIMESS_SYNCHRONOUS_DATA_REQ 0X01
#define SCSIMESS_WIDE_DATA_REQUEST 0X03
//
// SCSI Extended Message Lengths
//
#define SCSIMESS_MODIFY_DATA_LENGTH 5
#define SCSIMESS_SYNCH_DATA_LENGTH 3
#define SCSIMESS_WIDE_DATA_LENGTH 2
//
// SCSI extended message structure
//
#pragma pack (1)
typedef struct _SCSI_EXTENDED_MESSAGE {
UCHAR InitialMessageCode;
UCHAR MessageLength;
UCHAR MessageType;
union _EXTENDED_ARGUMENTS {
struct {
UCHAR Modifier[4];
} Modify;
struct {
UCHAR TransferPeriod;
UCHAR ReqAckOffset;
} Synchronous;
struct{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -