]> git.proxmox.com Git - mirror_smartmontools-debian.git/blobdiff - os_win32.cpp
Fix upstream branch
[mirror_smartmontools-debian.git] / os_win32.cpp
index 1348d7d1a8efa1723787aa2095ca57a998759365..b10e9215081d4c774787d5e29e08a1fd1a5b3aa4 100644 (file)
@@ -3,11 +3,7 @@
  *
  * Home page of code is: http://www.smartmontools.org
  *
-<<<<<<< HEAD
  * Copyright (C) 2004-16 Christian Franke
-=======
- * Copyright (C) 2004-15 Christian Franke
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
  *
  * Original AACRaid code:
  *  Copyright (C) 2015    Nidhi Malhotra <nidhi.malhotra@pmcs.com>
 #define strnicmp strncasecmp
 #endif
 
-<<<<<<< HEAD
 const char * os_win32_cpp_cvsid = "$Id: os_win32.cpp 4293 2016-04-14 19:33:05Z chrfranke $";
-=======
-const char * os_win32_cpp_cvsid = "$Id: os_win32.cpp 4098 2015-05-30 16:37:37Z chrfranke $";
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
 /////////////////////////////////////////////////////////////////////////////
 // Windows I/O-controls, some declarations are missing in the include files
@@ -637,34 +629,6 @@ static int smart_ioctl(HANDLE hdevice, IDEREGS * regs, char * data, unsigned dat
   return 0;
 }
 
-/////////////////////////////////////////////////////////////////////////////
-//// PMC aacraid Support
-
-class win_aacraid_device
-:public /*implements*/ scsi_device,
-public /*extends*/ win_smart_device
-{
-public:
-  win_aacraid_device(smart_interface *intf, const char *dev_name,unsigned int ctrnum, unsigned int target, unsigned int lun);
-
-  virtual ~win_aacraid_device() throw();
-
-  virtual bool open();
-
-  virtual bool scsi_pass_through(struct scsi_cmnd_io *iop);
-
-private:
-  //Device Host number
-  int m_ctrnum;
-
-  //Channel(Lun) of the device
-  int m_lun;
-
-  //Id of the device
-  int m_target;
-};
-
-
 
 /////////////////////////////////////////////////////////////////////////////
 // IDE PASS THROUGH (2000, XP, undocumented)
@@ -835,7 +799,6 @@ static int ata_pass_through_ioctl(HANDLE hdevice, IDEREGS * regs, IDEREGS * prev
     return -1;
   }
 
-<<<<<<< HEAD
   // Check and copy data
   if (datasize > 0) {
     if (   num_out != size
@@ -843,20 +806,6 @@ static int ata_pass_through_ioctl(HANDLE hdevice, IDEREGS * regs, IDEREGS * prev
       if (ata_debugmode) {
         pout("  IOCTL_ATA_PASS_THROUGH output data missing (%u)\n", (unsigned)num_out);
         print_ide_regs_io(regs, ctfregs);
-=======
-    if (vi.dwMajorVersion <= 0xf && vi.dwMinorVersion <= 0xf) {
-      bool ws = (vi.wProductType <= VER_NT_WORKSTATION);
-      switch (vi.dwMajorVersion << 4 | vi.dwMinorVersion) {
-        case 0x50: w =       "2000";              break;
-        case 0x51: w =       "xp";                break;
-        case 0x52: w = (!GetSystemMetrics(89/*SM_SERVERR2*/)
-                           ? "2003"  : "2003r2"); break;
-        case 0x60: w = (ws ? "vista" : "2008"  ); break;
-        case 0x61: w = (ws ? "win7"  : "2008r2"); break;
-        case 0x62: w = (ws ? "win8"  : "2012"  ); break;
-        case 0x63: w = (ws ? "win8.1": "2012r2"); break;
-        case 0x64: w = (ws ? "win10" : "w10srv"); break;
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
       }
       errno = EIO;
       return -1;
@@ -932,7 +881,6 @@ static int ata_via_scsi_miniport_smart_ioctl(HANDLE hdevice, IDEREGS * regs, cha
   ASSERT_SIZEOF(sb, sizeof(SRB_IO_CONTROL)+sizeof(SENDCMDINPARAMS)-1+512);
   memset(&sb, 0, sizeof(sb));
 
-<<<<<<< HEAD
   unsigned size;
   if (datasize > 0) {
     if (datasize > (int)sizeof(sb.space)+1) {
@@ -961,10 +909,6 @@ static int ata_via_scsi_miniport_smart_ioctl(HANDLE hdevice, IDEREGS * regs, cha
   sb.srbc.Length = sizeof(SENDCMDINPARAMS)-1 + size;
   sb.params.in.irDriveRegs = *regs;
   sb.params.in.cBufferSize = size;
-=======
-// Return value for device detection functions
-enum win_dev_type { DEV_UNKNOWN = 0, DEV_ATA, DEV_SCSI, DEV_SAT, DEV_USB };
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
   // Call miniport ioctl
   size += sizeof(SRB_IO_CONTROL) + sizeof(SENDCMDINPARAMS)-1;
@@ -1063,7 +1007,6 @@ static int ata_via_3ware_miniport_ioctl(HANDLE hdevice, IDEREGS * regs, char * d
     return -1;
   }
 
-<<<<<<< HEAD
   // Copy data
   if (datasize > 0)
     memcpy(data, sb.buffer, datasize);
@@ -1071,94 +1014,12 @@ static int ata_via_3ware_miniport_ioctl(HANDLE hdevice, IDEREGS * regs, char * d
   if (ata_debugmode > 1) {
     pout("  ATA via IOCTL_SCSI_MINIPORT suceeded, bytes returned: %u\n", (unsigned)num_out);
     print_ide_regs_io(regs, &sb.regs);
-=======
-    name = skipdev(name);
-#define ARECA_MAX_CTLR_NUM  16
-    n1 = -1;
-    int ctlrindex = 0;
-    if (sscanf(name, "arcmsr%d%n", &ctlrindex, &n1) >= 1 && n1 == (int)strlen(name)) {
-      /*
-       1. scan from "\\\\.\\scsi[0]:" up to "\\\\.\\scsi[ARECA_MAX_CTLR_NUM]:" and
-       2. map arcmsrX into "\\\\.\\scsiX"
-      */
-     for (int idx = 0; idx < ARECA_MAX_CTLR_NUM; idx++) {
-        memset(devpath, 0, sizeof(devpath));
-        snprintf(devpath, sizeof(devpath), "\\\\.\\scsi%d:", idx);
-        win_areca_ata_device *arcdev = new win_areca_ata_device(this, devpath, disknum, encnum);
-        if(arcdev->arcmsr_probe()) {
-          if(ctlrindex-- == 0) {
-            return arcdev;
-          }
-        }
-        delete arcdev;
-      }
-      set_err(ENOENT, "No Areca controller found");
-    }
-    else
-      set_err(EINVAL, "Option -d areca,N/E requires device name /dev/arcmsrX");
-    return 0;
-  }
-
-  // aacraid?
-  unsigned ctrnum, lun, target;
-  n1 = -1;
-
-  if (   sscanf(type, "aacraid,%u,%u,%u%n", &ctrnum, &lun, &target, &n1) >= 3
-      && n1 == (int)strlen(type)) {
-#define aacraid_MAX_CTLR_NUM  16
-    if (ctrnum >= aacraid_MAX_CTLR_NUM) {
-      set_err(EINVAL, "aacraid: invalid host number %u", ctrnum);
-      return 0;
-    }
-
-    /*
-    1. scan from "\\\\.\\scsi[0]:" up to "\\\\.\\scsi[AACRAID_MAX_CTLR_NUM]:" and
-    2. map ARCX into "\\\\.\\scsiX"
-    */
-    memset(devpath, 0, sizeof(devpath));
-    unsigned ctlrindex = 0;
-    for (int portNum = 0; portNum < aacraid_MAX_CTLR_NUM; portNum++){
-      char subKey[63];
-      snprintf(subKey, sizeof(subKey), "HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port %d", portNum);
-      HKEY hScsiKey = 0;
-      long regStatus = RegOpenKeyExA(HKEY_LOCAL_MACHINE, subKey, 0, KEY_READ, &hScsiKey);
-      if (regStatus == ERROR_SUCCESS){
-        char driverName[20];
-        DWORD driverNameSize = sizeof(driverName);
-        DWORD regType = 0;
-        regStatus = RegQueryValueExA(hScsiKey, "Driver", NULL, &regType, (LPBYTE) driverName, &driverNameSize);
-        if (regStatus == ERROR_SUCCESS){
-          if (regType == REG_SZ){
-            if (stricmp(driverName, "arcsas") == 0){
-              if(ctrnum == ctlrindex){
-                snprintf(devpath, sizeof(devpath), "\\\\.\\Scsi%d:", portNum);
-                return get_sat_device("sat,auto",
-                  new win_aacraid_device(this, devpath, ctrnum, target, lun));
-              }
-              ctlrindex++;
-            }
-          }
-        }
-        RegCloseKey(hScsiKey);
-      }
-    }
-
-    set_err(EINVAL, "aacraid: host %u not found", ctrnum);
-    return 0;
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
   }
   *regs = sb.regs;
 
   return 0;
 }
 
-<<<<<<< HEAD
-=======
-std::string win_smart_interface::get_valid_custom_dev_types_str()
-{
-  return "aacraid,H,L,ID, areca,N[/E]";
-}
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
 /////////////////////////////////////////////////////////////////////////////
 
@@ -1200,7 +1061,6 @@ static int update_3ware_devicemap_ioctl(HANDLE hdevice)
 /////////////////////////////////////////////////////////////////////////////
 // IOCTL_STORAGE_QUERY_PROPERTY
 
-<<<<<<< HEAD
 union STORAGE_DEVICE_DESCRIPTOR_DATA {
   STORAGE_DEVICE_DESCRIPTOR desc;
   char raw[256];
@@ -1221,30 +1081,6 @@ static int storage_query_property_ioctl(HANDLE hdevice, STORAGE_DEVICE_DESCRIPTO
       pout("  IOCTL_STORAGE_QUERY_PROPERTY failed, Error=%u\n", (unsigned)GetLastError());
     errno = ENOSYS;
     return -1;
-=======
-  if (type == DEV_ATA)
-    return new win_ata_device(this, name, "");
-
-  if (type == DEV_SCSI)
-    return new win_scsi_device(this, name, "");
-
-  if (type == DEV_SAT)
-    return get_sat_device("sat", new win_scsi_device(this, name, ""));
-
-  if (type == DEV_USB) {
-    // Get USB bridge ID
-    unsigned short vendor_id = 0, product_id = 0;
-    if (!(phydrive >= 0 && get_usb_id(phydrive, vendor_id, product_id))) {
-      set_err(EINVAL, "Unable to read USB device ID");
-      return 0;
-    }
-    // Get type name for this ID
-    const char * usbtype = get_usb_dev_type_by_id(vendor_id, product_id);
-    if (!usbtype)
-      return 0;
-    // Return SAT/USB device for this type
-    return get_sat_device(usbtype, new win_scsi_device(this, name, ""));
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
   }
 
   if (ata_debugmode > 1 || scsi_debugmode > 1) {
@@ -1285,7 +1121,6 @@ static int storage_predict_failure_ioctl(HANDLE hdevice, char * data = 0)
     return -1;
   }
 
-<<<<<<< HEAD
   if (ata_debugmode > 1) {
     pout("  IOCTL_STORAGE_PREDICT_FAILURE returns:\n"
          "    PredictFailure: 0x%08x\n"
@@ -1299,49 +1134,6 @@ static int storage_predict_failure_ioctl(HANDLE hdevice, char * data = 0)
     memcpy(data, pred.VendorSpecific, sizeof(pred.VendorSpecific));
   return (!pred.PredictFailure ? 0 : 1);
 }
-=======
-  // Set valid types
-  bool ata, scsi, sat, usb, csmi;
-  if (!type) {
-    ata = scsi = usb = sat = csmi = true;
-  }
-  else {
-    ata = scsi = usb = sat = csmi = false;
-    if (!strcmp(type, "ata"))
-      ata = true;
-    else if (!strcmp(type, "scsi"))
-      scsi = true;
-    else if (!strcmp(type, "sat"))
-      sat = true;
-    else if (!strcmp(type, "usb"))
-      usb = true;
-    else if (!strcmp(type, "csmi"))
-      csmi = true;
-    else {
-      set_err(EINVAL,
-              "Invalid type '%s', valid arguments are: ata[,pd], scsi[,pd], sat[,pd], usb[,pd], csmi, pd",
-              type);
-      return false;
-    }
-  }
-
-  char name[20];
-
-  if (ata || scsi || sat || usb) {
-    // Scan up to 128 drives and 2 3ware controllers
-    const int max_raid = 2;
-    bool raid_seen[max_raid] = {false, false};
-
-    for (int i = 0; i < 128; i++) {
-      if (pd)
-        snprintf(name, sizeof(name), "/dev/pd%d", i);
-      else if (i + 'a' <= 'z')
-        snprintf(name, sizeof(name), "/dev/sd%c", i + 'a');
-      else
-        snprintf(name, sizeof(name), "/dev/sd%c%c",
-                 i / ('z'-'a'+1) - 1 + 'a',
-                 i % ('z'-'a'+1)     + 'a');
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
 
 // Build IDENTIFY information from STORAGE_DEVICE_DESCRIPTOR
@@ -1357,42 +1149,11 @@ static int get_identify_from_device_property(HANDLE hdevice, ata_identify_device
   // others return it as ProductId only.
   char model[sizeof(id->model) + 1] = "";
 
-<<<<<<< HEAD
   unsigned i = 0;
   if (data.desc.VendorIdOffset) {
     for ( ;i < sizeof(model)-1 && data.raw[data.desc.VendorIdOffset+i]; i++)
       model[i] = data.raw[data.desc.VendorIdOffset+i];
   }
-=======
-        case DEV_SAT:
-          // STORAGE_QUERY_PROPERTY returned VendorId "ATA     "
-          if (!sat)
-            continue;
-          devlist.push_back( get_sat_device("sat", new win_scsi_device(this, name, "")) );
-          break;
-
-        case DEV_USB:
-          // STORAGE_QUERY_PROPERTY returned USB
-          if (!usb)
-            continue;
-          {
-            // TODO: Use common function for this and autodetect_smart_device()
-            // Get USB bridge ID
-            unsigned short vendor_id = 0, product_id = 0;
-            if (!get_usb_id(i, vendor_id, product_id))
-              continue;
-            // Get type name for this ID
-            const char * usbtype = get_usb_dev_type_by_id(vendor_id, product_id);
-            if (!usbtype)
-              continue;
-            // Return SAT/USB device for this type
-            ata_device * dev = get_sat_device(usbtype, new win_scsi_device(this, name, ""));
-            if (!dev)
-              continue;
-            devlist.push_back(dev);
-          }
-          break;
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
   if (data.desc.ProductIdOffset) {
     while (i > 1 && model[i-2] == ' ') // Keep last blank from VendorId
@@ -2481,29 +2242,6 @@ bool csmi_ata_device::ata_pass_through(const ata_cmd_in & in, ata_cmd_out & out)
     // TODO: Check ptru_buf->Status.uDataBytes
     memcpy(in.buffer, pthru_buf->bDataBuffer, in.size);
 
-<<<<<<< HEAD
-=======
-// Return true if ATA drive behind a SAT layer
-static bool is_sat(const STORAGE_DEVICE_DESCRIPTOR_DATA * data)
-{
-  if (!data->desc.VendorIdOffset)
-    return false;
-  if (strcmp(data->raw + data->desc.VendorIdOffset, "ATA     "))
-    return false;
-  return true;
-}
-
-// Return true if Intel ICHxR RAID volume
-static bool is_intel_raid_volume(const STORAGE_DEVICE_DESCRIPTOR_DATA * data)
-{
-  if (!(data->desc.VendorIdOffset && data->desc.ProductIdOffset))
-    return false;
-  const char * vendor = data->raw + data->desc.VendorIdOffset;
-  if (!(!strnicmp(vendor, "Intel", 5) && strspn(vendor+5, " ") == strlen(vendor+5)))
-    return false;
-  if (strnicmp(data->raw + data->desc.ProductIdOffset, "Raid ", 5))
-    return false;
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
   return true;
 }
 
@@ -2518,47 +2256,11 @@ public:
   win_csmi_device(smart_interface * intf, const char * dev_name,
     const char * req_type);
 
-<<<<<<< HEAD
   virtual ~win_csmi_device() throw();
 
   virtual bool open();
 
   virtual bool close();
-=======
-  // Newer BusType* values are missing in older includes
-  switch ((int)data.desc.BusType) {
-    case BusTypeAta:
-    case 0x0b: // BusTypeSata
-      // Certain Intel AHCI drivers (C600+/C220+) have broken
-      // IOCTL_ATA_PASS_THROUGH support and a working SAT layer
-      if (is_sat(&data))
-        return DEV_SAT;
-
-      if (ata_version_ex)
-        memset(ata_version_ex, 0, sizeof(*ata_version_ex));
-      return DEV_ATA;
-
-    case BusTypeScsi:
-    case BusTypeRAID:
-      if (is_sat(&data))
-        return DEV_SAT;
-
-      // Intel ICHxR RAID volume: reports SMART_GET_VERSION but does not support SMART_*
-      if (is_intel_raid_volume(&data))
-        return DEV_SCSI;
-      // LSI/3ware RAID volume: supports SMART_*
-      if (admin && smart_get_version(hdevice, ata_version_ex) >= 0)
-        return DEV_ATA;
-
-      return DEV_SCSI;
-
-    case 0x09: // BusTypeiScsi
-    case 0x0a: // BusTypeSas
-      if (is_sat(&data))
-        return DEV_SAT;
-
-      return DEV_SCSI;
->>>>>>> 3d8ad6fa4529eb02ae1391a1e937bf57aad3fb74
 
   virtual bool is_open() const;
 
@@ -4732,170 +4434,6 @@ bool win_smart_interface::disable_system_auto_standby(bool disable)
   return true;
 }
 
-// AACRAID
-win_aacraid_device::win_aacraid_device(smart_interface * intf,
-  const char *dev_name, unsigned ctrnum, unsigned target, unsigned lun)
-: smart_device(intf, dev_name, "aacraid", "aacraid"),
-  m_ctrnum(ctrnum), m_lun(lun), m_target(target)
-{
-  set_info().info_name = strprintf("%s [aacraid_disk_%02d_%02d_%d]", dev_name, m_ctrnum, m_lun, m_target);
-  set_info().dev_type  = strprintf("aacraid,%d,%d,%d", m_ctrnum, m_lun, m_target);
-}
-
-win_aacraid_device::~win_aacraid_device() throw()
-{
-}
-
-bool win_aacraid_device::open()
-{
-  if (is_open())
-    return true;
-
-  HANDLE hFh = CreateFile( get_dev_name(),
-          GENERIC_READ|GENERIC_WRITE,
-          FILE_SHARE_READ|FILE_SHARE_WRITE,
-          NULL,
-          OPEN_EXISTING,
-          0,
-          0);
-  if (hFh == INVALID_HANDLE_VALUE)
-    return set_err(ENODEV, "Open failed, Error=%u", (unsigned)GetLastError());
-
-  set_fh(hFh);
-  return true;
-}
-
-bool win_aacraid_device::scsi_pass_through(struct scsi_cmnd_io *iop)
-{
-  int report = scsi_debugmode;
-  if (report > 0)
-  {
-    int k, j;
-    const unsigned char * ucp = iop->cmnd;
-    const char * np;
-    char buff[256];
-    const int sz = (int)sizeof(buff);
-    np = scsi_get_opcode_name(ucp[0]);
-    j  = snprintf(buff, sz, " [%s: ", np ? np : "<unknown opcode>");
-    for (k = 0; k < (int)iop->cmnd_len; ++k)
-      j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "%02x ", ucp[k]);
-    if ((report > 1) &&
-      (DXFER_TO_DEVICE == iop->dxfer_dir) && (iop->dxferp)) {
-      int trunc = (iop->dxfer_len > 256) ? 1 : 0;
-
-      j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n  Outgoing "
-        "data, len=%d%s:\n", (int)iop->dxfer_len,
-        (trunc ? " [only first 256 bytes shown]" : ""));
-        dStrHex((const char *)iop->dxferp,
-        (trunc ? 256 : (int)iop->dxfer_len) , 1);
-      }
-    else
-      j += snprintf(&buff[j], (sz > j ? (sz - j) : 0), "]\n");
-      pout("buff %s\n",buff);
-  }
-
-  char ioBuffer[1000];
-  SRB_IO_CONTROL * pSrbIO = (SRB_IO_CONTROL *) ioBuffer;
-  SCSI_REQUEST_BLOCK * pScsiIO = (SCSI_REQUEST_BLOCK *) (ioBuffer + sizeof(SRB_IO_CONTROL));
-  DWORD scsiRequestBlockSize = sizeof(SCSI_REQUEST_BLOCK);
-  char *pRequestSenseIO = (char *) (ioBuffer + sizeof(SRB_IO_CONTROL) + scsiRequestBlockSize);
-  DWORD dataOffset = (sizeof(SRB_IO_CONTROL) + scsiRequestBlockSize  + 7) & 0xfffffff8;
-  char *pDataIO = (char *) (ioBuffer + dataOffset);
-  memset(pScsiIO, 0, scsiRequestBlockSize);
-  pScsiIO->Length    = (USHORT) scsiRequestBlockSize;
-  pScsiIO->Function  = SRB_FUNCTION_EXECUTE_SCSI;
-  pScsiIO->PathId    = 0;
-  pScsiIO->TargetId  = m_target;
-  pScsiIO->Lun       = m_lun;
-  pScsiIO->CdbLength = (int)iop->cmnd_len;
-  switch(iop->dxfer_dir){
-    case DXFER_NONE:
-      pScsiIO->SrbFlags = SRB_NoDataXfer;
-      break;
-    case DXFER_FROM_DEVICE:
-      pScsiIO->SrbFlags |= SRB_DataIn;
-      break;
-    case DXFER_TO_DEVICE:
-      pScsiIO->SrbFlags |= SRB_DataOut;
-      break;
-    default:
-      pout("aacraid: bad dxfer_dir\n");
-      return set_err(EINVAL, "aacraid: bad dxfer_dir\n");
-  }
-  pScsiIO->DataTransferLength = (ULONG)iop->dxfer_len;
-  pScsiIO->TimeOutValue = iop->timeout;
-  UCHAR *pCdb = (UCHAR *) pScsiIO->Cdb;
-  memcpy(pCdb, iop->cmnd, 16);
-  if (iop->max_sense_len){
-    memset(pRequestSenseIO, 0, iop->max_sense_len);
-  }
-  if (pScsiIO->SrbFlags & SRB_FLAGS_DATA_OUT){
-    memcpy(pDataIO, iop->dxferp, iop->dxfer_len);
-  }
-  else if (pScsiIO->SrbFlags & SRB_FLAGS_DATA_IN){
-    memset(pDataIO, 0, iop->dxfer_len);
-  }
-
-  DWORD bytesReturned = 0;
-  memset(pSrbIO, 0, sizeof(SRB_IO_CONTROL));
-  pSrbIO->HeaderLength = sizeof(SRB_IO_CONTROL);
-  memcpy(pSrbIO->Signature, "AACAPI", 7);
-  pSrbIO->ControlCode = ARCIOCTL_SEND_RAW_SRB;
-  pSrbIO->Length = (dataOffset + iop->dxfer_len - sizeof(SRB_IO_CONTROL) + 7) & 0xfffffff8;
-  pSrbIO->Timeout = 3*60;
-
-  if (!DeviceIoControl(
-                   get_fh(),
-                   IOCTL_SCSI_MINIPORT,
-                   ioBuffer,
-                   sizeof(SRB_IO_CONTROL) + pSrbIO->Length,
-                   ioBuffer,
-                   sizeof(SRB_IO_CONTROL) + pSrbIO->Length,
-                   &bytesReturned,
-                   NULL)
-     ) {
-    return set_err(EIO, "ARCIOCTL_SEND_RAW_SRB failed, Error=%u", (unsigned)GetLastError());
-  }
-
-  iop->scsi_status = pScsiIO->ScsiStatus;
-  if (SCSI_STATUS_CHECK_CONDITION & iop->scsi_status) {
-    int slen = sizeof(pRequestSenseIO) + 8;
-    if (slen > (int)sizeof(pRequestSenseIO))
-      slen = sizeof(pRequestSenseIO);
-    if (slen > (int)iop->max_sense_len)
-      slen = (int)iop->max_sense_len;
-    memcpy(iop->sensep, pRequestSenseIO, slen);
-    iop->resp_sense_len = slen;
-    if (report) {
-      if (report > 1) {
-        pout("  >>> Sense buffer, len=%d:\n", slen);
-        dStrHex(iop->sensep, slen , 1);
-      }
-      if ((iop->sensep[0] & 0x7f) > 0x71)
-        pout("  status=%x: [desc] sense_key=%x asc=%x ascq=%x\n",
-          iop->scsi_status, iop->sensep[1] & 0xf,
-          iop->sensep[2], iop->sensep[3]);
-      else
-        pout("  status=%x: sense_key=%x asc=%x ascq=%x\n",
-          iop->scsi_status, iop->sensep[2] & 0xf,
-          iop->sensep[12], iop->sensep[13]);
-    }
-  }
-  else {
-    iop->resp_sense_len = 0;
-  }
-
-  if (iop->dxfer_dir == DXFER_FROM_DEVICE){
-     memcpy(iop->dxferp,pDataIO, iop->dxfer_len);
-  }
-  if((iop->dxfer_dir == DXFER_FROM_DEVICE) && (report > 1)){
-    int trunc = (iop->dxfer_len > 256) ? 1 : 0;
-    pout("  Incoming data, len=%d, resid=%d%s:\n", (int)iop->dxfer_len, iop->resid,
-      (trunc ? " [only first 256 bytes shown]" : ""));
-    dStrHex((CHAR*)pDataIO, (trunc ? 256 : (int)(iop->dxfer_len)) , 1);
-  }
-  return true;
-}
 
 } // namespace