我使用SetFilePointer重写MBR的下半部分,它是一个用户模式的应用程序,我打开了PhysicalDrive的句柄。
起初,我试图将WriteFile中的size参数设置为256个,但是写文件给出了INVALID_PARAMETER错误,因为根据对其他问题的一些搜索,这似乎是因为由于某种原因,当句柄是PhysicalDrive时,我们不得不用扇区大小的乘数书写。
然后我尝试将filePointer设置为256个,并写入512个字节,它们都不返回错误,但是由于某种未知的原因,它从扇区开始写入!就好像SetFilePointer甚至没有工作一样,SetFilePointer的返回值是OK的,它返回256
所以我的问题是:
发布于 2020-07-19 14:12:23
我认为你正在混合文件系统和存储(块设备)。文件系统保持在存储设备堆栈之上。如果代码获得文件系统设备的句柄,则可以逐字节写入。但是,如果您正在访问存储设备堆栈,则只能按扇区(或块大小)写入。
直接写到阻止设备肯定是缓慢的,正如你所发现的。然而,在大多数情况下,人们只是与文件系统交谈。大多数文件系统驱动程序都维护缓存,并使用读写算法来提高性能。
在查看实际代码之前,不能对基于文件指针的偏移量进行注释。但我想它可能与扇区不一致,或者根本没有被使用。
https://stackoverflow.com/questions/62580451
复制相似问题