Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenauthport.c
Go to the documentation of this file.
00001 /* 00002 * PROJECT: Local Security Authority Server DLL 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: dll/win32/lsasrv/authport.c 00005 * PURPOSE: LsaAuthenticationPort server routines 00006 * COPYRIGHT: Copyright 2009 Eric Kohl 00007 */ 00008 00009 /* INCLUDES ****************************************************************/ 00010 00011 00012 #include "lsasrv.h" 00013 00014 WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); 00015 00016 00017 static HANDLE PortThreadHandle = NULL; 00018 static HANDLE AuthPortHandle = NULL; 00019 00020 00021 /* FUNCTIONS ***************************************************************/ 00022 00023 NTSTATUS WINAPI 00024 AuthPortThreadRoutine(PVOID Param) 00025 { 00026 LSASS_REQUEST Request; 00027 PPORT_MESSAGE Reply = NULL; 00028 NTSTATUS Status; 00029 00030 HANDLE ConnectionHandle = NULL; 00031 PVOID Context = NULL; 00032 BOOLEAN Accept; 00033 00034 TRACE("AuthPortThreadRoutine() called\n"); 00035 00036 Status = STATUS_SUCCESS; 00037 00038 for (;;) 00039 { 00040 Status = NtReplyWaitReceivePort(AuthPortHandle, 00041 0, 00042 Reply, 00043 &Request.Header); 00044 if (!NT_SUCCESS(Status)) 00045 { 00046 TRACE("NtReplyWaitReceivePort() failed (Status %lx)\n", Status); 00047 break; 00048 } 00049 00050 TRACE("Received message\n"); 00051 00052 if (Request.Header.u2.s2.Type == LPC_CONNECTION_REQUEST) 00053 { 00054 TRACE("Port connection request\n"); 00055 00056 Accept = TRUE; 00057 NtAcceptConnectPort(&ConnectionHandle, 00058 &Context, 00059 &Request.Header, 00060 Accept, 00061 NULL, 00062 NULL); 00063 00064 00065 NtCompleteConnectPort(ConnectionHandle); 00066 00067 } 00068 else if (Request.Header.u2.s2.Type == LPC_PORT_CLOSED || 00069 Request.Header.u2.s2.Type == LPC_CLIENT_DIED) 00070 { 00071 TRACE("Port closed or client died request\n"); 00072 00073 // return STATUS_UNSUCCESSFUL; 00074 } 00075 else if (Request.Header.u2.s2.Type == LPC_REQUEST) 00076 { 00077 TRACE("Received request (Type: %lu)\n", Request.Type); 00078 00079 } 00080 else if (Request.Header.u2.s2.Type == LPC_DATAGRAM) 00081 { 00082 TRACE("Received datagram\n"); 00083 00084 } 00085 } 00086 00087 return Status; 00088 } 00089 00090 00091 NTSTATUS 00092 StartAuthenticationPort(VOID) 00093 { 00094 OBJECT_ATTRIBUTES ObjectAttributes; 00095 UNICODE_STRING PortName; 00096 DWORD ThreadId; 00097 NTSTATUS Status; 00098 00099 RtlInitUnicodeString(&PortName, 00100 L"\\LsaAuthenticationPort"); 00101 00102 InitializeObjectAttributes(&ObjectAttributes, 00103 &PortName, 00104 0, 00105 NULL, 00106 NULL); 00107 00108 Status = NtCreatePort(&AuthPortHandle, 00109 &ObjectAttributes, 00110 0, 00111 0x100, 00112 0x2000); 00113 if (!NT_SUCCESS(Status)) 00114 { 00115 TRACE("NtCreatePort() failed (Status %lx)\n", Status); 00116 return Status; 00117 } 00118 00119 PortThreadHandle = CreateThread(NULL, 00120 0x1000, 00121 (LPTHREAD_START_ROUTINE)AuthPortThreadRoutine, 00122 NULL, 00123 0, 00124 &ThreadId); 00125 00126 00127 return STATUS_SUCCESS; 00128 } 00129 00130 /* EOF */ Generated on Thu May 24 2012 04:24:52 for ReactOS by
1.7.6.1
|