如何获取当前进程的作业对象(如果有)?

时间:2011-03-18 14:09:32

标签: c++ c windows winapi process

在Windows Job Objects的上下文中,如何获取当前进程的作业对象(如果它在作业对象中)? IsProcessInJob函数允许我测试给定进程(例如当前进程)是否在给定(或任何)作业中 - 但它不会产生匹配作业的句柄。

1 个答案:

答案 0 :(得分:13)

如果您只想查找正在运行的配额/限制,或者枚举作业中的所有其他进程,则无需获取当前进程的Job对象。

您可以使用NULL调用QueryInformationJobObject,这将是当前进程的Job对象。

要回答具体问题,请致电IsProcessInJob了解您是否在工作。

您可以通过将NULL传递给QueryInformationJobObject

来找到有关作业的所有信息

您的子流程会自动继承您的工作,除非您通过CREATE_BREAKAWAY_FROM_JOB 工作已设置JOB_OBJECT_LIMIT_BREAKAWAY_OKJOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK。在这些情况下,您可以根据需要将流程分配给新工作。

因此,在不知道句柄的情况下,您可以找到当前作业的所有内容,并在当前作业中分配子进程,或者如果您有权限,则可以在没有当前作业的情况下进行分配。即你可以做几乎手柄允许你做的所有事情。

唯一的例外是将其复制到另一个兄弟进程。如果你需要这样做,你必须让父进程以某种方式向你传递句柄值。