首页
社区
课程
招聘
[求助] 内核中如何准确的区分文件和文件夹创建和打开或是文件是否存在
发表于: 2012-8-1 15:30 5792

[求助] 内核中如何准确的区分文件和文件夹创建和打开或是文件是否存在

2012-8-1 15:30
5792
请教 各位 大虾  内核中如何准确的区分 文件和文件夹 创建和打开 或是 文件和文件夹 是否存在

我HOOK 了 NtCreateFile 目前 唯一确定 就是 CreateDisposition==FILE_CREATE 创建

但是 CreateDisposition==FILE_OPEN_IF || CreateDisposition==FILE_OVERWRITE_IF

这2个 参数 同样也具有 创建文件的效果同时也是打开文件  无法准确的区分出来

那么 是否可以通过 ObjectAttributes->ObjectName 在内核中准确的判断 文件和文件夹是否存在

我目前可以想到的就是 NtOpenFile 但又需要 先确认打开的是 文件 还是文件夹

不知道 各位大虾 是否 有 比较 精确的简单的 办法  先感谢大虾 看帖 并且 万分感谢 下面回复的 朋友

不管是否 解决了我的问题 你的热心帮助 都将使我 努力的学习成长 谢谢各位

已解决 WRK中 写的很清楚 呵呵  好东西啊~!!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2
看MSDN~~CreateDisposition参数的描述
2012-8-1 15:36
0
雪    币: 279
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
感谢大虾 回复 看不懂 你说的话 CreateDisposition 表示了本次 操作的意图 打开或是创建 覆盖什么的

但是 这需要 结合 IoStatusBlock->Status 提取 返回 结果 但是我 已经HOOK了 中断了 后面的操作

这个结果 是没有的吧?  我还是不明白
2012-8-1 15:48
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
4
完全不知你在说什么了~~~你的目的是啥。
2012-8-1 15:54
0
雪    币: 279
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
拦截 NtCreateFile 过滤出 创建和打开 的动作 并进行 拒绝啊
2012-8-1 16:02
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
6
那你就判断CreateDisposition的值啊,

switch (CreateDisposition)
{
     case FILE_OPEN_IF:   //如果文件存在,则打开,文件不存在,则创建
             //添加你的过滤
            break;
     case FILE_OVERWRITE_IF:  //如果文件存在,则覆盖,文件不存在,则创建
            //添加你的过滤
            break;  
    .....
}
如果CreateDisposition不是你想关注的,直接返回STATUS_UNCUSSESSFUL;就可以了~

2012-8-2 10:30
0
雪    币: 279
活跃值: (60)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
已解决 WRK中 写的很清楚 呵呵  好东西啊~!!
2012-8-3 23:34
0
游客
登录 | 注册 方可回帖
返回
//