xjaguar
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2003-01-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1479回复:5

NT对象管理器

楼主#
更多 发布于:2003-01-17 00:47
这个有点面向对象的设计让我很感兴趣。
不过在我所见到的文档里,对NT对象管理器接口说明的很少,好像不超过7个。有些很基本的动作也没办法做,有谁研究过或有兴趣的,能不交流一下?

最新喜欢:

flyfoxflyfox
JungleBoy
驱动牛犊
驱动牛犊
  • 注册日期2002-10-17
  • 最后登录2009-09-07
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-01-17 10:47
那个东西好像只是用于浏览对象名字的
没有什么别的功能了
I'm upgrading……
xjaguar
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2003-01-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-01-17 14:54
不止这一点,至少还包括如何产生,删除。
单独这两个就很有用了,比如跟踪某类对象的产生...
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-01-20 23:57
NT下对各种资源对象化(比如:port,thread,event..),而对象管理器就提供了全局的对象(资源)定位服务,这是他的主要功能,但是对象管理器还有其他几个很重要得任务:

1。基本对象的安全访问验证
当你通过createfile打开设备时(最终会调用ObReferenceObjectByName),对象管理器在里面要完成名字解析,对象安全验证(比如说当你打开串口设备对象时,对象头中包含的安全描述体就用来安全验证)。不过他只完成了基本的验证,如果设备包含复杂的安全验证特性,就需要设备自己完成,比如说文件系统,注册表等等

2。重定向(很重要啊)
这个功能主要是在名字解析过程当中完成,符号连接对象就是在自己的类型对象的parse里返回NT_REPARSE实现的。此外,我们用UNC时,如\\\\jack\\doc\\a.txt,进入内核后会转换为\\??\\UNC\\jack\\doc\\a.txt,呵呵,别忘了UNC也是符号连接,她最终指向smb设备对象,该设备对象利用NT_REPARSE去指引对象管理器使用正确的网络文件系统,这里内容太多了,不说了

3。类型信息统计
对象管理器内部包含了type对象,他包含了所有类型的对象的公共抽象信息,在\\TypeObject目录下,例如device对象的创建数目,对象类型名。此外还有一个极为重要的函数表包含在其中,刚才所提的parse函数指针就在里面(在名字解析时,对象管理器会调用),当然还包含open,close,query等操作在里面,我曾经写过一个内核驱动,它把设备对象的类型对象的parse函数指针替换掉,haha,所有的解析过程你都可以跟踪了

4。未命名的对象他不管
xjaguar
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2003-01-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-01-21 00:15
谢谢你的回复,几乎是我想要的。
除此之外我在想能不能在内核中利用现有类型做出新的类型(ok in theory)。
最简单的例子,thread => pthread,在内核中实现类似POSIX的线程,它仍然有原有线程的大多数性质,但是在产生和创建时完成一些附加操作,就象是C++程序里的继承。I like this idea!

在API层上,没有见到解决注册新对象类型的接口,你有这方面的资料吗?

BTW:
可以的话能不能把你的替换程序发给我做参考?That will be realy helpful!
icube
驱动牛犊
驱动牛犊
  • 注册日期2002-04-11
  • 最后登录2004-12-19
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-01-21 12:57
创建新的类型的对象之前你必须创建该类型的类型对象,放在ObjectTypes目录下,可是当你调用ObCreateObject时,你并不知道Type类型对象的地址,ntoskrnl的符号表中好像没有export这个地址,当然你可以设法得到\\ObjectTypes\\Type对象的地址,这样也可以,不过我还没有试过
游客

返回顶部