DeviceIoControl时,总是返回失败,错误码是87(参数错误)

时间:2020-12-11 20:09:43
  设计USB通信时,用到了DeviceIoControl。直接上代码,各位看看,调用时总是失败,调用GetLastError时错误码是87(参数错误)

BOOL status;

SCSI_PASS_THROUGH_WITH_BUFFERS sptwb;

    DWORD length, returned;

    ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS));

    sptwb.spt.Length = sizeof(SCSI_PASS_THROUGH);
    sptwb.spt.PathId = 0;
    sptwb.spt.TargetId = 1;
sptwb.spt.Lun = 2;
    sptwb.spt.CdbLength = CDB6GENERIC_LENGTH;
    sptwb.spt.SenseInfoLength = 24;
sptwb.spt.DataIn = SCSI_IOCTL_DATA_IN;
    sptwb.spt.DataTransferLength = 0x24;
    sptwb.spt.TimeOutValue = 2;
sptwb.spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf);
sptwb.spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucSenseBuf);
sptwb.spt.Cdb[0] = SCSIOP_INQUIRY;
sptwb.spt.Cdb[4] = 36;

length = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf) + sptwb.spt.DataTransferLength;

int code=GetLastError();
status = DeviceIoControl(fileHandle,
IOCTL_SCSI_PASS_THROUGH,
&sptwb,
sizeof(SCSI_PASS_THROUGH),
&sptwb,
length,
&returned,
NULL);

code=GetLastError();
if (status==0)
{
}
    memcpy(buf, sptwb.ucDataBuf, 0x24);

    return status;       

1 个解决方案

#1


自己顶一下!!

#1


自己顶一下!!