 
            From: Paul Gofman pgofman@codeweavers.com
--- dlls/kernel32/tests/process.c | 10 ++++++++++ server/process.c | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/kernel32/tests/process.c b/dlls/kernel32/tests/process.c index 7984f3d6fb4..f539f69b3af 100644 --- a/dlls/kernel32/tests/process.c +++ b/dlls/kernel32/tests/process.c @@ -4812,6 +4812,7 @@ static void test_dead_process(void)
static void test_nested_jobs_child(unsigned int index) { + JOBOBJECT_BASIC_ACCOUNTING_INFORMATION job_info; JOBOBJECT_ASSOCIATE_COMPLETION_PORT port_info; HANDLE job, job_parent, job_other, port; PROCESS_INFORMATION pi; @@ -4851,6 +4852,15 @@ static void test_nested_jobs_child(unsigned int index) ret = pAssignProcessToJobObject(job, pi.hProcess); ok(ret, "AssignProcessToJobObject error %lu\n", GetLastError());
+ ret = pQueryInformationJobObject(NULL, JobObjectBasicAccountingInformation, &job_info, + sizeof(job_info), NULL); + ok(ret, "got error %lu.\n", GetLastError()); + + ret = pQueryInformationJobObject(INVALID_HANDLE_VALUE, JobObjectBasicAccountingInformation, &job_info, + sizeof(job_info), NULL); + ok(!ret, "got ret %d.\n", ret); + ok(GetLastError() == ERROR_INVALID_HANDLE, "got error %lu.\n", GetLastError()); + out = FALSE; ret = pIsProcessInJob(pi.hProcess, NULL, &out); ok(ret, "IsProcessInJob error %lu\n", GetLastError()); diff --git a/server/process.c b/server/process.c index b0dd947d628..2d1842c10d7 100644 --- a/server/process.c +++ b/server/process.c @@ -1939,11 +1939,16 @@ DECL_HANDLER(process_in_job) /* retrieve information about a job */ DECL_HANDLER(get_job_info) { - struct job *job = get_job_obj( current->process, req->handle, JOB_OBJECT_QUERY ); + struct job *job; process_id_t *pids; data_size_t len;
- if (!job) return; + if (!req->handle && current->process->job) job = (struct job *)grab_object( current->process->job ); + else + { + job = get_job_obj( current->process, req->handle, JOB_OBJECT_QUERY ); + if (!job) return; + }
reply->total_processes = job->total_processes; reply->active_processes = job->num_processes;