Module: wine Branch: master Commit: ce9fc213a734a636fdfd020f0551affaf67411da URL: https://source.winehq.org/git/wine.git/?a=commit;h=ce9fc213a734a636fdfd020f0...
Author: Jacek Caban jacek@codeweavers.com Date: Wed Oct 13 14:54:21 2021 +0200
win32u: Move NtUserSetThreadDesktop implementation from user32.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/user32/user_main.c | 2 +- dlls/user32/winstation.c | 8 +------- dlls/win32u/syscall.c | 1 + dlls/win32u/win32u.spec | 2 +- dlls/win32u/winstation.c | 18 ++++++++++++++++++ dlls/wow64win/syscall.h | 3 ++- dlls/wow64win/user.c | 7 +++++++ include/ntuser.h | 1 + 8 files changed, 32 insertions(+), 10 deletions(-)
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c index 0bf9eac434f..5a786ad7f83 100644 --- a/dlls/user32/user_main.c +++ b/dlls/user32/user_main.c @@ -311,7 +311,7 @@ static void winstation_init(void) { handle = CreateDesktopW( desktop ? desktop : get_default_desktop(), NULL, NULL, 0, DESKTOP_ALL_ACCESS, NULL ); - if (handle) SetThreadDesktop( handle ); + if (handle) NtUserSetThreadDesktop( handle ); } HeapFree( GetProcessHeap(), 0, buffer );
diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c index 8150a7c87ec..a8140c34b8d 100644 --- a/dlls/user32/winstation.c +++ b/dlls/user32/winstation.c @@ -362,14 +362,8 @@ HDESK WINAPI OpenDesktopW( LPCWSTR name, DWORD flags, BOOL inherit, ACCESS_MASK */ BOOL WINAPI SetThreadDesktop( HDESK handle ) { - BOOL ret; + BOOL ret = NtUserSetThreadDesktop( handle );
- SERVER_START_REQ( set_thread_desktop ) - { - req->handle = wine_server_obj_handle( handle ); - ret = !wine_server_call_err( req ); - } - SERVER_END_REQ; if (ret) /* reset the desktop windows */ { struct user_thread_info *thread_info = get_user_thread_info(); diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c index a6e5be579fc..7ea1f30e3f9 100644 --- a/dlls/win32u/syscall.c +++ b/dlls/win32u/syscall.c @@ -99,6 +99,7 @@ static void * const syscalls[] = NtUserGetProcessWindowStation, NtUserGetThreadDesktop, NtUserSetProcessWindowStation, + NtUserSetThreadDesktop, };
static BYTE arguments[ARRAY_SIZE(syscalls)]; diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec index 88b30cfae28..c24957a224c 100644 --- a/dlls/win32u/win32u.spec +++ b/dlls/win32u/win32u.spec @@ -1232,7 +1232,7 @@ @ stub NtUserSetSystemMenu @ stub NtUserSetSystemTimer @ stub NtUserSetTargetForResourceBrokering -@ stub NtUserSetThreadDesktop +@ stdcall -syscall NtUserSetThreadDesktop(long) @ stub NtUserSetThreadInputBlocked @ stub NtUserSetThreadLayoutHandles @ stub NtUserSetThreadState diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c index 54046c646c0..7cebe5d44d7 100644 --- a/dlls/win32u/winstation.c +++ b/dlls/win32u/winstation.c @@ -106,3 +106,21 @@ HDESK WINAPI NtUserGetThreadDesktop( DWORD thread ) SERVER_END_REQ; return ret; } + +/*********************************************************************** + * NtUserSetThreadDesktop (win32u.@) + */ +BOOL WINAPI NtUserSetThreadDesktop( HDESK handle ) +{ + BOOL ret; + + SERVER_START_REQ( set_thread_desktop ) + { + req->handle = wine_server_obj_handle( handle ); + ret = !wine_server_call_err( req ); + } + SERVER_END_REQ; + + /* FIXME: reset uset thread info */ + return ret; +} diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h index 3f01ce4f192..d6c4c5856bd 100644 --- a/dlls/wow64win/syscall.h +++ b/dlls/wow64win/syscall.h @@ -85,6 +85,7 @@ SYSCALL_ENTRY( NtUserCloseWindowStation ) \ SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \ SYSCALL_ENTRY( NtUserGetThreadDesktop ) \ - SYSCALL_ENTRY( NtUserSetProcessWindowStation ) + SYSCALL_ENTRY( NtUserSetProcessWindowStation ) \ + SYSCALL_ENTRY( NtUserSetThreadDesktop )
#endif /* __WOW64WIN_SYSCALL_H */ diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c index 93e31ad89a1..a4b26c5ac96 100644 --- a/dlls/wow64win/user.c +++ b/dlls/wow64win/user.c @@ -59,3 +59,10 @@ NTSTATUS WINAPI wow64_NtUserGetThreadDesktop( UINT *args )
return HandleToUlong( NtUserGetThreadDesktop( thread )); } + +NTSTATUS WINAPI wow64_NtUserSetThreadDesktop( UINT *args ) +{ + HDESK handle = get_handle( &args ); + + return NtUserSetThreadDesktop( handle ); +} diff --git a/include/ntuser.h b/include/ntuser.h index 5d7f22c47d6..b9d94ce66de 100644 --- a/include/ntuser.h +++ b/include/ntuser.h @@ -27,5 +27,6 @@ BOOL WINAPI NtUserCloseWindowStation( HWINSTA handle ); HWINSTA WINAPI NtUserGetProcessWindowStation(void); HDESK WINAPI NtUserGetThreadDesktop( DWORD thread ); BOOL WINAPI NtUserSetProcessWindowStation( HWINSTA handle ); +BOOL WINAPI NtUserSetThreadDesktop( HDESK handle );
#endif /* _NTUSER_ */