bizhan123
驱动小牛
驱动小牛
  • 注册日期2006-12-26
  • 最后登录2012-03-19
  • 粉丝0
  • 关注0
  • 积分1002分
  • 威望166点
  • 贡献值0点
  • 好评度125点
  • 原创分0分
  • 专家分0分
阅读:2983回复:0

passthrough发scsi指令给硬盘读磁盘扇区失败,大家帮我分析分析

楼主#
更多 发布于:2007-03-27 16:28
  下面的代码我是照搬了DDK/spti中的例子,可是在我编译通过后运行却发现无法读取数据。DeviceIoControl返回的错误报告为:函数不正确。开始以为我错了,然后在DDK中也编译了那个例子,运行之后一样无法读取,错误报告也相同。请问大侠们,这个问题出在哪里呢?究竟应该怎么解决?

    代码部分:
  sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
  sptdwb.sptd.PathId = 0;
  sptdwb.sptd.TargetId = 1;
  sptdwb.sptd.Lun = 0;
  sptdwb.sptd.CdbLength = CDB10GENERIC_LENGTH;
  sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
  sptdwb.sptd.SenseInfoLength = SPT_SENSE_LENGTH;
  sptdwb.sptd.DataTransferLength = sectorSize;
  sptdwb.sptd.TimeOutValue = 2;
  sptdwb.sptd.DataBuffer = dataBuff;
  sptdwb.sptd.SenseInfoOffset =
    offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf);
  sptdwb.sptd.Cdb[0] = SCSIOP_READ_DATA_BUFF;
  sptdwb.sptd.Cdb[1] = 2; // Data mode
   //sptdwb.sptd.Cdb[2] = 0;
   //sptdwb.sptd.Cdb[3] = 0;
   //sptdwb.sptd.Cdb[4] = 0;
   //sptdwb.sptd.Cdb[5] = 0;    
  sptdwb.sptd.Cdb[7] = (UCHAR)(sectorSize >> 8); // Parameter List length
  sptdwb.sptd.Cdb[8] = 0;
  length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
  status = DeviceIoControl(fileHandle,
                  IOCTL_SCSI_PASS_THROUGH_DIRECT,
                  &sptdwb,
                  length,
                  &sptdwb,
                  length,
                  &returned,
                  FALSE);
实用信息:www.infozobo.com
游客

返回顶部