mirror of
https://github.com/arehnman/yttrium-virtio-gpu.git
synced 2026-11-07 02:06:32 +00:00
90 lines
2.3 KiB
C++
90 lines
2.3 KiB
C++
#include "stdafx.h"
|
|
|
|
#include "tchar.h"
|
|
|
|
LPWSTR ServiceName = L"VIOSLSVC";
|
|
CService srvc;
|
|
|
|
void __stdcall HandlerEx(DWORD ctlcode, DWORD evtype, PVOID evdata, PVOID context)
|
|
{
|
|
CService::HandlerExThunk((CService *)context, ctlcode, evtype, evdata);
|
|
}
|
|
|
|
void __stdcall ServiceMainEx(DWORD argc, TCHAR *argv[])
|
|
{
|
|
srvc.m_StatusHandle = RegisterServiceCtrlHandlerEx(argv[0], (LPHANDLER_FUNCTION_EX)HandlerEx, (PVOID)&srvc);
|
|
CService::ServiceMainThunk(&srvc, argc, argv);
|
|
}
|
|
|
|
SERVICE_TABLE_ENTRY serviceTableEx[] = {{ServiceName, (LPSERVICE_MAIN_FUNCTION)ServiceMainEx}, {NULL, NULL}};
|
|
|
|
ULONG
|
|
_cdecl wmain(__in ULONG argc, __in_ecount(Argc) PWCHAR argv[])
|
|
{
|
|
if (argc == 2)
|
|
{
|
|
if (_tcsicmp(L"-i", argv[1]) == 0)
|
|
{
|
|
InstallService();
|
|
}
|
|
else if (_tcsicmp(L"-u", argv[1]) == 0)
|
|
{
|
|
UninstallService();
|
|
}
|
|
else if (_tcsicmp(L"-r", argv[1]) == 0)
|
|
{
|
|
ServiceRun();
|
|
}
|
|
else if (_tcsicmp(L"-s", argv[1]) == 0)
|
|
{
|
|
ServiceControl(SERVICE_CONTROL_STOP);
|
|
}
|
|
else if (_tcsicmp(L"-p", argv[1]) == 0)
|
|
{
|
|
ServiceControl(SERVICE_CONTROL_PAUSE);
|
|
}
|
|
else if (_tcsicmp(L"-c", argv[1]) == 0)
|
|
{
|
|
ServiceControl(SERVICE_CONTROL_CONTINUE);
|
|
}
|
|
else if (_tcsicmp(L"status", argv[1]) == 0)
|
|
{
|
|
SC_HANDLE scm, service;
|
|
scm = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
|
|
if (!scm)
|
|
{
|
|
ErrorHandler("OpenSCManager", GetLastError());
|
|
}
|
|
service = OpenService(scm, ServiceName, SERVICE_ALL_ACCESS);
|
|
if (!service)
|
|
{
|
|
ErrorHandler("OpenService", GetLastError());
|
|
}
|
|
printf("STATUS: ");
|
|
srvc.GetStatus(service);
|
|
}
|
|
else if (_tcsicmp(L"config", argv[1]) == 0)
|
|
{
|
|
GetConfiguration();
|
|
}
|
|
else if (_tcsicmp(L"help", argv[1]) == 0)
|
|
{
|
|
ShowUsage();
|
|
}
|
|
else
|
|
{
|
|
ShowUsage();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
BOOL success;
|
|
success = StartServiceCtrlDispatcher(serviceTableEx);
|
|
if (!success)
|
|
{
|
|
ErrorHandler("StartServiceCtrlDispatcher", GetLastError());
|
|
}
|
|
}
|
|
return 0;
|
|
}
|