0

有人可以帮我吗?我正在尝试创建一个作业对象,JOB_OBJECT_SECURITY_ONLY_TOKENSetInformationJobObject总是失败,错误代码为 6(无效句柄)。这是我的代码:

HANDLE Job( CreateJobObject( NULL, NULL ) );
if( !Job )
{
    wprintf( L"Could not create job object, error %d\n", GetLastError() );
    return 1;
}

JOBOBJECT_SECURITY_LIMIT_INFORMATION SecLimit = { 0 };
SecLimit.SecurityLimitFlags = JOB_OBJECT_SECURITY_ONLY_TOKEN;

if ( !SetInformationJobObject( Job, JobObjectSecurityLimitInformation, &SecLimit, sizeof( SecLimit ) ) )
{
    wprintf( L"Could not associate job with IO completion port, error %d\n", GetLastError() );
    return 1;
}

我正在尝试在 XP 上运行这个应用程序!谢谢!

4

1 回答 1

0

您尚未设置SecLimit.JobToken受限令牌的有效句柄。这就是您收到无效句柄错误的原因。如果使用JOB_OBJECT_SECURITY_ONLY_TOKEN标志,SecLimit.JobToken则为强制性。

除非出于某些特殊原因需要强制作业中的进程使用受限令牌,否则不要使用 JOB_OBJECT_SECURITY_ONLY_TOKEN 标志。

请注意,您引用的文章实际上并没有说这个标志是必需的。它只是说如果您使用此标志,则必须暂停创建进程才能将其分配给作业对象。

于 2012-11-19T20:19:16.040 回答