我的应用程序正在运行。我想使用OpenJobObject获取此jobobject的句柄,以便以后可以使用此句柄。问题是,我不知道作业名称,如果向作业名称传递null,就会返回错误87(参数不正确)。
我就是这样尝试的:

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

我在msdn上也找到了这个:
应用程序无法获取运行它的作业对象的句柄,除非它具有作业对象的名称。但是,应用程序可以使用null调用queryInformationJobObject函数来获取有关Job对象的信息。
所以我的问题是,是否有可能以某种方式获得运行我的应用程序的jobobject的句柄?或者获取我的应用程序正在运行的作业的名称?
谢谢!
更新:
到目前为止我的代码:http://pastebin.com/aJ7XMmci
现在,我从SetInformation得到错误87(参数不正确):(

最佳答案

好吧,看起来没有任何支持的方法。但这并不意味着它不能完成!-)
要枚举系统中的所有句柄,请参见this question。示例代码here过滤句柄,只查找属于特定进程的句柄,但这很容易更改。您可能需要首先启用调试特权。
对于每个句柄,将其复制到进程中,然后调用isprocessinjob以确定它是否是正确的句柄。
一旦你开始工作,检查作业对象的SYSTEM_HANDLE.ObjectTypeNumber是否总是相同的。在这种情况下,您可以通过只检查作业对象句柄来大幅提高代码的效率(至少在任何给定的操作系统上)。
您可能还可以筛选到只运行辅助登录服务的进程,因为这似乎是为运行方式创建作业对象的原因。
(如果你真的能做到这一点,请张贴代码-这对未来的访问者可能非常有用。)

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

10-15 02:26