test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
阅读:2007回复:13

请教高人,如何禁止修改文件的后缀?

楼主#
更多 发布于:2007-06-06 09:36
多谢!!!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-06-06 10:05
处理文件改名操作 - IRP_MJ_SET_INFORMATION - FileRenameInformation
人总在矛盾中徘徊。。。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-06 10:27
引用第1楼devia于2007-06-06 10:05发表的  :
处理文件改名操作 - IRP_MJ_SET_INFORMATION - FileRenameInformation


修改文件名的请求是在IRP_MJ_SET_INFORMATION中进行处理的,可是这样只是知道目前有修改文件名的操作发生,并不能判断是否修改了文件的后缀,我只是想禁止修改文件的后缀,文件名还是允许修改的,这样怎么处理呢?
谢谢!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2007-06-06 10:41
那么有如下几中情况:
1. 文件名变、后缀名不变;
2. 文件名不变、后缀名变;
3. 文件名变、后缀名也变;

也即:你从改名操作中剥离出2、3两种情况即可!
人总在矛盾中徘徊。。。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-06 10:51
我现在比较疑惑的是当SET_INFORMATION捕捉到IRP请求的时候,只是表示正在发生修改文件名的操作,此时所能做的只有获取当前要修改文件名的文件路径,然后禁止修改文件名或允许修改文件名,那么我怎么知道到底是修改了文件名还是修改了后缀?
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
5楼#
发布于:2007-06-06 11:45
说的我都懒得说了:跟踪、跟踪、还是跟踪。。。
人总在矛盾中徘徊。。。
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-06-20 17:43
devia大侠,我在setinformation处理函数中获取了文件名,但是该文件名只是要修改的文件名,并不是修改后的文件名,此时如何进行跟踪?谢谢!!!
liyunch
驱动小牛
驱动小牛
  • 注册日期2001-06-28
  • 最后登录2014-09-05
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望134点
  • 贡献值0点
  • 好评度94点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-20 17:47
最好看看ddk中osr文档里关于rename那篇文章.
yandong_8212
驱动小牛
驱动小牛
  • 注册日期2006-07-28
  • 最后登录2011-02-11
  • 粉丝0
  • 关注0
  • 积分1046分
  • 威望464点
  • 贡献值1点
  • 好评度173点
  • 原创分0分
  • 专家分1分
8楼#
发布于:2007-06-20 18:46
typedef struct _FILE_RENAME_INFORMATION {
    BOOLEAN ReplaceIfExists;
    HANDLE RootDirectory;
    ULONG FileNameLength;
    WCHAR FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
比较FileName和你当前的NAME,如果后缀不一至就返回错误.还有你要明确WCHAR FileName[1];
就是你的目标文件名.详细的东西按照osr上面的来,反正Rename是比较复杂的,不过对于你只管后缀名,其实又没那么复杂了.
商务MSN:YanDong_8212@163.com
xx_qiang
驱动小牛
驱动小牛
  • 注册日期2004-07-30
  • 最后登录2017-02-27
  • 粉丝2
  • 关注1
  • 积分31分
  • 威望249点
  • 贡献值0点
  • 好评度171点
  • 原创分0分
  • 专家分0分
  • 社区居民
9楼#
发布于:2007-06-21 11:16
咦?我怎么记得是在完成函数的时候就可以拿到重命名后的文件名了,这时候判断不就行了
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-21 16:14
引用第9楼xx_qiang于2007-06-21 11:16发表的  :
咦?我怎么记得是在完成函数的时候就可以拿到重命名后的文件名了,这时候判断不就行了


你好!你的意思是指在SfSetInformation的完成函数中就能得到重命名后的文件名吗?
我回去试试!
谢谢先!!!
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-06-27 18:17
xx_qiang 你好!
我试过了,在完成函数里获得的文件名还是未改名之前的文件名,能说说你是怎么在完成函数里获取修改后的文件名的吗?
谢谢!!!
qiangguo64
驱动牛犊
驱动牛犊
  • 注册日期2005-01-12
  • 最后登录2009-08-28
  • 粉丝0
  • 关注0
  • 积分144分
  • 威望15点
  • 贡献值1点
  • 好评度14点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-06-28 14:14
在IRP_SET_INFORMATION例程中,irp对应irpstack里的fileobject对应的文件名是改名前的文件名,Irp->AssociatedIrp.SystemBuffer指向类型为PFILE_RENAME_INFORMATION的指针,FILE_RENAME_INFORMATION->FileName是改名后的文件名,当然还要考虑FILE_RENAME_INFORMATION->RootDirectory不为空的情况下,根据FILE_RENAME_INFORMATION->RootDirectory和FILE_RENAME_INFORMATION->FileName拼处改名后文件全路径名
test001
驱动小牛
驱动小牛
  • 注册日期2006-11-12
  • 最后登录2008-11-07
  • 粉丝0
  • 关注0
  • 积分990分
  • 威望170点
  • 贡献值0点
  • 好评度169点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-06-28 17:59
多谢qiangguo64,回去试试!!!
游客

返回顶部