- Add callback for client side thread startup. This is for bug 4785.
authorJames Tabor <james.tabor@reactos.org>
Mon, 17 Aug 2009 00:30:25 +0000 (00:30 +0000)
committerJames Tabor <james.tabor@reactos.org>
Mon, 17 Aug 2009 00:30:25 +0000 (00:30 +0000)
svn path=/trunk/; revision=42750

reactos/dll/win32/user32/misc/dllmain.c
reactos/include/reactos/win32k/callback.h
reactos/subsystems/win32/win32k/include/callback.h
reactos/subsystems/win32/win32k/ntuser/callback.c
reactos/subsystems/win32/win32k/ntuser/ntuser.c

index 01f5153..dc643e7 100644 (file)
@@ -232,6 +232,8 @@ Init(VOID)
       (PVOID)User32CallEventProcFromKernel;
    NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADMENU] =
       (PVOID)User32CallLoadMenuFromKernel;
+   NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_CLIENTTHREADSTARTUP] =
+      (PVOID)User32CallClientThreadSetupFromKernel;
 
    NtUserProcessConnect( NtCurrentProcess(),
                          &UserCon,
@@ -353,3 +355,12 @@ GetConnected(VOID)
   gHandleEntries = SharedPtrToUser(gHandleTable->handles);  
   
 }
+
+NTSTATUS
+WINAPI
+User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength)
+{
+  ERR("GetConnected\n");
+  return ZwCallbackReturn(NULL, 0, STATUS_SUCCESS);  
+}
+
index 74a405c..7dd9794 100644 (file)
@@ -8,7 +8,8 @@
 #define USER32_CALLBACK_HOOKPROC              (4)
 #define USER32_CALLBACK_EVENTPROC             (5)
 #define USER32_CALLBACK_LOADMENU              (6)
-#define USER32_CALLBACK_MAXIMUM               (6)
+#define USER32_CALLBACK_CLIENTTHREADSTARTUP   (7)
+#define USER32_CALLBACK_MAXIMUM               (7)
 
 typedef struct _WINDOWPROC_CALLBACK_ARGUMENTS
 {
@@ -84,5 +85,7 @@ NTSTATUS WINAPI
 User32CallEventProcFromKernel(PVOID Arguments, ULONG ArgumentLength);
 NTSTATUS WINAPI
 User32CallLoadMenuFromKernel(PVOID Arguments, ULONG ArgumentLength);
+NTSTATUS WINAPI
+User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength);
 
 #endif /* __INCLUDE_USER32_CALLBACK_H */
index 48136d8..61b8074 100644 (file)
@@ -56,4 +56,6 @@ IntCbFreeMemory(PVOID Data);
 
 HMENU APIENTRY co_IntCallLoadMenu(HINSTANCE,PUNICODE_STRING);
 
+NTSTATUS APIENTRY co_IntClientThreadSetup(VOID);
+
 #endif /* _WIN32K_CALLBACK_H */
index 3b351e4..17350ce 100644 (file)
@@ -703,4 +703,29 @@ co_IntCallLoadMenu( HINSTANCE hModule,
    return (HMENU)Result;
 }
 
+NTSTATUS
+APIENTRY
+co_IntClientThreadSetup(VOID)
+{
+   NTSTATUS Status;
+   ULONG ArgumentLength, ResultLength;
+   PVOID Argument, ResultPointer;
+
+   ArgumentLength = ResultLength = 0;
+   Argument = ResultPointer = NULL;
+
+   UserLeaveCo();
+
+   Status = KeUserModeCallback(USER32_CALLBACK_CLIENTTHREADSTARTUP,
+                               Argument,
+                               ArgumentLength,
+                               &ResultPointer,
+                               &ResultLength);
+
+   UserEnterCo();
+
+   return Status;
+}
+
+
 /* EOF */
index c32ffde..ec8c841 100644 (file)
@@ -94,6 +94,8 @@ UserInitialize(
   HANDLE  hPowerRequestEvent,
   HANDLE  hMediaRequestEvent)
 {
+    NTSTATUS Status;
+
 // Set W32PF_Flags |= (W32PF_READSCREENACCESSGRANTED | W32PF_IOWINSTA)
 // Create Object Directory,,, Looks like create workstation. "\\Windows\\WindowStations"
 // Create Event for Diconnect Desktop.
@@ -105,6 +107,15 @@ UserInitialize(
 //     Initialize User Screen.
 // }
 // Create ThreadInfo for this Thread!
+// {
+
+    GetW32ThreadInfo();
+   
+//    Callback to User32 Client Thread Setup
+
+    Status = co_IntClientThreadSetup();
+
+// }
 // Set Global SERVERINFO Error flags.
 // Load Resources.