📄 scsi.h
字号:
UCHAR OperationCode;
UCHAR SPBit : 1;
UCHAR PCRBit : 1;
UCHAR Reserved1 : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved : 6;
UCHAR PCBit : 2;
UCHAR Reserved2[4];
UCHAR ParameterListLength[2]; // [0]=MSB, [1]=LSB
UCHAR Control;
} LOGSELECT, *PLOGSELECT;
struct _PRINT {
UCHAR OperationCode;
UCHAR Reserved : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR TransferLength[3];
UCHAR Control;
} PRINT, *PPRINT;
struct _SEEK {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR LogicalBlockAddress[4];
UCHAR Reserved2[3];
UCHAR Control;
} SEEK, *PSEEK;
struct _ERASE {
UCHAR OperationCode;
UCHAR Long : 1;
UCHAR Immediate : 1;
UCHAR Reserved1 : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[3];
UCHAR Control;
} ERASE, *PERASE;
struct _START_STOP {
UCHAR OperationCode;
UCHAR Immediate: 1;
UCHAR Reserved1 : 4;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[2];
UCHAR Start : 1;
UCHAR LoadEject : 1;
UCHAR Reserved3 : 6;
UCHAR Control;
} START_STOP, *PSTART_STOP;
struct _MEDIA_REMOVAL {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR Reserved2[2];
UCHAR Prevent : 1;
UCHAR Persistant : 1;
UCHAR Reserved3 : 6;
UCHAR Control;
} MEDIA_REMOVAL, *PMEDIA_REMOVAL;
//
// Tape CDBs
//
struct _SEEK_BLOCK {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR Reserved1 : 7;
UCHAR BlockAddress[3];
UCHAR Link : 1;
UCHAR Flag : 1;
UCHAR Reserved2 : 4;
UCHAR VendorUnique : 2;
} SEEK_BLOCK, *PSEEK_BLOCK;
struct _REQUEST_BLOCK_ADDRESS {
UCHAR OperationCode;
UCHAR Reserved1[3];
UCHAR AllocationLength;
UCHAR Link : 1;
UCHAR Flag : 1;
UCHAR Reserved2 : 4;
UCHAR VendorUnique : 2;
} REQUEST_BLOCK_ADDRESS, *PREQUEST_BLOCK_ADDRESS;
struct _PARTITION {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR Sel: 1;
UCHAR PartitionSelect : 6;
UCHAR Reserved1[3];
UCHAR Control;
} PARTITION, *PPARTITION;
struct _WRITE_TAPE_MARKS {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR WriteSetMarks: 1;
UCHAR Reserved : 3;
UCHAR LogicalUnitNumber : 3;
UCHAR TransferLength[3];
UCHAR Control;
} WRITE_TAPE_MARKS, *PWRITE_TAPE_MARKS;
struct _SPACE_TAPE_MARKS {
UCHAR OperationCode;
UCHAR Code : 3;
UCHAR Reserved : 2;
UCHAR LogicalUnitNumber : 3;
UCHAR NumMarksMSB ;
UCHAR NumMarks;
UCHAR NumMarksLSB;
union {
UCHAR value;
struct {
UCHAR Link : 1;
UCHAR Flag : 1;
UCHAR Reserved : 4;
UCHAR VendorUnique : 2;
} Fields;
} Byte6;
} SPACE_TAPE_MARKS, *PSPACE_TAPE_MARKS;
//
// Read tape position
//
struct _READ_POSITION {
UCHAR Operation;
UCHAR BlockType:1;
UCHAR Reserved1:4;
UCHAR Lun:3;
UCHAR Reserved2[7];
UCHAR Control;
} READ_POSITION, *PREAD_POSITION;
//
// ReadWrite for Tape
//
struct _CDB6READWRITETAPE {
UCHAR OperationCode;
UCHAR VendorSpecific : 5;
UCHAR Reserved : 3;
UCHAR TransferLenMSB;
UCHAR TransferLen;
UCHAR TransferLenLSB;
UCHAR Link : 1;
UCHAR Flag : 1;
UCHAR Reserved1 : 4;
UCHAR VendorUnique : 2;
} CDB6READWRITETAPE, *PCDB6READWRITETAPE;
//
// Medium changer CDB's
//
struct _INIT_ELEMENT_STATUS {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNubmer : 3;
UCHAR Reserved2[3];
UCHAR Reserved3 : 7;
UCHAR NoBarCode : 1;
} INIT_ELEMENT_STATUS, *PINIT_ELEMENT_STATUS;
struct _INITIALIZE_ELEMENT_RANGE {
UCHAR OperationCode;
UCHAR Range : 1;
UCHAR Reserved1 : 4;
UCHAR LogicalUnitNubmer : 3;
UCHAR FirstElementAddress[2];
UCHAR Reserved2[2];
UCHAR NumberOfElements[2];
UCHAR Reserved3;
UCHAR Reserved4 : 7;
UCHAR NoBarCode : 1;
} INITIALIZE_ELEMENT_RANGE, *PINITIALIZE_ELEMENT_RANGE;
struct _POSITION_TO_ELEMENT {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR TransportElementAddress[2];
UCHAR DestinationElementAddress[2];
UCHAR Reserved2[2];
UCHAR Flip : 1;
UCHAR Reserved3 : 7;
UCHAR Control;
} POSITION_TO_ELEMENT, *PPOSITION_TO_ELEMENT;
struct _MOVE_MEDIUM {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR TransportElementAddress[2];
UCHAR SourceElementAddress[2];
UCHAR DestinationElementAddress[2];
UCHAR Reserved2[2];
UCHAR Flip : 1;
UCHAR Reserved3 : 7;
UCHAR Control;
} MOVE_MEDIUM, *PMOVE_MEDIUM;
struct _EXCHANGE_MEDIUM {
UCHAR OperationCode;
UCHAR Reserved1 : 5;
UCHAR LogicalUnitNumber : 3;
UCHAR TransportElementAddress[2];
UCHAR SourceElementAddress[2];
UCHAR Destination1ElementAddress[2];
UCHAR Destination2ElementAddress[2];
UCHAR Flip1 : 1;
UCHAR Flip2 : 1;
UCHAR Reserved3 : 6;
UCHAR Control;
} EXCHANGE_MEDIUM, *PEXCHANGE_MEDIUM;
struct _READ_ELEMENT_STATUS {
UCHAR OperationCode;
UCHAR ElementType : 4;
UCHAR VolTag : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR StartingElementAddress[2];
UCHAR NumberOfElements[2];
UCHAR Reserved1;
UCHAR AllocationLength[3];
UCHAR Reserved2;
UCHAR Control;
} READ_ELEMENT_STATUS, *PREAD_ELEMENT_STATUS;
struct _SEND_VOLUME_TAG {
UCHAR OperationCode;
UCHAR ElementType : 4;
UCHAR Reserved1 : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR StartingElementAddress[2];
UCHAR Reserved2;
UCHAR ActionCode : 5;
UCHAR Reserved3 : 3;
UCHAR Reserved4[2];
UCHAR ParameterListLength[2];
UCHAR Reserved5;
UCHAR Control;
} SEND_VOLUME_TAG, *PSEND_VOLUME_TAG;
struct _REQUEST_VOLUME_ELEMENT_ADDRESS {
UCHAR OperationCode;
UCHAR ElementType : 4;
UCHAR VolTag : 1;
UCHAR LogicalUnitNumber : 3;
UCHAR StartingElementAddress[2];
UCHAR NumberElements[2];
UCHAR Reserved1;
UCHAR AllocationLength[3];
UCHAR Reserved2;
UCHAR Control;
} REQUEST_VOLUME_ELEMENT_ADDRESS, *PREQUEST_VOLUME_ELEMENT_ADDRESS;
//
// Atapi 2.5 Changer 12-byte CDBs
//
struct _LOAD_UNLOAD {
UCHAR OperationCode;
UCHAR Immediate : 1;
UCHAR Reserved1 : 4;
UCHAR Lun : 3;
UCHAR Reserved2[2];
UCHAR Start : 1;
UCHAR LoadEject : 1;
UCHAR Reserved3: 6;
UCHAR Reserved4[3];
UCHAR Slot;
UCHAR Reserved5[3];
} LOAD_UNLOAD, *PLOAD_UNLOAD;
struct _MECH_STATUS {
UCHAR OperationCode;
UCHAR Reserved : 5;
UCHAR Lun : 3;
UCHAR Reserved1[6];
UCHAR AllocationLength[2];
UCHAR Reserved2[1];
UCHAR Control;
} MECH_STATUS, *PMECH_STATUS;
//
// C/DVD 0.9 CDBs
//
struct _SYNCHRONIZE_CACHE10 {
UCHAR OperationCode; // 0x35
UCHAR RelAddr : 1;
UCHAR Immediate : 1;
UCHAR Reserved : 3;
UCHAR Lun : 3;
UCHAR LogicalBlockAddress[4]; // Unused - set to zero
UCHAR Reserved2;
UCHAR BlockCount[2]; // Unused - set to zero
UCHAR Control;
} SYNCHRONIZE_CACHE10, *PSYNCHRONIZE_CACHE10;
struct _GET_EVENT_STATUS_NOTIFICATION {
UCHAR OperationCode; // 0x4a
UCHAR Immediate : 1;
UCHAR Reserved : 4;
UCHAR Lun : 3;
UCHAR Reserved2[2];
UCHAR NotificationClassRequest;
UCHAR Reserved3[2];
UCHAR EventListLength[2]; // [0]=MSB, [1]=LSB
UCHAR Control;
} GET_EVENT_STATUS_NOTIFICATION, *PGET_EVENT_STATUS_NOTIFICATION;
struct _READ_DVD_STRUCTURE {
UCHAR OperationCode; // 0xAD
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR RMDBlockNumber[4];
UCHAR LayerNumber;
UCHAR Format;
UCHAR AllocationLength[2]; // [0]=MSB, [1]=LSB
UCHAR Reserved3 : 6;
UCHAR AGID : 2;
UCHAR Control;
} READ_DVD_STRUCTURE, *PREAD_DVD_STRUCTURE;
struct _SEND_KEY {
UCHAR OperationCode; // 0xA3
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR Reserved2[6];
UCHAR ParameterListLength[2];
UCHAR KeyFormat : 6;
UCHAR AGID : 2;
UCHAR Control;
} SEND_KEY, *PSEND_KEY;
struct _REPORT_KEY {
UCHAR OperationCode; // 0xA4
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR LogicalBlockAddress[4]; // for title key
UCHAR Reserved2[2];
UCHAR AllocationLength[2];
UCHAR KeyFormat : 6;
UCHAR AGID : 2;
UCHAR Control;
} REPORT_KEY, *PREPORT_KEY;
struct _SET_READ_AHEAD {
UCHAR OperationCode; // 0xA7
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR TriggerLBA[4];
UCHAR ReadAheadLBA[4];
UCHAR Reserved2;
UCHAR Control;
} SET_READ_AHEAD, *PSET_READ_AHEAD;
struct _READ_FORMATTED_CAPACITIES {
UCHAR OperationCode; // 0xA7
UCHAR Reserved1 : 5;
UCHAR Lun : 3;
UCHAR Reserved2[5];
UCHAR AllocationLength[2];
UCHAR Control;
} READ_FORMATTED_CAPACITIES, *PREAD_FORMATTED_CAPACITIES;
//
// SCSI-3
//
struct _REPORT_LUNS {
UCHAR OperationCode; // 0xA0
UCHAR Reserved1[5];
UCHAR AllocationLength[4];
UCHAR Reserved2[1];
UCHAR Control;
} REPORT_LUNS, *PREPORT_LUNS;
ULONG AsUlong[4];
UCHAR AsByte[16];
} CDB, *PCDB;
//
// C/DVD CDB Constants & Structures.
//
//
// GET_EVENT_STATUS_NOTIFICATION
//
#define NOTIFICATION_NO_CLASS_EVENTS 0x0
#define NOTIFICATION_POWER_MANAGEMENT_CLASS_EVENTS 0x2
#define NOTIFICATION_MEDIA_STATUS_CLASS_EVENTS 0x4
#define NOTIFICATION_DEVICE_BUSY_CLASS_EVENTS 0x6
typedef struct _NOTIFICATION_EVENT_STATUS_HEADER {
UCHAR EventDataLength[2]; // [0]=MSB, [1]=LSB
UCHAR NotificationClass : 3;
UCHAR Reserved : 4;
UCHAR NEA : 1;
UCHAR SupportedEventClasses;
UCHAR ClassEventData[0];
} NOTIFICATION_EVENT_STATUS_HEADER, *PNOTIFICATION_EVENT_STATUS_HEADER;
//
// Class event data may be one or more (or none) of the following:
//
#define NOTIFICATION_POWER_EVENT_NO_CHANGE 0x0
#define NOTIFICATION_POWER_EVENT_CHANGE_SUCCEEDED 0x1
#define NOTIFICATION_POWER_EVENT_CHANGE_FAILED 0x2
#define NOTIFICATION_POWER_STATUS_ACTIVE 0x1
#define NOTIFICATION_POWER_STATUS_IDLE 0x2
#define NOTIFICATION_POWER_STATUS_STANDBY 0x3
typedef struct _NOTIFICATION_POWER_STATUS {
UCHAR PowerEvent : 4;
UCHAR Reserved : 4;
UCHAR PowerStatus;
UCHAR Reserved2[2];
} NOTIFICATION_POWER_STATUS, *PNOTIFICATION_POWER_STATUS;
#define NOTIFICATION_MEDIA_EVENT_NO_EVENT 0x0
#define NOTIFICATION_MEDIA_EVENT_EJECT_REQUEST 0x1
#define NOTIFICATION_MEDIA_EVENT_NEW_MEDIA 0x2
#define NOTIFICATION_MEDIA_EVENT_MEDIA_REMOVAL 0x3
typedef struct _NOTIFICATION_MEDIA_STATUS {
UCHAR MediaStatus : 4;
UCHAR Reserved : 4;
UCHAR PowerStatus;
UCHAR StartSlot;
UCHAR EndSlot;
} NOTIFICATION_MEDIA_STATUS, *PNOTIFICATION_MEDIA_STATUS;
#define NOTIFICATION_BUSY_EVENT_NO_EVENT 0x0
#define NOTIFICATION_BUSY_EVENT_BUSY 0x1
#define NOTIFICATION_BUSY_STATUS_NO_EVENT 0x0
#define NOTIFICATION_BUSY_STATUS_POWER 0x1
#define NOTIFICATION_BUSY_STATUS_IMMEDIATE 0x2
#define NOTIFICATION_BUSY_STATUS_DEFERRED 0x3
typedef struct _NOTIFICATION_BUSY_STATUS {
UCHAR DeviceBusyEvent : 4;
UCHAR Reserved : 4;
UCHAR DeviceBusyStatus;
UCHAR Time[2]; // [0]=MSB, [1]=LSB
} NOTIFICATION_BUSY_STATUS, *PNOTIFICATION_BUSY_STATUS;
//
// Read DVD Structure Definitions and Constants
//
#define DVD_FORMAT_LEAD_IN 0x00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -