-
-
[求助]关于SetFilePointer & WriteFile读写磁盘的问题
-
发表于: 2008-4-20 17:37 8947
-
最近写了个小程序,用于对磁盘扇区进行搜索并修改特定记录。
程序大概思路如下:
创建搜索线程,CreateFile打开指定磁盘,ReadFile读入0x10000字节到缓存,进入搜索函数,对这0x10000字节内容进行搜索,如果匹配到指定记录,则修改缓存内容,然后计算偏移offset,然后对齐边界0x200,再调用SetFilePointer指向该边界,最后调用WriteFile把更新后的缓存写入该扇区。
问题:
运行开始良好,修改几十条记录后就不能修改了,调试时发现SetFilePointer返回值为0xFFFFFFFF,查MSDN无果,后来我修改了第三个参数,原来一直设为NULL,后来定义了变量,始终初始化为0,它返回了正确值。但底下的WriteFile写入时,第一次成功,返回值为1,返回已写入字节0x200,但第二次写入时就出问题了,返回值还是1,返回写入字节却是0x0。也就是没写入磁盘。我想或许是连续的两条记录在一个扇区上的原因,于是在每次写入后调用FlushFileBuffers函数。但还是不行。后来我又修改为每次把一个扇区上的全部记录在缓存中修改完一次写入,结果还是不行。不管怎样改,第一次写入时都没问题,再写入就出现该问题。
不清楚问题的原因,哪位知道可否告知或提供解决办法,感激不尽。
程序大概思路如下:
创建搜索线程,CreateFile打开指定磁盘,ReadFile读入0x10000字节到缓存,进入搜索函数,对这0x10000字节内容进行搜索,如果匹配到指定记录,则修改缓存内容,然后计算偏移offset,然后对齐边界0x200,再调用SetFilePointer指向该边界,最后调用WriteFile把更新后的缓存写入该扇区。
问题:
运行开始良好,修改几十条记录后就不能修改了,调试时发现SetFilePointer返回值为0xFFFFFFFF,查MSDN无果,后来我修改了第三个参数,原来一直设为NULL,后来定义了变量,始终初始化为0,它返回了正确值。但底下的WriteFile写入时,第一次成功,返回值为1,返回已写入字节0x200,但第二次写入时就出问题了,返回值还是1,返回写入字节却是0x0。也就是没写入磁盘。我想或许是连续的两条记录在一个扇区上的原因,于是在每次写入后调用FlushFileBuffers函数。但还是不行。后来我又修改为每次把一个扇区上的全部记录在缓存中修改完一次写入,结果还是不行。不管怎样改,第一次写入时都没问题,再写入就出现该问题。
不清楚问题的原因,哪位知道可否告知或提供解决办法,感激不尽。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
- [求助]帮忙看一下这是什么壳 2428
- [求助]关于SetFilePointer & WriteFile读写磁盘的问题 8948
- [求助]XP关闭SFC出错 9273
- 关于MFC调试中窗口消息定位的问题 6654
- 关于内存指令加密的问题 6788
赞赏
雪币:
留言: