Module: wine Branch: master Commit: 3acdfe31804cf14873798388a540564e8aca7924 URL: https://gitlab.winehq.org/wine/wine/-/commit/3acdfe31804cf14873798388a540564...
Author: Dmitry Timoshkov dmitry@baikal.ru Date: Mon Aug 8 14:33:20 2022 +0300
srvsvc: Add LanmanServer stub service.
Signed-off-by: Dmitry Timoshkov dmitry@baikal.ru
---
configure | 2 ++ configure.ac | 1 + dlls/srvsvc/Makefile.in | 5 +++ dlls/srvsvc/srvsvc.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ dlls/srvsvc/srvsvc.spec | 1 + loader/wine.inf.in | 4 +-- 6 files changed, 98 insertions(+), 2 deletions(-)
diff --git a/configure b/configure index 80c27e92e3a..9ffe846def1 100755 --- a/configure +++ b/configure @@ -1403,6 +1403,7 @@ enable_spoolss enable_sppc enable_srclient enable_srvcli +enable_srvsvc enable_sspicli enable_stdole2_tlb enable_stdole32_tlb @@ -21664,6 +21665,7 @@ wine_fn_config_makefile dlls/spoolss/tests enable_tests wine_fn_config_makefile dlls/sppc enable_sppc wine_fn_config_makefile dlls/srclient enable_srclient wine_fn_config_makefile dlls/srvcli enable_srvcli +wine_fn_config_makefile dlls/srvsvc enable_srvsvc wine_fn_config_makefile dlls/sspicli enable_sspicli wine_fn_config_makefile dlls/stdole2.tlb enable_stdole2_tlb wine_fn_config_makefile dlls/stdole32.tlb enable_stdole32_tlb diff --git a/configure.ac b/configure.ac index 8b1a92c6396..1ea45c3a75d 100644 --- a/configure.ac +++ b/configure.ac @@ -3031,6 +3031,7 @@ WINE_CONFIG_MAKEFILE(dlls/spoolss/tests) WINE_CONFIG_MAKEFILE(dlls/sppc) WINE_CONFIG_MAKEFILE(dlls/srclient) WINE_CONFIG_MAKEFILE(dlls/srvcli) +WINE_CONFIG_MAKEFILE(dlls/srvsvc) WINE_CONFIG_MAKEFILE(dlls/sspicli) WINE_CONFIG_MAKEFILE(dlls/stdole2.tlb) WINE_CONFIG_MAKEFILE(dlls/stdole32.tlb) diff --git a/dlls/srvsvc/Makefile.in b/dlls/srvsvc/Makefile.in new file mode 100644 index 00000000000..f9c68fd12aa --- /dev/null +++ b/dlls/srvsvc/Makefile.in @@ -0,0 +1,5 @@ +MODULE = srvsvc.dll +IMPORTS = advapi32 + +C_SRCS = \ + srvsvc.c diff --git a/dlls/srvsvc/srvsvc.c b/dlls/srvsvc/srvsvc.c new file mode 100644 index 00000000000..3b2b563bc6c --- /dev/null +++ b/dlls/srvsvc/srvsvc.c @@ -0,0 +1,87 @@ +/* + * LanmanServer Service + * + * Copyright 2022 Dmitry Timoshkov + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include <stdarg.h> + +#include "windef.h" +#include "winbase.h" +#include "winsvc.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(lanman); + +static SERVICE_STATUS_HANDLE svc_handle; +static HANDLE done_event; + +static void svc_update_status(DWORD state) +{ + SERVICE_STATUS status; + + status.dwServiceType = SERVICE_WIN32; + status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + status.dwWin32ExitCode = 0; + status.dwServiceSpecificExitCode = 0; + status.dwCheckPoint = 0; + status.dwWaitHint = 0; + status.dwCurrentState = state; + + SetServiceStatus(svc_handle, &status); +} + +static void WINAPI svc_handler(DWORD control) +{ + TRACE("%#lx\n", control); + + switch (control) + { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + svc_update_status(SERVICE_STOP_PENDING); + SetEvent(done_event); + break; + + default: + svc_update_status(SERVICE_RUNNING); + break; + } +} + +void WINAPI ServiceMain(DWORD argc, LPWSTR *argv) +{ + TRACE("Starting LanmanServer\n"); + + svc_handle = RegisterServiceCtrlHandlerW(L"LanmanServer", svc_handler); + if (!svc_handle) + { + ERR("RegisterServiceCtrlHandler error %ld\n", GetLastError()); + return; + } + + svc_update_status(SERVICE_START_PENDING); + done_event = CreateEventW(NULL, TRUE, FALSE, NULL); + + svc_update_status(SERVICE_RUNNING); + WaitForSingleObject(done_event, INFINITE); + CloseHandle(done_event); + + svc_update_status(SERVICE_STOPPED); + + TRACE("Exiting LanmanServer\n"); +} diff --git a/dlls/srvsvc/srvsvc.spec b/dlls/srvsvc/srvsvc.spec new file mode 100644 index 00000000000..daa88578f7f --- /dev/null +++ b/dlls/srvsvc/srvsvc.spec @@ -0,0 +1 @@ +@ stdcall -private ServiceMain(long ptr) diff --git a/loader/wine.inf.in b/loader/wine.inf.in index 347af35af6d..382808c4876 100644 --- a/loader/wine.inf.in +++ b/loader/wine.inf.in @@ -2448,12 +2448,12 @@ Description="Lanman Server" DisplayName="Lanman Server" ServiceBinary="%11%\svchost.exe -k netsvcs" ServiceType=32 -StartType=4 +StartType=3 ErrorControl=1
[LanmanServerServiceKeys] HKR,Parameters,"ServiceDll",,"%11%\srvsvc.dll" -;; HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010008,"lanmanserver" +HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010008,"lanmanserver"
[FontCacheService] AddReg=FontCacheServiceKeys