怎么读取U盘,求指教

如何读取U盘,求指教

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;求指教 怎么去操作呢?
------解决方案--------------------
楼主发福利了,接分。
------解决方案--------------------
怎么读取U盘,求指教