wevtsvc: Add EventLog service stub.
Signed-off-by: Dmitry Timoshkov <dmitry@baikal.ru> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
595600b6c1
commit
7e7e81f0c6
|
@ -1645,6 +1645,7 @@ enable_wdscore
|
||||||
enable_webservices
|
enable_webservices
|
||||||
enable_wer
|
enable_wer
|
||||||
enable_wevtapi
|
enable_wevtapi
|
||||||
|
enable_wevtsvc
|
||||||
enable_wiaservc
|
enable_wiaservc
|
||||||
enable_wimgapi
|
enable_wimgapi
|
||||||
enable_windowscodecs
|
enable_windowscodecs
|
||||||
|
@ -21007,6 +21008,7 @@ wine_fn_config_makefile dlls/webservices/tests enable_tests
|
||||||
wine_fn_config_makefile dlls/wer enable_wer
|
wine_fn_config_makefile dlls/wer enable_wer
|
||||||
wine_fn_config_makefile dlls/wer/tests enable_tests
|
wine_fn_config_makefile dlls/wer/tests enable_tests
|
||||||
wine_fn_config_makefile dlls/wevtapi enable_wevtapi
|
wine_fn_config_makefile dlls/wevtapi enable_wevtapi
|
||||||
|
wine_fn_config_makefile dlls/wevtsvc enable_wevtsvc
|
||||||
wine_fn_config_makefile dlls/wiaservc enable_wiaservc
|
wine_fn_config_makefile dlls/wiaservc enable_wiaservc
|
||||||
wine_fn_config_makefile dlls/wiaservc/tests enable_tests
|
wine_fn_config_makefile dlls/wiaservc/tests enable_tests
|
||||||
wine_fn_config_makefile dlls/wimgapi enable_wimgapi
|
wine_fn_config_makefile dlls/wimgapi enable_wimgapi
|
||||||
|
|
|
@ -3790,6 +3790,7 @@ WINE_CONFIG_MAKEFILE(dlls/webservices/tests)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wer)
|
WINE_CONFIG_MAKEFILE(dlls/wer)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wer/tests)
|
WINE_CONFIG_MAKEFILE(dlls/wer/tests)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wevtapi)
|
WINE_CONFIG_MAKEFILE(dlls/wevtapi)
|
||||||
|
WINE_CONFIG_MAKEFILE(dlls/wevtsvc)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wiaservc)
|
WINE_CONFIG_MAKEFILE(dlls/wiaservc)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wiaservc/tests)
|
WINE_CONFIG_MAKEFILE(dlls/wiaservc/tests)
|
||||||
WINE_CONFIG_MAKEFILE(dlls/wimgapi)
|
WINE_CONFIG_MAKEFILE(dlls/wimgapi)
|
||||||
|
|
|
@ -2678,6 +2678,51 @@ static void test_refcount(void)
|
||||||
CloseServiceHandle(scm_handle);
|
CloseServiceHandle(scm_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_EventLog(void)
|
||||||
|
{
|
||||||
|
SC_HANDLE scm_handle, svc_handle;
|
||||||
|
DWORD size;
|
||||||
|
BOOL ret;
|
||||||
|
QUERY_SERVICE_CONFIGA *config;
|
||||||
|
|
||||||
|
scm_handle = OpenSCManagerA(NULL, NULL, GENERIC_READ);
|
||||||
|
ok(scm_handle != NULL, "OpenSCManager error %u\n", GetLastError());
|
||||||
|
|
||||||
|
svc_handle = OpenServiceA(scm_handle, "EventLog", GENERIC_READ);
|
||||||
|
ok(svc_handle != NULL, "OpenService error %u\n", GetLastError());
|
||||||
|
|
||||||
|
SetLastError(0xdeadbeef);
|
||||||
|
ret = QueryServiceConfigA(svc_handle, NULL, 0, &size);
|
||||||
|
ok(!ret, "QueryServiceConfig should fail\n");
|
||||||
|
ok(GetLastError() == ERROR_INSUFFICIENT_BUFFER, "got %u\n", GetLastError());
|
||||||
|
|
||||||
|
config = HeapAlloc(GetProcessHeap(), 0, size);
|
||||||
|
ret = QueryServiceConfigA(svc_handle, config, size, &size);
|
||||||
|
ok(ret, "QueryServiceConfig error %u\n", GetLastError());
|
||||||
|
|
||||||
|
ok(config->dwServiceType == SERVICE_WIN32_SHARE_PROCESS, "got %#x\n", config->dwServiceType);
|
||||||
|
ok(config->dwStartType == SERVICE_AUTO_START, "got %u\n", config->dwStartType);
|
||||||
|
ok(config->dwErrorControl == SERVICE_ERROR_NORMAL, "got %u\n", config->dwErrorControl);
|
||||||
|
ok(!strcmpi(config->lpBinaryPathName, "C:\\windows\\system32\\services.exe") /* XP */ ||
|
||||||
|
!strcmpi(config->lpBinaryPathName, "C:\\windows\\system32\\svchost.exe -k LocalServiceNetworkRestricted") /* Vista+ */ ||
|
||||||
|
!strcmpi(config->lpBinaryPathName, "C:\\windows\\system32\\svchost.exe -k LocalServiceNetworkRestricted -p") /* Win10 */,
|
||||||
|
"got %s\n", config->lpBinaryPathName);
|
||||||
|
todo_wine
|
||||||
|
ok(!strcmpi(config->lpLoadOrderGroup, "Event Log"), "got %s\n", config->lpLoadOrderGroup);
|
||||||
|
ok(config->dwTagId == 0, "Expected 0, got %d\n", config->dwTagId);
|
||||||
|
ok(!config->lpDependencies[0], "lpDependencies is not empty\n");
|
||||||
|
ok(!strcmp(config->lpServiceStartName, "LocalSystem") /* XP */ ||
|
||||||
|
!strcmp(config->lpServiceStartName, "NT AUTHORITY\\LocalService"),
|
||||||
|
"got %s\n", config->lpServiceStartName);
|
||||||
|
ok(!strcmp(config->lpDisplayName, "Event Log") /* XP */ ||
|
||||||
|
!strcmp(config->lpDisplayName, "Windows Event Log") /* Vista+ */, "got %s\n", config->lpDisplayName);
|
||||||
|
|
||||||
|
HeapFree(GetProcessHeap(), 0, config);
|
||||||
|
|
||||||
|
CloseServiceHandle(svc_handle);
|
||||||
|
CloseServiceHandle(scm_handle);
|
||||||
|
}
|
||||||
|
|
||||||
static DWORD WINAPI ctrl_handler(DWORD ctl, DWORD type, void *data, void *user)
|
static DWORD WINAPI ctrl_handler(DWORD ctl, DWORD type, void *data, void *user)
|
||||||
{
|
{
|
||||||
HANDLE evt = user;
|
HANDLE evt = user;
|
||||||
|
@ -2775,4 +2820,5 @@ START_TEST(service)
|
||||||
* and what the rules are
|
* and what the rules are
|
||||||
*/
|
*/
|
||||||
test_refcount();
|
test_refcount();
|
||||||
|
test_EventLog();
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
MODULE = wevtsvc.dll
|
||||||
|
IMPORTS = rpcrt4 advapi32
|
||||||
|
|
||||||
|
EXTRADLLFLAGS = -mno-cygwin
|
||||||
|
|
||||||
|
C_SRCS = \
|
||||||
|
wevtsvc.c
|
|
@ -0,0 +1,87 @@
|
||||||
|
/*
|
||||||
|
* Event Log Service
|
||||||
|
*
|
||||||
|
* Copyright 2020 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(eventlog);
|
||||||
|
|
||||||
|
static SERVICE_STATUS_HANDLE svc_handle;
|
||||||
|
static HANDLE done_event;
|
||||||
|
|
||||||
|
static void eventlog_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.dwControlsAccepted = 0;
|
||||||
|
status.dwCurrentState = state;
|
||||||
|
|
||||||
|
SetServiceStatus(svc_handle, &status);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void WINAPI eventlog_handler(DWORD control)
|
||||||
|
{
|
||||||
|
TRACE("%#x\n", control);
|
||||||
|
|
||||||
|
switch (control)
|
||||||
|
{
|
||||||
|
case SERVICE_CONTROL_STOP:
|
||||||
|
case SERVICE_CONTROL_SHUTDOWN:
|
||||||
|
eventlog_update_status(SERVICE_STOP_PENDING);
|
||||||
|
SetEvent(done_event);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
eventlog_update_status(SERVICE_RUNNING);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void WINAPI ServiceMain(DWORD argc, LPWSTR *argv)
|
||||||
|
{
|
||||||
|
TRACE("starting Event Log Service\n");
|
||||||
|
|
||||||
|
svc_handle = RegisterServiceCtrlHandlerW(L"EventLog", eventlog_handler);
|
||||||
|
if (!svc_handle)
|
||||||
|
{
|
||||||
|
ERR("RegisterServiceCtrlHandler error %u\n", GetLastError());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
eventlog_update_status(SERVICE_RUNNING);
|
||||||
|
|
||||||
|
done_event = CreateEventW(NULL, TRUE, FALSE, NULL);
|
||||||
|
WaitForSingleObject(done_event, INFINITE);
|
||||||
|
CloseHandle(done_event);
|
||||||
|
|
||||||
|
eventlog_update_status(SERVICE_STOPPED);
|
||||||
|
|
||||||
|
TRACE("exiting Event Log Service\n");
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
@ stdcall -private ServiceMain(long ptr)
|
|
@ -149,6 +149,7 @@ WineFakeDlls=FakeDllsWin32
|
||||||
|
|
||||||
[DefaultInstall.Services]
|
[DefaultInstall.Services]
|
||||||
AddService=BITS,0,BITSService
|
AddService=BITS,0,BITSService
|
||||||
|
AddService=EventLog,0,EventLogService
|
||||||
AddService=HTTP,0,HTTPService
|
AddService=HTTP,0,HTTPService
|
||||||
AddService=MSIServer,0,MSIService
|
AddService=MSIServer,0,MSIService
|
||||||
AddService=MountMgr,0x800,MountMgrService
|
AddService=MountMgr,0x800,MountMgrService
|
||||||
|
@ -167,6 +168,7 @@ AddService=NDIS,0x800,NDISService
|
||||||
|
|
||||||
[DefaultInstall.NT.Services]
|
[DefaultInstall.NT.Services]
|
||||||
AddService=BITS,0,BITSService
|
AddService=BITS,0,BITSService
|
||||||
|
AddService=EventLog,0,EventLogService
|
||||||
AddService=HTTP,0,HTTPService
|
AddService=HTTP,0,HTTPService
|
||||||
AddService=MSIServer,0,MSIService
|
AddService=MSIServer,0,MSIService
|
||||||
AddService=MountMgr,0x800,MountMgrService
|
AddService=MountMgr,0x800,MountMgrService
|
||||||
|
@ -185,6 +187,7 @@ AddService=NDIS,0x800,NDISService
|
||||||
|
|
||||||
[DefaultInstall.ntamd64.Services]
|
[DefaultInstall.ntamd64.Services]
|
||||||
AddService=BITS,0,BITSService
|
AddService=BITS,0,BITSService
|
||||||
|
AddService=EventLog,0,EventLogService
|
||||||
AddService=HTTP,0,HTTPService
|
AddService=HTTP,0,HTTPService
|
||||||
AddService=MSIServer,0,MSIService
|
AddService=MSIServer,0,MSIService
|
||||||
AddService=MountMgr,0x800,MountMgrService
|
AddService=MountMgr,0x800,MountMgrService
|
||||||
|
@ -203,6 +206,7 @@ AddService=NDIS,0x800,NDISService
|
||||||
|
|
||||||
[DefaultInstall.ntarm64.Services]
|
[DefaultInstall.ntarm64.Services]
|
||||||
AddService=BITS,0,BITSService
|
AddService=BITS,0,BITSService
|
||||||
|
AddService=EventLog,0,EventLogService
|
||||||
AddService=HTTP,0,HTTPService
|
AddService=HTTP,0,HTTPService
|
||||||
AddService=MSIServer,0,MSIService
|
AddService=MSIServer,0,MSIService
|
||||||
AddService=MountMgr,0x800,MountMgrService
|
AddService=MountMgr,0x800,MountMgrService
|
||||||
|
@ -3609,6 +3613,15 @@ ServiceType=16
|
||||||
StartType=3
|
StartType=3
|
||||||
ErrorControl=1
|
ErrorControl=1
|
||||||
|
|
||||||
|
[EventLogService]
|
||||||
|
AddReg=EventLogServiceKeys
|
||||||
|
Description="Event Log"
|
||||||
|
DisplayName="Event Log"
|
||||||
|
ServiceBinary="%11%\svchost.exe -k LocalServiceNetworkRestricted"
|
||||||
|
ServiceType=32
|
||||||
|
StartType=2
|
||||||
|
ErrorControl=1
|
||||||
|
|
||||||
[HTTPService]
|
[HTTPService]
|
||||||
Description="HTTP server"
|
Description="HTTP server"
|
||||||
DisplayName="HTTP"
|
DisplayName="HTTP"
|
||||||
|
@ -3696,6 +3709,10 @@ ErrorControl=1
|
||||||
HKR,Parameters,"ServiceDll",,"%11%\qmgr.dll"
|
HKR,Parameters,"ServiceDll",,"%11%\qmgr.dll"
|
||||||
HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010000,"BITS"
|
HKLM,%CurrentVersionNT%\SvcHost,"netsvcs",0x00010000,"BITS"
|
||||||
|
|
||||||
|
[EventLogServiceKeys]
|
||||||
|
HKR,Parameters,"ServiceDll",,"%11%\wevtsvc.dll"
|
||||||
|
HKLM,%CurrentVersionNT%\SvcHost,"LocalServiceNetworkRestricted",0x00010000,"EventLog"
|
||||||
|
|
||||||
[StiServiceKeys]
|
[StiServiceKeys]
|
||||||
HKR,Parameters,"ServiceDll",,"%11%\wiaservc.dll"
|
HKR,Parameters,"ServiceDll",,"%11%\wiaservc.dll"
|
||||||
HKLM,%CurrentVersionNT%\SvcHost,"imgsvc",0x00010000,"StiSvc"
|
HKLM,%CurrentVersionNT%\SvcHost,"imgsvc",0x00010000,"StiSvc"
|
||||||
|
|
Loading…
Reference in New Issue