关闭激活安全性

通常,激活使用默认安全设置。 但是,可以通过指定 COAUTHINFO 结构来控制激活安全性,该结构是传递给激活函数的 COSERVERINFO 结构的成员。 如果客户端在COAUTHINFO 结构中指定了 RPC_C_AUTHN_LEVEL_NONE 的身份验证级别,则不会尝试身份验证。 否则,将尝试安全激活;如果身份验证失败,则激活失败。

如果客户端未指定显式 COAUTHINFO 结构,而是将指针设置为 NULL,COM 将尝试对客户端进行身份验证。 如果无法对客户端进行身份验证,COM 检查启动权限安全描述符,以查看是否存在 NULL DACL 还是允许访问每个人的 ACL。 如果此检查成功,则会启动服务器。 因此,即使客户端未指定 COAUTHINFO 结构,在服务器允许时可能会进行不安全的激活。

注意

若要允许未经身份验证的网络用户运行 COM+ 应用程序,应用程序角色必须包含匿名用户。 从 Windows Server 2003 开始,默认情况下,匿名用户不包括在 Everyone 组中。

 

为什么客户端想要显式关闭激活安全性,即使服务器允许激活,最终也会进行不安全激活? 因为当客户端不需要或需要安全检查时,显式关闭激活安全性会提高性能。

必须执行以下操作才能显式关闭激活安全性:

  • 客户端必须在 COAUTHINFO 结构中指定 RPC_C_AUTHN_LEVEL_NONE 的身份验证级别,该级别是提供给激活函数的 COSERVERINFO 结构的成员。
  • 客户端必须在 COAUTHINFO 结构中指定 RPC_C_IMP_LEVEL_IMPERSONATE 的模拟级别,该级别是提供给激活函数的 COSERVERINFO 结构的成员。 如果未传递此值,会得到 RPC_S_SERVER_UNAVAILABLE。
  • 服务器必须为默认启动权限指定所有人。 执行此任务的建议方法是使用 Dcomcnfg.exe,如下所示:
    1. 运行 Dcomcnfg.exe。
    2. 应用程序页上,选择表示服务器的应用程序。 单击属性按钮(或双击所选应用程序)。
    3. 安全属性页上,单击使用自定义启动权限按钮。
    4. 单击启动权限区域中的编辑按钮。
    5. 注册表值权限对话框中,单击添加按钮。
    6. 在列表框中选择所有人条目。
    7. 访问类型列表框中,选择允许启动
    8. 单击“确定”按钮。

注意

在 Windows Server 2003 中,COM+ 系统应用程序的身份验证功能包括值 EOAC_DISABLE_AAA。 在启动系统应用程序时,在 CoInitializeSecurity 调用中使用此值(禁用激活即激活器 (AAA) 激活)。 将身份验证功能设置为 EOAC_DISABLE_AAA 允许在特权帐户(如 LocalSystem)下运行的应用程序,以帮助防止其标识用于启动不受信任的组件。

 

关闭调用安全性