more detailed fake info in GetUserObjectInformationW...

Arthur L. Jones aljones at lbl.gov
Fri Sep 20 12:42:24 CDT 2002


Changelog:
    Attempt to fill in fake information in GetUserObjectInformationW
in order to get an XP app to run.  The output is the same as XP for
a test program, but the code is otherwise useless...
-------------- next part --------------
Index: dlls/user/misc.c
===================================================================
RCS file: /home/wine/wine/dlls/user/misc.c,v
retrieving revision 1.9
diff -u -r1.9 misc.c
--- dlls/user/misc.c	28 Jul 2002 23:48:27 -0000	1.9
+++ dlls/user/misc.c	20 Sep 2002 17:25:32 -0000
@@ -68,7 +68,7 @@
 HWINSTA WINAPI GetProcessWindowStation(void)
 {
     FIXME("(void): stub\n");
-    return (HWINSTA)1;
+    return (HWINSTA)2004;
 }
 
 
@@ -88,7 +88,7 @@
 DWORD WINAPI GetThreadDesktop( DWORD dwThreadId )
 {
     FIXME("(%lx): stub\n",dwThreadId);
-    return 1;
+    return 2000;
 }
 
 
Index: include/user.h
===================================================================
RCS file: /home/wine/wine/include/user.h,v
retrieving revision 1.41
diff -u -r1.41 user.h
--- include/user.h	28 Aug 2002 00:39:39 -0000	1.41
+++ include/user.h	20 Sep 2002 17:25:32 -0000
@@ -145,4 +145,20 @@
 #define HACCEL_32(h16)  ((HACCEL)(ULONG_PTR)(h16))
 #define HACCEL_16(h32)  (LOWORD(h32))
 
+/* GetUserObjectInformation and friends... */
+#define UOI_FLAGS       1
+#define UOI_NAME        2
+#define UOI_TYPE        3
+#define UOI_USER_SID    4
+
+#define WSF_VISIBLE     1
+#define DF_ALLOWOTHERACCOUNTHOOK  1
+
+typedef struct tagUSEROBJECTFLAGS {
+   BOOL fInherit;
+   BOOL fReserved;
+   DWORD dwFlags;
+} USEROBJECTFLAGS;
+
+
 #endif  /* __WINE_USER_H */
Index: windows/user.c
===================================================================
RCS file: /home/wine/wine/windows/user.c,v
retrieving revision 1.86
diff -u -r1.86 user.c
--- windows/user.c	31 May 2002 23:06:54 -0000	1.86
+++ windows/user.c	20 Sep 2002 17:25:33 -0000
@@ -642,12 +642,64 @@
 {	FIXME_(win32)("(0x%x %i %p %ld %p),stub!\n", hObj, nIndex, pvInfo, nLength, lpnLen );
 	return TRUE;
 }
+
+/* is this handle a window station? */
+static BOOL UserHandleIsWS(HANDLE hObj) {  return (hObj==(DWORD) 2004); }
+
 /***********************************************************************
  *		GetUserObjectInformationW (USER32.@)
+ *
+ * FIXME: This is a horrific hack! it acts like win xp, 
+ *          but it doesn't actually do anything!
  */
 BOOL WINAPI GetUserObjectInformationW( HANDLE hObj, INT nIndex, LPVOID pvInfo, DWORD nLength, LPDWORD lpnLen )
-{	FIXME_(win32)("(0x%x %i %p %ld %p),stub!\n", hObj, nIndex, pvInfo, nLength, lpnLen );
-	return TRUE;
+{
+   if (nIndex==UOI_FLAGS) {
+      USEROBJECTFLAGS uof, *nuof = (USEROBJECTFLAGS *) pvInfo;
+      
+      if (pvInfo!=NULL && nLength>=sizeof(uof)) {
+	 uof.fInherit = 0;
+	 uof.fReserved = 0;
+	 uof.dwFlags = UserHandleIsWS(hObj) ? WSF_VISIBLE : 0;
+	 *nuof = uof;
+      }
+
+      if (lpnLen!=NULL) *lpnLen = sizeof(uof);
+
+      return TRUE;
+   }
+   else if (nIndex==UOI_NAME) {
+      WCHAR output[64];
+      const char *name = UserHandleIsWS(hObj) ? "WinSta0" : "Default";
+      const int len = MultiByteToWideChar(CP_ACP, 0, name, -1, output, sizeof(output));
+
+      if (pvInfo!=NULL) {
+	 wcsncpy(pvInfo, output, nLength/sizeof(output[0]));
+      }
+
+      if (lpnLen!=NULL) {
+	 *lpnLen = len*sizeof(output[0]);
+      }
+      return TRUE;
+   }
+   else if (nIndex==UOI_TYPE) {
+      WCHAR output[64];
+      const char *name = UserHandleIsWS(hObj) ? "WindowStation" : "Desktop";
+      const int len = MultiByteToWideChar(CP_ACP, 0, name, -1, output, sizeof(output));
+
+      if (pvInfo!=NULL) {
+	 wcsncpy(pvInfo, output, nLength/sizeof(output[0]));
+      }
+
+      if (lpnLen!=NULL) {
+	 *lpnLen = len*sizeof(output[0]);
+      }
+      return TRUE;
+   }
+   else if (nIndex==UOI_USER_SID) {
+   }
+   FIXME_(win32)("(0x%x %i %p %ld %p),stub!\n", hObj, nIndex, pvInfo, nLength, lpnLen );
+   return TRUE;
 }
 /***********************************************************************
  *		GetUserObjectSecurity (USER32.@)


More information about the wine-patches mailing list