我正在编写一个程序,它将使用
\BaseNamedObjects
打开 OpenJobObjectA
命名空间中存在的作业对象。下面是代码片段:
hJob = OpenJobObjectA(JOB_OBJECT_QUERY, FALSE, "\\BaseNamedObjects\\SAC10680");
if (hJob == NULL) {
fprintf(stderr, "Failed to open job object. Error code: %d\n", GetLastError());
return 1;
}
现在,即使作业对象存在(我使用 winobj 进行验证),我也无法打开该对象。并出现以下错误:
Failed to open job object. Error code: 161
我知道错误 161 意味着路径无效。但事实并非如此!!
代码应该打开作业对象。
根据文档:OpenJobObjectA 函数
名称可以有“Global”或“Local”前缀,以显式打开全局或会话命名空间中的对象。名称的其余部分可以包含除反斜杠字符 () 之外的任何字符。
驱动程序在全局
\BaseNamedObjects
对象目录中创建一个命名事件对象。要从用户模式访问内核模式事件,请使用名称 Global\\Xxx
。
我同意RbMm,你应该尝试使用
Global\\SAC10680
。