首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用SetFilePointer更改在扇区中写入的位置不起作用?

使用SetFilePointer更改在扇区中写入的位置不起作用?
EN

Stack Overflow用户
提问于 2020-06-25 08:53:55
回答 1查看 189关注 0票数 0

我使用SetFilePointer重写MBR的下半部分,它是一个用户模式的应用程序,我打开了PhysicalDrive的句柄。

起初,我试图将WriteFile中的size参数设置为256个,但是写文件给出了INVALID_PARAMETER错误,因为根据对其他问题的一些搜索,这似乎是因为由于某种原因,当句柄是PhysicalDrive时,我们不得不用扇区大小的乘数书写。

然后我尝试将filePointer设置为256个,并写入512个字节,它们都不返回错误,但是由于某种未知的原因,它从扇区开始写入!就好像SetFilePointer甚至没有工作一样,SetFilePointer的返回值是OK的,它返回256

所以我的问题是:

  1. 为什么当句柄是PhysicalDrive时写入大小必须乘以扇区大小?其他哪些设备句柄是这样的?

  1. 为什么会发生这种情况,当我将文件指针设置为256时,WriteFile仍然从一开始就写入?

  1. 并不是真的多余,考虑到即使我想改变1字节,我也必须读取整个扇区,更改一个字节,然后将其写回,而不是只写1字节,这似乎要多10倍的开销!在扇区中写几个字节难道没有更快的方法吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-19 14:12:23

我认为你正在混合文件系统和存储(块设备)。文件系统保持在存储设备堆栈之上。如果代码获得文件系统设备的句柄,则可以逐字节写入。但是,如果您正在访问存储设备堆栈,则只能按扇区(或块大小)写入。

直接写到阻止设备肯定是缓慢的,正如你所发现的。然而,在大多数情况下,人们只是与文件系统交谈。大多数文件系统驱动程序都维护缓存,并使用读写算法来提高性能。

在查看实际代码之前,不能对基于文件指针的偏移量进行注释。但我想它可能与扇区不一致,或者根本没有被使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62580451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档