From 401b9f66529e7f772b7bf5cd7e79efb3aba9e0a4 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 28 Sep 2013 11:37:08 +0000 Subject: [PATCH] [NTOS:EX] - Correctly return STATUS_TIMER_RESOLUTION_NOT_SET if the resolution was not changed in NtSetTimerResolution. Patch by Aleksandar Andrejevic. CORE-7387 svn path=/trunk/; revision=60407 --- reactos/ntoskrnl/ex/time.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/ex/time.c b/reactos/ntoskrnl/ex/time.c index 9fe8420c591..72decc71f2a 100644 --- a/reactos/ntoskrnl/ex/time.c +++ b/reactos/ntoskrnl/ex/time.c @@ -527,6 +527,7 @@ NtSetTimerResolution(IN ULONG DesiredResolution, IN BOOLEAN SetResolution, OUT PULONG CurrentResolution) { + NTSTATUS Status; KPROCESSOR_MODE PreviousMode = ExGetPreviousMode(); PEPROCESS Process = PsGetCurrentProcess(); ULONG NewResolution; @@ -551,15 +552,21 @@ NtSetTimerResolution(IN ULONG DesiredResolution, NewResolution = ExSetTimerResolution(DesiredResolution, SetResolution); *CurrentResolution = NewResolution; - if (SetResolution) + if (SetResolution || Process->SetTimerResolution) { - /* Set the flag that the resolution has been changed */ - Process->SetTimerResolution = TRUE; + /* The resolution has been changed now or in an earlier call */ + Status = STATUS_SUCCESS; + } + else + { + /* The resolution hasn't been changed */ + Status = STATUS_TIMER_RESOLUTION_NOT_SET; } - /* Return success if the process changed its timer resolution */ - if (Process->SetTimerResolution) return STATUS_SUCCESS; - else return STATUS_TIMER_RESOLUTION_NOT_SET; + /* Update the flag */ + Process->SetTimerResolution = SetResolution; + + return Status; } /* EOF */