Alexandre Julliard : ntdll: Fix RtlQueryUnbiasedInterruptTime() prototype.

Alexandre Julliard julliard at winehq.org
Mon Dec 16 16:47:55 CST 2019


Module: wine
Branch: master
Commit: 8b0a7b25036f74ebe60b3bd5b7b6ecd37f5f1385
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=8b0a7b25036f74ebe60b3bd5b7b6ecd37f5f1385

Author: Alexandre Julliard <julliard at 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 at 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);




More information about the wine-cvs mailing list