[WINSRV] Add a hack to fix giving the api port to win32k

- Register our api port with win32k in SrvRegisterLogonProcess because UserClientConnect is never really called.

[NTUSER] Silence a noisy trace
This commit is contained in:
Giannis Adamopoulos 2018-12-16 13:14:56 +02:00
parent dad76af8a4
commit 3ec7b163c9
2 changed files with 29 additions and 1 deletions

View file

@ -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;

View file

@ -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;
}