diff --git a/win32ss/user/ntuser/ntstubs.c b/win32ss/user/ntuser/ntstubs.c index fdb9a7b5588..44cbb5af3b2 100644 --- a/win32ss/user/ntuser/ntstubs.c +++ b/win32ss/user/ntuser/ntstubs.c @@ -797,8 +797,8 @@ NtUserSetInformationThread(IN HANDLE ThreadHandle, { HANDLE CsrPortHandle; - ERR("Set CSR API Port for Win32k\n"); + TRACE("Set CSR API Port for Win32k\n"); if (ThreadInformationLength != sizeof(CsrPortHandle)) { Status = STATUS_INFO_LENGTH_MISMATCH; diff --git a/win32ss/user/winsrv/usersrv/register.c b/win32ss/user/winsrv/usersrv/register.c index 0070a3407d7..0a521bcdd4e 100644 --- a/win32ss/user/winsrv/usersrv/register.c +++ b/win32ss/user/winsrv/usersrv/register.c @@ -20,6 +20,10 @@ static BOOLEAN ServicesProcessIdValid = FALSE; ULONG_PTR ServicesProcessId = 0; ULONG_PTR LogonProcessId = 0; +#if 1 //HACK! See use below +extern HANDLE CsrApiPort; +#endif + /* PUBLIC SERVER APIS *********************************************************/ CSR_API(SrvRegisterLogonProcess) @@ -45,6 +49,30 @@ CSR_API(SrvRegisterLogonProcess) LogonProcessId = 0; } +#if 1 //HAAAACK. This should be done in UserClientConnect which is never called! + + /* Check if we don't have an API port yet */ + if (CsrApiPort == NULL) + { + NTSTATUS Status; + + /* Query the API port and save it globally */ + CsrApiPort = CsrQueryApiPort(); + + DPRINT("Giving win32k our api port\n"); + + /* Inform win32k about the API port */ + Status = NtUserSetInformationThread(NtCurrentThread(), + UserThreadCsrApiPort, + &CsrApiPort, + sizeof(CsrApiPort)); + if (!NT_SUCCESS(Status)) + { + return Status; + } + } +#endif + return STATUS_SUCCESS; }