}
}
-STATIC
+static
VOID
STDCALL
ClientConnectionThread(HANDLE ServerPort)
{
NTSTATUS Status;
- CSR_API_MESSAGE Request;
+ BYTE RawRequest[LPC_MAX_DATA_LENGTH];
+ PCSR_API_MESSAGE Request = (PCSR_API_MESSAGE)RawRequest;
PCSR_API_MESSAGE Reply;
PCSRSS_PROCESS_DATA ProcessData;
Status = NtReplyWaitReceivePort(ServerPort,
0,
&Reply->Header,
- &Request.Header);
+ &Request->Header);
if (!NT_SUCCESS(Status))
{
DPRINT1("CSR: NtReplyWaitReceivePort failed\n");
}
/* If the connection was closed, handle that */
- if (Request.Header.u2.s2.Type == LPC_PORT_CLOSED)
+ if (Request->Header.u2.s2.Type == LPC_PORT_CLOSED)
{
- CsrFreeProcessData( Request.Header.ClientId.UniqueProcess );
+ CsrFreeProcessData( Request->Header.ClientId.UniqueProcess );
break;
}
DPRINT("CSR: Got CSR API: %x [Message Origin: %x]\n",
- Request.Type,
- Request.Header.ClientId.UniqueProcess);
+ Request->Type,
+ Request->Header.ClientId.UniqueProcess);
/* Get the Process Data */
- ProcessData = CsrGetProcessData(Request.Header.ClientId.UniqueProcess);
+ ProcessData = CsrGetProcessData(Request->Header.ClientId.UniqueProcess);
if (ProcessData == NULL)
{
DPRINT1("CSR: Message %d: Unable to find data for process 0x%x\n",
- Request.Header.u2.s2.Type,
- Request.Header.ClientId.UniqueProcess);
+ Request->Header.u2.s2.Type,
+ Request->Header.ClientId.UniqueProcess);
break;
}
/* Call the Handler */
- CsrApiCallHandler(ProcessData, &Request);
+ CsrApiCallHandler(ProcessData, Request);
/* Send back the reply */
- Reply = &Request;
+ Reply = Request;
}
/* Close the port and exit the thread */
ServerApiPortThread (PVOID PortHandle)
{
NTSTATUS Status = STATUS_SUCCESS;
- PORT_MESSAGE Request;
+ BYTE RawRequest[sizeof(PORT_MESSAGE) + sizeof(CSR_CONNECTION_INFO)];
+ PPORT_MESSAGE Request = (PPORT_MESSAGE)RawRequest;
HANDLE hApiListenPort = * (PHANDLE) PortHandle;
HANDLE ServerPort = (HANDLE) 0;
HANDLE ServerThread = (HANDLE) 0;
REMOTE_PORT_VIEW LpcRead;
ServerPort = NULL;
- Status = NtListenPort (hApiListenPort, &Request);
+ Status = NtListenPort (hApiListenPort, Request);
if (!NT_SUCCESS(Status))
{
- DPRINT1("CSR: NtListenPort() failed\n");
+ DPRINT1("CSR: NtListenPort() failed, status=%x\n", Status);
break;
}
Status = NtAcceptConnectPort(& ServerPort,
break;
}
- ProcessData = CsrCreateProcessData(Request.ClientId.UniqueProcess);
+ ProcessData = CsrCreateProcessData(Request->ClientId.UniqueProcess);
if (ProcessData == NULL)
{
DPRINT1("Unable to allocate or find data for process 0x%x\n",
- Request.ClientId.UniqueProcess);
+ Request->ClientId.UniqueProcess);
Status = STATUS_UNSUCCESSFUL;
break;
}