ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

authport.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.