wangzhankun

Results 35 comments of wangzhankun

Hello, may you share the main code? I have no idea to use the repo.

> 可是日志里显示,你并没有把Test.exe设置为授权进程,所以之后用notepad++删除以后,非授权进程Test无法写入文件。 不过我还是更新了一下,文件的EOF==0,默认它是明文了。 问题还是没解决。可能是文档上传错了。你那边可以调试一下。 [DESKTOP-RPF0QIQ.LOG](https://github.com/hkx3upper/FOKS-TROT/files/9042823/DESKTOP-RPF0QIQ.LOG)

而且比较奇怪的是,在打开文件时,将`FILE_FLAG_WRITE_THROUGH`用0替换,缓冲写的时候,也是有问题。而且我在驱动里面看是确确实实有数据被写入的: ![image](https://user-images.githubusercontent.com/35724924/177244277-93a26fd1-e006-409a-adb5-6569139d94df.png) 可是打开文件数据就是不对。

最新的代码仍然有问题。录屏和日志见百度网盘。(你有阿里云盘吗?百度的你那边下载的时候太慢了) 链接:https://pan.baidu.com/s/1u9d2q6wqoHjElE96e4fadw 提取码:s5ql

[test.zip](https://github.com/hkx3upper/FOKS-TROT/files/9053978/test.zip)

> [test.zip](https://github.com/hkx3upper/FOKS-TROT/files/9053978/test.zip) 另外用这个程序做测试的时候还会有一个bug。我在录屏里面运行了两次TEST.exe。两次运行之间把生成的hello.txt文件删除了,如果这个文件不删除,连续运行两次TEST.exe,也会导致文件损坏。

> 只能解决一部分问题,现在更新了CurrentByteOffset,不会有一块乱码了。但还是会有丢掉最后一块数据的情况。 不知为什么,这个WRITE_THROUGH,并没有在CacheManager写入文件之前更新Fcb里面的FileSize,这就导致Write中取到的FileSize是个过时的值,所以最后一块数据并没有正常加密写入。反而在PagingIo写完,返回FSD,然后FSD返回CachedIo时更新了FileSize。 我没找到原因......这可能取决于ntfs对于FileSize的更新方式。 不改了不改了,就这样吧。 我这边测试好像没有数据丢失的情况了。但是连续两次运行TEST.exe导致文件损坏的问题还是存在。 ### 第一次运行 ### 第二次运行 ## BUG复现步骤 1. 删除hello.txt 2. 运行TEST.exe 3. 再次运行TEST.exe (如果在2、3步之间使用机密进程打开该文件,或者删除hello.txt,第二次运行TEST.EXE并不会导致文件损坏)

bug日志: [DESKTOP-RPF0QIQ.LOG](https://github.com/hkx3upper/FOKS-TROT/files/9060048/DESKTOP-RPF0QIQ.LOG)

> > [test.zip](https://github.com/hkx3upper/FOKS-TROT/files/9053978/test.zip) > > 另外用这个程序做测试的时候还会有一个bug。我在录屏里面运行了两次TEST.exe。两次运行之间把生成的hello.txt文件删除了,如果这个文件不删除,连续运行两次TEST.exe,也会导致文件损坏。 感觉是文件标识尾写入太慢的问题。 ![image](https://user-images.githubusercontent.com/35724924/177683336-e6991a0d-e3c7-4b46-b74c-b456cd7f644f.png) 我建议是把这一行的代码`Status = KeDelayExecutionThread(KernelMode, FALSE, &Interval);`放到下面去。就是先判断是否有进程正在读写。把代码放到下面就没问题了。

我用beyond compare做了对比,丢失的数据还挺多的。