BYTE CDROM_Interface_Aspi::GetHostAdapter(char* hardwareID) { ASPI_SRB sh; ASPI_SRB sd; DWORD d = pGetASPI32SupportInfo(); int cnt = LOBYTE(LOWORD(d)); int i,j,k,max; for(i=0; i<cnt; i++) { memset(&sh, 0, sizeof(sh)); sh.hainquiry.SRB_Cmd = SC_HA_INQUIRY; sh.hainquiry.SRB_HaId = i; pSendASPI32Command((LPSRB)&sh); if (sh.hainquiry.SRB_Status!=SS_COMP) continue; // Indicates the maximum number of targets the adapter supports // If the value is not 8 or 16, then it should be assumed max target is 8 max = (int)sh.hainquiry.HA_Unique[3]; if ((max!=8) && (max!=16)) max = 8; for(j=0; j<max; j++) { for(k=0; k<8; k++) { memset(&sd, 0, sizeof(sd)); sd.gdevblock.SRB_Cmd = SC_GET_DEV_TYPE; sd.gdevblock.SRB_HaId = i; sd.gdevblock.SRB_Target = j; sd.gdevblock.SRB_Lun = k; pSendASPI32Command((LPSRB)&sd); if (sd.gdevblock.SRB_Status == SS_COMP) { if (sd.gdevblock.SRB_DeviceType == DTYPE_CDROM) { if ((target==j) && (lun==k)) { LOG(LOG_MISC,LOG_NORMAL)("SCSI: Getting Hardware vendor."); // "Hardware ID = vendor" match ? char vendor[64]; if (GetVendor(i,target,lun,vendor)) { LOG(LOG_MISC,LOG_NORMAL)("SCSI: Vendor : %s",vendor); if (strstr(strupr(hardwareID),strupr(vendor))) { LOG(LOG_MISC,LOG_NORMAL)("SCSI: Host Adapter found: %d",i); return i; } }; } } } } } } LOG(LOG_MISC,LOG_ERROR)("SCSI: Host Adapter not found: %d",i); return 0; };
int GetSCSICDDrives(char * pDList) { int iCnt=0,iA,iT,iL;char * p=pDList; SRB_HAInquiry si;SRB_GDEVBlock sd; SRB_ExecSCSICmd s;int iNumA;char szBuf[100]; DWORD dw,dwStatus; if(!pGetASPI32SupportInfo) return 0; dw=pGetASPI32SupportInfo(); if(HIBYTE(LOWORD(dw))!=SS_COMP) return 0; iNumA=(int)LOBYTE(LOWORD(dw)); for(iA=0;iA<iNumA;iA++) { memset(&si,0,sizeof(SRB_HAInquiry)); si.SRB_Cmd = SC_HA_INQUIRY; si.SRB_HaId = iA; pSendASPI32Command((LPSRB)&si); if(si.SRB_Status!=SS_COMP) continue; if(!si.HA_Unique[3]) si.HA_Unique[3]=8; for(iT=0;iT<si.HA_Unique[3];iT++) { for(iL=0;iL<8;iL++) { memset(&sd,0,sizeof(SRB_GDEVBlock)); sd.SRB_Cmd = SC_GET_DEV_TYPE; sd.SRB_HaID = iA; sd.SRB_Target = iT; sd.SRB_Lun = iL; pSendASPI32Command((LPSRB)&sd); if(sd.SRB_Status==SS_COMP && sd.SRB_DeviceType==DTYPE_CDROM) { memset(&s,0,sizeof(s)); s.SRB_Cmd = SC_EXEC_SCSI_CMD; s.SRB_HaId = iA; s.SRB_Target = iT; s.SRB_Lun = iL; s.SRB_Flags = SRB_DIR_IN | SRB_EVENT_NOTIFY; s.SRB_BufLen = 100; s.SRB_BufPointer = szBuf; s.SRB_SenseLen = SENSE_LEN; s.SRB_CDBLen = 6; s.SRB_PostProc = (LPVOID)hEvent; s.CDBByte[0] = SCSI_INQUIRY; s.CDBByte[4] = 100; ResetEvent(hEvent); dwStatus=pSendASPI32Command((LPSRB)&s); if(dwStatus==SS_PENDING) WaitGenEvent(WAITFOREVER); if(s.SRB_Status==SS_COMP) { int i; for(i=8 ;i<15;i++) if(szBuf[i]==' ') {szBuf[i]=0;break;} szBuf[15]=0; for(i=16;i<32;i++) if(szBuf[i]==' ') {szBuf[i]=0;break;} szBuf[31]=0; for(i=32;i<37;i++) if(szBuf[i]==' ') {szBuf[i]=0;break;} szBuf[36]=0; wsprintf(p,"[%d:%d:%d] %s %s V%s", iA,iT,iL,&szBuf[8],&szBuf[16],&szBuf[32]); iCnt++; p+=strlen(p)+1; } } } } } return iCnt; }