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

时间:2011-12-29 18:10:41

标签: .net manifest

我一直想知道嵌入

之间有什么区别
<requestedExecutionLevel  level="asInvoker" uiAccess="false" />

<requestedExecutionLevel  level="highestAvailable" uiAccess="false" />
应用程序清单中的

是。

2 个答案:

答案 0 :(得分:32)

这是described on MSDN

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

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

一般情况下,除非您有特殊理由要求更多权利,否则您将需要使用“asInvoker”。

答案 1 :(得分:0)

“最高可用” 的一个很好的例子是 Backup Operators 组的成员。

从Windows Vista开始,被剥夺特权并获得分割令牌的不仅仅是“管理员” 。系统将查看您是否为:

  • 某些团体的成员
  • 具有某些特权

“最高可用” 的一个很好的例子是 Backup Operators 组的成员。如果您是 Backup Operators 组的成员,则安全令牌的过滤方式与 Administrators 组的成员的过滤方式完全相同。

  

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

  

用户帐户控制将在图3 中列出的组定义为具有提升的特权。因此,如果LSA注意到用户的初始令牌中列出了这些组成员身份或特权中的任何一个,则将使用CreateRestrictedToken API版本在交互式登录期间创建过滤的令牌,并且LSA保存了完全特权的令牌。 。这两个令牌已链接,可以使用具有新TokenLinkedToken信息类型的Get­Token­Information API从已过滤的令牌中获取完全特权令牌。但是请注意,UAC不会影响服务,网络或批处理登录。

  

如果用户不属于图3中列出的任何组,但具有某些特权,则将创建过滤的令牌,并删除这些特权。有问题的特权是:

     
      
  • 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
  •   

如果我创建一个 backup 用户,则需要使用与我的 backup 相关的特权返回给我:

  • Se­Backup upPriv­i­lege
  • SeRestorePrivilege

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

这是您发出 requestedExecutionLevel 的三个选项的地方:

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

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

  • requireAdministrator :该应用程序将在具有管理员权限的情况下运行。启动该应用程序的用户必须是Administrators组的成员。如果打开过程未使用管理权限运行,系统将提示您输入凭据。

奖金阅读