我正在尝试使用Windows中提升的权限创建子进程(通过触发UAC提示)并让此子进程继承其父STDOUT句柄,以便能够输出回父级控制台。
Additionnal Infos:
ShellExecuteEx()
和ShellExecuteInformation
来指定一个“runas”动词来触发UAC,但是任何其他解决方案都可以创建当前正在运行的程序的高架副本(子进程是与父级相同的可执行文件)但是能够输出回父级控制台。答案 0 :(得分:1)
将value error:
与ShellExecuteEx
一起使用时 - 函数runas
不是来自您的流程,而是来自CreateProcessAsUserW
正在运行的svchost.exe -k netsvcs
。并且 bInheritHandles 被硬编码为 FALSE - 所以
在这种情况下,您的进程不会继承任何句柄。要使句柄可继承,唯一的方法是使用主要提升标记直接调用appinfo.dll
。但是从哪里得到这个标记?好的,您可以将第二次自我exe作为提升(使用CreateProcessAsUserW
)并将提升的令牌复制回原始未提升的进程。但无论如何(即使使用提升的令牌) - 您需要runas
权限才能拨打SE_ASSIGNPRIMARYTOKEN_NAME
。但你没有这个特权。
否则你可以找到一些漏洞。
由CreateProcessAsUser
返回的流程句柄没有ShellExecuteEx
访问权限 - 因此您以后不能将其用于手动处理重复。
总的来说 - 这在设计上是不可能的