AppIDFlags

一组用于控制 COM 服务器激活行为的标志。

注册表项

HKEY_LOCAL_MACHINE\SOFTWARE\Classes\AppID
   {AppID_GUID}
      AppIDFlags = flags

注解

这是一个 REG_DWORD 值。

标志值 返回的常量
0x1 APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP
0x2 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND
0x4 APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY

 

APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP 说明

如果 APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP 标志在 AppIDFlags 中被清除,或者 AppIDFlags 不存在,则终端服务器会话中的客户端在发出 Interactive User COM 服务器的激活请求时,将绑定或启动并绑定激活请求中会话的“winsta0”窗口工作站的“默认”桌面中的 COM 服务器。 例如,如果客户端正在运行会话 3 的“winsta0/desktop1”,那么即使会话 3 的“winsta0/desktop1”中已经运行了 COM 服务器的实例,会话 3 的激活请求也会绑定或启动并绑定到会话 3 的“winsta0/default”中的 COM 服务器。

如果在 AppIDFlags 值中设置了 APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP 标志,COM 将绑定到或启动并绑定到客户端桌面上运行的服务器进程和激活请求中的会话。 例如,如果客户端正在运行会话 3 中的“winsta0/desktop1”,那么即使会话 3 中的“winsta0\default”中已经运行了 COM 服务器的实例,会话 3 的激活请求也会绑定或启动并绑定到会话 3 中的“winsta0/desktop1”中的 COM 服务器。

客户端在发出激活请求时,可以使用 session moniker 指定与客户端会话不同的会话。

APPIDREGFLAGS_ACTIVATE_IUSERVER_INDESKTOP 标志仅适用于配置为 RunAs“Interactive User”的 COM 服务器。

APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 说明

如果在 AppIDFlags 中设置了 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志,则在启动配置为 RunAs“Activator”的 COM 服务器时,进程安全描述符将允许 PROCESS_ALL_ACCESS 进程标记的 LogonID SID。 此外,安全描述符的所有者将被设置为进程令牌的 LogonID SID。

如果在 AppIDFlags 中设置了 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志,则在启动配置为 RunAs“This User”的 COM 服务器时,进程安全描述符将在进程标记的 LogonID SID 中允许 PROCESS_ALL_ACCESS。 此外,安全描述符的所有者将被设置为进程令牌的 LogonID SID。 此外,COM 服务控制管理器 (SCM) 会对 COM 服务器进程的令牌进行如下修改:

  • 它会在令牌中添加一个 APPID SID。 它会在令牌默认全权访问控制列表 (DACL) 中授予 APPID SID 全部访问权限。 在 Windows Vista 及更高版本的 Windows 中,它会在令牌默认 DACL 中授予 OwnerRights SID READ_CONTROL 权限。 在 Windows Vista 的预版本中,它会将令牌所有者设置为 APPID SID。

在使用 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志时,必须考虑以下安全注意事项:

  • APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志用于在某个内置服务安全上下文(NetworkService 或 LocalService 帐户)下启动的 COM 服务器设置。 如果服务器模拟有权限的客户端,而 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志未被设置,则在具有相同安全上下文的其他进程中运行的恶意代码可通过劫持 COM 服务器进程的有权限客户端的模拟令牌来提升权限。
  • 在设置 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志时,在 RunAs“Activator”COM 服务器的情况下,COM 会强化进程对象的安全描述符。 对于此类服务器,COM 客户端应强化其用于 COM 激活的令牌。
  • 在设置 APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志时,COM 会在运行为RunAs“This User”COM 服务器的情况下强化进程对象的安全描述符。 由于 COM SCM 是创建令牌的实体,因此它还会强化 COM 服务器的进程令牌。

在 Windows XP、Windows Server 2003、Windows Vista 和 Windows Server 2008 中,APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志仅在应用 MSRC8322 补丁(安全公告 MS09-012)时才受支持。 Windows 7 及更高版本的 Windows 原生支持该功能。

APPIDREGFLAGS_SECURE_SERVER_PROCESS_SD_AND_BIND 标志仅适用于配置为 RunAs“Activator”或“This User”的 COM 服务器。 它不适用于作为 NT 服务的 COM 服务器。

APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 说明

如果在 AppIDFlags 中设置了 APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 标志,COM SCM 将使用 RPC_C_IMP_LEVEL_IDENTIFY 的模拟级别向 COM 服务器进程发出对象激活请求。

如果在 AppIDFlags 中未设置 APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 标志,COM SCM 将使用 RPC_C_IMP_LEVEL_IMPERSONATE 的模拟级别向 COM 服务器进程发出对象激活请求。

在使用 APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 标志时,必须考虑以下安全注意事项:

  • APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 标志用于 COM 服务器,这些服务器在对象激活请求中不代表客户端执行工作。 对于此类服务器,让 COM SCM 以 RPC_C_IMP_LEVEL_IDENTIFY 的方式发出对象激活请求,可以最大限度地减少过程中出现 SE_IMPERSONATE_NAME 级别特权令牌的机会。

Windows 7 和更高版本的 Windows 中支持 APPIDREGFLAGS_ISSUE_ACTIVATION_RPC_AT_IDENTIFY 标志。

台式机

模拟级别

交互用户

会话名字对象

窗口工作站