阅读:1000回复:4
文件加密,很简单的问题,可惜我不会
假如我要对D盘的所有要写的数据进行加密。
是不是我要处理 所有的IRP_MJ_WRITE? 假如不是,那我应该要处理那些IRP_MJ_WRITE? ======================================== 注:我刚写了个文件加密,对D盘 处理所有的IRP_MJ_WRITE。 结果 蓝屏重启. 我不知道是不是这个原因。 |
|
|
沙发#
发布于:2004-11-23 16:19
你也在做这个,呵呵,令人头痛的东东 。。。
是得处理IRP_MJ_WRITE,但不是所有的。 if( Irp ->Flags & ( IRP_NOCACHE | IRP_PAGING_IO | IRP_SYNCHRONOUS_PAGING_IO ) ) { //加密 } else { //passthrough } 一些细节的东西可以参考论坛里面的老帖子。 |
|
|
板凳#
发布于:2004-11-23 17:40
我按照这样处理的,结果还是蓝屏。
我怀疑是加密函数出错了,把加密函数删了,结果还是蓝屏。 不知道是什么原因? 但是我注意到一点: 就是在加密完成后,需要调用IoCallDevice()。我将此函数改成IoSetCompletionRoutine()后,就不会蓝屏,但是写到硬盘上的数据为明文。 郁闷中。。。。。。。。 |
|
|
驱动老牛
|
地板#
发布于:2004-11-23 17:58
关键是得把写磁盘的偏移和数据长度记录好,识别出哪部分是加密的,哪部分时未加密的,如果原来就没有数据就简单多了。
|
|
地下室#
发布于:2004-11-24 10:33
IoCallDevice??应该是IoCallDriver吧,但愿只是在帖子发错了。
加解密根本不用IoSetCompletionRoutine,只有处理IRP_MJ_WRITE和IRP_MJ_READ就可以了。我是在filemon的代码上改的,基本步骤参考了“sfilter动态加解密吐血总结”,没什么大问题。 |
|
|