Module: wine Branch: master Commit: 8b0a7b25036f74ebe60b3bd5b7b6ecd37f5f1385 URL: https://source.winehq.org/git/wine.git/?a=commit;h=8b0a7b25036f74ebe60b3bd5b...
Author: Alexandre Julliard julliard@winehq.org Date: Mon Dec 16 18:44:07 2019 +0100
ntdll: Fix RtlQueryUnbiasedInterruptTime() prototype.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=48239 Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/kernel32/tests/time.c | 35 +++++++++++++++++++++++++++++++++++ dlls/ntdll/time.c | 9 +++++++-- include/winternl.h | 2 +- 3 files changed, 43 insertions(+), 3 deletions(-)
diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index 5faabd36e1..28312bac3c 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -1027,6 +1027,38 @@ static void test_GetTickCount(void) ok(t2 <= t3, "out of order %d %d\n", t2, t3); }
+BOOL (WINAPI *pQueryUnbiasedInterruptTime)(ULONGLONG *time); +BOOL (WINAPI *pRtlQueryUnbiasedInterruptTime)(ULONGLONG *time); + +static void test_QueryUnbiasedInterruptTime(void) +{ + ULONGLONG time; + BOOL ret; + + if (pQueryUnbiasedInterruptTime) + { + SetLastError( 0xdeadbeef ); + ret = pQueryUnbiasedInterruptTime( &time ); + ok( ret, "QueryUnbiasedInterruptTime failed err %u\n", GetLastError() ); + SetLastError( 0xdeadbeef ); + ret = pQueryUnbiasedInterruptTime( NULL ); + ok( !ret, "QueryUnbiasedInterruptTime succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + } + else win_skip( "QueryUnbiasedInterruptTime not supported\n" ); + if (pRtlQueryUnbiasedInterruptTime) + { + SetLastError( 0xdeadbeef ); + ret = pRtlQueryUnbiasedInterruptTime( &time ); + ok( ret, "RtlQueryUnbiasedInterruptTime failed err %u\n", GetLastError() ); + SetLastError( 0xdeadbeef ); + ret = pRtlQueryUnbiasedInterruptTime( NULL ); + ok( !ret, "RtlQueryUnbiasedInterruptTime succeeded\n" ); + ok( GetLastError() == ERROR_INVALID_PARAMETER, "wrong error %u\n", GetLastError() ); + } + else win_skip( "RtlQueryUnbiasedInterruptTime not supported\n" ); +} + START_TEST(time) { HMODULE hKernel = GetModuleHandleA("kernel32"); @@ -1039,7 +1071,9 @@ START_TEST(time) pGetDynamicTimeZoneInformation = (void *)GetProcAddress(hKernel, "GetDynamicTimeZoneInformation"); pGetSystemTimePreciseAsFileTime = (void *)GetProcAddress(hKernel, "GetSystemTimePreciseAsFileTime"); pGetTimeZoneInformationForYear = (void *)GetProcAddress(hKernel, "GetTimeZoneInformationForYear"); + pQueryUnbiasedInterruptTime = (void *)GetProcAddress(hKernel, "QueryUnbiasedInterruptTime"); pNtGetTickCount = (void *)GetProcAddress(hntdll, "NtGetTickCount"); + pRtlQueryUnbiasedInterruptTime = (void *)GetProcAddress(hntdll, "RtlQueryUnbiasedInterruptTime");
test_conversions(); test_invalid_arg(); @@ -1055,4 +1089,5 @@ START_TEST(time) test_GetSystemTimePreciseAsFileTime(); test_GetTimeZoneInformationForYear(); test_GetTickCount(); + test_QueryUnbiasedInterruptTime(); } diff --git a/dlls/ntdll/time.c b/dlls/ntdll/time.c index 4e3d5583c7..7f79c3e4ff 100644 --- a/dlls/ntdll/time.c +++ b/dlls/ntdll/time.c @@ -1121,8 +1121,13 @@ NTSTATUS WINAPI NtSetSystemTime(const LARGE_INTEGER *NewTime, LARGE_INTEGER *Old /*********************************************************************** * RtlQueryUnbiasedInterruptTime [NTDLL.@] */ -NTSTATUS WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG *time) +BOOL WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG *time) { + if (!time) + { + RtlSetLastWin32ErrorAndNtStatusFromNtStatus( STATUS_INVALID_PARAMETER ); + return FALSE; + } *time = monotonic_counter(); - return STATUS_SUCCESS; + return TRUE; } diff --git a/include/winternl.h b/include/winternl.h index 9e7e2bad93..0122684483 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -2849,7 +2849,7 @@ NTSYSAPI BOOL WINAPI RtlQueryPerformanceFrequency(LARGE_INTEGER*); NTSYSAPI NTSTATUS WINAPI RtlQueryProcessDebugInformation(ULONG,ULONG,PDEBUG_BUFFER); NTSYSAPI NTSTATUS WINAPI RtlQueryRegistryValues(ULONG, PCWSTR, PRTL_QUERY_REGISTRY_TABLE, PVOID, PVOID); NTSYSAPI NTSTATUS WINAPI RtlQueryTimeZoneInformation(RTL_TIME_ZONE_INFORMATION*); -NTSYSAPI NTSTATUS WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG*); +NTSYSAPI BOOL WINAPI RtlQueryUnbiasedInterruptTime(ULONGLONG*); NTSYSAPI NTSTATUS WINAPI RtlQueueWorkItem(PRTL_WORK_ITEM_ROUTINE,PVOID,ULONG); NTSYSAPI void WINAPI RtlRaiseException(PEXCEPTION_RECORD); NTSYSAPI void WINAPI RtlRaiseStatus(NTSTATUS);