【问题标题】:How to create a new process with no admin privileges from an MFC application which runs in admin mode?如何从以管理员模式运行的 MFC 应用程序创建没有管理员权限的新进程?
【发布时间】:2017-03-10 16:47:31
【问题描述】:

我想从以管理员模式运行的 MFC 应用程序创建新进程, 在这个新进程应该有更少的权限,这样我就可以运行另一个具有更少权限的应用程序。 如果尝试以高权限运行,我将无法启动应用程序。这就是为什么我想创建一个新流程 它应该具有较少的权限,以便我可以启动 xxxxxx 应用程序(以独立用户模式启动,即没有管理员) 没有任何障碍。

为了更准确,让我清楚地向您解释一下场景: 我正在尝试使用 MFC 应用程序中的 MAPI32.dll 的“MAPISendMail”发送一封电子邮件(这是作为“以管理员身份运行”模式运行的),Outlook 已经在独立用户模式下打开。代码看起来像MAPISendMail_Implementation

如果我们能在上面的链接中观察到下面的sn-p:

ULONG nSent = lpfnMAPISendMail(0, 0, 
    &MAPImsg, MAPI_LOGON_UI | MAPI_DIALOG, 0);

当它试图从高权限应用程序(MFC 应用程序)访问低权限应用程序(outlook)时失败了。

我在微软论坛MAPISendMail_MSDN 上看到了一些帖子, 他们建议通过创建一个新进程来执行所谓的“lpfnMAPISendMail”,您将能够成功调用该过程。但我不知道如何在那个新进程中调用上述函数。

谁能指导我如何做到这一点?

【问题讨论】:

标签: c++ mfc


【解决方案1】:

您可以使用CreateRestrictedToken 创建现有访问令牌的受限版本,并使用它通过CreateProcessAsUser 生成新进程。

【讨论】:

  • 感谢您的回复。我编辑了我的帖子,其中提供了更多详细信息。请您重新检查我的帖子并给我任何建议。
猜你喜欢
  • 1970-01-01
  • 2012-06-25
  • 2015-05-07
  • 1970-01-01
  • 2013-05-31
  • 2014-10-05
  • 2015-05-09
相关资源
最近更新 更多