1

我有一个需要提升权限的应用程序(类似于自定义安装程序)。在这个应用程序中,我使用 ShellExecute() 来显示一个 PDF 文件。似乎 Adob​​e Reader 以与调用应用程序相同的权限启动。但是,我希望 Adob​​e Reader 以标准用户权限启动,而不是提升权限。

有什么办法可以做到吗?(它会在 Delphi 中,但对于这个问题,语言可能无关紧要)。

4

2 回答 2

0

不幸的是,没有真正简单的方法可以做到这一点。

一种方法是使用任务计划程序 - 您使用该ITaskService界面来安排任务立即运行,使用当前登录用户的非提升凭据。

于 2013-06-17T19:58:06.770 回答
0

您想要实现的目标不能很容易地完成,并且不受支持。但是,可以使用少量的黑客攻击。Aaron Margosis 写了一篇描述一种技术的文章。

要引用相关部分,您需要执行以下步骤:

  1. 在您当前的令牌中启用 SeIncreaseQuotaPrivilege
  2. 获取代表桌面外壳的 HWND (GetShellWindow)
  3. 获取与该窗口关联的进程的进程 ID (PID) (GetWindowThreadProcessId)
  4. 打开那个进程(OpenProcess)
  5. 从该进程获取访问令牌 (OpenProcessToken)
  6. 使用该令牌制作主令牌(DuplicateTokenEx)
  7. 使用该主令牌启动新进程 (CreateProcessWithTokenW)

该文章包含一些演示 C++ 源代码的下载链接,从中它应该足够简单,可以转换为 Delphi。

于 2013-06-17T20:06:35.090 回答