有问题了,关于ReadFile

happlyman 2006-03-23 12:04:30
API方法 ReadFile 在读硬盘的时候,是不是只能以扇区为单位读,不能以字节为单位读,例如

LARGE_INTEGER li;

li.QuadPart = 0;
li.LowPart = ::SetFilePointer(m_hDevice,li.LowPart,&li.HighPart,MoveMethod);

ReadFile(m_hDevice, pBuffer, 512, lpNumberOfBytesRead, NULL)//读512个字节,可以正确完成

ReadFile(m_hDevice, pBuffer, 8, lpNumberOfBytesRead, NULL)//读8个字节,读出的data无效

据说是windows限制了ReadFile的参数,读的时候只能以扇区为单位。如果是这样的话,有什么方法可以去掉这个限制。或者有其它的api可以用。
...全文
172 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
净天宇 2006-03-24
  • 打赏
  • 举报
回复
接分
一条晚起的虫 2006-03-23
  • 打赏
  • 举报
回复
可以一个一个读
你的代码能不能贴出来?从CreateFile开始
happlyman 2006-03-23
  • 打赏
  • 举报
回复
我也寒一个,我也知道这么读,但我们不是想钻研吗,

我是想问,

第一,为什么不能以字节为单位读,ReadFile的参数明明就是字节为单位的吗
第二,是不是windows限制了。
第三,有没有方法可以去掉这个限制,让ReadFile可以以字节为单位读
windindance 2006-03-23
  • 打赏
  • 举报
回复
寒一个,你就读一个扇区,然后取你想要的数据不就可以了?
一条晚起的虫 2006-03-23
  • 打赏
  • 举报
回复
只能以个扇区一个扇区读
windindance 2006-03-23
  • 打赏
  • 举报
回复
据我了解,WINDOWS读的机制是以扇区为单位的,也就是最小是读取一个扇区。即使一个一个读,也是从WINDOWS缓存中读取。
zhangshengyu 2006-03-23
  • 打赏
  • 举报
回复
第一,为什么不能以字节为单位读,ReadFile的参数明明就是字节为单位的吗
第二,是不是windows限制了。
第三,有没有方法可以去掉这个限制,让ReadFile可以以字节为单位读

第一,磁盘是块设备,单位是扇区 一般是512。当然也有更小的,这是由硬盘参数决定的。
第二,跟WINDOWS没有关系,任何系统都一样
第三,没问题,你去写个磁盘驱动程序就可以了。替换掉disk.sys或写磁盘上层过滤驱动程序,或者HOOK ReadFile把数据分割一下。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧