From: Rémi Bernon rbernon@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=53847 Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51537 --- dlls/win32u/tests/win32u.c | 52 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+)
diff --git a/dlls/win32u/tests/win32u.c b/dlls/win32u/tests/win32u.c index 87419f6fadb..8eb98034798 100644 --- a/dlls/win32u/tests/win32u.c +++ b/dlls/win32u/tests/win32u.c @@ -24,6 +24,7 @@ #include "winbase.h" #include "ntuser.h"
+static BOOL (WINAPI *pNtUserEnableMouseInPointer)( BOOL );
static void test_NtUserEnumDisplayDevices(void) { @@ -822,6 +823,46 @@ static void test_inter_process_child( HWND hwnd ) PostMessageA( hwnd, WM_USER, 0, 0 ); }
+static void test_NtUserEnableMouseInPointer_process( const char *arg ) +{ + HANDLE win32u = GetModuleHandleW( L"win32u" ); + DWORD enable = strtoul( arg, 0, 10 ); + BOOL ret; + + pNtUserEnableMouseInPointer = (void *)GetProcAddress( win32u, "NtUserEnableMouseInPointer" ); + + ret = pNtUserEnableMouseInPointer( enable ); + todo_wine + ok( ret, "NtUserEnableMouseInPointer failed, error %lu\n", GetLastError() ); + + SetLastError( 0xdeadbeef ); + ret = pNtUserEnableMouseInPointer( !enable ); + ok( !ret, "NtUserEnableMouseInPointer succeeded\n" ); + todo_wine + ok( GetLastError() == ERROR_ACCESS_DENIED, "got error %lu\n", GetLastError() ); + + ret = pNtUserEnableMouseInPointer( enable ); + todo_wine + ok( ret, "NtUserEnableMouseInPointer failed, error %lu\n", GetLastError() ); +} + +static void test_NtUserEnableMouseInPointer( char **argv, BOOL enable ) +{ + STARTUPINFOA startup = {.cb = sizeof(STARTUPINFOA)}; + PROCESS_INFORMATION info = {0}; + char cmdline[MAX_PATH * 2]; + BOOL ret; + + sprintf( cmdline, "%s %s NtUserEnableMouseInPointer %u", argv[0], argv[1], enable ); + ret = CreateProcessA( NULL, cmdline, NULL, NULL, FALSE, 0, NULL, NULL, &startup, &info ); + ok( ret, "CreateProcessA failed, error %lu\n", GetLastError() ); + if (!ret) return; + + wait_child_process( info.hProcess ); + CloseHandle( info.hThread ); + CloseHandle( info.hProcess ); +} + START_TEST(win32u) { char **argv; @@ -837,6 +878,14 @@ START_TEST(win32u) return; }
+ if (argc > 3 && !strcmp( argv[2], "NtUserEnableMouseInPointer" )) + { + winetest_push_context( "enable %s", argv[3] ); + test_NtUserEnableMouseInPointer_process( argv[3] ); + winetest_pop_context(); + return; + } + test_NtUserEnumDisplayDevices(); test_window_props(); test_class(); @@ -851,4 +900,7 @@ START_TEST(win32u)
test_NtUserCloseWindowStation(); test_NtUserDisplayConfigGetDeviceInfo(); + + test_NtUserEnableMouseInPointer( argv, FALSE ); + test_NtUserEnableMouseInPointer( argv, TRUE ); }