Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
阅读:1720回复:14

请高手帮忙看一下文件不能加密的原因

楼主#
更多 发布于:2005-05-16 09:21
我在filemon里面修改了 我修改了Filemon里面FilemonHookRoutine里面的IRP_MJ_WRITE,但是不能加密文件,请问是什么原因啊?

[编辑 -  5/16/05 by  Hell_Fire_1981]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-05-16 11:39
<但是不能加密文件
具体碰到了什么问题?
因为系统可能会调用FastIoWrite,你仅仅hook IRP_MJ_WRITE可能不全
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-05-16 13:19
但是我监视驱动,没有发现有fastio啊?
我只是实现对文本文件的加密解密!
下面是我在IRP_MJ_WRITE修改的程序
if(!(Irp->Flags & (IRP_NOCACHE| IRP_PAGING_IO |IRP_SYNCHRONOUS_PAGING_IO)))
{
break;
}
if(Irp->MdlAddress)
{
sysDataOld = MmGetSystemAddressForMdl(Irp->MdlAddress);
}
else
{
sysDataOld = Irp->UserBuffer;
}
if(!sysDataOld)
{
break;
}

length = currentIrpStack->Parameters.Write.Length;
sysDataBuffer = (PCHAR)ExAllocatePool(NonPagedPool, length);
RtlCopyMemory(sysDataBuffer, sysDataOld, length);

for(i = 0; i < length ; i++)
{
sysDataBuffer = sysDataBuffer + 1;
}
pMDL = IoAllocateMdl(sysDataBuffer, length, FALSE, FALSE, Irp );
MmBuildMdlForNonPagedPool(pMDL);
Irp->UserBuffer=MmGetMdlVirtualAddress(pMDL);
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-05-16 14:12
zhaock 大侠能留个联系方式吗?
我觉得现在驱动网上的高手都不怎么愿意回答我这种新手(菜鸟)的问题,就您老大还帮助我们了。


[编辑 -  5/17/05 by  Hell_Fire_1981]
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2005-05-16 14:29
<if(!(Irp->Flags & (IRP_NOCACHE| IRP_PAGING_IO <|IRP_SYNCHRONOUS_PAGING_IO)))
<{
<break;
<}
这几句有问题吧?对于大部分buffered io,就被pass掉了吧

我不用qq.
这个月比较闲,对于我以前熟悉的驱动,试着回答回答,有很多还是
三四年前做的,只能回答一些入门级的问题,呵呵,细节已经记不清了
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-05-16 14:33
我在试试看,这句话是我在论坛里别人的帖子看来的。

谢谢你,不管是不是这个原因先给分。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2005-05-16 14:50
你已经把分给了,不帮你搞定,也说不过去了。

你先把问题说说,我懒得去调试了

你在那if(memcmp(fullPathName,\"E:\\\\1.txt\",8)==0)设断点,
进去了吗?
这句if(Irp->MdlAddress)走到了吗?
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-16 15:02
进去了,我在后来的那个加密部分也测试了,都进去了啊!!
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
8楼#
发布于:2005-05-16 15:17
你直接call IoCompleteRequest肯定不对,去掉后,再试试
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-05-16 15:22
这一点我也想到了,我后来去掉了,现在的问题是我可以测试到sysDataBuffer已经 +1 了,可是我关闭驱动后打开还是明文?
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
10楼#
发布于:2005-05-16 15:28
而且你代码还有很多问题,你必须安装一个completion函数,
必须释放掉你分配内存,mdl,而且恢复被你替换的Irp->UserBuffer,
和Irp->MdlAddress(你代码中没有替换,需要替换成你分配的pMDL)

看来你windows驱动确实不太熟悉,而文件系统又是非常复杂的,
够你做的,呵呵
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
11楼#
发布于:2005-05-16 15:31
<这一点我也想到了,我后来去掉了,现在的问题是我可以测试到<sysDataBuffer已经 +1 了,可是我关闭驱动后打开还是明文?
可能就是你没有替换Irp->MdlAddress,下层驱动用的还是上层的
数据,而不是你修改后的密文
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-05-16 15:36
《可能就是你没有替换Irp->MdlAddress,你必须安装一个completion函数,
必须释放掉你分配内存,mdl,而且恢复被你替换的Irp->UserBuffer,
和Irp->MdlAddress(你代码中没有替换,需要替换成你分配的pMDL)

能给我讲讲怎么替换吗?
我现在基本上是一边看书一边看论坛里的文章,在学习的。
zhaock
驱动太牛
驱动太牛
  • 注册日期2002-01-26
  • 最后登录2018-06-02
  • 粉丝3
  • 关注2
  • 积分73328分
  • 威望362317点
  • 贡献值1点
  • 好评度226点
  • 原创分0分
  • 专家分0分
  • 社区居民
13楼#
发布于:2005-05-16 15:46
<<能给我讲讲怎么替换吗?
completion->OldMdl = Irp->MdlAddress;
MyMdl是你分配的,Irp->MdlAddress = MyMdl,

在回调函数里,再恢复Irp->MdlAddress= completion->OldMdl
Hell_Fire_1981
驱动牛犊
驱动牛犊
  • 注册日期2005-03-27
  • 最后登录2007-10-02
  • 粉丝0
  • 关注0
  • 积分532分
  • 威望60点
  • 贡献值0点
  • 好评度49点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-05-16 15:53
谢谢你,我自己试试吧,多谢你今天和我说了这么多!!
作出来了以后,我把它公布出来,大家一起看看。到时候在给你分。
呵呵 :D :D :D
游客

返回顶部