让我解释一下我的困境。我的一个以高级权限在用户模式下运行的进程需要提供打开用户文件的能力,如果可能,从该进程获取退出代码。我不想直接从我的提升过程打开该文件,而是以较低的权限运行它。为此我做了以下事情:
使用CreateProcessAsUser启动我的第二个“垫片”过程,降低权限。该“shim”进程在登录的交互式用户帐户下运行。
“shim”进程首先为用户文件调用CreateProcess(希望它是一个进程。)如果失败,它会尝试调用ShellExecuteEx可能或可能不返回进程句柄。因此,如果我获得子进程的进程句柄,我会调用WaitForSingleObject并等待它发出信号,之后我调用GetExitCodeProcess以获取进程的退出代码。
之后,“垫片”过程立即关闭。
我的困境是我需要将2个int
值传递回我的主要可执行文件 - 一个是执行结果:例如,ran file OK
或failed to run file
或{ {1}}等等。第二个file was not a process
,它是流程本身的退出代码。
问题是如何以最简单的方式做到这一点?
编辑:只是一个想法。你怎么看?如果我使用系统注册表传回其中一个int怎么办?我可以使用int
密钥,并将值命名为子proc ID和通过调用GetProcessTimes API获得的子进程创建时间的串联。然后在父母收到孩子的回复时删除该密钥。
答案 0 :(得分:0)
boost interprocess头库将为您解决这个问题,同时具有独立于平台的优势。