怎么读取U盘,求指教
如何读取U盘,求指教
我用Bus Hound 能抓到数据,说明控制命令已经发出,但是这是获取U盘容量的SCSI,比如我的U盘容量是15974399 抓到的数据是00 F3 BF FF ;我去查看byBuffer的时候 发现没这些数据 而且抓包的数据长度是8 而DeviceIoControl 的dwReturn 却是32;求指教 怎么去操作呢?
------解决方案--------------------
楼主发福利了,接分。
------解决方案--------------------
HANDLE hDevice;
hDevice = CreateFile(L"\\\\.\\H:", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, NULL);
SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
ZeroMemory(&sptdwb, sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER));
BYTE byBuffer[32];
memset(byBuffer,0,32);
DWORD dwBufferBytes = sizeof(byBuffer);
sptdwb.sptd.Length = sizeof(SCSI_PASS_THROUGH_DIRECT);
sptdwb.sptd.PathId = 0;
sptdwb.sptd.TargetId = 1;
sptdwb.sptd.Lun = 0;
sptdwb.sptd.CdbLength = CDB6GENERIC_LENGTH;
sptdwb.sptd.SenseInfoLength = 24;
sptdwb.sptd.DataIn = SCSI_IOCTL_DATA_IN;
sptdwb.sptd.DataTransferLength = dwBufferBytes;
sptdwb.sptd.TimeOutValue = 2;
sptdwb.sptd.DataBuffer = byBuffer;
sptdwb.sptd.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER, ucSenseBuf);
sptdwb.sptd.Cdb[0] = SCSIOP_READ_CAPACITY;
sptdwb.sptd.Cdb[4] = (UCHAR) dwBufferBytes;
int iLength = sizeof(SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER);
DWORD dwReturn = 0;
if(!DeviceIoControl(hDisk, IOCTL_STORAGE_READ_CAPACITY,
&sptdwb, iLength, &sptdwb, iLength, &dwReturn, FALSE))
{
return -1;
}
return ERROR_SUCCESS;
我用Bus Hound 能抓到数据,说明控制命令已经发出,但是这是获取U盘容量的SCSI,比如我的U盘容量是15974399 抓到的数据是00 F3 BF FF ;我去查看byBuffer的时候 发现没这些数据 而且抓包的数据长度是8 而DeviceIoControl 的dwReturn 却是32;求指教 怎么去操作呢?
------解决方案--------------------
楼主发福利了,接分。
------解决方案--------------------