www.pudn.com > fpdumpw.zip > ASPIW32.H


#ifndef _H_ASPIW32_ 
#define _H_ASPIW32_ 
#include  
#define ASPI_MANAGER "wnaspi32.dll" 
 
#define SS_PENDING			0x00 
#define SS_COMP				0x01 
#define	SS_ABORTED			0x02 
#define	SS_ABORT_FAIL		0x03 
#define	SS_ERR				0x04 
#define SS_INVALID_HA		0x81 
#define	SS_INVALID_SRB		0xE0 
#define	SS_BUFFER_ALIGN		0xE1 
#define SS_FAILED_INIT		0xE4 
#define	SS_ASPI_IS_BUSY		0xE5 
#define	SS_BUFFER_TO_BIG	0xE6 
 
 
// Max sense length 
#define SENSE_LEN 32 
 
#define SC_HA_INQUIRY      0x00 
#define SC_GET_DEV_TYPE    0x01 
#define SC_EXEC_SCSI_CMD   0x02 
#define SC_ABORT_SRB       0x03 
#define SC_RESET_DEV       0x04 
#define SC_GET_DISK_INFO   0x06 
 
// Peripheral device type 
#define DT_DIRECT_ACCESS		0x00 
#define DT_SEQUENTIAL_ACCESS	0x01 
#define DT_PRINTER				0x02 
#define DT_PROCESSOR			0x03 
#define DT_WRITE_ONCE			0x04 
#define DT_CD_ROM				0x05 
#define DT_SCANNER				0x06 
#define DT_OPTICAL_MEMORY		0x07 
#define DT_MEDIUM_CHANGER		0x08 
#define DT_COMMUNICATION		0x09 
 
// SCSI Request Flags 
#define SRB_POSTING					0x01 
#define SRB_ENABLE_RESIDUAL_COUNT	0x04 
#define SRB_DIR_IN					0x08 
#define SRB_DIR_OUT					0x10 
#define SRB_EVENT_NOTIFY			0x40 
 
// GENERAL I/O Operate Code 
#define OC_IO_ALL_TEST_UNIT_READY	0x00 
// TAPE I/O Operate Code 
#define OC_IO_TAPE_REWIND			0x01 
#define OC_IO_TAPE_LOAD				0x1B 
#define OC_IO_TAPE_READ_BLOCK_LIMIT	0x05 
#define OC_IO_TAPE_READ				0x08 
 
typedef struct 
{ 
        BYTE        SRB_Cmd;            // ASPI command code 
        BYTE        SRB_Status;         // ASPI command status byte 
        BYTE        SRB_HaId;           // ASPI host adapter number 
        BYTE        SRB_Flags;          // ASPI request flags 
        DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0 
} SRB,*LPSRB; 
 
typedef struct 
{ 
        BYTE        SRB_Cmd;            // ASPI command code = SC_HA_INQUIRY 
        BYTE        SRB_Status;         // ASPI command status byte 
        BYTE        SRB_HaId;           // ASPI host adapter number 
        BYTE        SRB_Flags;          // ASPI request flags 
        DWORD       SRB_Hdr_Rsvd;       // Reserved, MUST = 0 
        BYTE        HA_Count;           // Number of host adapters present 
        BYTE        HA_SCSI_ID;         // SCSI ID of host adapter 
        BYTE        HA_ManagerId[16];   // String describing the manager 
        BYTE        HA_Identifier[16];  // String describing the host adapter 
        BYTE        HA_Unique[16];      // Host Adapter Unique parameters 
        WORD        HA_Rsvd1; 
} SRB_HAInquiry, *PSRB_HAInquiry; 
 
typedef struct 
{ 
        BYTE        SRB_Cmd;            // ASPI command code = SC_GET_DEV_TYPE 
        BYTE        SRB_Status;         // ASPI command status byte 
        BYTE        SRB_HaId;           // ASPI host adapter number 
        BYTE        SRB_Flags;          // Reserved 
        DWORD       SRB_Hdr_Rsvd;       // Reserved 
        BYTE        SRB_Target;         // Target's SCSI ID 
        BYTE        SRB_Lun;            // Target's LUN number 
        BYTE        SRB_DeviceType;     // Target's peripheral device type 
        BYTE        SRB_Rsvd1;          // Reserved for alignment 
} SRB_GDEVBlock, *PSRB_GDEVBlock; 
 
typedef struct 
{ 
        BYTE        SRB_Cmd;            // ASPI command code = SC_EXEC_SCSI_CMD 
        BYTE        SRB_Status;         // ASPI command status byte 
        BYTE        SRB_HaId;           // ASPI host adapter number 
        BYTE        SRB_Flags;          // ASPI request flags 
        DWORD       SRB_Hdr_Rsvd;       // Reserved 
        BYTE        SRB_Target;         // Target's SCSI ID 
        BYTE        SRB_Lun;            // Target's LUN number 
        WORD        SRB_Rsvd1;          // Reserved for Alignment 
        DWORD       SRB_BufLen;         // Data Allocation Length 
        BYTE        *SRB_BufPointer;    // Data Buffer Point 
        BYTE        SRB_SenseLen;       // Sense Allocation Length 
        BYTE        SRB_CDBLen;         // CDB Length 
        BYTE        SRB_HaStat;         // Host Adapter Status 
        BYTE        SRB_TargStat;       // Target Status 
        void        (*SRB_PostProc)();  // Post routine 
        void        *SRB_Rsvd2;         // Reserved 
        BYTE        SRB_Rsvd3[16];      // Reserved for expansion 
        BYTE        CDBByte[16];        // SCSI CDB 
        BYTE        SenseArea[SENSE_LEN+2]; // Request Sense buffer 
} SRB_ExecSCSICmd, *PSRB_ExecSCSICmd; 
 
typedef struct 
{ 
        BYTE        SRB_Cmd;            // ASPI command code = SC_RESET_DEV 
        BYTE        SRB_Status;         // ASPI command status byte 
        BYTE        SRB_HaId;           // ASPI host adapter number 
        BYTE        SRB_Flags;          // Reserved 
        DWORD       SRB_Hdr_Rsvd;       // Reserved 
        BYTE        SRB_Target;         // Target's SCSI ID 
        BYTE        SRB_Lun;            // Target's LUN number 
        BYTE        SRB_Rsvd1[12];      // Reserved for Alignment 
        BYTE        SRB_HaStat;         // Host Adapter Status 
        BYTE        SRB_TargStat;       // Target Status 
        void        *SRB_PostProc;      // Post routine 
        void        *SRB_Rsvd2;         // Reserved 
        BYTE        SRB_Rsvd3[32];      // Reserved 
} SRB_BusDeviceReset, *PSRB_BusDeviceReset; 
 
extern DWORD (*GetASPI32SupportInfo)( void ); 
extern DWORD (*SendASPI32Command)(LPSRB lpSRB ); 
 
extern BOOLEAN LoadASPIManager(void); 
extern void ReleaseASPIManager(void); 
#define ASPI_STATUS(dwStatus) (HIBYTE(LOWORD(dwStatus))) 
#define ASPI_HOST_ADAPTER_NUM(dwStatus) (LOBYTE(LOWORD(dwStatus))) 
 
extern  
BYTE SCSI_HA_INQUERY(BYTE			HostAdapterID, 
					 SRB_HAInquiry	*lpsrb); 
extern  
BYTE SCSI_GET_DEV_TYPE(BYTE HostAdapterID, 
					   BYTE TargetID, 
					   BYTE LUN, 
					   BYTE *pbDeviceType); 
extern 
DWORD SCSI_EXEC_SCSI_CMD(SRB_ExecSCSICmd *lpsrb); 
 
extern BYTE SCSI_RESET_DEV(BYTE	HostAdapterID, 
					  BYTE	TargetID, 
					  BYTE	LUN); 
extern  
BYTE IO_TAPE_REWIND(BYTE HostAdapterID, 
					BYTE TargetID, 
					BYTE LUN); 
extern 
BYTE IO_TAPE_LOAD(BYTE		HostAdapterID, 
				  BYTE		TargetID, 
				  BYTE		LUN, 
				  BOOLEAN	EOT, 
				  BOOLEAN	ReTen, 
				  BOOLEAN	LOAD); 
extern  
BYTE IO_ALL_TEST_UNIT_READY(BYTE		HostAdapterID, 
							BYTE		TargetID, 
							BYTE		LUN); 
extern  
BYTE IO_TAPE_READ_BLOCK_LIMIT(BYTE	HostAdapterID, 
							  BYTE	TargetID, 
							  BYTE	LUN, 
							  int	*pnMaxBlockSize, 
							  int	*pnMinBlockSize); 
extern 
BYTE IO_TAPE_READ(BYTE  HostAdapterID, 
				  BYTE  TargetID, 
				  BYTE  LUN, 
				  DWORD dwBufLen, 
				  void  *pvBuf, 
				  int		*pnBlockLen,	// 数据块的实际长度 
				  BOOLEAN	*pbFileMark, 
				  BOOLEAN	*pbEOM, 
				  BOOLEAN	*pbILI, 
				  BOOLEAN	*pbValid, 
				  BYTE		*pbSensekey); 
#endif