song1484
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2005-09-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2536回复:11

IRP_MJ_WRITE的问题!vcmfc再帮忙看看吧!!

楼主#
更多 发布于:2003-06-05 22:06
在从IRP_MJ_WRITE中取得数据后加密处理。
VCMFC说:要将原来的buffer的内容copy到你的缓冲,
生成该缓冲的MDL,替换Irp->MdlAddress,
下传给file system,恢复原来的MDL,释放缓冲。
可是我是在完成例程里作“加密处理”的,处理之后怎样
“下传给file system,恢复原来的MDL”??
各位老大帮忙看看!


[编辑 -  6/9/03 by  song1484]

最新喜欢:

rhpengrhpeng
piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-06 00:43
你为什么要在完成例程里加密数据? 写操作都已经完成了, 你还加密它干什么? 我的意思是说, 在这个时候要写的数据已经在磁盘上了.
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-06 10:04
声明:


   此方法有严重的问题,建议不要使用,至少本人已发现了,请用原来缓冲区。
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-06 10:07
流程:

IRP_MJ_Write:

if pageio

encrypt

call file system

complete routine
decrypt

 这种方式可兼容office系统,包括ntfs/fat32分区。
song1484
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2005-09-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-06 10:55
VCFMC:
 老大,你终于出现了!太感谢了!
这几天我一直看以前的帖子,各种说法越看越糊涂。


[编辑 -  6/6/03 by  song1484]
piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-06 22:52
VCMFC, 能说得具体一点吗? 到底那种方法有什么问题? 在我的FILTER中就是使用的这种方法, 好象到现在为止没什么问题。如果说有问题的话,就是会影响系统性能,因为MDL的转换。

如果我的FILTER是一个LOWER FILTER, 在DISK.SYS的下面,应该就不用考虑PAGEIO的问题了吧?

Thanks.
song1484
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2005-09-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-06-07 09:28
piggy :
   vcmfc看来很少来。
请问:在对IRP_MJ_READ获得的数据加密处理时是否需要判断是目录
还是文件,怎样判断。多谢!!
vcmfc
驱动中牛
驱动中牛
  • 注册日期2001-03-23
  • 最后登录2008-01-28
  • 粉丝0
  • 关注0
  • 积分528分
  • 威望53点
  • 贡献值0点
  • 好评度52点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-06-07 15:15
to piggy:我说的是针对ifs filter,disk filter不在此范围内。


to song1484:目录有 pageio吗?
song1484
驱动牛犊
驱动牛犊
  • 注册日期2002-12-04
  • 最后登录2005-09-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-06-07 19:58
vcmfc:
    我照你的提示处理irp_mj_write,结果当我重起机器后,
加密的驱动器内的文件都没有了。不知道是什么原因,老大能
否帮忙解释一下,拜托!!
重起机器以后(driver未加载)发现重新写过的文件都没了。
跟踪发现新建或修改.txt文件时一些$LogFile,$Mft文件也被加密处理了,这些是什么文件,是不是和目录结构有关的信息,是不是由于这些信息被加密了,所以当重起后(driver未加载)这些目录信息不能识别了。我该怎么处理呢?谢谢!!


[编辑 -  6/9/03 by  song1484]

[编辑 -  6/9/03 by  song1484]
piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-10-15 04:05
To vcmfc:
你说“此方法有严重的问题,建议不要使用,至少本人已发现了,请用原来缓冲区”。能否详细说一下到底是什么严重问题?和CACHE有关吗?

在文件系统FILTER中,做加解密时是不是只需要考虑IRP_NOCACHE, IRP_PAGING_IO, IRP_SYNCHRONOUS_PAGING_IO?

Thanks
piggy
驱动牛犊
驱动牛犊
  • 注册日期2001-08-24
  • 最后登录2012-01-14
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望27点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-10-16 22:16
Up 一下.

有没有人知道到底是什么原因呀?
omo
omo
驱动牛犊
驱动牛犊
  • 注册日期2002-08-07
  • 最后登录2004-11-16
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-11-01 16:30
if(FlagOn(currentIrpSp->DeviceObject->Flags, IRP_BUFFERED_IO)){

//
// IRPÖ¸¶¨°´ÕÕBUFFERED_IO?½Ê½Ð´
//

*pBuf = irp->AssociatedIrp.SystemBuffer;
}
if (FlagOn(currentIrpSp->DeviceObject->Flags,DO_DIRECT_IO)) {

//
// IRPÖ¸¶¨°´ÕÕDIRECT_IO?½Ê½Ð´
//
// Èç¹ûÊÇMDLдÇëÇó,Îļþϵͳ½«¼ì²éÏÂÃæminor function codeÈ»ºó¾ö¶¨ÏÂÃæµÄ
// minor codeÄÄÐ?ÊÇÓÐЧµÄfunction code£¬ÕâÖÖÇé¿öÖ»ÓÐÔÚcached I/O²Å³öÏÖ
//

if(!FlagOn(irp->Flags,IRP_NOCACHE)) {

switch(currentIrpSp->MinorFunction) {

//
// Ö»ÓÐonly for cached file I/Oʱ²Å´¦ÀíÏÂÃæµÄMinor function,Ôݲ»´¦Àí¡£
//
case IRP_MN_COMPLETE:
case IRP_MN_COMPRESSED:
case IRP_MN_DPC:
case IRP_MN_MDL:
case IRP_MN_NORMAL:
default:
;
}
}

//*pBuf = irp->MdlAddress;

*pBuf = MmGetSystemAddressForMdl(irp->MdlAddress);
}
else
{
// If do not set DO_BUFFERED_IO, IO manager set System buffer as NULL
*pBuf = irp->UserBuffer;
}

请看上面得代码,是得到write时buffer中得数据,经过测试,是很成功得,不知道你怎么就知道一定数据就存放在mdl中得?
钱就是驱动,驱动就是钱。
游客

返回顶部