2 * PROJECT: Local Security Authority Server DLL
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: dll/win32/lsasrv/authport.c
5 * PURPOSE: LsaAuthenticationPort server routines
6 * COPYRIGHT: Copyright 2009 Eric Kohl
9 /* INCLUDES ****************************************************************/
11 #define WIN32_NO_STATUS
13 #define NTOS_MODE_USER
14 #include <ndk/ntndk.h>
19 #include "wine/debug.h"
21 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv
);
24 static HANDLE PortThreadHandle
= NULL
;
25 static HANDLE AuthPortHandle
= NULL
;
28 /* FUNCTIONS ***************************************************************/
31 AuthPortThreadRoutine(PVOID Param
)
33 LSASS_REQUEST Request
;
34 PPORT_MESSAGE Reply
= NULL
;
39 HANDLE ConnectionHandle
= NULL
;
43 TRACE("AuthPortThreadRoutine() called\n");
45 Status
= STATUS_SUCCESS
;
49 Status
= NtReplyWaitReceivePort(AuthPortHandle
,
53 if (!NT_SUCCESS(Status
))
55 TRACE("NtReplyWaitReceivePort() failed (Status %lx)\n", Status
);
59 TRACE("Received message\n");
61 if (Request
.Header
.u2
.s2
.Type
== LPC_CONNECTION_REQUEST
)
63 TRACE("Port connection request\n");
66 Status2
= NtAcceptConnectPort(&ConnectionHandle
,
74 Status2
= NtCompleteConnectPort(ConnectionHandle
);
77 else if (Request
.Header
.u2
.s2
.Type
== LPC_PORT_CLOSED
||
78 Request
.Header
.u2
.s2
.Type
== LPC_CLIENT_DIED
)
80 TRACE("Port closed or client died request\n");
82 // return STATUS_UNSUCCESSFUL;
84 else if (Request
.Header
.u2
.s2
.Type
== LPC_REQUEST
)
86 TRACE("Received request (Type: %lu)\n", Request
.Type
);
89 else if (Request
.Header
.u2
.s2
.Type
== LPC_DATAGRAM
)
91 TRACE("Received datagram\n");
101 StartAuthenticationPort(VOID
)
103 OBJECT_ATTRIBUTES ObjectAttributes
;
104 UNICODE_STRING PortName
;
108 RtlInitUnicodeString(&PortName
,
109 L
"\\LsaAuthenticationPort");
111 InitializeObjectAttributes(&ObjectAttributes
,
117 Status
= NtCreatePort(&AuthPortHandle
,
122 if (!NT_SUCCESS(Status
))
124 TRACE("NtCreatePort() failed (Status %lx)\n", Status
);
128 PortThreadHandle
= CreateThread(NULL
,
130 (LPTHREAD_START_ROUTINE
)AuthPortThreadRoutine
,
136 return STATUS_SUCCESS
;