紧急求教:IOCTL_SCSI_PASS_THROUGH_DIRECT 为何第二次始终失败

jidicl
jidcl2007 2012-03-12 字数 632

使用IOCTL_SCSI_PASS_THROUGH_DIRECT,发送命令读取dvd的指定sector。使用

IOCTL_STORAGE_QUERY_PROPERTY得到对齐方式是1,也就是双字节对齐,单次最大传

输长度是64 sectors。

函数read_sector_internal封转了发送scsi命令。

int read_sector_internal(SPTI_DRIVE *drive, unsigned int lba, unsigned

char *buffer, unsigned int bsize);

函数内部多次发送命令,每次max-1 sectors(因为发现有的光驱使用max不行,有

的可以)

调用者保证buffer是8字节对齐的。现在出入lba为683598, bsize是126*2048,第

一次可以,但是第二次就不行(都是获取63 sectors)。

如果传入lba为683598+63,bsize为63*2048,成功!

我不清楚scsi传输的时候是不是还有其他的限制?我是一个scsi菜鸟,急盼指点!

1 个回复
jidicl
jidcl2007 2012-03-12

如果将每次传入的size定位max-8就可以了,不知道什么原因

【 在 jidicl (jidcl2007) 的大作中提到: 】

: 使用IOCTL_SCSI_PASS_THROUGH_DIRECT,发送命令读取dvd的指定sector。使用

: IOCTL_STORAGE_QUERY_PROPERTY得到对齐方式是1,也就是双字节对齐,单次最大

: 输长度是64 sectors。

: ...................