首页
社区
课程
招聘
[原创] 续上篇,Win 7 64 位下遍历对象目录方法探究。
发表于: 2018-4-2 10:55 4568

[原创] 续上篇,Win 7 64 位下遍历对象目录方法探究。

2018-4-2 10:55
4568

1.原因,解决因设备被占用是IoGetDeviceObjectPointer 获取不到设备指针的问题。

2.本文为大白兔一手手打,如果有和大佬侵权的部分,请留言指正,即刻修改,有严重影响则即刻删除。您可以共享此文,请注明出处爱上看雪的只为共享的大白兔声明敬上。
3.思路来源和上文相似,一个套路,写这篇意为给此系列一个完整版方便您的资料需求。
4.读此文之前您需要一个Win7 64位版本的操作系统,下面开启我的探寻之旅:
kd> !object \
Object: fffff8a000004640(64位操作系统下对象地址是8字节的)  Type: (fffffa8018d41b50  对象的类型对象地址) Directory(对象的类型名称)
    ObjectHeader: fffff8a000004610 (new version,看来新版本的意思是XP和Win 7的区别呢  )
    HandleCount: 0  PointerCount: 41
    Directory Object: 00000000(上一级的目录对象)  Name: \
kd> !object \
Object: fffff8a000004640(64位操作系统下对象地址是8字节的)  Type: (fffffa8018d41b50  对象的类型对象地址) Directory(对象的类型名称)
    ObjectHeader: fffff8a000004610 (new version,看来新版本的意思是XP和Win 7的区别呢  )
    HandleCount: 0  PointerCount: 41
    Directory Object: 00000000(上一级的目录对象)  Name: \

 
不明白,再来一次。


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

最后于 2018-4-4 10:19 被wo爱吃大白兔编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (11)
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
明天此帖上最后研究成果
2018-4-2 18:36
0
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
此贴版本为最后版本,兼容XP  ,  Win7  32  ,Win7  64  ,如有问题请留言。
2018-4-3 10:56
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
4
提一点不足:
EnumDirectoryInWin7_32,EnumDirectoryInWin7_64,为啥要拆成两个函数?枚举用的结构在32和64位下都是通用的
2018-4-4 09:23
0
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
hzqst 提一点不足: EnumDirectoryInWin7_32,EnumDirectoryInWin7_64,为啥要拆成两个函数?枚举用的结构在32和64位下都是通用的
是的,确实是通用的,所以前面32位版本可以编译直接运行成功,但出于演示的目的,我特意指出了32位和64位ULONG  长度的不统一部分,这样可能来的更直观,代码上确实会冗杂,如果没有使用合适的内存对齐策略,我想还是不能通用的,所以为了直观,共享,我特意对3大系统板块都做了分析,然后定义出来。
2018-4-4 10:14
0
雪    币: 12848
活跃值: (9147)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
wo爱吃大白兔 是的,确实是通用的,所以前面32位版本可以编译直接运行成功,但出于演示的目的,我特意指出了32位和64位ULONG 长度的不统一部分,这样可能来的更直观,代码上确实会冗杂,如果没有使用合适的内存对齐策 ...
32、64不同的长度可以用ULONG_PTR或者PVOID,在32下是4字节、64下是8字节,定义一个结构就可以通吃所有系统的。而且实际上微软也是用ULONG_PTR/PVOID的。
ps::再提一下,遍历Directory的时候没加锁,虽然无伤大雅一般情况下不会出什么问题。
最后于 2018-4-4 10:20 被hzqst编辑 ,原因:
2018-4-4 10:20
0
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
wo爱吃大白兔 是的,确实是通用的,所以前面32位版本可以编译直接运行成功,但出于演示的目的,我特意指出了32位和64位ULONG 长度的不统一部分,这样可能来的更直观,代码上确实会冗杂,如果没有使用合适的内存对齐策 ...
感谢您的批评,很乐意接受您的指正,您的观点我很认同。
2018-4-4 10:25
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
8
感谢楼主分享自己的学习经历和成果!
2018-4-4 10:29
0
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
hzqst wo爱吃大白兔 是的,确实是通用的,所以前面32位版本可以编译直接运行成功,但出于演示的目的,我特意指出了32位和64位ULONG 长度的不统一部分,这样可能 ...
嗯嗯,您说的ULONG_PTR方式用于编写自定义结构很有效果,但是针对本次的演示,我想请同仁注意,此次64位下逆向出来的结构中含有整型大多都是4字节的,只有头对象那一结构中有两个是8字节的,这些细节就产生一个做法:要做32位和64位结构兼容时,除了对象头结构那两个PointerCount  和HandleCount应该使用ULONG_PTR方式兼容,其他的整型数据都应该使用ULONG来做或者ULONG32。哈哈,您提倡加锁的观点非常好,这个部分应该要加上,补足代码的缺点呢。
最后于 2018-4-4 10:42 被wo爱吃大白兔编辑 ,原因:
2018-4-4 10:34
0
雪    币: 687
活跃值: (97)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
KevinsBobo 感谢楼主分享自己的学习经历和成果![em_20]
哈哈,谢谢版主。
2018-4-4 10:42
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
11
wo爱吃大白兔 哈哈,谢谢版主。
是在感谢你分享呢。若代码有更改,及时更新下哈
最后于 2018-4-4 10:51 被KevinsBobo编辑 ,原因:
2018-4-4 10:50
0
雪    币: 576
活跃值: (2035)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
mark了
2018-4-5 14:24
0
游客
登录 | 注册 方可回帖
返回
//