gpt4 book ai didi

c - 如何在不知道其名称的情况下获取 JobObject 的句柄?

转载 作者:可可西里 更新时间:2023-11-01 10:48:40 26 4
gpt4 key购买 nike

我的应用程序正在作业中运行。我想使用 OpenJobObject 获取此 Jobobject 的句柄,以便稍后使用此句柄。问题是,我不知道作业名称,将 NULL 传递给作业名称会返回错误 87(参数不正确)。

我是这样尝试的:

HANDLE handle = OpenJobObject( JOB_OBJECT_QUERY, FALSE, NULL );
if ( !handle ) printf( "\nError %d", GetLastError() );
else printf( "\nOK" );

我也在 MSDN 上找到了这个:应用程序无法获得运行它的作业对象的句柄,除非它具有作业对象的名称。但是,应用程序可以使用 NULL 调用 QueryInformationJobObject 函数来获取有关作业对象的信息。

所以我的问题是,是否有可能以某种方式获得运行我的应用程序的 JobObject 的句柄?或者获取运行我的应用程序的作业的名称?

谢谢!

更新:
到目前为止我的代码:http://pastebin.com/aJ7XMmci现在,我从 SetInformation 收到错误 87(参数不正确):(

最佳答案

好的,看起来没有任何受支持的方法。这并不意味着它不能完成! :-)

要枚举系统中的所有句柄,请参阅 this question .示例代码here过滤句柄并仅查找属于特定进程的句柄,但这很容易更改。您可能需要先启用调试权限。

对于每个句柄,将其复制到您的进程中,然后调用 IsProcessInJob 以确定它是否是正确的句柄。

一旦您开始工作,请检查 SYSTEM_HANDLE.ObjectTypeNumber 是否始终与作业对象相同。它可能是(至少在任何给定的操作系统上)在这种情况下,您可以通过仅检查作业对象句柄来显着提高代码的效率。

您也许还可以过滤到运行辅助登录服务的进程,因为这似乎是为 runas 创建作业对象的原因。

(如果您确实成功了,请发布代码 - 它可能对 future 的访问者非常有用。)

关于c - 如何在不知道其名称的情况下获取 JobObject 的句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13490055/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com