我正在撰写与http://ideone.com/类似的内容。目前我正在使用CreateProcess调用运行用户进程。如果它运行的时间超过指定的时间,我会终止进程,但我不知道如何拒绝读/写文件系统权限/创建进程权限等到创建的进程。给定的可执行文件可以是字面上的任何东西,我只需要允许stdin / stdout。如果我可以设置工作记忆集,也会很棒。
我在msdn上阅读了很多文章,例如CreateProcessAsUser Function,CreateProcessWithLogonW Function等,但我很快就感到困惑(可能是因为我的win32知识非常有限)。 仅调用CreateProcessAsUser并使用这些有限的权限创建特殊用户(以及如何创建此类用户)就足够了。
我希望我能在一个具有正确参数的函数调用中实现这一点,所以请帮忙。
另外,如果您了解一些类似的开源项目,那就太棒了。
感谢。
=============================================== ===========
编辑: 你好,我们又见面了 :) 我仍然坚持这个。我没有足够的时间来处理这个问题,但我猜想snemarch post非常有用。如果某人有开箱即用的解决方案,那就太好了。如果我使用snemarch的链接做某事我会发布。
答案 0 :(得分:6)
查看OpenProcessToken和AdjustTokenPrivileges - 这可以让您(在某种程度上)微调您的流程权限。您可以使用SaferCreateLevel获取某些标准权限,例如SAFER_LEVELID_UNTRUSTED
。
答案 1 :(得分:5)
考虑在job object内运行用户流程。用户进程创建的子进程也将在同一个作业对象中结束。您可以对作业可以使用多少资源,如何与GUI交互等应用特定限制(请参阅SetInformationJobObject函数)。您可以一击就杀死作业对象中的所有进程。
答案 2 :(得分:3)
我们有一大堆代码用于执行此操作,但我无法发布:(
根据此流程的访问令牌创建“受限”访问令牌。然后使用此访问令牌为应用程序创建一个新流程。
对代码发表了评论 - 更多信息可以在MSDN文章"Browsing the Web and Reading E-mail safely as an Administrator".中找到。但是像往常一样,MS已经破坏了网络,而且文章已经不存在了。
相关搜索发现“{3}}上链接的”DropMyRights“应用可能会执行您想要的操作,提供源代码,但这些链接在博客页面中也已破坏。
你可能想看看像这样的功能
OpenProcessToken
GetTokenInformation
CreateRestrictedToken
和SE_CHANGE_NOTIFY_NAME