阅读:2008回复:13
请教高人,如何禁止修改文件的后缀?
多谢!!!
|
|
沙发#
发布于:2007-06-06 10:05
处理文件改名操作 - IRP_MJ_SET_INFORMATION - FileRenameInformation
|
|
|
板凳#
发布于:2007-06-06 10:27
引用第1楼devia于2007-06-06 10:05发表的 : 修改文件名的请求是在IRP_MJ_SET_INFORMATION中进行处理的,可是这样只是知道目前有修改文件名的操作发生,并不能判断是否修改了文件的后缀,我只是想禁止修改文件的后缀,文件名还是允许修改的,这样怎么处理呢? 谢谢! |
|
地板#
发布于:2007-06-06 10:41
那么有如下几中情况:
1. 文件名变、后缀名不变; 2. 文件名不变、后缀名变; 3. 文件名变、后缀名也变; 也即:你从改名操作中剥离出2、3两种情况即可! |
|
|
地下室#
发布于:2007-06-06 10:51
我现在比较疑惑的是当SET_INFORMATION捕捉到IRP请求的时候,只是表示正在发生修改文件名的操作,此时所能做的只有获取当前要修改文件名的文件路径,然后禁止修改文件名或允许修改文件名,那么我怎么知道到底是修改了文件名还是修改了后缀?
|
|
5楼#
发布于:2007-06-06 11:45
说的我都懒得说了:跟踪、跟踪、还是跟踪。。。
|
|
|
6楼#
发布于:2007-06-20 17:43
devia大侠,我在setinformation处理函数中获取了文件名,但是该文件名只是要修改的文件名,并不是修改后的文件名,此时如何进行跟踪?谢谢!!!
|
|
7楼#
发布于:2007-06-20 17:47
最好看看ddk中osr文档里关于rename那篇文章.
|
|
驱动小牛
![]() |
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是比较复杂的,不过对于你只管后缀名,其实又没那么复杂了. |
|
9楼#
发布于:2007-06-21 11:16
咦?我怎么记得是在完成函数的时候就可以拿到重命名后的文件名了,这时候判断不就行了
![]() |
|
10楼#
发布于:2007-06-21 16:14
引用第9楼xx_qiang于2007-06-21 11:16发表的 : 你好!你的意思是指在SfSetInformation的完成函数中就能得到重命名后的文件名吗? 我回去试试! 谢谢先!!! |
|
11楼#
发布于:2007-06-27 18:17
xx_qiang 你好!
我试过了,在完成函数里获得的文件名还是未改名之前的文件名,能说说你是怎么在完成函数里获取修改后的文件名的吗? 谢谢!!! |
|
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拼处改名后文件全路径名
|
|
13楼#
发布于:2007-06-28 17:59
多谢qiangguo64,回去试试!!!
|
|