API中很多使用命名空间(namespace),
可是内核对象大都是用对象目录(DirectoryObject),可是两者之间的具体的区别是什么呢?

解决方案 »

  1.   

    说的不是很清楚:以
    HANDLE WINAPI CreateJobObject(
      __in_opt  LPSECURITY_ATTRIBUTES lpJobAttributes,
      __in_opt  LPCTSTR lpName
    );
    为例子说明,msdn上说:
    The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session name space. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces.
    可是在底层,CreateJobObject又调用了ZwCreateJobObject( 
    OUT PHANDLE JobHandle, 
    IN ACCESS_MASK DesiredAccess, 
    IN POBJECT_ATTRIBUTES ObjectAttributes 
    ) 我想知道
    ObjectAttributes的目录信息是否和Namespaces有关系呢?
      

  2.   

    ObjectAttributes要取决于CreateJobObject的值,这是针对于子线程而言的,跟namespace没有关系吧
      

  3.   

    上面说错了,我想说的是要取决于CreateJobObject的参数lpJobAttributes的值,
    lpName可以决定你是把这个内核对象创建在哪一个命名空间,如果有Global\前缀的话,就创建在Gloabal namespace里面,否则就创建在应用程序自己独有的session namespace里面
      

  4.   

    ObjectAttributes的Name/RootDirectory可以指定把对象创建到哪个命名空间里面。这儿其实称为名称空间更为恰当,因为是用来存放名称的。目录对象是一种对象,里面可以储存子对象。