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());