home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 February / Chip_2004-02_cd1.bin / zkuste / konfig / download / msic / Help / Int / MiTeC_WnASPI32.int < prev    next >
Text File  |  2003-08-26  |  10KB  |  221 lines

  1. {*******************************************************}
  2. {                                                       }
  3. {       MiTeC System Information Component              }
  4. {               Windows ASPI32                          }
  5. {           version 7.1 for Delphi 5,6                  }
  6. {                                                       }
  7. {       Copyright ⌐ 1997,2002 Michal Mutl               }
  8. {                                                       }
  9. {*******************************************************}
  10.  
  11. {$INCLUDE MITEC_DEF.INC}
  12.  
  13. unit MiTeC_WnASPI32;
  14.  
  15. interface
  16.  
  17. uses Classes, Windows, SysUtils;
  18.  
  19. type
  20.   TASPIConfig = record
  21.     AdapterCount: DWORD;
  22.     Adapter,ID,Vendor,Product,Typ,Status,Spec,Revision: TStringList;
  23.   end;
  24.  
  25. function InitASPI: Boolean;
  26. function FreeASPI: Boolean;
  27.  
  28. function GetASPI32SupportInfo: DWORD; cdecl;
  29. function SendASPI32Command(ASPI32CommandPointer: Pointer): DWORD; cdecl;
  30.  
  31. function ExecuteASPI32Test(var ASPIConfig: TASPIConfig): DWORD;
  32.  
  33. type
  34.   TGetASPI32SupportInfo = function :DWORD; cdecl;
  35.   TSendASPI32Command = function (ASPI32CommandPointer: Pointer): DWORD; cdecl;
  36.  
  37. const
  38.  
  39.   wnaspi32dll = 'wnaspi32.dll';
  40.  
  41. // SCSI MISCELLANEOUS EQUATES
  42.  
  43.     MAX_ADAPTER = 16; { Maximum number of adapters supported by ASPI }
  44.     MAX_TARGET = 7; { Maximum number of targets per adapter supported by ASPI }
  45.     MAX_TARGET_WIDE = 15; { Maximum number of targets per adapter (wide SCSI enabled) supported by ASPI }
  46.     MAX_LUN = 64; { Maximum number of logical units supported by ASPI }
  47.  
  48.     SENSE_LEN = 14; { Default sense buffer length }
  49.  
  50.     SRB_DIR_SCSI = $00; { Direction determined by SCSI }
  51.     SRB_POSTING = $01; { Enable ASPI posting }
  52.     SRB_ENABLE_RESIDUAL_COUNT = $04; { Enable residual byte count reporting }
  53.     SRB_DIR_IN = $08; { Transfer from SCSI target to host }
  54.     SRB_DIR_OUT = $10; { Transfer from host to SCSI target }
  55.     SRB_EVENT_NOTIFY = $40; { Enable ASPI event notification }
  56.  
  57.     RESIDUAL_COUNT_SUPPORTED = $02; { Extended buffer flag }
  58.  
  59.     MAX_SRB_TIMEOUT = 108000; { 30 hour maximum timeout in half seconds }
  60.     DEFAULT_SRB_TIMEOUT = 108000; { Max timeout by default }
  61.  
  62.  
  63. // ASPI Command Definitions
  64.  
  65.     SC_HA_INQUIRY = $00; { Host adapter inquiry }
  66.     SC_GET_DEV_TYPE = $01; { Get device type }
  67.     SC_EXEC_SCSI_CMD = $02; { Execute SCSI command }
  68.     SC_ABORT_SRB = $03; { Abort an SRB }
  69.     SC_RESET_DEV = $04; { SCSI bus device reset }
  70.     SC_SET_HA_PARMS = $05; { Set HA parameters }
  71.     SC_GET_DISK_INFO = $06; { Get Disk information }
  72.     SC_RESCAN_SCSI_BUS = $07; { ReBuild SCSI device map }
  73.     SC_GETSET_TIMEOUTS = $08; { Get/Set target timeouts }
  74.  
  75. // SRB Status
  76.  
  77.     SS_PENDING = $00; { SRB being processed }
  78.     SS_COMP = $01; { SRB completed without error }
  79.     SS_ABORTED = $02; { SRB aborted }
  80.     SS_ABORT_FAIL = $03; { Unable to abort SRB }
  81.     SS_ERR = $04; { SRB completed with error }
  82.  
  83.     SS_INVALID_CMD = $80; { Invalid ASPI command }
  84.     SS_INVALID_HA = $81; { Invalid host adapter number }
  85.     SS_NO_DEVICE = $82; { SCSI device not installed }
  86.  
  87.     SS_INVALID_SRB = $E0; { Invalid parameter set in SRB }
  88.     SS_OLD_MANAGER = $E1; { ASPI manager doesn't support Windows }
  89.     SS_BUFFER_ALIGN = $E1; { Buffer not aligned (replaces OLD_MANAGER in Win32) }
  90.     SS_ILLEGAL_MODE = $E2; { Unsupported Windows mode }
  91.     SS_NO_ASPI = $E3; { No ASPI managers resident }
  92.     SS_FAILED_INIT = $E4; { ASPI for windows failed init }
  93.     SS_ASPI_IS_BUSY = $E5; { No resources available to execute cmd }
  94.     SS_BUFFER_TO_BIG = $E6; { Buffer size to big to handle! }
  95.     SS_MISMATCHED_COMPONENTS = $E7; { The DLLs/EXEs of ASPI don't version check }
  96.     SS_NO_ADAPTERS = $E8; { No host adapters to manage }
  97.     SS_INSUFFICIENT_RESOURCES = $E9; { Couldn't allocate resources needed to init }
  98.     SS_ASPI_IS_SHUTDOWN = $EA; { Call came to ASPI after PROCESS_DETACH }
  99.     SS_BAD_INSTALL = $EB; { The DLL or other components are installed wrong }
  100.  
  101. // Host Adapter Status
  102.     HASTAT_OK = $00; { Host adapter did not detect an error }
  103.     HASTAT_SEL_TO = $11; { Selection Timeout }
  104.     HASTAT_DO_DU = $12; { Data overrun data underrun }
  105.     HASTAT_BUS_FREE = $13; { Unexpected bus free }
  106.     HASTAT_PHASE_ERR = $14; { Target bus phase sequence failure  }
  107.     HASTAT_TIMEOUT = $09; { Timed out while SRB was waiting to beprocessed }
  108.     HASTAT_COMMAND_TIMEOUT = $0B; { Adapter timed out processing SRB }
  109.     HASTAT_MESSAGE_REJECT = $0D; { While processing SRB, the adapter received a MESSAGE }
  110.     HASTAT_BUS_RESET = $0E; { A bus reset was detected }
  111.     HASTAT_PARITY_ERROR = $0F; { A parity error was detected }
  112.     HASTAT_REQUEST_SENSE_FAILED = $10; { The adapter failed in issuing }
  113.  
  114.  
  115. type
  116.  
  117. // SRB - HOST ADAPTER INQUIRY - SC_HA_INQUIRY (0)
  118.  
  119.   {TSRB_HAInquiry record will be passed to ASPI Mgr to retreive information about
  120.    ASPI state on the machine, number of installed ASPI adapters etc.}
  121.   PTSRB_HAInquiry = ^TSRB_HAInquiry;
  122.   TSRB_HAInquiry = packed record
  123.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_HA_INQUIRY }
  124.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  125.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  126.     SRB_Flags : BYTE; { 03/003 ASPI request flags }
  127.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved, MUST = 0 }
  128.     HA_Count : BYTE; { 08/008 Number of host adapters present }
  129.     HA_SCSI_ID : BYTE; { 09/009 SCSI ID of host adapter }
  130.     HA_ManagerId : array [0..15] of BYTE; { 0A/010 String describing the manager }
  131.     HA_Identifier : array [0..15] of BYTE; { 1A/026 String describing the host adapter }
  132.     HA_Unique : array [0..15] of BYTE; { 2A/042 Host Adapter Unique parameters }
  133.     HA_Rsvd1 : WORD; { 3A/058 Reserved, MUST = 0 }
  134.   end;
  135.  
  136. // SRB - GET DEVICE TYPE - SC_GET_DEV_TYPE (1)
  137.  
  138.   {TSRB_GDEVBlock record will be passed to ASPI Mgr to retreive information about device.}
  139.   PTSRB_GDEVBlock = ^TSRB_GDEVBlock;
  140.   TSRB_GDEVBlock = packed record
  141.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_GET_DEV_TYPE }
  142.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  143.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  144.     SRB_Flags : BYTE; { 03/003 Reserved, MUST = 0 }
  145.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved, MUST = 0 }
  146.     SRB_Target : BYTE; { 08/008 Target's SCSI ID }
  147.     SRB_Lun : BYTE; { 09/009 Target's LUN number }
  148.     SRB_DeviceType : BYTE; { 0A/010 Target's peripheral device type }
  149.     SRB_Rsvd1 : BYTE; { 0B/011 Reserved, MUST = 0 }
  150.   end;
  151.  
  152. // SRB - EXECUTE SCSI COMMAND - SC_EXEC_SCSI_CMD (2)
  153.  
  154.   {TSRB_ExecSCSICmd record will be passed to ASPI Mgr to execute SCSI command on SCSI device.}
  155.   PTSRB_ExecSCSICmd = ^TSRB_ExecSCSICmd;
  156.   TSRB_ExecSCSICmd = packed record
  157.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_EXEC_SCSI_CMD }
  158.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  159.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  160.     SRB_Flags : BYTE; { 03/003 ASPI request flags }
  161.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved }
  162.     SRB_Target : BYTE; { 08/008 Target's SCSI ID }
  163.     SRB_Lun : BYTE; { 09/009 Target's LUN number }
  164.     SRB_Rsvd1 : WORD; { 0A/010 Reserved for Alignment }
  165.     SRB_BufLen : DWORD; { 0C/012 Data Allocation Length }
  166.     SRB_BufPointer : Pointer; { 10/016 Data Buffer Pointer }
  167.     SRB_SenseLen : BYTE; { 14/020 Sense Allocation Length }
  168.     SRB_CDBLen : BYTE; { 15/021 CDB Length }
  169.     SRB_HaStat : BYTE; { 16/022 Host Adapter Status }
  170.     SRB_TargStat : BYTE; { 17/023 Target Status }
  171.     SRB_PostProc : Pointer; { 18/024 Post routine }
  172.     SRB_Rsvd2 : array [0..19] of BYTE; { 1C/028 Reserved, MUST = 0 }
  173.     CDBByte : array [0..15] of BYTE; { 30/048 SCSI CDB }
  174.     SenseArea : array [0..(SENSE_LEN+1)] of BYTE; { 50/064 Request Sense buffer }
  175.   end;
  176.  
  177. // SRB - ABORT AN SRB - SC_ABORT_SRB (3)
  178.  
  179.   PTSRB_Abort = ^TSRB_Abort;
  180.   TSRB_Abort = packed record
  181.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_ABORT_SRB }
  182.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  183.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  184.     SRB_Flags : BYTE; { 03/003 Reserved }
  185.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved }
  186.     SRB_ToAbort : Pointer; { PVOID } { 08/008 Pointer to SRB to abort }
  187.   end;
  188.  
  189. // SRB - RESCAN SCSI BUS(ES) ON SCSIPORT
  190.  
  191.   {TSRB_RescanPort record will be passed to ASPI Mgr to initiate SCSI bus rescan on the port.}
  192.   PTSRB_RescanPort = ^TSRB_RescanPort;
  193.   TSRB_RescanPort = packed record
  194.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_RESCAN_SCSI_BUS }
  195.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  196.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  197.     SRB_Flags : BYTE; { 03/003 Reserved, MUST = 0 }
  198.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved, MUST = 0 }
  199.   end;
  200.  
  201. // SRB - GET/SET TARGET TIMEOUTS
  202.  
  203.   {TSRB_GetSetTimeouts record will be passed to ASPI Mgr to get/set timeouts on SCSI device.}
  204.   PTSRB_GetSetTimeouts = ^TSRB_GetSetTimeouts;
  205.   TSRB_GetSetTimeouts = packed record
  206.     SRB_Cmd : BYTE; { 00/000 ASPI command code = SC_GETSET_TIMEOUTS }
  207.     SRB_Status : BYTE; { 01/001 ASPI command status byte }
  208.     SRB_HaId : BYTE; { 02/002 ASPI host adapter number }
  209.     SRB_Flags : BYTE; { 03/003 ASPI request flags }
  210.     SRB_Hdr_Rsvd : DWORD; { 04/004 Reserved, MUST = 0 }
  211.     SRB_Target : BYTE; { 08/008 Target's SCSI ID }
  212.     SRB_Lun : BYTE; { 09/009 Target's LUN number }
  213.     SRB_Timeout : DWORD; { 0A/010 Timeout in half seconds }
  214.   end;
  215.  
  216. var
  217.   ASPILoaded :Boolean;
  218.  
  219. implementation
  220.  
  221.