阅读:2983回复:0
passthrough发scsi指令给硬盘读磁盘扇区失败,大家帮我分析分析
下面的代码我是照搬了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); |
|
|