【问题标题】:How do I get the job object (if any) for my current process?如何获取当前流程的作业对象(如果有)?
【发布时间】:2011-07-18 05:05:29
【问题描述】:

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

【问题讨论】:

  • 我对此一无所知,但我认为此链接可能有用msdn.microsoft.com/en-us/library/cc907078%28v=vs.85%29.aspx
  • 看起来没有记录的方法可以做到这一点。您可以枚举属于特定作业的所有进程,但不能枚举所有作业。但是,有一些未记录的方法...
  • @Luke:未记录的方法?一定要告诉! :-)
  • @Luke,未记录的方法?

标签: c++ c windows winapi process


【解决方案1】:

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

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

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

您可以通过将 NULL 传递给 QueryInformationJobObject 来了解有关 Job 的所有信息

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

因此,在不知道句柄的情况下,您可以找出有关当前作业的所有信息,并在当前作业中分配子进程,或者如果您有权限,则无需当前作业。 IE。你可以做几乎所有手柄允许你做的事情。

唯一的例外是将它复制到另一个同级进程。如果您需要这样做,则必须让父进程以某种方式将句柄值传达给您。

【讨论】:

  • 不完全;我想启动一个子进程,如果我自己在作业对象中运行,我想将子进程分配给我当前的作业。为此,我需要处理好我目前的工作。
  • 您的子进程将继承当前作业。您不需要分配它。这会自动发生,您无需执行任何操作即可实现此目的。
  • 真的,我的评论不完整,抱歉。让这件事变得棘手的是,如果我自己没有在作业对象中运行,我想自己创建一个新作业,然后将子进程分配给它。
  • 好吧,我认为上面已经回答了。使用CREATE_SUSPENDED 标志创建进程,并从PROCESS_INFORMATION 获取句柄。检查您是否在使用IsProcessInJob 的作业,如果为false,则创建一个作业对象调用AssignProcessToJobObject。调用ResumeThread,并关闭进程和线程句柄(除非您需要保留它们)。
  • @Ben 我们如何为作业设置 JOB_OBJECT_LIMIT_BREAKAWAY_OK?
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-03
  • 1970-01-01
  • 2017-11-26
相关资源
最近更新 更多