[PATCH 0/1] MR9123: server: Support NULL job handle in (get_job_info).
From: Paul Gofman <pgofman(a)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; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/9123
The tested behaviour matches MS docs QueryInformationJobObject() where job handle is optional and NULL corresponds to the job of the process. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9123#note_117926
participants (2)
-
Paul Gofman -
Paul Gofman (@gofman)