"asInvoker"和"highestAvailable"执行级别有什么区别?

nat*_*han 36 .net manifest

我一直想知道嵌入有什么区别

<requestedExecutionLevel  level="asInvoker" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
Run Code Online (Sandbox Code Playgroud)

在你的应用程序的清单中.

Ree*_*sey 35

在MSDN描述:

基本上,"asInvoker"将使用用户的默认安全设置.它被描述为"应用程序使用与父进程相同的访问令牌运行.",这意味着使用相同的安全令牌作为调用进程,通常是桌面shell(或启动此进程的进程,如果您启动另一个程序的应用程序).

使用"highestAvailable"将导致应用程序使用用户可以获得的最高priveledges运行.例如,如果他们是管理员,他们将获得UAC提示,并且应用程序将以管理员权限运行.但是,如果他们是普通用户,他们将获得正常的安全设置等.

一般情况下,除非您有特殊原因要求更多权利,否则您将需要使用"asInvoker".


Ian*_*oyd 6

“最高可用”的一个很好的例子是备份操作员组的成员。

从 Windows Vista 开始,不仅仅是“管理员”被剥夺了他们的特权并获得了一个拆分令牌。系统会查看您是否:

  • 某些团体的成员
  • 有一定的特权

因此,如果您是Backup Operators组的成员,则您的安全令牌将像为Administrators组的成员一样进行过滤。

来自 MSDN 杂志文章

Least Privilege
教你的应用程序使用 Windows Vista 用户帐户控制很好地运行
作者:Chris Corio

当用户登录机器时,UAC 开始工作。在交互式登录期间,本地安全机构 (LSA) 获取用户的凭据并执行初始登录,评估用户的令牌以查看它是否具有定义为提升的权限。如果 LSA 确定用户具有提升的权限,它将过滤此令牌,然后使用过滤后的令牌执行第二次登录。

 

用户帐户控制将以下组定义为具有提升的权限:

  • 内置管理员 ( S-1-5-32-544)
  • 高级用户 ( S-1-5-32-547)
  • 帐户操作员 ( S-1-5-32-548)
  • 服务器操作员 ( S-1-5-32-549)
  • 打印机操作员 ( S-1-5-32-550)
  • 备份操作员 ( S-1-5-32-551)
  • RAS 服务器组
  • 内置\Pre-Windows 2000 兼容访问 ( S-1-5-32-554)
  • 内置\网络配置运算符 ( S-1-5-32-556)
  • 域管理员 ( S-1-5-21-domain-512)
  • 域控制器 ( S-1-5-21-domain-516)
  • 证书出版商 ( S-1-5-21-domain-517)
  • 架构管理员 ( S-1-5-21-root domain-518)
  • 企业管理员 ( S-1-5-21-root domain-519)
  • 组策略管理员 ( S-1-5-21-domain-520)

因此,如果 LSA 注意到在用户的初始令牌中列出了这些组成员身份或特权中的任何一个,则将在交互式登录期间使用CreateRestrictedToken API的版本创建过滤令牌,并且完全特权令牌由 LSA 保存. 这两个令牌连结并充分特权令牌可以从过滤的令牌使用所述获得的Get-令牌的Infor-mation API与新的TokenLinkedToken信息类型。但是请注意,UAC 不会影响服务、网络或批量登录。

 

如果用户不属于上面列出的任何组但具有某些权限,则会创建一个过滤的令牌,并删除这些权限。有问题的特权是:

  • SeCreateTokenPriv­i­lege - 用户权限:创建令牌对象。
  • SeTcbPrivilege - 用户权限:作为操作系统的一部分。
  • Se­Take­Owner­ship­Priv­ilege - 用户权限:取得文件或其他对象的所有权。
  • Se­Back­up­Priv­i­lege - 用户权限:备份文件和目录。
  • Se­Re­store­Privilege - 用户权限:恢复文件和目录。
  • Se­De­bug­Priv­ilege - 用户权限:调试程序。
  • Se­Im­personatePrivilege - 用户权限:身份验证后模拟客户端。
  • Se­Re­labelPrivilege - 用户权限:修改对象标签。

如果我创建了一个备份用户,我需要在返回给我的备份相关权限的情况下运行:

  • 备份权限
  • 恢复权限

这意味着我不需要(或不想)以成熟的管理员身份运行。我想以我最高的可用权限集运行。

这是requestedExecutionLevel的三个选项开始出现的地方:

  • asInvoker:应用程序将以与启动它的进程相同的权限运行。通过选择以管理员身份运行,可以将应用程序提升到更高的权限级别。

  • highestAvailable:应用程序将以它所能达到的最高权限级别运行。如果启动应用程序的用户是管理员组的成员,则此选项与 requireAdministrator 相同。如果最高可用权限级别高于打开过程级别,系统将提示输入凭据。

  • requireAdministrator:应用程序将以管理员权限运行。启动应用程序的用户必须是管理员组的成员。如果打开过程没有以管理权限运行,系统将提示输入凭据。

奖励阅读