内核对象命名空间(Kernel object namespace)

远程桌面服务具有后面命名内核对象的多个命名空间:事件,信号,互斥,可等待的定时器,文件映射对象,和任务对象。在客户端/服务器应用程序中服务使用一个全局的命名空间。还有,对这些对象而言,每个客户端会话都有一个独立的命名空间。比如Windows Vista。

独立客户端会话命名空间使能多个客户端互不干扰地去跑同样的应用程序。对在一个客户端会话下启动的进程而言,系统使用默认的会话命名空间。然而,这些进程通过在对象名字前加前缀“Global\”来使用全局命名空间。比如,下面的代码调用CreateEvent并在全局命名空间中创建一个名为CSAPP的事件对象。

备注:全局命名空间在WIndows Store App中无效

CreateEvent(NULL, FALSE, FALSE, "Global\\CSAPP");

在远程桌面服务环境中服务程序使用默认的全局命名空间。

session 0只用于主机服务,且没有console session,和之前的Windows版本不一样。

全局命名空间在多个客户端会话上使能进程来与服务程序通信。比如,一个客户端/服务器应用程序可能使用互斥对象来同步。服务器模型能够在全局命名空间创建互斥对象。随后一个客户端命名空间能够使用“Global”前缀来打开该互斥对象。

对于应用程序而言,全局命名空间的另外一个用法就是使用命名对象来检测是否已经有一个应用程序的实例运行在系统的所有session中。该命名对象必须在全局命名空间而不是每个命名空间中创建或打开。由于在每个命名会话命名空间创建了命名对象,所以默认支持一个更为共同的情况,就是每个会话运行应用程序一次。

除了前缀“\Global”之外,客户端进程能够使用前缀“\Local”来明确指定在它们自己的命名空间创建对象。这些关键字都是大消息敏感的。

前缀"\Session"是为系统使用保留的,不应该在内核对象的名字中使用。

通过使用远程桌面服务会话来实现快速用户切换。第一个登录用户使用session 1,下面的登录用户使用session 2,以此类推。内核对象名字必须遵循远程桌面服务概述的准则以便应用程序能够支持多个用户。

通过使用CreateFileMapping,从一个非零会话的全局命名空间中创建一个文件映射对象,这是一个特权操作,因此,一个运行在随意远程桌面会话主机服务会话中应用程序必须使能SeCreateGlobalPrivilege以便在全局命名空间中创建一个文件映射对象。权限检查限制文件映射对象的创建,且不会应用到打开一个已经存在的对象上。比如,如果一个服务或系统创建一个文件映射对象,若该文件映射对象给该用户提供了必要的访问权限,则任何运行在任何会话中的进程能够访问该文件映射对象。


参考网址










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值