From: Marc-Aurel Zent mzent@codeweavers.com
--- dlls/ntdll/unix/process.c | 18 +++++++++++++++++- dlls/wow64/process.c | 1 + server/process.c | 2 ++ server/process.h | 1 + server/protocol.def | 3 ++- server/thread.c | 1 + 6 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/process.c b/dlls/ntdll/unix/process.c index fdb81845a7e..856f5e5b100 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -1094,7 +1094,6 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class UNIMPLEMENTED_INFO_CLASS(ProcessUserModeIOPL); UNIMPLEMENTED_INFO_CLASS(ProcessEnableAlignmentFaultFixup); UNIMPLEMENTED_INFO_CLASS(ProcessWx86Information); - UNIMPLEMENTED_INFO_CLASS(ProcessPriorityBoost); UNIMPLEMENTED_INFO_CLASS(ProcessDeviceMap); UNIMPLEMENTED_INFO_CLASS(ProcessForegroundInformation); UNIMPLEMENTED_INFO_CLASS(ProcessLUIDDeviceMapsEnabled); @@ -1291,6 +1290,23 @@ NTSTATUS WINAPI NtQueryInformationProcess( HANDLE handle, PROCESSINFOCLASS class } break;
+ case ProcessPriorityBoost: + len = sizeof(ULONG); + if (size != len) return STATUS_INFO_LENGTH_MISMATCH; + if (!info) ret = STATUS_ACCESS_VIOLATION; + else + { + ULONG *disable_boost = info; + SERVER_START_REQ(get_process_info) + { + req->handle = wine_server_obj_handle( handle ); + ret = wine_server_call( req ); + *disable_boost = reply->disable_boost; + } + SERVER_END_REQ; + } + break; + case ProcessDebugFlags: len = sizeof(DWORD); if (size == len) diff --git a/dlls/wow64/process.c b/dlls/wow64/process.c index f82f3f2187e..b2dad1a2685 100644 --- a/dlls/wow64/process.c +++ b/dlls/wow64/process.c @@ -577,6 +577,7 @@ NTSTATUS WINAPI wow64_NtQueryInformationProcess( UINT *args ) case ProcessTimes: /* KERNEL_USER_TIMES */ case ProcessDefaultHardErrorMode: /* ULONG */ case ProcessPriorityClass: /* PROCESS_PRIORITY_CLASS */ + case ProcessPriorityBoost: /* ULONG */ case ProcessHandleCount: /* ULONG */ case ProcessSessionInformation: /* ULONG */ case ProcessDebugFlags: /* ULONG */ diff --git a/server/process.c b/server/process.c index 37a75dc1c45..6851d437822 100644 --- a/server/process.c +++ b/server/process.c @@ -677,6 +677,7 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla process->running_threads = 0; process->priority = PROCESS_PRIOCLASS_NORMAL; process->base_priority = 8; + process->disable_boost = 0; process->suspend = 0; process->is_system = 0; process->debug_children = 1; @@ -1539,6 +1540,7 @@ DECL_HANDLER(get_process_info) reply->exit_code = process->exit_code; reply->priority = process->priority; reply->base_priority = process->base_priority; + reply->disable_boost = process->disable_boost; reply->affinity = process->affinity; reply->peb = process->peb; reply->start_time = process->start_time; diff --git a/server/process.h b/server/process.h index 2564a4f96d1..251af45be79 100644 --- a/server/process.h +++ b/server/process.h @@ -58,6 +58,7 @@ struct process affinity_t affinity; /* process affinity mask */ int priority; /* priority class */ int base_priority; /* base priority to calculate thread priority */ + int disable_boost; /* disable priority boost */ int suspend; /* global process suspend count */ unsigned int is_system:1; /* is it a system process? */ unsigned int debug_children:1;/* also debug all child processes */ diff --git a/server/protocol.def b/server/protocol.def index ecc20a8e2d0..b266323fda8 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1171,8 +1171,9 @@ struct obj_locator timeout_t end_time; /* process end time */ unsigned int session_id; /* process session id */ int exit_code; /* process exit code */ - int priority; /* priority class */ + unsigned short priority; /* priority class */ unsigned short base_priority; /* process base priority */ + unsigned short disable_boost; /* disable process priority boost */ unsigned short machine; /* process architecture */ VARARG(image,pe_image_info); /* image info for main exe */ @END diff --git a/server/thread.c b/server/thread.c index 3003c4bc930..5dccc3c11b3 100644 --- a/server/thread.c +++ b/server/thread.c @@ -538,6 +538,7 @@ struct thread *create_thread( int fd, struct process *process, const struct secu thread->process = (struct process *)grab_object( process ); thread->desktop = 0; thread->affinity = process->affinity; + thread->disable_boost = process->disable_boost; if (!current) current = thread;
list_add_tail( &thread_list, &thread->entry );