阅读:2381回复:11
如何保护文件的内容不被改写? 100分奉送!!!
请问?
保护文件不被改写,应该在什么地方处理, 在IRP_MJ_WRITE处可以吗? 如果可以,该如何处理延迟写的问题? 如果修改文件为只读,该如何处理? 另外,那位大虾能告诉我如何 判断一个FILEOBJECT代表的是一个文件OR DIR,在什么时候纪录最好? 我保护c:\\test\\下的所有文件的写权限和禁止删除,但当我在c:\\test\\目录下创建一个目录,由于过一段时间系统要更新c:\\test目录的内容,IRP_SYNCHRONOUS_PAGING_IO ,系统会报告延迟写错误; 另外,当创建的文件是有初始内容的文件(波形文件),写文件时将不成功? 我该如何处理呢? 谢谢!!! |
|
最新喜欢:ykwj12... |
沙发#
发布于:2002-04-29 20:48
延迟写是去不掉的吧!因为这是由于WINDOWS系统的一种处理方法!根据程序的局部性原理和连续性原理,估计WINDOWS也不会例外的!其实延迟写入失败也没什么关系啊!不知道你为什么一定要解决了!
|
|
板凳#
发布于:2002-04-29 23:04
瞎说,不一定对:
从开机开始用非共享方式打开该文件一直到关机,不就成了嘛。 |
|
地板#
发布于:2002-04-30 11:13
这着我也想过,可是总觉得有一点怪,能不能写到别的地方,这样写请求就完成了,我也是瞎猜的:)
|
|
地下室#
发布于:2002-04-30 14:57
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2002-04-30 19:56
最简单的是在IRP_MJ_CREATE时将写权去除.
|
|
|
6楼#
发布于:2002-05-01 04:35
1。想知道该文件是否是一个目录,只要构建自己的IRP查询该文件的 BASIC―INFORMATION还是STANDARD――INFORMATION(记不清了),反正两个结构中有一个结构里有一项IS――DIRECTORY,检查它是真是假即可 (也可以使用 ZwQueryFileInfomation (...),你看看IFS 或是DDK的帮助吧。 但切记不要调用API来查询,这是为了安全起见。所以,MACY 说的有些不妥 2。想保护文件,光象LU0说的那样也不对,那样只能处理驱动加载后的文件写。 3。如果想保护,可以直接返回STATUS――UNSUCCESSFUL,但这样太卤莽,理智一点的做法应该是, 1)判断是否是元文件(文件名长度为0,很奇怪吧,或是参考 FILEMON的判断方法),如果是,不做任何处理 2)检测是否为要保护的文件,是,则 CANCEL IRP(即,调用IoCancelIRP() (好象是吧),并返回 IRP CANCEL,不过,你可以查看 WWW。OSR。COM 中的 INSIDE NT 中 1997, 1998 年的电子版文章,上面祥述了IRP CANCEL 的详细方法,我想你能找到你所需的全部答案。 我以前写得文件保护程序就是该文章上的技术,很成功。 |
|
7楼#
发布于:2002-05-01 04:43
忘了说一点
注意 , FAST――IO――WRITE 取消它,(就是简单的返回FALSE) 切记:2K 中的文件驱动必须有 FAST――IO 系列的28个函数,你可以不对该函数作些什么,但一定要声明,并记入你的DRIVER OBJECT 中, 这样WIN NT 才能找到你的FAST IO 函数,FAST IO 的设立,就是为从缓冲中读写数据,不知是不是你所谓的”延迟写“ |
|
8楼#
发布于:2002-05-01 22:05
用户被禁言,该主题自动屏蔽! |
|
9楼#
发布于:2002-05-01 22:17
Supermi的说法不完全好.
---------------- FASTIO的处理不应该RETURN FALSE. 应该把IOSTATUS 设置成CANCEL,然后RETURN TRUE. 这样才有效率. RETURN FALSE 不过是让系统去生成新的IRP_MJ_WRITE而已. 代价太大. 而且一些程序使用FASTIOWRITEMDL(MS的SERVICE),一般的测试很难遇到,别忘了. --------------------- 2。想保护文件,光象LU0说的那样也不对,那样只能处理驱动加载后的文件写 不太同意. 除非你处理读/写的解/加密,在DIRVER 加载之前也想按照自己的意图处理文件读写,恐怕没有办法.(除非你实现自己的文件系统) |
|
10楼#
发布于:2002-05-03 20:21
我感觉没有什么方法是有效的。除了DOS状态之外,即使在Windows启动的条件下,你也可以通过ren命令将文件重新命名,之后就随你操作了。
从前我在处理某些系统文件无法改写时就用这个方法。 |
|
|
11楼#
发布于:2002-05-04 17:16
NT/2K/XP确实如此. 把文件改为只读也能RENAME. 如果想禁止RENAME,按LU0的方法做没错.
只不过不要简单的理解为,对于文件打开, IRP_MJ_CREATE时将写权去除.对与DIR OPEN时的IRP_MJ_CREATE也是一样. 嘻嘻,不过, 如果你允许追加文件, 就麻烦了, 得自己处理IRP_MJ_DIRECTORY_CONTROL 和必要的FASTIO吧. |
|