4

我的 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() 的一个很好的代码示例,它将向我展示正确执行此操作的细微差别。如果这种方法不起作用,您可能有任何想法或提示将不胜感激。

4

1 回答 1

8

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

于 2012-01-22T03:37:12.513 回答