Jacek Caban : win32u: Move NtUserSetObjectInformation implementation from user32.

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


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

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

win32u: Move NtUserSetObjectInformation implementation from user32.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/user32/user32.spec  |  2 +-
 dlls/user32/user_main.c  |  2 +-
 dlls/user32/winstation.c | 28 +---------------------------
 dlls/win32u/syscall.c    |  1 +
 dlls/win32u/win32u.spec  |  2 +-
 dlls/win32u/winstation.c | 25 +++++++++++++++++++++++++
 dlls/wow64win/syscall.h  |  1 +
 dlls/wow64win/user.c     | 10 ++++++++++
 include/ntuser.h         |  1 +
 9 files changed, 42 insertions(+), 30 deletions(-)

diff --git a/dlls/user32/user32.spec b/dlls/user32/user32.spec
index 97ad596e518..306f955b2a2 100644
--- a/dlls/user32/user32.spec
+++ b/dlls/user32/user32.spec
@@ -713,7 +713,7 @@
 @ stdcall SetThreadDpiAwarenessContext(ptr)
 @ stdcall SetTimer(long long long ptr)
 @ stdcall SetUserObjectInformationA(long long ptr long)
-@ stdcall SetUserObjectInformationW(long long ptr long)
+@ stdcall SetUserObjectInformationW(long long ptr long) NtUserSetObjectInformation
 @ stdcall SetUserObjectSecurity(long ptr ptr)
 @ stdcall SetWinEventHook(long long long ptr long long long)
 @ stdcall SetWindowCompositionAttribute(ptr ptr)
diff --git a/dlls/user32/user_main.c b/dlls/user32/user_main.c
index 5a786ad7f83..0046d475fbc 100644
--- a/dlls/user32/user_main.c
+++ b/dlls/user32/user_main.c
@@ -303,7 +303,7 @@ static void winstation_init(void)
                 flags.fInherit  = FALSE;
                 flags.fReserved = FALSE;
                 flags.dwFlags   = WSF_VISIBLE;
-                SetUserObjectInformationW( handle, UOI_FLAGS, &flags, sizeof(flags) );
+                NtUserSetObjectInformation( handle, UOI_FLAGS, &flags, sizeof(flags) );
             }
         }
     }
diff --git a/dlls/user32/winstation.c b/dlls/user32/winstation.c
index 1a955879f3d..e2c4f0f251f 100644
--- a/dlls/user32/winstation.c
+++ b/dlls/user32/winstation.c
@@ -461,33 +461,7 @@ BOOL WINAPI GetUserObjectInformationA( HANDLE handle, INT index, LPVOID info, DW
  */
 BOOL WINAPI SetUserObjectInformationA( HANDLE handle, INT index, LPVOID info, DWORD len )
 {
-    return SetUserObjectInformationW( handle, index, info, len );
-}
-
-
-/******************************************************************************
- *              SetUserObjectInformationW   (USER32.@)
- */
-BOOL WINAPI SetUserObjectInformationW( HANDLE handle, INT index, LPVOID info, DWORD len )
-{
-    BOOL ret;
-    const USEROBJECTFLAGS *obj_flags = info;
-
-    if (index != UOI_FLAGS || !info || len < sizeof(*obj_flags))
-    {
-        SetLastError( ERROR_INVALID_PARAMETER );
-        return FALSE;
-    }
-    /* FIXME: inherit flag */
-    SERVER_START_REQ( set_user_object_info )
-    {
-        req->handle    = wine_server_obj_handle( handle );
-        req->flags     = SET_USER_OBJECT_SET_FLAGS;
-        req->obj_flags = obj_flags->dwFlags;
-        ret = !wine_server_call_err( req );
-    }
-    SERVER_END_REQ;
-    return ret;
+    return NtUserSetObjectInformation( handle, index, info, len );
 }
 
 
diff --git a/dlls/win32u/syscall.c b/dlls/win32u/syscall.c
index 06fc68f00cf..f54098c5d4f 100644
--- a/dlls/win32u/syscall.c
+++ b/dlls/win32u/syscall.c
@@ -100,6 +100,7 @@ static void * const syscalls[] =
     NtUserGetProcessWindowStation,
     NtUserGetThreadDesktop,
     NtUserOpenInputDesktop,
+    NtUserSetObjectInformation,
     NtUserSetProcessWindowStation,
     NtUserSetThreadDesktop,
 };
diff --git a/dlls/win32u/win32u.spec b/dlls/win32u/win32u.spec
index 5c477f75bfd..c82e974be04 100644
--- a/dlls/win32u/win32u.spec
+++ b/dlls/win32u/win32u.spec
@@ -1213,7 +1213,7 @@
 @ stub NtUserSetMirrorRendering
 @ stub NtUserSetMonitorWorkArea
 @ stub NtUserSetMouseInputRateLimitingTimer
-@ stub NtUserSetObjectInformation
+@ stdcall -syscall NtUserSetObjectInformation(long long ptr long)
 @ stub NtUserSetParent
 @ stub NtUserSetPrecisionTouchPadConfiguration
 @ stub NtUserSetProcessDpiAwarenessContext
diff --git a/dlls/win32u/winstation.c b/dlls/win32u/winstation.c
index 6bf2cd5e2c1..e787cc3884c 100644
--- a/dlls/win32u/winstation.c
+++ b/dlls/win32u/winstation.c
@@ -246,3 +246,28 @@ BOOL WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info,
         return FALSE;
     }
 }
+
+/***********************************************************************
+ *           NtUserSetObjectInformation   (win32u.@)
+ */
+BOOL WINAPI NtUserSetObjectInformation( HANDLE handle, INT index, void *info, DWORD len )
+{
+    BOOL ret;
+    const USEROBJECTFLAGS *obj_flags = info;
+
+    if (index != UOI_FLAGS || !info || len < sizeof(*obj_flags))
+    {
+        SetLastError( ERROR_INVALID_PARAMETER );
+        return FALSE;
+    }
+    /* FIXME: inherit flag */
+    SERVER_START_REQ( set_user_object_info )
+    {
+        req->handle    = wine_server_obj_handle( handle );
+        req->flags     = SET_USER_OBJECT_SET_FLAGS;
+        req->obj_flags = obj_flags->dwFlags;
+        ret = !wine_server_call_err( req );
+    }
+    SERVER_END_REQ;
+    return ret;
+}
diff --git a/dlls/wow64win/syscall.h b/dlls/wow64win/syscall.h
index 154c21e5cc6..303bdf08c57 100644
--- a/dlls/wow64win/syscall.h
+++ b/dlls/wow64win/syscall.h
@@ -86,6 +86,7 @@
     SYSCALL_ENTRY( NtUserGetProcessWindowStation ) \
     SYSCALL_ENTRY( NtUserGetThreadDesktop ) \
     SYSCALL_ENTRY( NtUserOpenInputDesktop ) \
+    SYSCALL_ENTRY( NtUserSetObjectInformation ) \
     SYSCALL_ENTRY( NtUserSetProcessWindowStation ) \
     SYSCALL_ENTRY( NtUserSetThreadDesktop )
 
diff --git a/dlls/wow64win/user.c b/dlls/wow64win/user.c
index 47a7263ab46..59286969283 100644
--- a/dlls/wow64win/user.c
+++ b/dlls/wow64win/user.c
@@ -86,3 +86,13 @@ NTSTATUS WINAPI wow64_NtUserGetObjectInformation( UINT *args )
 
     return NtUserGetObjectInformation( handle, index, info, len, needed );
 }
+
+NTSTATUS WINAPI wow64_NtUserSetObjectInformation( UINT *args )
+{
+    HANDLE handle = get_handle( &args );
+    INT index = get_ulong( &args );
+    void *info = get_ptr( &args );
+    DWORD len = get_ulong( &args );
+
+    return NtUserSetObjectInformation( handle, index, info, len );
+}
diff --git a/include/ntuser.h b/include/ntuser.h
index 0478ab69967..e5d16afdd53 100644
--- a/include/ntuser.h
+++ b/include/ntuser.h
@@ -28,6 +28,7 @@ BOOL    WINAPI NtUserGetObjectInformation( HANDLE handle, INT index, void *info,
                                            DWORD len, DWORD *needed );
 HWINSTA WINAPI NtUserGetProcessWindowStation(void);
 HDESK   WINAPI NtUserGetThreadDesktop( DWORD thread );
+BOOL    WINAPI NtUserSetObjectInformation( HANDLE handle, INT index, void *info, DWORD len );
 HDESK   WINAPI NtUserOpenInputDesktop( DWORD flags, BOOL inherit, ACCESS_MASK access );
 BOOL    WINAPI NtUserSetProcessWindowStation( HWINSTA handle );
 BOOL    WINAPI NtUserSetThreadDesktop( HDESK handle );




More information about the wine-cvs mailing list