-- v2: ntdll: Implement NtQuerySystemInformationEx( SystemProcessorIdleCycleTimeInformation ) on Linux. kernel32: Implement QueryIdleProcessorCycleTime[Ex](). ntdll: Stub NtQuerySystemInformation[Ex]( SystemProcessorIdleCycleTimeInformation ).
From: Paul Gofman pgofman@codeweavers.com
--- dlls/ntdll/tests/info.c | 46 ++++++++++++++++++++++++++++++++++++++++ dlls/ntdll/unix/system.c | 20 +++++++++++++++++ dlls/wow64/system.c | 11 +++++++--- 3 files changed, 74 insertions(+), 3 deletions(-)
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index 8e8abbfb467..ba19b248e43 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -4019,6 +4019,51 @@ static void test_process_id(void) } }
+static void test_processor_idle_cycle_time(void) +{ + unsigned int cpu_count = NtCurrentTeb()->Peb->NumberOfProcessors; + ULONG64 buffer[64]; + NTSTATUS status; + USHORT group_id; + ULONG size; + + size = 0xdeadbeef; + status = pNtQuerySystemInformation( SystemProcessorIdleCycleTimeInformation, NULL, 0, &size ); + ok( status == STATUS_BUFFER_TOO_SMALL, "got %#lx.\n", status ); + ok( size == cpu_count * sizeof(*buffer), "got %#lx.\n", size ); + + size = 0xdeadbeef; + status = pNtQuerySystemInformation( SystemProcessorIdleCycleTimeInformation, buffer, 7, &size ); + ok( status == STATUS_BUFFER_TOO_SMALL, "got %#lx.\n", status ); + ok( size == cpu_count * sizeof(*buffer), "got %#lx.\n", size ); + + size = 0xdeadbeef; + status = pNtQuerySystemInformation( SystemProcessorIdleCycleTimeInformation, NULL, sizeof(buffer), &size ); + ok( status == STATUS_ACCESS_VIOLATION, "got %#lx.\n", status ); + ok( size == 0xdeadbeef, "got %#lx.\n", size ); + + size = 0xdeadbeef; + status = pNtQuerySystemInformation( SystemProcessorIdleCycleTimeInformation, buffer, sizeof(buffer), &size ); + ok( !status, "got %#lx.\n", status ); + ok( size == cpu_count * sizeof(*buffer), "got %#lx.\n", size ); + + memset( buffer, 0xcc, sizeof(buffer) ); + size = 0xdeadbeef; + status = pNtQuerySystemInformationEx( SystemProcessorIdleCycleTimeInformation, NULL, 0, buffer, sizeof(buffer), &size ); + ok( status == STATUS_INVALID_PARAMETER, "got %#lx.\n", status ); + ok( size == 0xdeadbeef, "got %#lx.\n", size ); + group_id = 50; + size = 0xdeadbeef; + status = pNtQuerySystemInformationEx( SystemProcessorIdleCycleTimeInformation, &group_id, sizeof(group_id), buffer, sizeof(buffer), &size ); + ok( status == STATUS_INVALID_PARAMETER, "got %#lx.\n", status ); + ok( size == 0xdeadbeef, "got %#lx.\n", size ); + group_id = 0; + size = 0xdeadbeef; + status = pNtQuerySystemInformationEx( SystemProcessorIdleCycleTimeInformation, &group_id, sizeof(group_id), buffer, sizeof(buffer), &size ); + ok( status == STATUS_SUCCESS, "got %#lx.\n", status ); + ok( size == cpu_count * sizeof(*buffer), "got %#lx.\n", size ); +} + START_TEST(info) { char **argv; @@ -4098,4 +4143,5 @@ START_TEST(info) test_system_debug_control(); test_process_token(argc, argv); test_process_id(); + test_processor_idle_cycle_time(); } diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index efb6e7f4579..7eba7ecdbf9 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -3258,6 +3258,13 @@ NTSTATUS WINAPI NtQuerySystemInformation( SYSTEM_INFORMATION_CLASS class, break; }
+ case SystemProcessorIdleCycleTimeInformation: /* 83 */ + { + ULONG group_id = 0; /* FIXME: should probably be current CPU group id. */ + + return NtQuerySystemInformationEx( class, &group_id, sizeof(group_id), info, size, ret_size ); + } + case SystemProcessIdInformation: /* 88 */ { SYSTEM_PROCESS_ID_INFORMATION *id = info; @@ -3407,6 +3414,19 @@ NTSTATUS WINAPI NtQuerySystemInformationEx( SYSTEM_INFORMATION_CLASS class,
switch (class) { + case SystemProcessorIdleCycleTimeInformation: + len = peb->NumberOfProcessors * sizeof(ULONG64); + if (!query || query_len < sizeof(USHORT) || *(USHORT *)query) return STATUS_INVALID_PARAMETER; + if (size < len) + { + ret = STATUS_BUFFER_TOO_SMALL; + break; + } + FIXME( "SystemProcessorIdleCycleTimeInformation stub.\n" ); + memset( info, 0, len ); + ret = STATUS_SUCCESS; + break; + case SystemLogicalProcessorInformationEx: { SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *p; diff --git a/dlls/wow64/system.c b/dlls/wow64/system.c index 6e78c462984..5f3056a4179 100644 --- a/dlls/wow64/system.c +++ b/dlls/wow64/system.c @@ -326,6 +326,7 @@ NTSTATUS WINAPI wow64_NtQuerySystemInformation( UINT *args ) case SystemCurrentTimeZoneInformation: /* RTL_TIME_ZONE_INFORMATION */ case SystemRecommendedSharedDataAlignment: /* ULONG */ case SystemFirmwareTableInformation: /* SYSTEM_FIRMWARE_TABLE_INFORMATION */ + case SystemProcessorIdleCycleTimeInformation: /* ULONG64[] */ case SystemDynamicTimeZoneInformation: /* RTL_DYNAMIC_TIME_ZONE_INFORMATION */ case SystemCodeIntegrityInformation: /* SYSTEM_CODEINTEGRITY_INFORMATION */ case SystemKernelDebuggerInformationEx: /* SYSTEM_KERNEL_DEBUGGER_INFORMATION_EX */ @@ -622,17 +623,19 @@ NTSTATUS WINAPI wow64_NtQuerySystemInformationEx( UINT *args ) HANDLE handle; NTSTATUS status;
- if (!query || query_len < sizeof(LONG)) return STATUS_INVALID_PARAMETER; - handle = LongToHandle( *(LONG *)query ); - switch (class) { + case SystemProcessorIdleCycleTimeInformation: + return NtQuerySystemInformationEx( class, query, query_len, ptr, len, retlen ); + case SystemLogicalProcessorInformationEx: /* SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX */ { SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX32 *ex32, *info32 = ptr; SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *ex, *info; ULONG size, size32, pos = 0, pos32 = 0;
+ if (!query || query_len < sizeof(LONG)) return STATUS_INVALID_PARAMETER; + handle = LongToHandle( *(LONG *)query ); status = NtQuerySystemInformationEx( class, &handle, sizeof(handle), NULL, 0, &size ); if (status != STATUS_INFO_LENGTH_MISMATCH) return status; info = Wow64AllocateTemp( size ); @@ -676,6 +679,8 @@ NTSTATUS WINAPI wow64_NtQuerySystemInformationEx( UINT *args )
case SystemCpuSetInformation: /* SYSTEM_CPU_SET_INFORMATION */ case SystemSupportedProcessorArchitectures: /* SYSTEM_SUPPORTED_PROCESSOR_ARCHITECTURES_INFORMATION */ + if (!query || query_len < sizeof(LONG)) return STATUS_INVALID_PARAMETER; + handle = LongToHandle( *(LONG *)query ); return NtQuerySystemInformationEx( class, &handle, sizeof(handle), ptr, len, retlen );
default:
From: Paul Gofman pgofman@codeweavers.com
--- dlls/kernel32/kernel32.spec | 4 +- dlls/kernel32/tests/time.c | 68 +++++++++++++++++++++++++++++++++ dlls/kernelbase/kernelbase.spec | 4 +- dlls/kernelbase/sync.c | 26 +++++++++++++ include/realtimeapiset.h | 2 +- 5 files changed, 99 insertions(+), 5 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec index c7fe7d7724e..5e4bfa5b4fd 100644 --- a/dlls/kernel32/kernel32.spec +++ b/dlls/kernel32/kernel32.spec @@ -1190,8 +1190,8 @@ @ stdcall -import QueryDosDeviceW(wstr ptr long) @ stdcall -import QueryFullProcessImageNameA(ptr long ptr ptr) @ stdcall -import QueryFullProcessImageNameW(ptr long ptr ptr) -# @ stub QueryIdleProcessorCycleTime -# @ stub QueryIdleProcessorCycleTimeEx +@ stdcall -import QueryIdleProcessorCycleTime(ptr ptr) +@ stdcall -import QueryIdleProcessorCycleTimeEx(long ptr ptr) @ stdcall QueryInformationJobObject(long long ptr long ptr) @ stdcall -import QueryMemoryResourceNotification(ptr ptr) @ stub QueryNumberOfEventLogRecords diff --git a/dlls/kernel32/tests/time.c b/dlls/kernel32/tests/time.c index 11feac72db0..55cecc696fb 100644 --- a/dlls/kernel32/tests/time.c +++ b/dlls/kernel32/tests/time.c @@ -1140,6 +1140,73 @@ static void test_QueryUnbiasedInterruptTime(void) else win_skip( "RtlQueryUnbiasedInterruptTime not supported\n" ); }
+static void test_processor_idle_cycle_time(void) +{ + unsigned int cpu_count = NtCurrentTeb()->Peb->NumberOfProcessors; + ULONG64 buffer[64]; + ULONG size; + DWORD err; + BOOL bret; + + SetLastError( 0xdeadbeef ); + size = 0; + bret = QueryIdleProcessorCycleTime( &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == cpu_count * sizeof(ULONG64), "got %lu.\n", size ); + + size = 4; + memset( buffer, 0xcc, sizeof(buffer) ); + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTime( &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == 4, "got %lu.\n", size ); + ok( buffer[0] == 0xcccccccccccccccc, "got %#I64x.\n", buffer[0] ); + + size = sizeof(buffer); + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTime( &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == sizeof(buffer), "got %lu.\n", size ); + + size = sizeof(buffer); + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTime( &size, buffer ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == cpu_count * sizeof(ULONG64), "got %lu.\n", size ); + + SetLastError( 0xdeadbeef ); + size = 0; + bret = QueryIdleProcessorCycleTimeEx( 0, &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == cpu_count * sizeof(ULONG64), "got %lu.\n", size ); + + size = 4; + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTimeEx( 0, &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == 4, "got %lu.\n", size ); + + size = sizeof(buffer); + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTimeEx( 0, &size, NULL ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == sizeof(buffer), "got %lu.\n", size ); + + size = sizeof(buffer); + SetLastError( 0xdeadbeef ); + bret = QueryIdleProcessorCycleTimeEx( 0, &size, buffer ); + err = GetLastError(); + ok( bret == TRUE && err == 0xdeadbeef, "got %d, %ld.\n", bret, err ); + ok( size == cpu_count * sizeof(ULONG64), "got %lu.\n", size ); +} + START_TEST(time) { HMODULE hKernel = GetModuleHandleA("kernel32"); @@ -1171,4 +1238,5 @@ START_TEST(time) test_GetTimeZoneInformationForYear(); test_GetTickCount(); test_QueryUnbiasedInterruptTime(); + test_processor_idle_cycle_time(); } diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec index a133380a27a..5a84ceea604 100644 --- a/dlls/kernelbase/kernelbase.spec +++ b/dlls/kernelbase/kernelbase.spec @@ -1233,8 +1233,8 @@ @ stdcall QueryFullProcessImageNameA(ptr long ptr ptr) @ stdcall QueryFullProcessImageNameW(ptr long ptr ptr) @ stdcall QueryIoRingCapabilities(ptr) -# @ stub QueryIdleProcessorCycleTime -# @ stub QueryIdleProcessorCycleTimeEx +@ stdcall QueryIdleProcessorCycleTime(ptr ptr) +@ stdcall QueryIdleProcessorCycleTimeEx(long ptr ptr) @ stdcall QueryInterruptTime(ptr) @ stdcall QueryInterruptTimePrecise(ptr) @ stdcall QueryMemoryResourceNotification(ptr ptr) diff --git a/dlls/kernelbase/sync.c b/dlls/kernelbase/sync.c index b2086207caa..1d935b02ddf 100644 --- a/dlls/kernelbase/sync.c +++ b/dlls/kernelbase/sync.c @@ -245,6 +245,32 @@ void WINAPI DECLSPEC_HOTPATCH QueryUnbiasedInterruptTimePrecise( ULONGLONG *time }
+/*********************************************************************** + * QueryIdleProcessorCycleTime (kernelbase.@) + */ +BOOL WINAPI QueryIdleProcessorCycleTime( ULONG *size, ULONG64 *times ) +{ + ULONG ret_size; + NTSTATUS status = NtQuerySystemInformation( SystemProcessorIdleCycleTimeInformation, times, *size, &ret_size ); + + if (!*size || !status) *size = ret_size; + return TRUE; +} + + +/*********************************************************************** + * QueryIdleProcessorCycleTimeEx (kernelbase.@) + */ +BOOL WINAPI QueryIdleProcessorCycleTimeEx( USHORT group_id, ULONG *size, ULONG64 *times ) +{ + ULONG ret_size; + NTSTATUS status = NtQuerySystemInformationEx( SystemProcessorIdleCycleTimeInformation, &group_id, sizeof(group_id), + times, *size, &ret_size ); + if (!*size || !status) *size = ret_size; + return TRUE; +} + + /*********************************************************************** * Waits ***********************************************************************/ diff --git a/include/realtimeapiset.h b/include/realtimeapiset.h index 124a7987c8c..200244916e5 100644 --- a/include/realtimeapiset.h +++ b/include/realtimeapiset.h @@ -26,7 +26,7 @@ extern "C" { WINBASEAPI HRESULT WINAPI ConvertAuxiliaryCounterToPerformanceCounter(ULONGLONG,ULONGLONG*,ULONGLONG*); WINBASEAPI HRESULT WINAPI ConvertPerformanceCounterToAuxiliaryCounter(ULONGLONG,ULONGLONG*,ULONGLONG*); WINBASEAPI HRESULT WINAPI QueryAuxiliaryCounterFrequency(ULONGLONG*); -WINBASEAPI BOOL WINAPI QueryIdleProcessorCycleTime(ULONG*,PULONG64*); +WINBASEAPI BOOL WINAPI QueryIdleProcessorCycleTime(ULONG*,ULONG64*); WINBASEAPI BOOL WINAPI QueryIdleProcessorCycleTimeEx(USHORT,ULONG*,ULONG64*); WINBASEAPI VOID WINAPI QueryInterruptTime(ULONGLONG*); WINBASEAPI VOID WINAPI QueryInterruptTimePrecise(ULONGLONG*);
From: Paul Gofman pgofman@codeweavers.com
--- dlls/ntdll/unix/system.c | 76 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 74 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/unix/system.c b/dlls/ntdll/unix/system.c index 7eba7ecdbf9..f87c9b09124 100644 --- a/dlls/ntdll/unix/system.c +++ b/dlls/ntdll/unix/system.c @@ -228,6 +228,7 @@ static SYSTEM_LOGICAL_PROCESSOR_INFORMATION *logical_proc_info; static unsigned int logical_proc_info_len, logical_proc_info_alloc_len; static SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX *logical_proc_info_ex; static unsigned int logical_proc_info_ex_size, logical_proc_info_ex_alloc_size; +static ULONG_PTR system_cpu_mask;
static pthread_mutex_t timezone_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -835,6 +836,7 @@ static BOOL logical_proc_info_add_group( DWORD num_cpus, ULONG_PTR mask ) dataex->Group.GroupInfo[0].ActiveProcessorMask = mask;
logical_proc_info_ex_size += dataex->Size; + system_cpu_mask |= mask; return TRUE; }
@@ -1278,6 +1280,35 @@ static NTSTATUS create_logical_proc_info(void) } #endif
+#ifdef linux + +static double tsc_from_jiffies[MAXIMUM_PROCESSORS]; + +static void init_tsc_frequency(void) +{ + unsigned long clk_tck = sysconf( _SC_CLK_TCK ); + char filename[128]; + unsigned long val; + unsigned int i; + FILE *f; + + for (i = 0; i < MAXIMUM_PROCESSORS; ++i) + { + if (system_cpu_mask && !(system_cpu_mask & ((ULONG_PTR)1 << i))) continue; + snprintf( filename, sizeof(filename), "/sys/devices/system/cpu/cpu%d/cpufreq/base_frequency", i ); + if (!(f = fopen( filename, "r" ))) break; + if (fscanf( f, "%lu", &val ) == 1) tsc_from_jiffies[i] = 1000.0 * val / clk_tck; + fclose( f ); + } +} +#else + +static void init_tsc_frequency(void) +{ +} + +#endif + /****************************************************************** * init_cpu_info * @@ -1336,6 +1367,7 @@ void init_cpu_info(void) logical_proc_info_ex = realloc( logical_proc_info_ex, logical_proc_info_ex_size ); logical_proc_info_ex_alloc_size = logical_proc_info_ex_size; } + init_tsc_frequency(); }
static NTSTATUS create_cpuset_info(SYSTEM_CPU_SET_INFORMATION *info) @@ -2124,6 +2156,47 @@ static void get_performance_info( SYSTEM_PERFORMANCE_INFORMATION *info ) info->TotalCommitLimit = (totalram + totalswap) / page_size; }
+#ifdef linux + +static void get_cpu_idle_cycle_times( ULONG64 *times ) +{ + unsigned int index, host_index, count; + char line[256], name[32]; + unsigned long long idle; + FILE *f; + + memset( times, 0, peb->NumberOfProcessors * sizeof(*times) ); + if (!(f = fopen( "/proc/stat", "r" ))) return; + + /* skip combined cpu statistics line. */ + fgets( line, sizeof(line), f ); + + index = 0; + while (fgets( line, sizeof(line), f ) && index < peb->NumberOfProcessors) + { + count = sscanf(line, "%s %*u %*u %*u %llu", name, &idle); + + if (count < 2 || strncmp( name, "cpu", 3 )) break; + host_index = atoi( name + 3 ); + if (system_cpu_mask && !(system_cpu_mask & ((ULONG_PTR)1 << host_index))) continue; + times[index] = idle * tsc_from_jiffies[host_index]; + ++index; + } + + fclose( f ); +} +#else + +static void get_cpu_idle_cycle_times( ULONG64 *times ) +{ + static int once; + + if (!once++) FIXME( "SystemProcessorIdleCycleTimeInformation stub.\n" ); + memset( times, 0, peb->NumberOfProcessors * sizeof(*times) ); +} + +#endif +
/* calculate the mday of dst change date, so that for instance Sun 5 Oct 2007 * (last Sunday in October of 2007) becomes Sun Oct 28 2007 @@ -3422,8 +3495,7 @@ NTSTATUS WINAPI NtQuerySystemInformationEx( SYSTEM_INFORMATION_CLASS class, ret = STATUS_BUFFER_TOO_SMALL; break; } - FIXME( "SystemProcessorIdleCycleTimeInformation stub.\n" ); - memset( info, 0, len ); + get_cpu_idle_cycle_times( info ); ret = STATUS_SUCCESS; break;
Hi,
It looks like your patch introduced the new failures shown below. Please investigate and fix them before resubmitting your patch. If they are not new, fixing them anyway would help a lot. Otherwise please ask for the known failures list to be updated.
The tests also ran into some preexisting test failures. If you know how to fix them that would be helpful. See the TestBot job for the details:
The full results can be found at: https://testbot.winehq.org/JobDetails.pl?Key=147573
Your paranoid android.
=== debian11b (64 bit WoW report) ===
dinput: hotplug.c:194: Test failed: 0x500: GetDeviceState returned 0 hid.c:722: Test failed: IOCTL_WINETEST_REMOVE_DEVICE failed, last error 6 hid.c:722: Test failed: IOCTL_WINETEST_REMOVE_DEVICE failed, last error 6 hid.c:750: Test failed: WaitForSingleObject returned 0x102 hotplug.c:1052: Test failed: controller added handler not invoked
dnsapi: query.c:139: Test failed: expected CNAME target L"winehq.org", got L"testbot.winehq.org" query.c:142: Test failed: expected record name L"winehq.org", got L"testbot.winehq.org" query.c:187: Test failed: expected CNAME target L"winehq.org", got L"testbot.winehq.org"
hid: device.c:123: Test failed: Failed to open L"\\?\hid#vid_1209&pid_0001#0&0000&0#{4d1e55b2-f16f-11cf-88cb-001111000030}", error 3. device.c:123: Test failed: Failed to open L"\\?\hid#vid_1209&pid_0001&col01#256&wine test&0&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}", error 3. device.c:123: Test failed: Failed to open L"\\?\hid#vid_1209&pid_0001&col02#256&wine test&0&0&0001#{4d1e55b2-f16f-11cf-88cb-001111000030}", error 3. device.c:123: Test failed: Failed to open L"\\?\hid#vid_845e&pid_0001#0&0000&0&0&0#{4d1e55b2-f16f-11cf-88cb-001111000030}", error 3. device.c:123: Test failed: Failed to open L"\\?\hid#vid_845e&pid_0002#0&0000&0&0&0#{4d1e55b2-f16f-11cf-88cb-001111000030}", error 3. device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:319: Test failed: Failed to get product string(0x6) device.c:323: Test failed: Failed to get preparsed data(0x6) device.c:325: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:170: Test failed: got error 3 device.c:173: Test failed: Failed to get preparsed data(0x6) device.c:175: Test failed: Failed to get Caps(0xc0110001) device.c:405: Test failed: Failed to get product string(0x6) device.c:409: Test failed: Failed to get preparsed data(0x6) device.c:411: Test failed: Failed to get Caps(0xc0110001)
user32: input.c:2206: Test failed: got 0 messages input.c:2216: Test failed: got 0 messages input.c:1933: Test failed: expected non-zero input.c:1939: Test failed: expected -1, got 0 input.c:1940: Test failed: expected 122, got -559038737 input.c:1941: Test failed: expected non-zero input.c:1945: Test failed: expected non-zero input.c:2080: Test failed: expected non-zero
This merge request was approved by Alexandre Julliard.
This merge request was approved by Alexandre Julliard.