- Add callback for client side thread startup. This is for bug 4785.

svn path=/trunk/; revision=42750
This commit is contained in:
James Tabor 2009-08-17 00:30:25 +00:00
parent 96e5d9e878
commit 2e771a7968
5 changed files with 53 additions and 1 deletions

View 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);
}

View 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 */

View file

@ -56,4 +56,6 @@ IntCbFreeMemory(PVOID Data);
HMENU APIENTRY co_IntCallLoadMenu(HINSTANCE,PUNICODE_STRING);
NTSTATUS APIENTRY co_IntClientThreadSetup(VOID);
#endif /* _WIN32K_CALLBACK_H */

View 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 */

View 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.