A more likely demo VMS server (it should not block, because it is chain-called from the listenig thread in csrsrv.dll.

svn path=/trunk/; revision=17311
This commit is contained in:
Emanuele Aliberti 2005-08-11 20:43:24 +00:00
parent 749cee8834
commit 3119900771

View file

@ -37,30 +37,21 @@ HANDLE VmsApiPort = NULL;
VOID STDCALL VmsStaticServerThread (PVOID x)
{
NTSTATUS Status = STATUS_SUCCESS;
LPC_MAX_MESSAGE Request;
PPORT_MESSAGE Request = (PPORT_MESSAGE) x;
PPORT_MESSAGE Reply = NULL;
ULONG MessageType = 0;
while (TRUE)
DPRINT("VMSSRV: %s called\n", __FUNCTION__);
MessageType = Request->u2.s2.Type;
DPRINT("VMSSRV: %s received a message (Type=%d)\n",
__FUNCTION__, MessageType);
switch (MessageType)
{
Status = NtReplyWaitReceivePort (VmsApiPort,
0,
Reply,
(PPORT_MESSAGE) & Request);
if(NT_SUCCESS(Status))
{
MessageType = Request.Header.u2.s2.Type;
DPRINT("VMS: %s received a message (Type=%d)\n",
__FUNCTION__, MessageType);
switch(MessageType)
{
default:
continue;
}
}else{
DPRINT("VMS: %s: NtReplyWaitReceivePort failed (Status=%08lx)\n",
__FUNCTION__, Status);
}
default:
Reply = Request;
Status = NtReplyPort (VmsApiPort, Reply);
break;
}
}
@ -71,7 +62,23 @@ VOID STDCALL VmsStaticServerThread (PVOID x)
NTSTATUS STDCALL ServerDllInitialization (ULONG ArgumentCount,
LPWSTR *Argument)
{
return CsrAddStaticServerThread (VmsStaticServerThread);
NTSTATUS Status = STATUS_SUCCESS;
DPRINT("VMSSRV: %s called\n", __FUNCTION__);
// Get the listening port from csrsrv.dll
VmsApiPort = CsrQueryApiPort ();
if (NULL == VmsApiPort)
{
return STATUS_UNSUCCESSFUL;
}
// Register our message dispatcher
Status = CsrAddStaticServerThread (VmsStaticServerThread);
if (NT_SUCCESS(Status))
{
//TODO: perform the real VMS server internal initialization here
}
return Status;
}
/* EOF */