📄 scsi.h
字号:
#define IOCTL_SCSI_MINIPORT_NOT_CLUSTER_CAPABLE ((FILE_DEVICE_SCSI << 16) + 0x0521)/* Read Capacity Data. Returned in Big Endian format */typedef struct _READ_CAPACITY_DATA { ULONG LogicalBlockAddress; ULONG BytesPerBlock;} READ_CAPACITY_DATA, *PREAD_CAPACITY_DATA;/* Read Block Limits Data. Returned in Big Endian format */typedef struct _READ_BLOCK_LIMITS { UCHAR Reserved; UCHAR BlockMaximumSize[3]; UCHAR BlockMinimumSize[2];} READ_BLOCK_LIMITS_DATA, *PREAD_BLOCK_LIMITS_DATA;typedef struct _MODE_PARAMETER_HEADER { UCHAR ModeDataLength; UCHAR MediumType; UCHAR DeviceSpecificParameter; UCHAR BlockDescriptorLength;}MODE_PARAMETER_HEADER, *PMODE_PARAMETER_HEADER;typedef struct _MODE_PARAMETER_HEADER10 { UCHAR ModeDataLength[2]; UCHAR MediumType; UCHAR DeviceSpecificParameter; UCHAR Reserved[2]; UCHAR BlockDescriptorLength[2];} MODE_PARAMETER_HEADER10, *PMODE_PARAMETER_HEADER10;#define MODE_FD_SINGLE_SIDE 0x01#define MODE_FD_DOUBLE_SIDE 0x02#define MODE_FD_MAXIMUM_TYPE 0x1E#define MODE_DSP_FUA_SUPPORTED 0x10#define MODE_DSP_WRITE_PROTECT 0x80typedef struct _MODE_PARAMETER_BLOCK { UCHAR DensityCode; UCHAR NumberOfBlocks[3]; UCHAR Reserved; UCHAR BlockLength[3];} MODE_PARAMETER_BLOCK, *PMODE_PARAMETER_BLOCK;typedef struct _MODE_DISCONNECT_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR BufferFullRatio; UCHAR BufferEmptyRatio; UCHAR BusInactivityLimit[2]; UCHAR BusDisconnectTime[2]; UCHAR BusConnectTime[2]; UCHAR MaximumBurstSize[2]; UCHAR DataTransferDisconnect : 2; UCHAR Reserved2[3];}MODE_DISCONNECT_PAGE, *PMODE_DISCONNECT_PAGE;typedef struct _MODE_CACHING_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR ReadDisableCache : 1; UCHAR MultiplicationFactor : 1; UCHAR WriteCacheEnable : 1; UCHAR Reserved2 : 5; UCHAR WriteRetensionPriority : 4; UCHAR ReadRetensionPriority : 4; UCHAR DisablePrefetchTransfer[2]; UCHAR MinimumPrefetch[2]; UCHAR MaximumPrefetch[2]; UCHAR MaximumPrefetchCeiling[2];}MODE_CACHING_PAGE, *PMODE_CACHING_PAGE;typedef struct _MODE_CDROM_WRITE_PARAMETERS_PAGE { UCHAR PageLength; UCHAR WriteType : 4; UCHAR TestWrite : 1; UCHAR LinkSizeValid : 1; UCHAR BufferUnderrunFreeEnabled : 1; UCHAR Reserved2 : 1; UCHAR TrackMode : 4; UCHAR Copy : 1; UCHAR FixedPacket : 1; UCHAR MultiSession : 2; UCHAR DataBlockType : 4; UCHAR Reserved3 : 4; UCHAR LinkSize; UCHAR Reserved4; UCHAR HostApplicationCode : 6; UCHAR Reserved5 : 2; UCHAR SessionFormat; UCHAR Reserved6; UCHAR PacketSize[4]; UCHAR AudioPauseLength[2]; UCHAR Reserved7 : 7; UCHAR MediaCatalogNumberValid : 1; UCHAR MediaCatalogNumber[13]; UCHAR MediaCatalogNumberZero; UCHAR MediaCatalogNumberAFrame; UCHAR Reserved8 : 7; UCHAR ISRCValid : 1; UCHAR ISRCCountry[2]; UCHAR ISRCOwner[3]; UCHAR ISRCRecordingYear[2]; UCHAR ISRCSerialNumber[5]; UCHAR ISRCZero; UCHAR ISRCAFrame; UCHAR ISRCReserved; UCHAR SubHeaderData[4];} MODE_CDROM_WRITE_PARAMETERS_PAGE, *PMODE_CDROM_WRITE_PARAMETERS_PAGE;typedef struct _MODE_FLEXIBLE_DISK_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR TransferRate[2]; UCHAR NumberOfHeads; UCHAR SectorsPerTrack; UCHAR BytesPerSector[2]; UCHAR NumberOfCylinders[2]; UCHAR StartWritePrecom[2]; UCHAR StartReducedCurrent[2]; UCHAR StepRate[2]; UCHAR StepPluseWidth; UCHAR HeadSettleDelay[2]; UCHAR MotorOnDelay; UCHAR MotorOffDelay; UCHAR Reserved2 : 5; UCHAR MotorOnAsserted : 1; UCHAR StartSectorNumber : 1; UCHAR TrueReadySignal : 1; UCHAR StepPlusePerCyclynder : 4; UCHAR Reserved3 : 4; UCHAR WriteCompenstation; UCHAR HeadLoadDelay; UCHAR HeadUnloadDelay; UCHAR Pin2Usage : 4; UCHAR Pin34Usage : 4; UCHAR Pin1Usage : 4; UCHAR Pin4Usage : 4; UCHAR MediumRotationRate[2]; UCHAR Reserved4[2];} MODE_FLEXIBLE_DISK_PAGE, *PMODE_FLEXIBLE_DISK_PAGE;typedef struct _MODE_FORMAT_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR TracksPerZone[2]; UCHAR AlternateSectorsPerZone[2]; UCHAR AlternateTracksPerZone[2]; UCHAR AlternateTracksPerLogicalUnit[2]; UCHAR SectorsPerTrack[2]; UCHAR BytesPerPhysicalSector[2]; UCHAR Interleave[2]; UCHAR TrackSkewFactor[2]; UCHAR CylinderSkewFactor[2]; UCHAR Reserved2 : 4; UCHAR SurfaceFirst : 1; UCHAR RemovableMedia : 1; UCHAR HardSectorFormating : 1; UCHAR SoftSectorFormating : 1; UCHAR Reserved3[3];} MODE_FORMAT_PAGE, *PMODE_FORMAT_PAGE;typedef struct _MODE_RIGID_GEOMETRY_PAGE { UCHAR PageCode : 6; UCHAR Reserved : 1; UCHAR PageSavable : 1; UCHAR PageLength; UCHAR NumberOfCylinders[3]; UCHAR NumberOfHeads; UCHAR StartWritePrecom[3]; UCHAR StartReducedCurrent[3]; UCHAR DriveStepRate[2]; UCHAR LandZoneCyclinder[3]; UCHAR RotationalPositionLock : 2; UCHAR Reserved2 : 6; UCHAR RotationOffset; UCHAR Reserved3; UCHAR RoataionRate[2]; UCHAR Reserved4[2];} MODE_RIGID_GEOMETRY_PAGE, *PMODE_RIGID_GEOMETRY_PAGE;typedef struct _MODE_READ_WRITE_RECOVERY_PAGE { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR DCRBit : 1; UCHAR DTEBit : 1; UCHAR PERBit : 1; UCHAR EERBit : 1; UCHAR RCBit : 1; UCHAR TBBit : 1; UCHAR ARRE : 1; UCHAR AWRE : 1; UCHAR ReadRetryCount; UCHAR Reserved4[4]; UCHAR WriteRetryCount; UCHAR Reserved5[3];} MODE_READ_WRITE_RECOVERY_PAGE, *PMODE_READ_WRITE_RECOVERY_PAGE;typedef struct _MODE_READ_RECOVERY_PAGE { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; UCHAR DCRBit : 1; UCHAR DTEBit : 1; UCHAR PERBit : 1; UCHAR Reserved2 : 1; UCHAR RCBit : 1; UCHAR TBBit : 1; UCHAR Reserved3 : 2; UCHAR ReadRetryCount; UCHAR Reserved4[4];} MODE_READ_RECOVERY_PAGE, *PMODE_READ_RECOVERY_PAGE;typedef struct _MODE_INFO_EXCEPTIONS { UCHAR PageCode : 6; UCHAR Reserved1 : 1; UCHAR PSBit : 1; UCHAR PageLength; _ANONYMOUS_UNION union { UCHAR Flags; _ANONYMOUS_STRUCT struct { UCHAR LogErr : 1; UCHAR Reserved2 : 1; UCHAR Test : 1; UCHAR Dexcpt : 1; UCHAR Reserved3 : 3; UCHAR Perf : 1; } DUMMYSTRUCTNAME; } DUMMYUNIONNAME; UCHAR ReportMethod : 4; UCHAR Reserved4 : 4; UCHAR IntervalTimer[4]; UCHAR ReportCount[4];} MODE_INFO_EXCEPTIONS, *PMODE_INFO_EXCEPTIONS;/* CDROM audio control */#define CDB_AUDIO_PAUSE 0x00#define CDB_AUDIO_RESUME 0x01#define CDB_DEVICE_START 0x11#define CDB_DEVICE_STOP 0x10#define CDB_EJECT_MEDIA 0x10#define CDB_LOAD_MEDIA 0x01#define CDB_SUBCHANNEL_HEADER 0x00#define CDB_SUBCHANNEL_BLOCK 0x01#define CDROM_AUDIO_CONTROL_PAGE 0x0E#define MODE_SELECT_IMMEDIATE 0x04#define MODE_SELECT_PFBIT 0x10#define CDB_USE_MSF 0x01typedef struct _PORT_OUTPUT { UCHAR ChannelSelection; UCHAR Volume;} PORT_OUTPUT, *PPORT_OUTPUT;typedef struct _AUDIO_OUTPUT { UCHAR CodePage; UCHAR ParameterLength; UCHAR Immediate; UCHAR Reserved[2]; UCHAR LbaFormat; UCHAR LogicalBlocksPerSecond[2]; PORT_OUTPUT PortOutput[4];} AUDIO_OUTPUT, *PAUDIO_OUTPUT;/* Multisession CDROMs */#define GET_LAST_SESSION 0x01#define GET_SESSION_DATA 0x02;/* Atapi 2.5 changers */typedef struct _MECHANICAL_STATUS_INFORMATION_HEADER { UCHAR CurrentSlot : 5; UCHAR ChangerState : 2; UCHAR Fault : 1; UCHAR Reserved : 5; UCHAR MechanismState : 3; UCHAR CurrentLogicalBlockAddress[3]; UCHAR NumberAvailableSlots; UCHAR SlotTableLength[2];} MECHANICAL_STATUS_INFORMATION_HEADER, *PMECHANICAL_STATUS_INFORMATION_HEADER;typedef struct _SLOT_TABLE_INFORMATION { UCHAR DiscChanged : 1; UCHAR Reserved : 6; UCHAR DiscPresent : 1; UCHAR Reserved2[3];} SLOT_TABLE_INFORMATION, *PSLOT_TABLE_INFORMATION;typedef struct _MECHANICAL_STATUS { MECHANICAL_STATUS_INFORMATION_HEADER MechanicalStatusHeader; SLOT_TABLE_INFORMATION SlotTableInfo[1];} MECHANICAL_STATUS, *PMECHANICAL_STATUS;/* Tape definitions */typedef struct _TAPE_POSITION_DATA { UCHAR Reserved1 : 2; UCHAR BlockPositionUnsupported : 1; UCHAR Reserved2 : 3; UCHAR EndOfPartition : 1; UCHAR BeginningOfPartition : 1; UCHAR PartitionNumber; USHORT Reserved3; UCHAR FirstBlock[4]; UCHAR LastBlock[4]; UCHAR Reserved4; UCHAR NumberOfBlocks[3]; UCHAR NumberOfBytes[4];} TAPE_POSITION_DATA, *PTAPE_POSITION_DATA;/* This structure is used to convert little endian ULONGs to SCSI CDB big endians values. */typedef union _EIGHT_BYTE { _ANONYMOUS_STRUCT struct { UCHAR Byte0; UCHAR Byte1; UCHAR Byte2; UCHAR Byte3; UCHAR Byte4; UCHAR Byte5; UCHAR Byte6; UCHAR Byte7; } DUMMYSTRUCTNAME; ULONGLONG AsULongLong;} EIGHT_BYTE, *PEIGHT_BYTE;typedef union _FOUR_BYTE { _ANONYMOUS_STRUCT struct { UCHAR Byte0; UCHAR Byte1; UCHAR Byte2; UCHAR Byte3; } DUMMYSTRUCTNAME; ULONG AsULong;} FOUR_BYTE, *PFOUR_BYTE;typedef union _TWO_BYTE { _ANONYMOUS_STRUCT struct { UCHAR Byte0; UCHAR Byte1; } DUMMYSTRUCTNAME; USHORT AsUShort;} TWO_BYTE, *PTWO_BYTE;/* Byte reversing macro for converting between big- and little-endian formats */#define REVERSE_BYTES_QUAD(Destination, Source) { \ PEIGHT_BYTE _val1 = (PEIGHT_BYTE)(Destination); \ PEIGHT_BYTE _val2 = (PEIGHT_BYTE)(Source); \ _val1->Byte7 = _val2->Byte0; \ _val1->Byte6 = _val2->Byte1; \ _val1->Byte5 = _val2->Byte2; \ _val1->Byte4 = _val2->Byte3; \ _val1->Byte3 = _val2->Byte4; \ _val1->Byte2 = _val2->Byte5; \ _val1->Byte1 = _val2->Byte6; \ _val1->Byte0 = _val2->Byte7; \}#define REVERSE_BYTES(Destination, Source) { \ PFOUR_BYTE _val1 = (PFOUR_BYTE)(Destination); \ PFOUR_BYTE _val2 = (PFOUR_BYTE)(Source); \ _val1->Byte3 = _val2->Byte0; \ _val1->Byte2 = _val2->Byte1; \ _val1->Byte1 = _val2->Byte2; \ _val1->Byte0 = _val2->Byte3; \}#define REVERSE_BYTES_SHORT(Destination, Source) { \ PTWO_BYTE _val1 = (PTWO_BYTE)(Destination); \ PTWO_BYTE _val2 = (PTWO_BYTE)(Source); \ _val1->Byte1 = _val2->Byte0; \ _val1->Byte0 = _val2->Byte1; \}#define REVERSE_SHORT(Short) { \ UCHAR _val; \ PTWO_BYTE _val2 = (PTWO_BYTE)(Short); \ _val = _val2->Byte0; \ _val2->Byte0 = _val2->Byte1; \ _val2->Byte1 = _val; \}#define REVERSE_LONG(Long) { \ UCHAR _val; \ PFOUR_BYTE _val2 = (PFOUR_BYTE)(Long); \ _val = _val2->Byte3; \ _val2->Byte3 = _val2->Byte0; \ _val2->Byte0 = _val; \ _val = _val2->Byte2; \ _val2->Byte2 = _val2->Byte1; \ _val2->Byte1 = _val; \}#define WHICH_BIT(Data, Bit) { \ UCHAR _val; \ for (_val = 0; _val < 32; _val++) { \ if (((Data) >> _val) == 1) { \ break; \ } \ } \ ASSERT(_val != 32); \ (Bit) = _val; \}#ifdef __cplusplus}#endif#endif /* __SCSI_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -