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

Fre*_*abe 7 c c++ windows winapi process

在Windows 作业对象的上下文中,如何获取当前进程的作业对象(如果它在作业对象中)?该IsProcessInJob功能让我测试一个给定的过程(如当前的)是否是在给定的(或有)的工作-但它不会产生匹配作业的句柄.

Ben*_*Ben 13

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

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

要回答具体问题,请IsProcessInJob在工作时打电话询问.

您可以通过传递NULL来找到有关Job的所有内容 QueryInformationJobObject

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

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

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

  • 好吧,我认为它已经在上面回答了.使用`CREATE_SUSPENDED`标志创建进程,并从`PROCESS_INFORMATION`获取句柄.使用`IsProcessInJob`检查您是否在工作中,如果为false,则创建一个Job对象调用`AssignProcessToJobObject`.调用`ResumeThread`,并关闭进程和线程句柄(除非你需要保留它们). (2认同)