【问题标题】:How can I prevent a process I spawn from spawning child processes?如何防止我产生的进程产生子进程?
【发布时间】:2012-02-16 00:24:46
【问题描述】:

我的 Windows XP/7 程序使用 Windows API CreateProcess() 函数作为其操作的一部分来启动一个子进程。我希望能够以一种但只有一种特定方式“沙箱化”应用程序。我不想让子进程产生它自己的进程(孙子进程)。有没有办法做到这一点而无需进行任何挂钩或 DLL 注入(或 IAT 修补)?

我在进程安全和访问权限上看到了这个 MSDN 页面:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms684880(v=vs.85).aspx

我注意到以下进程特定的访问权限:

PROCESS_CREATE_PROCESS (0x0080) Required to create a process.

我是否可以在挂起状态下启动子进程,通过 XOR 操作删除该访问权限,使用 SetSecurityDescriptor() 更新子进程的访问权限,然后恢复它以防止它创建自己的子进程?还是应该将其应用于磁盘上的 EXE 文件?这行得通吗?

如果是这样,我会很感激使用 SetSecurityDescriptor() 的一个很好的代码示例,它将向我展示正确执行此操作的细微差别。如果这种方法不起作用,您可能有任何想法或提示将不胜感激。

【问题讨论】:

    标签: winapi process access-control createprocess dacl


    【解决方案1】:

    您可以使用Job objects 设置作业中的进程限制:JOBOBJECT_BASIC_LIMIT_INFORMATION.ActiveProcessLimit

    【讨论】:

    • 谢谢@Anders。如果您遇到代码示例,请告诉我。
    • @RobertOschler 除了端口完成(您的任务不需要)之外,处理作业对象很容易:创建一个作业对象,设置限制,创建一个挂起的进程并添加这个在恢复之前处理工作......
    • 我在这台机器上没有编译器,但它应该类似于pastebin.com/8EntStEu
    猜你喜欢
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 1970-01-01
    • 2019-03-23
    相关资源
    最近更新 更多