gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1730回复:11

VXD 禁止创建新文件??

楼主#
更多 发布于:2005-02-03 15:22
if( ((pir->ir_options & ACTION_CREATENEW)
|| (pir>ir_options & ACTION_CREATEALWAYS)
|| (pir->ir_options & ACTION_OPENALWAYS )) )
{
   retval = 5;
   pir->ir_error = retval;
   return retval;
}

系统也显示了拒绝访问对话框,但刷新一下,还是创建了新文件

怎么回事啊?还要结合其他得一起控制马?谢谢

最新喜欢:

aasa2aasa2
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-14 08:34
如果是在OPEN的时候拦截的,试试改到WRITE里拦截
返回pir->ir_error = ERROR_ACCESS_DENIED(5)即可
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-21 16:14
我是再open里面拦截的,write里面没有拦截到,我写日志啥都没有。复制粘贴和新建以及另存为的时候,提示拒绝了,但还是有一空白文件产生,打开文件的时候此文件有问题,而且不能删除
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-22 16:01
没有人能够帮忙解答一下吗?着急啊,也试验了好长时间了,郁闷阿
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-23 13:37
你创建的是文本文件吗?
我这里好像没这个问题啊。
就是让她只读吗?代码好像也差不多啊
要不你把代码简化后给我看看吧
不过不保证能做到,只能说尽力而为
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-02-23 13:40
你创建的是文本文件吗?
我这里好像没这个问题啊。
就是让她只读吗?代码好像也差不多啊
要不你把代码简化后给我看看吧
不过不保证能做到,只能说尽力而为
yxh@hotmail.com,yxh@eyou.com
请同时发到这两个地方
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-23 15:46
您好,已经给你发了email,eyou的发送成功,但hotmail得没有发送成功,问题如下

整个驱动架构基本上跟FileMon的一致,只是再IFS_OPEN里面加入下面拦截操作
但是禁止软驱使用操作可以成功,但硬盘只读控制,却出现了问题
虽然粘贴,读写保存的时候失败,但是刷新一下,可以看到文件却产生了,且新产生的文件再打开的时候出现错误提示,还不能删除此文件。
请指点一下
switch (fn)
{
case IFSFN_OPEN:

//禁止软驱使用
if (Drive == 2 || Drive == 1)
{
retval = 5;
pir->ir_error = retval;
return retval;
}

// 硬盘只读控制
if (Drive是硬盘)
{
//禁止复制粘贴
if( (pir->ir_flags & ACCESS_MODE_MASK) == ACCESS_WRITEONLY )
{
WriteDebug(\"Copy and Paste :Process = %s,FileName %s\",processname,fullpathname);
retval = 5;
pir->ir_error = retval;
return retval;
}
//禁止读写
if( (pir->ir_flags & ACCESS_MODE_MASK) == ACCESS_READWRITE)
{
retval = 5;
pir->ir_error = retval;
return retval;
}



}
}
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-02-23 18:19
附件中是错误信息和关键代码,那位兄弟姐妹帮忙看看,谢谢
操作信息.txt: 一系列操作捕捉到的信息
驱动中拦截.txt: 根据操作信息.txt写的拦截代码


在新建,复制粘贴,另存为出现新建文件.bmp,复制粘贴.bmp,另存为.bmp得提示
此时硬盘内没有出现文件,但再硬盘内刷新一下,结果就出来了新建,复制,另存的文件,全部是空白文件。
删除文件不能删除删除.bmp

复制粘贴后产生的垃圾文件打开的时候 ,出现错误如图复制粘贴后打开.bmp
附件名称/大小 下载次数 最后更新
2005-02-23_新建文件夹 (3).rar (14KB)  2
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-02-24 12:57
我想我知道了问题在哪里了
因为你的邮件我没有收到(hotmail的因该是yuxuehu@hotmail.com写错了),所以用上面的代码是了一下,是可以的.
你确认一下retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);这断代码是在IFSFN_OPEN处理的后面还是之前.
如果是在FileMon中直接修改的就要把把它移到后面去.不过有些消息的处理会受到影响,自己看看吧.
还有,如果你的原码中
// 硬盘只读控制
//if (Drive是硬盘)
if (Drive) 还是 if (4)之类?
如果是前者,可就危险了.
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-02-24 14:04
retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);
这段代码是在IFSFN_OPEN之前,
但return retval;是在switch(fn){}之后,也就是再IFSFN_OPEN之后了。

if(Drive是硬盘)就是一个判断条件,就是if(Drive==4)(D盘)之类。
还是不管用。
yuxuehu
驱动小牛
驱动小牛
  • 注册日期2002-05-13
  • 最后登录2008-04-03
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-02-24 14:51
retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);
这句就是让系统继续执行的语句,即使你返回的是错误码,但操作还是执行了。只不过你修改了他的返回值而已。
还有,FileMon只可作参考,有很多地方不完善,如果开发用的话还要多注意一些。
gooyan
驱动牛犊
驱动牛犊
  • 注册日期2004-08-16
  • 最后登录2007-10-10
  • 粉丝0
  • 关注0
  • 积分33分
  • 威望6点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-02-25 09:48
谢谢,谢谢,万分感谢,搞定了,呵呵

另外就是你所说的

“如果是在FileMon中直接修改的就要把把它移到后面去.不过有些消息的处理会受到影响”

其中的消息是不是指如果通过消息与应用层通信,有的消息会受到影响?我的都是通过deviceIocontrol与vxd通信得。

还有就是您对重定向熟悉吗?例如对C:\\a.txt操作,重定向成对D:\\a.txt操作。例如本来要copy文件到A盘,重定向成copy文件到C盘等。这些是不适也要在IFSFN_OPEN里面进行操作。要重构pioreq???
游客

返回顶部