Modified: trunk/reactos/bootdata/hivesft.inf
Modified: trunk/reactos/bootdata/packages/reactos.dff
Modified: trunk/reactos/include/idl/idl.xml
Added: trunk/reactos/include/idl/lsa.idl
Modified: trunk/reactos/lib/advapi32/advapi32.h
Modified: trunk/reactos/lib/advapi32/advapi32.xml
Modified: trunk/reactos/lib/advapi32/sec/lsa.c
Modified: trunk/reactos/lib/advapi32/service/scm.c
Modified: trunk/reactos/lib/advapi32/service/sctrl.c
Deleted: trunk/reactos/lib/lsasrv/lsaport.c
Added: trunk/reactos/lib/lsasrv/lsarpc.c
Modified: trunk/reactos/lib/lsasrv/lsasrv.c
Modified: trunk/reactos/lib/lsasrv/lsasrv.xml
Modified: trunk/reactos/subsys/system/winlogon/winlogon.c
--- trunk/reactos/bootdata/hivesft.inf 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/bootdata/hivesft.inf 2006-01-15 13:19:57 UTC (rev 20890)
@@ -737,6 +737,7 @@
;HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\system32\cmd.exe"
HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe"
HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartServices",0x00010001,0x00000001
+HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartLsass",0x00010001,0x00000001
HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","StartGUI",0x00010001,0x00000000
HKLM,"SOFTWARE\ReactOS\Windows NT\CurrentVersion\Winlogon","Userinit",0x00020000,"%SystemRoot%\system32\userinit.exe"
--- trunk/reactos/bootdata/packages/reactos.dff 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/bootdata/packages/reactos.dff 2006-01-15 13:19:57 UTC (rev 20890)
@@ -193,6 +193,7 @@
subsys\system\explorer\notifyhook\notifyhook.dll 1
subsys\system\format\format.exe 1
subsys\system\ibrowser\ibrowser.exe 1
+subsys\system\lsass\lsass.exe 1
subsys\system\msconfig\msconfig.exe 1
subsys\system\msiexec\msiexec.exe 1
subsys\system\notepad\notepad.exe 1
--- trunk/reactos/include/idl/idl.xml 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/include/idl/idl.xml 2006-01-15 13:19:57 UTC (rev 20890)
@@ -35,4 +35,16 @@
<define name="_X86_" />
<file switches="--oldnames">eventlogrpc.idl</file>
</module>
+<module name="lsa_server" type="rpcserver">
+ <include base="ReactOS">.</include>
+ <include base="ReactOS">w32api/include</include>
+ <define name="_X86_" />
+ <file switches="--oldnames">lsa.idl</file>
+</module>
+<module name="lsa_client" type="rpcclient">
+ <include base="ReactOS">.</include>
+ <include base="ReactOS">w32api/include</include>
+ <define name="_X86_" />
+ <file switches="--oldnames">lsa.idl</file>
+</module>
</group>
--- trunk/reactos/include/idl/lsa.idl 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/include/idl/lsa.idl 2006-01-15 13:19:57 UTC (rev 20890)
@@ -0,0 +1,42 @@
+/*
+ * Local Security Authority interface definition
+ */
+
+#define BYTE unsigned char
+#define DWORD unsigned int
+#define BOOL unsigned long
+#define LPBYTE unsigned char*
+#define LPDWORD unsigned long*
+#define LSA_HANDLE unsigned long
+#define NTSTATUS unsigned int
+
+[
+ uuid(12345778-1234-abcd-ef00-0123456789ab),
+ version(0.0),
+ pointer_default(unique),
+ explicit_handle
+]
+interface lsarpc
+{
+/*
+ cpp_quote("#if 0")
+ typedef [handle, unique] wchar_t *LPWSTR;
+ typedef [handle, unique] char *LPSTR;
+ cpp_quote("#endif")
+ typedef [context_handle] void *LSA_HANDLE;
+ typedef LSA_HANDLE *PLSA_HANDLE;
+ typedef unsigned int NTSTATUS;
+*/
+
+ cpp_quote("#if 0")
+ typedef struct _LSA_UNICODE_STRING {
+ unsigned short Length;
+ unsigned short MaximumLength;
+ [size_is(MaximumLength)] wchar_t *Buffer;
+ } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING;
+ cpp_quote("#endif")
+
+ /* Function 0 */
+ NTSTATUS LsarClose(handle_t BindingHandle,
+ [in] LSA_HANDLE ObjectHandle);
+}
Property changes on: trunk/reactos/include/idl/lsa.idl
___________________________________________________________________
Name: svn:eol-style
+ native
--- trunk/reactos/lib/advapi32/advapi32.h 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/advapi32/advapi32.h 2006-01-15 13:19:57 UTC (rev 20890)
@@ -24,6 +24,10 @@
/* this has to go after the NDK when being used with the NDK */
#include <ntsecapi.h>
+#include <services/services.h>
+#include "svcctl_c.h"
+#include "lsa_c.h"
+
#ifndef HAS_FN_PROGRESSW
#define FN_PROGRESSW FN_PROGRESS
#endif
--- trunk/reactos/lib/advapi32/advapi32.xml 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/advapi32/advapi32.xml 2006-01-15 13:19:57 UTC (rev 20890)
@@ -2,11 +2,13 @@
<importlibrary definition="advapi32.def" />
<include base="advapi32">.</include>
<include base="scm_client">.</include>
+ <include base="lsa_client">.</include>
<define name="__USE_W32API" />
<define name="WINVER">0x600</define>
<define name="_WIN32_IE">0x0500</define>
<define name="_WIN32_WINNT">0x0600</define>
<library>scm_client</library>
+ <library>lsa_client</library>
<library>ntdll</library>
<library>kernel32</library>
<library>rpcrt4</library>
--- trunk/reactos/lib/advapi32/sec/lsa.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/advapi32/sec/lsa.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -16,24 +16,80 @@
#define NDEBUG
#include <debug.h>
+static handle_t LSABindingHandle = NULL;
-#ifndef SID_REVISION /* FIXME - Winnt.h */
-#define SID_REVISION (1) /* Current revision */
-#endif
+static VOID
+LSAHandleUnbind(handle_t *Handle)
+{
+ RPC_STATUS status;
+ if (*Handle == NULL)
+ return;
+ status = RpcBindingFree(Handle);
+ if (status)
+ {
+ DPRINT1("RpcBindingFree returned 0x%x\n", status);
+ }
+}
+
+static VOID
+LSAHandleBind(VOID)
+{
+ LPWSTR pszStringBinding;
+ RPC_STATUS status;
+ handle_t Handle;
+
+ if (LSABindingHandle != NULL)
+ return;
+
+ status = RpcStringBindingComposeW(NULL,
+ L"ncacn_np",
+ NULL,
+ L"\\pipe\\lsarpc",
+ NULL,
+ &pszStringBinding);
+ if (status)
+ {
+ DPRINT1("RpcStringBindingCompose returned 0x%x\n", status);
+ return;
+ }
+
+ /* Set the binding handle that will be used to bind to the server. */
+ status = RpcBindingFromStringBindingW(pszStringBinding,
+ &Handle);
+ if (status)
+ {
+ DPRINT1("RpcBindingFromStringBinding returned 0x%x\n", status);
+ }
+
+ status = RpcStringFreeW(&pszStringBinding);
+ if (status)
+ {
+ DPRINT1("RpcStringFree returned 0x%x\n", status);
+ }
+
+ if (InterlockedCompareExchangePointer(&LSABindingHandle,
+ (PVOID)Handle,
+ NULL) != NULL)
+ {
+ LSAHandleUnbind(&Handle);
+ }
+}
+
+
/*
- * @unimplemented
+ * @implemented
*/
NTSTATUS STDCALL
LsaClose(LSA_HANDLE ObjectHandle)
{
- static int count = 0;
- if (count++ < 20)
- {
- DPRINT1("(%p):LsaClose stub\n",ObjectHandle);
- }
- return 0xc0000000;
+ DPRINT("LsaClose(0x%p) called\n", ObjectHandle);
+
+ LSAHandleBind();
+
+ return LsarClose(LSABindingHandle,
+ (unsigned long)ObjectHandle);
}
/*
@@ -187,7 +243,7 @@
PLSA_REFERENCED_DOMAIN_LIST *ReferencedDomains,
PLSA_TRANSLATED_NAME *Names)
{
- return STATUS_NOT_IMPLEMENTED;
+ return STATUS_NONE_MAPPED;
}
/******************************************************************************
--- trunk/reactos/lib/advapi32/service/scm.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/advapi32/service/scm.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -13,7 +13,6 @@
/* INCLUDES ******************************************************************/
#include <advapi32.h>
-#include "svcctl_c.h"
#define NDEBUG
#include <debug.h>
--- trunk/reactos/lib/advapi32/service/sctrl.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/advapi32/service/sctrl.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -13,7 +13,6 @@
/* INCLUDES ******************************************************************/
#include <advapi32.h>
-#include <services/services.h>
#define NDEBUG
#include <debug.h>
--- trunk/reactos/lib/lsasrv/lsaport.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/lsasrv/lsaport.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -1,179 +0,0 @@
-/*
- */
-
-#define WIN32_NO_STATUS
-#include <windows.h>
-#define NTOS_MODE_USER
-#include <ndk/ntndk.h>
-
-//#define NDEBUG
-#include <debug.h>
-
-
-HANDLE PortThreadHandle = NULL;
-HANDLE ConnectPortHandle = NULL;
-HANDLE MessagePortHandle = NULL;
-
-
-static NTSTATUS
-InitializeLsaPort(VOID)
-{
- OBJECT_ATTRIBUTES ObjectAttributes;
- UNICODE_STRING PortName;
- PORT_MESSAGE Request;
- NTSTATUS Status;
-
- ConnectPortHandle = NULL;
- MessagePortHandle = NULL;
-
- RtlInitUnicodeString(&PortName,
- L"\\SeLsaCommandPort");
-
- InitializeObjectAttributes(&ObjectAttributes,
- &PortName,
- 0,
- NULL,
- NULL);
-
- Status = NtCreatePort(&ConnectPortHandle,
- &ObjectAttributes,
- 0,
- 0x100,
- 0x2000);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtCreatePort() failed (Status %lx)\n", Status);
- goto ByeBye;
- }
-
- Status = NtListenPort(ConnectPortHandle,
- &Request);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtListenPort() failed (Status %lx)\n", Status);
- goto ByeBye;
- }
-
- Status = NtAcceptConnectPort(&MessagePortHandle,
- ConnectPortHandle,
- NULL,
- TRUE,
- NULL,
- NULL);
- if (!NT_SUCCESS (Status))
- {
- DPRINT1("NtAcceptConnectPort() failed (Status %lx)\n", Status);
- goto ByeBye;
- }
-
- Status = NtCompleteConnectPort (MessagePortHandle);
- if (!NT_SUCCESS (Status))
- {
- DPRINT1("NtCompleteConnectPort() failed (Status %lx)\n", Status);
- goto ByeBye;
- }
-
-ByeBye:
- if (!NT_SUCCESS (Status))
- {
- if (ConnectPortHandle != NULL)
- NtClose (ConnectPortHandle);
-
- if (MessagePortHandle != NULL)
- NtClose (MessagePortHandle);
- }
-
- return Status;
-}
-
-
-static NTSTATUS
-ProcessPortMessage(VOID)
-{
- PORT_MESSAGE Request;
-// LPC_MAX_MESSAGE Reply;
- NTSTATUS Status;
-
-
- DPRINT1("ProcessPortMessage() called\n");
-
- Status = STATUS_SUCCESS;
-
- for (;;)
- {
- Status = NtReplyWaitReceivePort(MessagePortHandle,
- 0,
- NULL,
- &Request);
- if (!NT_SUCCESS(Status))
- {
- DPRINT1("NtReplyWaitReceivePort() failed (Status %lx)\n", Status);
- break;
- }
-
- DPRINT("Received message\n");
-
- if (Request.u2.s2.Type == LPC_PORT_CLOSED)
- {
- DPRINT("Port closed\n");
-
-// return STATUS_UNSUCCESSFUL;
- }
- if (Request.u2.s2.Type == LPC_REQUEST)
- {
- DPRINT("Received request\n");
-
- }
- else if (Request.u2.s2.Type == LPC_DATAGRAM)
- {
- DPRINT("Received datagram\n");
-
-// Message = (PIO_ERROR_LOG_MESSAGE)&Request.Data;
-
- }
- }
-
- return Status;
-}
-
-
-static NTSTATUS STDCALL
-PortThreadRoutine(PVOID Param)
-{
- NTSTATUS Status = STATUS_SUCCESS;
-
- Status = InitializeLsaPort();
- if (!NT_SUCCESS(Status))
- return Status;
-
- while (NT_SUCCESS(Status))
- {
- Status = ProcessPortMessage();
- }
-
- if (ConnectPortHandle != NULL)
- NtClose (ConnectPortHandle);
-
- if (MessagePortHandle != NULL)
- NtClose (MessagePortHandle);
-
- return Status;
-}
-
-
-BOOLEAN
-StartLsaPortThread(VOID)
-{
- DWORD ThreadId;
-
- PortThreadHandle = CreateThread(NULL,
- 0x1000,
- (LPTHREAD_START_ROUTINE)PortThreadRoutine,
- NULL,
- 0,
- &ThreadId);
-
- return (PortThreadHandle != NULL);
-}
-
-/* EOF */
--- trunk/reactos/lib/lsasrv/lsarpc.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/lsasrv/lsarpc.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -0,0 +1,67 @@
+/* INCLUDES ****************************************************************/
+
+#define WIN32_NO_STATUS
+#include <windows.h>
+#include <ntsecapi.h>
+#define NTOS_MODE_USER
+#include <ndk/ntndk.h>
+
+#include "lsa_s.h"
+
+#define NDEBUG
+#include <debug.h>
+
+
+/* GLOBALS *****************************************************************/
+
+/* VARIABLES ***************************************************************/
+
+
+/* FUNCTIONS ***************************************************************/
+
+VOID
+LsarStartRpcServer(VOID)
+{
+ RPC_STATUS Status;
+
+ DPRINT("LsarStartRpcServer() called");
+
+ Status = RpcServerUseProtseqEpW(L"ncacn_np",
+ 10,
+ L"\\pipe\\lsarpc",
+ NULL);
+ if (Status != RPC_S_OK)
+ {
+ DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status);
+ return;
+ }
+
+ Status = RpcServerRegisterIf(lsarpc_ServerIfHandle,
+ NULL,
+ NULL);
+ if (Status != RPC_S_OK)
+ {
+ DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status);
+ return;
+ }
+
+ Status = RpcServerListen(1, 20, TRUE);
+ if (Status != RPC_S_OK)
+ {
+ DPRINT1("RpcServerListen() failed (Status %lx)\n", Status);
+ return;
+ }
+
+ DPRINT("LsarStartRpcServer() done");
+}
+
+/* Function 0 */
+unsigned int
+LsarClose(IN handle_t BindingHandle,
+ IN unsigned long ObjectHandle)
+{
+ DPRINT1("LsarClose(0x%p) called!\n", ObjectHandle);
+ return STATUS_INVALID_HANDLE;
+}
+
+/* EOF */
Property changes on: trunk/reactos/lib/lsasrv/lsarpc.c
___________________________________________________________________
Name: svn:keywords
+ author date revision
Name: svn:eol-style
+ native
--- trunk/reactos/lib/lsasrv/lsasrv.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/lsasrv/lsasrv.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -3,22 +3,42 @@
#define NTOS_MODE_USER
#include <ndk/ntndk.h>
-#include <lsass/lsasrv.h>
-
#define NDEBUG
#include <debug.h>
-VOID StartLsaPortThread(VOID);
+VOID LsarStartRpcServer(VOID);
NTSTATUS STDCALL
LsapInitLsa(VOID)
{
- DPRINT1("LsapInitLsa() called\n");
+ HANDLE hEvent;
- StartLsaPortThread();
+ DPRINT1("LsapInitLsa() called\n");
- return STATUS_SUCCESS;
+ LsarStartRpcServer();
+
+ hEvent = OpenEventW(EVENT_MODIFY_STATE,
+ FALSE,
+ L"\\SECURITY_SERVICES_STARTED");
+ if (hEvent != NULL)
+ {
+ SetEvent(hEvent);
+ CloseHandle(hEvent);
+ }
+ return STATUS_SUCCESS;
}
+void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len)
+{
+ return RtlAllocateHeap(RtlGetProcessHeap(), HEAP_ZERO_MEMORY, len);
+}
+
+
+void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
+{
+ RtlFreeHeap(RtlGetProcessHeap(), 0, ptr);
+}
+
+
/* EOF */
--- trunk/reactos/lib/lsasrv/lsasrv.xml 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/lib/lsasrv/lsasrv.xml 2006-01-15 13:19:57 UTC (rev 20890)
@@ -1,14 +1,19 @@
<module name="lsasrv" type="win32dll" baseaddress="${BASEADDRESS_LSASRV}" entrypoint="0" installbase="system32" installname="lsasrv.dll">
<importlibrary definition="lsasrv.def" />
<include base="lsasrv">.</include>
+ <include base="lsa_server">.</include>
<define name="UNICODE" />
<define name="_UNICODE" />
<define name="__USE_W32API" />
+ <define name="WINVER">0x600</define>
+ <define name="_WIN32_WINNT">0x0600</define>
<linkerflag>-nostartfiles</linkerflag>
<linkerflag>-nostdlib</linkerflag>
+ <library>lsa_server</library>
<library>ntdll</library>
<library>kernel32</library>
- <file>lsaport.c</file>
+ <library>rpcrt4</library>
+ <file>lsarpc.c</file>
<file>lsasrv.c</file>
<file>lsasrv.rc</file>
</module>
--- trunk/reactos/subsys/system/winlogon/winlogon.c 2006-01-15 12:30:17 UTC (rev 20889)
+++ trunk/reactos/subsys/system/winlogon/winlogon.c 2006-01-15 13:19:57 UTC (rev 20890)
@@ -16,7 +16,7 @@
#include <debug.h>
#define SUPPORT_CONSOLESTART 1
-#define START_LSASS 0
+#define START_LSASS 1
/* GLOBALS ******************************************************************/
@@ -161,11 +161,12 @@
BOOLEAN Result;
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInformation;
+ WCHAR ServiceString[] = L"lsass.exe";
LsassInitEvent = CreateEvent(NULL,
TRUE,
FALSE,
- L"\\LsassInitDone");
+ L"\\SECURITY_SERVICES_STARTED");
if (LsassInitEvent == NULL)
{
@@ -183,10 +184,10 @@
StartupInfo.cbReserved2 = 0;
StartupInfo.lpReserved2 = 0;
- Result = CreateProcess(L"lsass.exe",
+ Result = CreateProcess(NULL,
+ ServiceString,
NULL,
NULL,
- NULL,
FALSE,
DETACHED_PROCESS,
NULL,
@@ -199,7 +200,6 @@
return(FALSE);
}
- DPRINT("WL: Waiting for lsass\n");
WaitForSingleObject(LsassInitEvent, INFINITE);
CloseHandle(LsassInitEvent);