Velece 发表于 2021-4-20 23:58

Sfilter中获取重命名后的文件名

请问一下,Sfilter中处理IRP_MJ_SET_INFORMATION回调时获取重命名后的文件名,除了使用Irp->AssociatedIrp.SystemBuffer,还有别的方法吗?
Irp->AssociatedIrp.SystemBuffer,转换为PFILE_RENAME_INFORMATION 结构,能获取重命名后的文件名
IrpSp->Parameters.SetFile.FileObject,测试发现能拿到重命名文件上一层的文件夹名称
IrpSp->FileObject,测试发现在该IRP处理完成后能拿到重命名后的文件名,但是我是需要在重命名完成之前拿到,不知道有没方法利用这个文件句柄来获取。

flac 发表于 2021-4-21 09:27

按照微软的说法,除了第二种情况可以直接拿到完整路径外,其余两种都需要自己拼接

Velece 发表于 2021-4-21 10:07

flac 发表于 2021-4-21 09:27
按照微软的说法,除了第二种情况可以直接拿到完整路径外,其余两种都需要自己拼接

IRP未完成之前我尝试去拿路径,只能拿到路径拿不到文件名,irp完成后去拿才可以,不知道是什么原因。irp未完成有办法能拿到这个重命名后的名字吗?

flac 发表于 2021-4-21 10:50

Velece 发表于 2021-4-21 10:07
IRP未完成之前我尝试去拿路径,只能拿到路径拿不到文件名,irp完成后去拿才可以,不知道是什么原因。irp ...

通过IrpSp->Parameters.SetFile.FileObject拿到目录的名字,通过PFILE_RENAME_INFORMATION拿到重命名后的文件名,拼接一下就可以了

Velece 发表于 2021-4-21 11:02

flac 发表于 2021-4-21 10:50
通过IrpSp->Parameters.SetFile.FileObject拿到目录的名字,通过PFILE_RENAME_INFORMATION拿到重命名后的 ...

这样确实可以,其实PFILE_RENAME_INFORMATION这个里面保存了重命名的文件全路径和名字。不使用这个结构体,能拿到重命名后的文件名吗? 通过文件对象能否查到重命名后的文件名?

flac 发表于 2021-4-21 11:57

Velece 发表于 2021-4-21 11:02
这样确实可以,其实PFILE_RENAME_INFORMATION这个里面保存了重命名的文件全路径和名字。不使用这个结构体 ...

我知道的只能这样,别的大佬也许有好的解决方案
页: [1]
查看完整版本: Sfilter中获取重命名后的文件名