0

(Visual Studio 2010 - C++)你好,

我正在尝试将 JOB 设置为进程,但 AssignProcessToJobObject 返回 ACCESS_DENIED 并且 IsProcessInJob 返回 TRUE。

我在调用 CreateProcess (Suspended) 结束后立即将 IsProcessInJob 调用到一个进程,尝试用我的进程调用 IsProcessInJob(在主入口点之后几行),它返回 true。

void main()
{   
    BOOL bIsInJob;

    IsProcessInJob( GetCurrentProcess(), NULL, &bIsInJob );
    printf( "IsProcessInJob (me): %s\n", bIsInJob ? "true" : "false" ); 
// RET True ! inside and outside IDE
   ...

以前有人看过吗?

谢谢你的帮助。资料来源: 杀死父进程时杀死子进程 如何在Windows中自动销毁子进程?

4

1 回答 1

1

我发现。

出于某种原因,我的进程是 Explorer.exe 的子进程,然后 Explorer 为我的进程设置了一个作业,而记事本(我的子进程)继承了该作业。

在使用 ProcessExplorer 之前我找不到。我在进程列表中看不到我的进程,当我在 Winlogon->Explorer 下方找到时,我明白了。

分辨率:CREATE_BREAKAWAY_FROM_JOB

if (!CreateProcess(L"c:\\windows\\system32\\notepad.exe",  L"", NULL, NULL, FALSE,
        CREATE_BREAKAWAY_FROM_JOB, NULL, NULL, &startupInfo, &processInformation))
...

感谢您的评论、耐心和时间。

于 2011-08-28T14:33:55.347 回答