ASPIW32.H
上传用户:wandash
上传日期:2007-01-07
资源大小:79k
文件大小:7k
源码类别:

SCSI/ASPI

开发平台:

Visual C++

  1. #ifndef _H_ASPIW32_
  2. #define _H_ASPIW32_
  3. #include <windows.h>
  4. #define ASPI_MANAGER "wnaspi32.dll"
  5. #define SS_PENDING 0x00
  6. #define SS_COMP 0x01
  7. #define SS_ABORTED 0x02
  8. #define SS_ABORT_FAIL 0x03
  9. #define SS_ERR 0x04
  10. #define SS_INVALID_HA 0x81
  11. #define SS_INVALID_SRB 0xE0
  12. #define SS_BUFFER_ALIGN 0xE1
  13. #define SS_FAILED_INIT 0xE4
  14. #define SS_ASPI_IS_BUSY 0xE5
  15. #define SS_BUFFER_TO_BIG 0xE6
  16. // Max sense length
  17. #define SENSE_LEN 32
  18. #define SC_HA_INQUIRY      0x00
  19. #define SC_GET_DEV_TYPE    0x01
  20. #define SC_EXEC_SCSI_CMD   0x02
  21. #define SC_ABORT_SRB       0x03
  22. #define SC_RESET_DEV       0x04
  23. #define SC_GET_DISK_INFO   0x06
  24. // Peripheral device type
  25. #define DT_DIRECT_ACCESS 0x00
  26. #define DT_SEQUENTIAL_ACCESS 0x01
  27. #define DT_PRINTER 0x02
  28. #define DT_PROCESSOR 0x03
  29. #define DT_WRITE_ONCE 0x04
  30. #define DT_CD_ROM 0x05
  31. #define DT_SCANNER 0x06
  32. #define DT_OPTICAL_MEMORY 0x07
  33. #define DT_MEDIUM_CHANGER 0x08
  34. #define DT_COMMUNICATION 0x09
  35. // SCSI Request Flags
  36. #define SRB_POSTING 0x01
  37. #define SRB_ENABLE_RESIDUAL_COUNT 0x04
  38. #define SRB_DIR_IN 0x08
  39. #define SRB_DIR_OUT 0x10
  40. #define SRB_EVENT_NOTIFY 0x40
  41. // GENERAL I/O Operate Code
  42. #define OC_IO_ALL_TEST_UNIT_READY 0x00
  43. // TAPE I/O Operate Code
  44. #define OC_IO_TAPE_REWIND 0x01
  45. #define OC_IO_TAPE_LOAD 0x1B
  46. #define OC_IO_TAPE_READ_BLOCK_LIMIT 0x05
  47. #define OC_IO_TAPE_READ 0x08
  48. typedef struct
  49. {
  50.         BYTE        SRB_Cmd;            // ASPI command code
  51.         BYTE        SRB_Status;         // ASPI command status byte
  52.         BYTE        SRB_HaId;           // ASPI host adapter number
  53.         BYTE        SRB_Flags;          // ASPI request flags
  54.         DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  55. } SRB,*LPSRB;
  56. typedef struct
  57. {
  58.         BYTE        SRB_Cmd;            // ASPI command code = SC_HA_INQUIRY
  59.         BYTE        SRB_Status;         // ASPI command status byte
  60.         BYTE        SRB_HaId;           // ASPI host adapter number
  61.         BYTE        SRB_Flags;          // ASPI request flags
  62.         DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0
  63.         BYTE        HA_Count;           // Number of host adapters present
  64.         BYTE        HA_SCSI_ID;         // SCSI ID of host adapter
  65.         BYTE        HA_ManagerId[16];   // String describing the manager
  66.         BYTE        HA_Identifier[16];  // String describing the host adapter
  67.         BYTE        HA_Unique[16];      // Host Adapter Unique parameters
  68.         WORD        HA_Rsvd1;
  69. } SRB_HAInquiry, *PSRB_HAInquiry;
  70. typedef struct
  71. {
  72.         BYTE        SRB_Cmd;            // ASPI command code = SC_GET_DEV_TYPE
  73.         BYTE        SRB_Status;         // ASPI command status byte
  74.         BYTE        SRB_HaId;           // ASPI host adapter number
  75.         BYTE        SRB_Flags;          // Reserved
  76.         DWORD       SRB_Hdr_Rsvd;       // Reserved
  77.         BYTE        SRB_Target;         // Target's SCSI ID
  78.         BYTE        SRB_Lun;            // Target's LUN number
  79.         BYTE        SRB_DeviceType;     // Target's peripheral device type
  80.         BYTE        SRB_Rsvd1;          // Reserved for alignment
  81. } SRB_GDEVBlock, *PSRB_GDEVBlock;
  82. typedef struct
  83. {
  84.         BYTE        SRB_Cmd;            // ASPI command code = SC_EXEC_SCSI_CMD
  85.         BYTE        SRB_Status;         // ASPI command status byte
  86.         BYTE        SRB_HaId;           // ASPI host adapter number
  87.         BYTE        SRB_Flags;          // ASPI request flags
  88.         DWORD       SRB_Hdr_Rsvd;       // Reserved
  89.         BYTE        SRB_Target;         // Target's SCSI ID
  90.         BYTE        SRB_Lun;            // Target's LUN number
  91.         WORD        SRB_Rsvd1;          // Reserved for Alignment
  92.         DWORD       SRB_BufLen;         // Data Allocation Length
  93.         BYTE        *SRB_BufPointer;    // Data Buffer Point
  94.         BYTE        SRB_SenseLen;       // Sense Allocation Length
  95.         BYTE        SRB_CDBLen;         // CDB Length
  96.         BYTE        SRB_HaStat;         // Host Adapter Status
  97.         BYTE        SRB_TargStat;       // Target Status
  98.         void        (*SRB_PostProc)();  // Post routine
  99.         void        *SRB_Rsvd2;         // Reserved
  100.         BYTE        SRB_Rsvd3[16];      // Reserved for expansion
  101.         BYTE        CDBByte[16];        // SCSI CDB
  102.         BYTE        SenseArea[SENSE_LEN+2]; // Request Sense buffer
  103. } SRB_ExecSCSICmd, *PSRB_ExecSCSICmd;
  104. typedef struct
  105. {
  106.         BYTE        SRB_Cmd;            // ASPI command code = SC_RESET_DEV
  107.         BYTE        SRB_Status;         // ASPI command status byte
  108.         BYTE        SRB_HaId;           // ASPI host adapter number
  109.         BYTE        SRB_Flags;          // Reserved
  110.         DWORD       SRB_Hdr_Rsvd;       // Reserved
  111.         BYTE        SRB_Target;         // Target's SCSI ID
  112.         BYTE        SRB_Lun;            // Target's LUN number
  113.         BYTE        SRB_Rsvd1[12];      // Reserved for Alignment
  114.         BYTE        SRB_HaStat;         // Host Adapter Status
  115.         BYTE        SRB_TargStat;       // Target Status
  116.         void        *SRB_PostProc;      // Post routine
  117.         void        *SRB_Rsvd2;         // Reserved
  118.         BYTE        SRB_Rsvd3[32];      // Reserved
  119. } SRB_BusDeviceReset, *PSRB_BusDeviceReset;
  120. extern DWORD (*GetASPI32SupportInfo)( void );
  121. extern DWORD (*SendASPI32Command)(LPSRB lpSRB );
  122. extern BOOLEAN LoadASPIManager(void);
  123. extern void ReleaseASPIManager(void);
  124. #define ASPI_STATUS(dwStatus) (HIBYTE(LOWORD(dwStatus)))
  125. #define ASPI_HOST_ADAPTER_NUM(dwStatus) (LOBYTE(LOWORD(dwStatus)))
  126. extern 
  127. BYTE SCSI_HA_INQUERY(BYTE HostAdapterID,
  128.  SRB_HAInquiry *lpsrb);
  129. extern 
  130. BYTE SCSI_GET_DEV_TYPE(BYTE HostAdapterID,
  131.    BYTE TargetID,
  132.    BYTE LUN,
  133.    BYTE *pbDeviceType);
  134. extern
  135. DWORD SCSI_EXEC_SCSI_CMD(SRB_ExecSCSICmd *lpsrb);
  136. extern BYTE SCSI_RESET_DEV(BYTE HostAdapterID,
  137.   BYTE TargetID,
  138.   BYTE LUN);
  139. extern 
  140. BYTE IO_TAPE_REWIND(BYTE HostAdapterID,
  141. BYTE TargetID,
  142. BYTE LUN);
  143. extern
  144. BYTE IO_TAPE_LOAD(BYTE HostAdapterID,
  145.   BYTE TargetID,
  146.   BYTE LUN,
  147.   BOOLEAN EOT,
  148.   BOOLEAN ReTen,
  149.   BOOLEAN LOAD);
  150. extern 
  151. BYTE IO_ALL_TEST_UNIT_READY(BYTE HostAdapterID,
  152. BYTE TargetID,
  153. BYTE LUN);
  154. extern 
  155. BYTE IO_TAPE_READ_BLOCK_LIMIT(BYTE HostAdapterID,
  156.   BYTE TargetID,
  157.   BYTE LUN,
  158.   int *pnMaxBlockSize,
  159.   int *pnMinBlockSize);
  160. extern
  161. BYTE IO_TAPE_READ(BYTE  HostAdapterID,
  162.   BYTE  TargetID,
  163.   BYTE  LUN,
  164.   DWORD dwBufLen,
  165.   void  *pvBuf,
  166.   int *pnBlockLen, // 数据块的实际长度
  167.   BOOLEAN *pbFileMark,
  168.   BOOLEAN *pbEOM,
  169.   BOOLEAN *pbILI,
  170.   BOOLEAN *pbValid,
  171.   BYTE *pbSensekey);
  172. #endif