阅读:1730回复:11
VXD 禁止创建新文件??
if( ((pir->ir_options & ACTION_CREATENEW)
|| (pir>ir_options & ACTION_CREATEALWAYS) || (pir->ir_options & ACTION_OPENALWAYS )) ) { retval = 5; pir->ir_error = retval; return retval; } 系统也显示了拒绝访问对话框,但刷新一下,还是创建了新文件 怎么回事啊?还要结合其他得一起控制马?谢谢 |
|
最新喜欢:![]() |
沙发#
发布于:2005-02-14 08:34
如果是在OPEN的时候拦截的,试试改到WRITE里拦截
返回pir->ir_error = ERROR_ACCESS_DENIED(5)即可 |
|
板凳#
发布于:2005-02-21 16:14
我是再open里面拦截的,write里面没有拦截到,我写日志啥都没有。复制粘贴和新建以及另存为的时候,提示拒绝了,但还是有一空白文件产生,打开文件的时候此文件有问题,而且不能删除
|
|
地板#
发布于:2005-02-22 16:01
没有人能够帮忙解答一下吗?着急啊,也试验了好长时间了,郁闷阿
|
|
地下室#
发布于:2005-02-23 13:37
你创建的是文本文件吗?
我这里好像没这个问题啊。 就是让她只读吗?代码好像也差不多啊 要不你把代码简化后给我看看吧 不过不保证能做到,只能说尽力而为 |
|
5楼#
发布于:2005-02-23 13:40
你创建的是文本文件吗?
我这里好像没这个问题啊。 就是让她只读吗?代码好像也差不多啊 要不你把代码简化后给我看看吧 不过不保证能做到,只能说尽力而为 yxh@hotmail.com,yxh@eyou.com 请同时发到这两个地方 |
|
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; } } } |
|
7楼#
发布于:2005-02-23 18:19
附件中是错误信息和关键代码,那位兄弟姐妹帮忙看看,谢谢
操作信息.txt: 一系列操作捕捉到的信息 驱动中拦截.txt: 根据操作信息.txt写的拦截代码 在新建,复制粘贴,另存为出现新建文件.bmp,复制粘贴.bmp,另存为.bmp得提示 此时硬盘内没有出现文件,但再硬盘内刷新一下,结果就出来了新建,复制,另存的文件,全部是空白文件。 删除文件不能删除删除.bmp 复制粘贴后产生的垃圾文件打开的时候 ,出现错误如图复制粘贴后打开.bmp |
|
|
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)之类? 如果是前者,可就危险了. |
|
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盘)之类。 还是不管用。 |
|
10楼#
发布于:2005-02-24 14:51
retval = (*PrevIFSHookProc)(pfn, fn, Drive, ResType, CodePage, pir);
这句就是让系统继续执行的语句,即使你返回的是错误码,但操作还是执行了。只不过你修改了他的返回值而已。 还有,FileMon只可作参考,有很多地方不完善,如果开发用的话还要多注意一些。 |
|
11楼#
发布于:2005-02-25 09:48
谢谢,谢谢,万分感谢,搞定了,呵呵
另外就是你所说的 “如果是在FileMon中直接修改的就要把把它移到后面去.不过有些消息的处理会受到影响” 其中的消息是不是指如果通过消息与应用层通信,有的消息会受到影响?我的都是通过deviceIocontrol与vxd通信得。 还有就是您对重定向熟悉吗?例如对C:\\a.txt操作,重定向成对D:\\a.txt操作。例如本来要copy文件到A盘,重定向成copy文件到C盘等。这些是不适也要在IFSFN_OPEN里面进行操作。要重构pioreq??? |
|