在
Windows
Job Objects的上下文中,如何获取当前进程的作业对象(如果它在作业对象中)?
IsProcessInJob函数允许我测试给定进程(例如当前进程)是否在给定(或任何)作业中 – 但它不会产生匹配作业的句柄.
解决方法
如果您只想查找正在运行的配额/限制,或者枚举作业中的所有其他进程,则无需获取当前进程的Job对象.
您可以使用NULL调用QueryInformationJobObject,这将是当前进程的Job对象.
> QueryInformationJobObject:http://msdn.microsoft.com/en-us/library/ms684925(VS.85).aspx
>工作对象:http://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx
要回答具体问题,请致电IsProcessInJob,了解您是否在工作中.
您可以通过将NULL传递给QueryInformationJobObject来找到有关Job的所有内容
您的子进程将自动继承您的作业,除非您传递CREATE_BREAKAWAY_FROM_JOB且作业已设置JOB_OBJECT_LIMIT_BREAKAWAY_OK或JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK.在这些情况下,您可以根据需要将流程分配给新工作.
因此,在不知道句柄的情况下,您可以找到当前作业的所有内容,并在当前作业中分配子进程,或者如果您有权限,则可以在没有当前作业的情况下进行分配.即你可以做几乎手柄允许你做的所有事情.
唯一的例外是将其复制到另一个兄弟进程.如果您需要这样做,您必须让父进程以某种方式向您传递句柄值.