(PVOID)User32CallEventProcFromKernel;
NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADMENU] =
(PVOID)User32CallLoadMenuFromKernel;
+ NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_CLIENTTHREADSTARTUP] =
+ (PVOID)User32CallClientThreadSetupFromKernel;
NtUserProcessConnect( NtCurrentProcess(),
&UserCon,
gHandleEntries = SharedPtrToUser(gHandleTable->handles);
}
+
+NTSTATUS
+WINAPI
+User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength)
+{
+ ERR("GetConnected\n");
+ return ZwCallbackReturn(NULL, 0, STATUS_SUCCESS);
+}
+
#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
{
User32CallEventProcFromKernel(PVOID Arguments, ULONG ArgumentLength);
NTSTATUS WINAPI
User32CallLoadMenuFromKernel(PVOID Arguments, ULONG ArgumentLength);
+NTSTATUS WINAPI
+User32CallClientThreadSetupFromKernel(PVOID Arguments, ULONG ArgumentLength);
#endif /* __INCLUDE_USER32_CALLBACK_H */
HMENU APIENTRY co_IntCallLoadMenu(HINSTANCE,PUNICODE_STRING);
+NTSTATUS APIENTRY co_IntClientThreadSetup(VOID);
+
#endif /* _WIN32K_CALLBACK_H */
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 */
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.
// 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.