在winapi中以最低的权限运行进程

我写的东西类似于http://ideone.com/ 。 目前我正在用CreateProcess调用运行用户进程。 如果运行时间超过指定的时间,我会终止进程,但是我不知道如何拒绝读/写文件系统权限/创build进程权限等等。 给定的可执行文件可以从字面上任何东西,我只需要只允许标准input/标准输出。 如果我可以设置工作记忆,那也是很好的。

我读了很多关于msdn的文章,比如CreateProcessAsUser Function , CreateProcessWithLogonW Function等,但是我很困惑(可能是因为我的win32知识非常有限)。 只需调用CreateProcessAsUser并使用这些有限权限(以及如何创build此用户)创build特殊用户即可。

我希望我能用一个正确的参数在一个函数调用中实现这一点,所以请帮助。

另外,如果你知道一些类似的开源项目,那就太好了。

谢谢。

================================================== ========

编辑:嗨再次:)我仍然坚持这一点。 我没有足够的时间来处理这个问题,但我猜snemarch post是非常有用的。 如果有人开箱即用的解决scheme,那就太好了。 如果我用snemarch的链接做什么,我会发布。

Solutions Collecting From Web of "在winapi中以最低的权限运行进程"

看看OpenProcessToken和AdjustTokenPrivileges – 这可以让你微调(在某种程度上)你的进程的权限。 您可以使用SaferCreateLevel来获得像SAFER_LEVELID_UNTRUSTED这样的标准权限。

考虑在作业对象内部运行用户进程。 由用户进程创建的子进程也将在同一个作业对象内部结束。 您可以将特定的限制应用于作业可以使用的资源数量,它如何与GUI等进行交互(请参阅SetInformationJobObject函数)。 你可以一击即可杀死作业对象内的所有进程。

我们有这样做的一块代码,但我不能发布:(

根据此进程的访问令牌创建一个“限制”访问令牌。 然后用这个访问令牌为应用程序创建一个新的进程。

对代码发表评论 – 有关更多信息,请参阅MSDN文章“浏览Web和以管理员身份安全地阅读电子邮件”。 然而像往常一样,MS已经打破了网络,文章是不存在的。

相关的搜索发现“DropMyRights”应用程序链接到这篇文章链接到这可能做你想要的东西,提供了源,但这些链接已经成为破坏在博客页面。

你可能想看看像OpenProcessToken GetTokenInformation CreateRestrictedToken函数

和像SE_CHANGE_NOTIFY_NAME这样的SE_CHANGE_NOTIFY_NAME