dinosaur
驱动牛犊
驱动牛犊
  • 注册日期2006-03-21
  • 最后登录2010-09-19
  • 粉丝0
  • 关注0
  • 积分164分
  • 威望57点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:2618回复:3

关于驱动里长路径名和短路径名的问题

楼主#
更多 发布于:2007-11-13 17:17
各位老大:
    这是小弟第一次发帖,多多帮助。谢了先。
    小弟做sfilter的时候,按照文件名来保护文件,根据文件的路径来进行的判断。但是,遇到一个问题,文件名短于8的都没问题,但是,一旦超过了8字节,有些软件就会使用短文件名来进行访问,于是乎便相当于绕过了我的过滤。也就是8.3 shortname。因此,小弟想在驱动里将短文件名翻译成长文件名,然后再与自己的策略进行比较。难就难在了如何去转换!
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
沙发#
发布于:2007-11-14 13:52
ZwQueryDirectoryFile所接受的句柄是文件夹对象的句柄,而不是文件的句柄。
比如一个文件形如:c:\TT~1.doc
那么你首先要打开c:\,然后ZwQueryDirectoryFile
人总在矛盾中徘徊。。。
dinosaur
驱动牛犊
驱动牛犊
  • 注册日期2006-03-21
  • 最后登录2010-09-19
  • 粉丝0
  • 关注0
  • 积分164分
  • 威望57点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-11-13 22:30
devia大侠,首先感谢你的帮助。我用的是sfilter框架,我也考虑过用FileBothDirectoryInformation来获取。我是这样来做的。
我在sfCreate函数里来对路径进行判断,如果符合我定义的策略,我就返回“拒绝访问”。我使用了ShadowDevice来避免了重入问题,在收到来自上层的IRP的时候,想办法去打开本次要打开的文件,取得句柄,再使用ZwQueryDirectoryFile函数来取得FileBothDirectoryInformation。但是,呵呵,不怕大家笑话,我对这个函数的用法不是很了解,总是返回失败。句柄是确定正确了的。
最开始的时候,我是使用ZwQueryInformationFile函数来获取 FILE_NAME_INFORMATION,这里是成功了的,但是,上层使用长路径名访问文件,我取得的就是长路径名;相对的,上层使用短文件名访问文件,我取得的就是短文件名了。ZwQueryDirectoryFile还没用成功。能介绍一下这个函数的用法吗?我使用ZwQueryDirectoryFile函数去获取FileBothDirectoryInformation这种方法可行吗?如果不可行的话,能不吝给点关键代码么?
急切地等待各位大侠的回复。
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
地板#
发布于:2007-11-13 22:10
1.如果你用的sfilter框架,那就直接发IRP_MJ_DIRECTORY_CONTROL-IRP_MN_QUERY_DIRECTORY(FileBothDirectoryInformation)查询即可;
2。如果你用的minifilter框架,那就简单得多,FltGetFileNameInformation(FLT_FILE_NAME_NORMALIZED)即可;
人总在矛盾中徘徊。。。
游客

返回顶部