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 c2217c505d6..0f6f4fe7c4c 100644 --- a/dlls/ntdll/unix/process.c +++ b/dlls/ntdll/unix/process.c @@ -1134,7 +1134,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); @@ -1331,6 +1330,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 957ca0d2691..3b2cd22b712 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 139cadd0065..ace5d24b2ba 100644 --- a/server/process.c +++ b/server/process.c @@ -664,6 +664,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; @@ -1515,6 +1516,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 1648e46fe98..c23a099ed50 100644 --- a/server/process.h +++ b/server/process.h @@ -57,6 +57,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 542bf812a18..1739b7059ac 100644 --- a/server/protocol.def +++ b/server/protocol.def @@ -1157,8 +1157,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 bc27bbcca57..7824f9c2413 100644 --- a/server/thread.c +++ b/server/thread.c @@ -508,6 +508,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 );