阅读:2744回复:4
IoCreateFileSpecifyDeviceObjectHint创建的文件如何删除
设想是拷入特定盘符下的所有非目录文件通过返回STATUS_REPARSE进行重定向,这就需要过滤IRP_MJ_CREATE时判断到底是不是目录,是目录的直接下发,不是目录则修改文件名并返回STATUS_REPARSE。判断是否目录是通过IoCreateFileSpecifyDeviceObjectHint,然后新建IRP_MJ_QUERY_INFORMATION来查询该文件INFORMATION,最后判断出是否目录。判断出是目录还好,问题是判断出不是目录,现在就需要转发,但IoCreateFileSpecifyDeviceObjectHint已经创建了一个文件,且改文件提示是被占用状态,改怎么删除呢?或者有其他不需要IoCreateFileSpecifyDeviceObjectHint的方法判断目标文件是否目录吗?
|
|
沙发#
发布于:2010-05-28 16:27
好像判断IRP里面的Create结构内参数Option是否包含FILE_DIRECTORY_FILE,就是目录吧,你可以跟踪一下。应该就是这个。
|
|
板凳#
发布于:2010-05-28 16:53
irpsp->Parameters.Create.Options & FILE_DIRECTORY_FILE
只是这样,好像还不足以确定不是目录。所以才需要IoCreateFileSpecifyDeviceObjectHint,创建完成之后才能真正确定。 |
|
地板#
发布于:2010-05-28 23:56
For a new file to be created, the flag FILE_DIRECTORY_FILE is enough. For an existing file, you have to query it.
|
|
地下室#
发布于:2010-06-01 16:52
明白了,谢谢michaelgz
|
|