阅读:2617回复:3
关于驱动里长路径名和短路径名的问题
各位老大:
这是小弟第一次发帖,多多帮助。谢了先。 小弟做sfilter的时候,按照文件名来保护文件,根据文件的路径来进行的判断。但是,遇到一个问题,文件名短于8的都没问题,但是,一旦超过了8字节,有些软件就会使用短文件名来进行访问,于是乎便相当于绕过了我的过滤。也就是8.3 shortname。因此,小弟想在驱动里将短文件名翻译成长文件名,然后再与自己的策略进行比较。难就难在了如何去转换! |
|
沙发#
发布于:2007-11-13 22:10
1.如果你用的sfilter框架,那就直接发IRP_MJ_DIRECTORY_CONTROL-IRP_MN_QUERY_DIRECTORY(FileBothDirectoryInformation)查询即可;
2。如果你用的minifilter框架,那就简单得多,FltGetFileNameInformation(FLT_FILE_NAME_NORMALIZED)即可; |
|
|
板凳#
发布于:2007-11-13 22:30
devia大侠,首先感谢你的帮助。我用的是sfilter框架,我也考虑过用FileBothDirectoryInformation来获取。我是这样来做的。
我在sfCreate函数里来对路径进行判断,如果符合我定义的策略,我就返回“拒绝访问”。我使用了ShadowDevice来避免了重入问题,在收到来自上层的IRP的时候,想办法去打开本次要打开的文件,取得句柄,再使用ZwQueryDirectoryFile函数来取得FileBothDirectoryInformation。但是,呵呵,不怕大家笑话,我对这个函数的用法不是很了解,总是返回失败。句柄是确定正确了的。 最开始的时候,我是使用ZwQueryInformationFile函数来获取 FILE_NAME_INFORMATION,这里是成功了的,但是,上层使用长路径名访问文件,我取得的就是长路径名;相对的,上层使用短文件名访问文件,我取得的就是短文件名了。ZwQueryDirectoryFile还没用成功。能介绍一下这个函数的用法吗?我使用ZwQueryDirectoryFile函数去获取FileBothDirectoryInformation这种方法可行吗?如果不可行的话,能不吝给点关键代码么? 急切地等待各位大侠的回复。 |
|
地板#
发布于:2007-11-14 13:52
ZwQueryDirectoryFile所接受的句柄是文件夹对象的句柄,而不是文件的句柄。
比如一个文件形如:c:\TT~1.doc 那么你首先要打开c:\,然后ZwQueryDirectoryFile |
|
|