CreateProcess与ShellExecuteEx的选择问题(获取管理员权限)

MapleInHG 2013-11-05 04:03:51
主程序没有以管理员权限启动,在运行过程中可能需要安装驱动,因此需要提升为管理员权限。写了另外一个exe专门负责驱动安装。因此需要运行时以管理员权限去启动它。

我知道使用ShellExecuteEx加runas参数可以很容易的获取到管理员权限,但我需要通过主进程传递一个内核句柄给子进程,这点ShellExecuteEx似乎不支持句柄的继承(没有看到有inherit相关的参数)。

CreateProcess可以很容易地在父子进程间传递句柄,但它的升级版本CreateProcessAsUser如何能通过ShellExecuteEx的runas的方式简单地获取root权限?弹出那个“用户帐户控制”的界面是不是Explorer才会弹出的?网上看到很多代码,要么是本身是系统权限,通过复制自己的token来运行子进程,要么是去拿Explorer.exe的token,运行起来根本就不是系统权限。
...全文
2785 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
你妹的特盗不 2014-07-11
  • 打赏
  • 举报
回复
可以创建一个共用内存区域,你需要传的数据都放在这里,shellexecute用runas执行程序B后,程序B自动到共用内存区域去拿需要的资料.
  • 打赏
  • 举报
回复
本质问题是句柄继承的问题,可以用以下思路解决: 1、用ShellExecuteEx加runas以管理员方式运行 2、运行的参数中加入要继承的句柄值列表 3、子进程以管理员权限启动后,用Duplicate­Handle复制父进程中的句柄,因为子进程权限比较高,所以肯定能复制过来 于是达到了和句柄继承一致的效果
yurenchen 2014-07-08
  • 打赏
  • 举报
回复
我也有 和楼主一样的问题, ShelExecuteEX 实现 ruanAs 的原理是啥, 是不是 内部 也是 通过 调用 CreateProcessAsUser 实现的. 管理员 token 不知道怎么拿呢

15,474

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧