关于内核对象?winobj,该怎么处理

关于内核对象?winobj
小生想知道内核对象都有什么样的区别,如使用Winobj看到的:
Arcname,   basenamedobjects,   callback,   device     这些里面的内核对象都有什么区别啊??要全面的,比较详细的!语言不限~~

------解决方案--------------------
都用的一个共用的OBJ_HEAD结构,树形存放,只是类型不一样。长度也不一样。
------解决方案--------------------
Inside WINDOWS NT Object Manager--1--(好文章,如果懂俄文就好了)

目录
==========

Inside WINDOWS NT Object Manager

00. "对象化的 " Windows NT
01.Windows NT对象管理器
02.对象类型
03.Object Directory 与 SymbolicLink
04.对象的创建与对象的结构
05.Object Type 结构体
06.Дальнейшая жизнь объекта - простейший случай
07.句柄数据库
08.对象的安全性
09.命名对象
0a.对象的消亡
0b.其它管理器函数
0c.结语

附录

13.从用户模式下获取对象信息
14.某些与对象管理相关的系统服务


00. "对象化的 " Windows NT
=========================

如果您熟悉Windows NT体系结构,当然会知道在这个系统中资源都是以对象的形式存在的。这样集中了对资源的管理。实际上

,所有的Windows NT子系统无论如何都要使用资源,也就是说都要经过对象管理器。对象管理器是Windows NT的子系统,它对

对象提供支持。对对象的使用贯穿了整个操作系统,真正的“对象化”的NT对应用程序隐藏了Win32子系统,甚至于部分的隐藏

了系统调用接口。

通常,当提到NT的体系结构时,都会说到各种管理器(对象管理器、内存管理器等等)。所有这些管理器都是Windows NT内核

(ntoskrnl.exe)的一部分。NT的内核主要使用C语言编写的,每一个管理器本身都是一组函数,这些函数都被封装在相应的模

块中。并不是所有的都定义了接口。管理器之间借助于函数调用相互协作(在内核内部)。一部分函数从内核中导出的并公开

了使用方法以在内核模式下使用。

对象管理器是一组形如ObXXXX的函数。实际上并不是所有的函数都是从内核中导出的。一般说来,对象管理器主要在内核中实

现。例如,许多系统调用(NtCreateProcess、NtCreateEvent...)的处理都与这样或是那样的对象相联系。但是服务隐藏了对

象管理器,不让我们的程序知道。甚至于驱动程序的设计人员未必需要大量直接的与对象管理器打交道。尽管如此,了解内核

是如何实际工作的无疑非常重要,更为重要的是对象管理器还与安全管理器密切相关。理解了对象管理器就揭开了NT中许多起

初并不明显,但潜在具有的可能性……


01.Windows NT对象管理器
================================

对象管理器是NT内核中许多形如ObXXX的函数。某些函数并未导出并只在内核内部由子系统使用。对于在内核之外的使用,主要

是通过未公开的函数。

ObAssignSecurity, ObCheckCreateObjectAccess , ObCheckObjectAccess,
ObCreateObject, ObDereferenceObject, ObFindHandleForObject,
ObGetObjectPointerCount, ObGetObjectSecurity, ObInsertObject,
ObMakeTemporaryObject, ObOpenObjectByName, ObOpenObjectByPointer,
ObQueryNameString, ObQueryObjectAuditingByHandle,
ObReferenceObjectByHandle, ObReferenceObjectByName,
ObReferenceObjectByPointer, ObReleaseObjectSecurity,
ObSetSecurityDescriptorInfo, ObfDereferenceObject, ObfReferenceObject

为了描述对象管理器,我们先来看一下什么是对象。


02.对象类型
================

对象管理器本身就工作在某些对象之上。其中之一就是object type。object type用于描述所有对象的共同属性。object type

由函数ObCreateObjectType(...)在内核初始化子系统的时候创建(也就是说是在系统初始化的时候)。我们所感兴趣的并不是

ObCreateObjectType(...)函数,因为其并未由内核导出。但是,在object type中的信息是非常重要的。关于这些我们少后再

说。

大概的讲,任何对象都可以分为两个部分:一部分包含管理上必需的信息(我们称之为首部),另一部分填充并确定创建该对

象的子系统的必需信息(这是对象的 body)。对象管理器对首部进行操作,而实际上并不对对象的内容感兴趣,还有一些对象

是对象管理器本身使用的。object type正如其名字所示的那样,定义了对象的类型。每一个对象都有对其object type的引用

,对象管理器也会非常频繁的使用对象的body。object type结构体的一个域是类型的名字。在NT下有以下各类型:

Type, Directory, SymbolicLink, Event, EventPair, Mutant, Semaphore,
Windows, Desktop, Timer, File, IoCompletion, Adapter, Controller, Device,
Driver, Key, Port, Section, Process, Thread, Token, Profile

Type类型的object type不足一惧。要知道扼要的讲object type是用于管理器的对象,其和所有其它的对象是一样的,也有自

己的Type类型(它自己的Type类型对象)。如果好好的想一下的话,这样做似乎也并不奇怪。下面,在Type这个话题下,主要

来讲几个与object type相关的名词。


03.Object Directory与SymbolicLink
===================================

所有列举出的类型都是由不同的子系统创建的。我们现在讨论Directory和SymbolicLink类型,因为在对象管理器本身的工作中

要用到这些类型的对象(这些类型是其在其自己初始化时创建的)。

NT的对象可以有名字,还可以组织成树型的结构。Directory对象正是用来组织这种结构的。它的用途非常简单——保存对其它

对象的引用,例如,另外一个Directory对象。Directory的body的结构非常简单: