阅读:2574回复:13
请教VCMFC和coolice二位大侠,Filter如何获得文件路径
请教VCMFC和coolice二位大侠
如何在Filter的IRP_MJ_READ和IRP_MJ_WRITE操作中获取当前操作的文件全路径? |
|
|
沙发#
发布于:2003-01-20 12:02
你可以构造一个IRP,MajorFunction 为 IRP_MJ_QUERY_INFORMATION,向下层查询。可参考FILEMON的QueryFile函数。
|
|
|
板凳#
发布于:2003-01-20 12:42
有位前辈说这样会溜掉一些IRP,而且,我也在用fiemon,发现一些问题。
|
|
|
地板#
发布于:2003-01-20 14:55
是在open by id是好像是没有文件名,不过filemon的方法在大部分的情况下是可用的.你发现什么问题?
|
|
地下室#
发布于:2003-01-20 16:46
用户被禁言,该主题自动屏蔽! |
|
5楼#
发布于:2003-01-21 12:23
是在open by id是好像是没有文件名,不过filemon的方法在大部分的情况下是可用的.你发现什么问题? ---- 读文件时,发现文件名不是原来的文件名,在驱动器后跟了一个$符号,如D:\\$DMT。 |
|
|
6楼#
发布于:2003-02-28 14:37
用ObQueryNameString应该可以取得正确的文件名吧?
|
|
7楼#
发布于:2003-03-07 17:06
I/O Manager 发送 IRP_MJ_CREATE 是,IO_STACK_LOCATION中有FileObject,它的FileName就是全路径名。此后文件系统创建FCB,并返回成功信息给 I/O Manager。以后的读写操作就由FCB来提供文件的信息了!
Filter 中截获 IRP_MJ_CREATE ,我想是可以发现你想要的文件名的。 |
|
8楼#
发布于:2003-03-24 10:33
I/O Manager 发送 IRP_MJ_CREATE 是,IO_STACK_LOCATION中有FileObject,它的FileName就是全路径名。此后文件系统创建FCB,并返回成功信息给 I/O Manager。以后的读写操作就由FCB来提供文件的信息了! 请问如何得到FCB,FCB对应FAT、NTFS等不同的文件系统,应该结构不一样吧?还是在IRP MJ CREATE中保存文件名,再在READ、WRITE时再去取文件名? |
|
9楼#
发布于:2003-03-24 16:16
在IRP_MJ_CREATE中,文件名已经被解析成逻辑地址,以后的操作(Read Write)就用这些逻辑地址,而不需要在出现路径了!
看看FileObject的定义,你就会明白,在他的 FSContext 中一般就是 FCB 。 |
|
10楼#
发布于:2003-03-27 16:35
在IRP_MJ_CREATE中,文件名已经被解析成逻辑地址,以后的操作(Read Write)就用这些逻辑地址,而不需要在出现路径了! 谢谢phenix_xiaomei,我明白FileObject中的FSContext 就是FCB,但是FCB的结构是由下面的FS定义的,也就是说不同的FS可能FCB的结构都不一样,那我们怎么去定义这个结构?根据不同FS定义不同的结构吗? 我现在是在CREATE中保存文件名和FILEOBJECT的指针,然后再在READ、WRITE的时候根据FILEOBJECT去取出文件名。 |
|
11楼#
发布于:2003-03-28 10:19
楼上的,你这种做法好像和filemon没有多大区别啊。
|
|
|
12楼#
发布于:2003-03-28 10:30
楼上的,你这种做法好像和filemon没有多大区别啊。 FILEMON是自己构造IRP向下传,来取得文件名,和我的方法不一样 :D |
|
13楼#
发布于:2003-03-28 14:45
哪位遇到自已构先IRP取得文件名取不到?????
至少我还没有遇到过。 除了irp_mj_create之外,任何IRP的fileObject->fileobject->filename不可用。 有的说一声呀!!!!。 |
|