diff --git a/reactos/Makefile b/reactos/Makefile index 19903d98b52..0fb12fe33df 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -63,7 +63,7 @@ DLLS = acledit aclui advapi32 advpack cabinet cards comctl32 crtdll comdlg32 d3d msgina msi msimg32 msvcrt20 msvideo mswsock netapi32 ntdll ole32 oleaut32 oledlg olepro32 opengl32 \ packet psapi riched20 richedit rpcrt4 samlib secur32 setupapi shell32 shlwapi smdll snmpapi syssetup \ twain user32 userenv version wininet winmm winspool ws2help ws2_32 wsock32 wshirda dnsapi \ - urlmon shdocvw dinput dinput8 dxdiagn devenum dsound $(DLLS_KBD) $(DLLS_CPL) $(DLLS_SHELLEXT) + urlmon shdocvw dinput dinput8 dxdiagn devenum dsound lsasrv $(DLLS_KBD) $(DLLS_CPL) $(DLLS_SHELLEXT) SUBSYS = smss win32k csrss ntvdm diff --git a/reactos/include/lsass/lsasrv.h b/reactos/include/lsass/lsasrv.h new file mode 100644 index 00000000000..aaf12e14db7 --- /dev/null +++ b/reactos/include/lsass/lsasrv.h @@ -0,0 +1,8 @@ + +#ifndef __LSASRV_H +#define __LSASRV_H + +NTSTATUS STDCALL +LsapInitLsa(VOID); + +#endif /* __LSASRV_H */ diff --git a/reactos/lib/lsasrv/lsaport.c b/reactos/lib/lsasrv/lsaport.c new file mode 100644 index 00000000000..139e2f3dcd6 --- /dev/null +++ b/reactos/lib/lsasrv/lsaport.c @@ -0,0 +1,178 @@ +/* + */ + +#define NTOS_MODE_USER +#include +#include + +//#define NDEBUG +#include + + +HANDLE PortThreadHandle = NULL; +HANDLE ConnectPortHandle = NULL; +HANDLE MessagePortHandle = NULL; + + +static NTSTATUS +InitializeLsaPort(VOID) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING PortName; + LPC_MAX_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.Header); + 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) +{ + LPC_MAX_MESSAGE Request; +// LPC_MAX_MESSAGE Reply; + NTSTATUS Status; + + + DPRINT1("ProcessPortMessage() called\n"); + + Status = STATUS_SUCCESS; + + for (;;) + { + Status = NtReplyWaitReceivePort(MessagePortHandle, + 0, + NULL, + &Request.Header); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtReplyWaitReceivePort() failed (Status %lx)\n", Status); + break; + } + + DPRINT("Received message\n"); + + if (Request.Header.MessageType == LPC_PORT_CLOSED) + { + DPRINT("Port closed\n"); + +// return STATUS_UNSUCCESSFUL; + } + if (Request.Header.MessageType == LPC_REQUEST) + { + DPRINT("Received request\n"); + + } + else if (Request.Header.MessageType == 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 */ diff --git a/reactos/lib/lsasrv/lsasrv.c b/reactos/lib/lsasrv/lsasrv.c new file mode 100644 index 00000000000..bc56ca27a8f --- /dev/null +++ b/reactos/lib/lsasrv/lsasrv.c @@ -0,0 +1,24 @@ + +#define NTOS_MODE_USER +#include +#include + +#include + +#define NDEBUG +#include + +VOID StartLsaPortThread(VOID); + + +NTSTATUS STDCALL +LsapInitLsa(VOID) +{ + DPRINT1("LsapInitLsa() called\n"); + + StartLsaPortThread(); + + return STATUS_SUCCESS; +} + +/* EOF */ diff --git a/reactos/lib/lsasrv/lsasrv.def b/reactos/lib/lsasrv/lsasrv.def new file mode 100644 index 00000000000..fc6f4a39a60 --- /dev/null +++ b/reactos/lib/lsasrv/lsasrv.def @@ -0,0 +1,68 @@ +; $Id: lsasrv.def 12852 2005-01-06 13:58:04Z mf $ +LIBRARY lsasrv +EXPORTS +;LsaIAuditNotifyPackageLoad +;LsaIAuditSamEvent +;LsaIEnumerateSecrets +;LsaIFree_LSAI_PRIVATE_DATA +;LsaIFree_LSAI_SECRET_ENUM_BUFFER +;LsaIFree_LSAPR_ACCOUNT_ENUM_BUFFER +;LsaIFree_LSAPR_CR_CIPHER_VALUE +;LsaIFree_LSAPR_POLICY_INFORMATION +;LsaIFree_LSAPR_PRIVILEGE_ENUM_BUFFER +;LsaIFree_LSAPR_PRIVILEGE_SET +;LsaIFree_LSAPR_REFERENCED_DOMAIN_LIST +;LsaIFree_LSAPR_SR_SECURITY_DESCRIPTOR +;LsaIFree_LSAPR_TRANSLATED_NAMES +;LsaIFree_LSAPR_TRANSLATED_SIDS +;LsaIFree_LSAPR_TRUSTED_DOMAIN_INFO +;LsaIFree_LSAPR_TRUSTED_ENUM_BUFFER +;LsaIFree_LSAPR_TRUST_INFORMATION +;LsaIFree_LSAPR_UNICODE_STRING +;LsaIGetPrivateData +;LsaIGetSerialNumberPolicy +;LsaIGetSerialNumberPolicy2 +;LsaIHealthCheck +;LsaIInitializeWellKnownSids +;LsaIOpenPolicyTrusted +;LsaIQueryInformationPolicyTrusted +;LsaISetPrivateData +;LsaISetSerialNumberPolicy +;LsaISetTimesSecret +;LsaISetupWasRun +;LsapAuOpenSam +LsapInitLsa@0 +;LsarAddPrivilegesToAccount +;LsarClose +;LsarCreateAccount +;LsarCreateSecret +;LsarCreateTrustedDomain +;LsarDelete +;LsarEnumerateAccounts +;LsarEnumeratePrivileges +;LsarEnumeratePrivilegesAccount +;LsarEnumerateTrustedDomains +;LsarGetQuotasForAccount +;LsarGetSystemAccessAccount +;LsarLookupNames +;LsarLookupPrivilegeDisplayName +;LsarLookupPrivilegeName +;LsarLookupPrivilegeValue +;LsarLookupSids +;LsarOpenAccount +;LsarOpenPolicy +;LsarOpenSecret +;LsarOpenTrustedDomain +;LsarQueryInfoTrustedDomain +;LsarQueryInformationPolicy +;LsarQuerySecret +;LsarQuerySecurityObject +;LsarRemovePrivilegesFromAccount +;LsarSetInformationPolicy +;LsarSetInformationTrustedDomain +;LsarSetQuotasForAccount +;LsarSetSecret +;LsarSetSecurityObject +;LsarSetSystemAccessAccount +;ServiceInit +; EOF \ No newline at end of file diff --git a/reactos/lib/lsasrv/lsasrv.rc b/reactos/lib/lsasrv/lsasrv.rc new file mode 100644 index 00000000000..cdf5ee6077d --- /dev/null +++ b/reactos/lib/lsasrv/lsasrv.rc @@ -0,0 +1,5 @@ +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "LSA server DLL\0" +#define REACTOS_STR_INTERNAL_NAME "lsasrv\0" +#define REACTOS_STR_ORIGINAL_FILENAME "lsasrv.dll\0" +#include diff --git a/reactos/lib/lsasrv/makefile b/reactos/lib/lsasrv/makefile new file mode 100644 index 00000000000..fae393e0e1e --- /dev/null +++ b/reactos/lib/lsasrv/makefile @@ -0,0 +1,28 @@ +# $Id$ + +PATH_TO_TOP = ../.. + +TARGET_TYPE = dynlink + +TARGET_NAME = lsasrv + +TARGET_BASE = $(TARGET_BASE_LIB_LSASRV) + +TARGET_ENTRY = 0x0 + +TARGET_CFLAGS += -Wall -Werror + +TARGET_LFLAGS = -nostartfiles -nostdlib + +TARGET_SDKLIBS = ntdll.a kernel32.a + +TARGET_OBJECTS = lsasrv.o lsaport.o + +DEP_OBJECTS = $(TARGET_OBJECTS) + + +include $(PATH_TO_TOP)/rules.mak + +include $(TOOLS_PATH)/helper.mk + +include $(TOOLS_PATH)/depend.mk