Jacek Caban : win32u: Move NtUserSetThreadDesktop implementation from user32.

Alexandre Julliard julliard at winehq.org
Wed Oct 13 15:59:27 CDT 2021


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Wed Oct 13 14:54:21 2021 +0200

win32u: Move NtUserSetThreadDesktop implementation from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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_ */




More information about the wine-cvs mailing list