使用会话名字对象的会话到会话激活

会话到会话激活 (也称为跨会话激活) 允许客户端进程在指定会话上启动 (激活) 本地服务器进程。 此功能适用于配置为在交互式用户的安全上下文中运行的应用程序,也称为“RunAs 交互式用户”对象激活模式。 有关安全上下文的详细信息,请参阅 客户端的安全上下文

分布式 COM (DCOM) 通过使用系统提供的会话 名字对象按会话启用对象激活。 系统提供的其他名字对象包括 文件名字对象项名字对象、泛型 复合名字对象反名字对象指针名字对象URL 名字对象

若要能够使用会话名字对象,必须将 DCOM 应用程序设置为以交互式用户身份运行。 这可以通过使用组件服务管理工具、查看 DCOM 应用程序的“属性”,并在“标识”选项卡上选择“交互式用户”来设置。有关将 DCOM 应用程序设置为在远程桌面服务环境中以交互式用户身份运行相关的安全风险的详细信息,请参阅平台软件开发工具包 (SDK) 中的 COM 文档的“应用程序标识 (COM) ”部分。

如果选择了任何其他类型的用户来运行应用程序,则应用程序将忽略会话名字对象。 COM+ 服务器应用程序也会忽略会话名字对象。 有关选择要运行应用程序的用户类型的其他方法的详细信息,请参阅平台 SDK 中的 COM 文档。

若要创建会话名字对象,必须使用指定进程服务器的类 ID 的类名字对象编写远程桌面服务会话的会话 ID。

创建会话名字对象

  1. 使用以下语法将类名字对象的显示名称作为会话名字对象的显示名称的前缀:

    "Session:[digits]!clsid:[class id]"
    

    其中 ,数字 表示将启动服务器进程的会话的会话 ID,其中 class id 表示服务器的类 ID。 请注意,会话 ID 是基于 10 的数字。

    对于运行 Windows XP 或更高版本的计算机,使用以下语法将导致 COM 将激活发送到当前活动的物理控制台会话,无论其会话 ID 是什么:

    "Session:Console!clsid:[class id]"
    
  2. 创建会话名字对象后,可以将结果传递给 MkParseDisplayName 函数或 MkParseDisplayNameEx 函数。

可以像使用任何其他名字对象一样使用会话名字对象。

有关演示如何在指定会话上激活本地服务器进程的代码示例,请参阅 使用会话名字对象

有关对象激活、系统提供的名字对象和类名字对象的详细信息,请参阅平台 SDK 中的 COM 文档。

注意

跨会话创建的进程对环境块的大小有上限。 此限制约为 4 KB,但可能会更大或更小,具体取决于创建进程所需的其他信息 (例如新进程) 的文件名、目录和参数。