2012-01-22 280 views
2

我的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()的一个好的代码示例,它会告诉我做这个属性的细微差别。如果这种方法行不通,你可能会有任何想法或提示,将不胜感激。

回答

7

您可以使用Job objects设置在一个工作流程的限制:JOBOBJECT_BASIC_LIMIT_INFORMATION .ActiveProcessLimit

+0

感谢@Anders。如果您遇到代码示例,请告诉我。 –

+1

@RobertOschler除了完成端口(您不需要执行任务),处理作业对象很容易:创建一个作业对象,设置限制,创建一个暂停的进程并在恢复之前将此进程添加到作业中它... – Anders

+1

我没有在这台机器上的编译器,但它应该是像http://pastebin.com/8EntStEu – Anders