none
win7下的u盘使用scsi命令读写,写数据有权限? RRS feed

  • 问题

  • win7下的u盘使用scsi命令读写,驱动程序使用系统驱动usbstor.sys,应用程序可以读u盘中的一个txt文件中的数据,但在数据区写不了数据,GetLastError返回值为5,代表拒绝访问,

    打开逻辑磁盘,使用winhex打开u盘中的txt文件,对数据区修改一些数据,可以保存,但txt文件中没有显示修改的数据,

    写数据程序是网上下载的,基本都是一样的,是不是win7的问题,还是权限问题?

     ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER));
    //dataBuffer = AllocateAlignedBuffer(sectorSize,alignmentMask, &pUnAlignedBuffer);
    FillMemory(bufDataWrite,bytesPerSector/2,'3');
    FillMemory(bufDataWrite + bytesPerSector/2,bytesPerSector/2,'4');

    sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
    sptdwb.sptd.PathId = 0;
    sptdwb.sptd.TargetId = 1;
    //sptdwb.sptd.TargetId = 0;
    sptdwb.sptd.Lun = 0;
    sptdwb.sptd.CdbLength = CDB10GENERIC_LENGTH;   //10
    sptdwb.sptd.SenseInfoLength = SPT_SENSE_LENGTH;    //32
    sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_OUT;
    sptdwb.sptd.DataTransferLength = bytesPerSector * writeSectors;
    sptdwb.sptd.TimeOutValue = 20;
    sptdwb.sptd.DataBuffer = bufDataWrite;
    sptdwb.sptd.SenseInfoOffset =
       offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER,ucSenseBuf);
    sptdwb.sptd.Cdb[0] = SCSIOP_WRITE;                //2A
    sptdwb.sptd.Cdb[2] = (UCHAR)((posSector_w>>24)&0xff);   
    sptdwb.sptd.Cdb[3] = (UCHAR)((posSector_w>>16)&0xff);
    sptdwb.sptd.Cdb[4] = (UCHAR)((posSector_w>>8)&0xff);
    sptdwb.sptd.Cdb[5] = (UCHAR) (posSector_w&0xff);

    sptdwb.sptd.Cdb[7] = (UCHAR)((writeSectors >> 8)&0xff);
    sptdwb.sptd.Cdb[8] = (UCHAR)(writeSectors&0xff);
    length = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
    iRet = DeviceIoControl(hUDisk,
     IOCTL_SCSI_PASS_THROUGH_DIRECT,
     &sptdwb,
     length,
     &sptdwb,
     length,
     &bytesReturn,
     FALSE);


    if ((sptdwb.sptd.ScsiStatus == 0) && (iRet != 0)) {
    //   PrintDataBuffer(bufDataWrite,sptdwb.sptd.DataTransferLength);
    return TRUE;
       }
     printf("ERROR: DeviceIoControl returns %0d.\n", GetLastError());

    2013年10月17日 5:09