windows-nt/Source/XPSP1/NT/shell/services/hdsrv/shsrvice/service.cpp

109 lines
2.4 KiB
C++
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
#include "shsrvice.h"
#include "mischlpr.h"
#include "dbg.h"
#include "tfids.h"
//static
HRESULT CGenericServiceManager::_RegisterServiceCtrlHandler(
LPCWSTR pszServiceName, SERVICEENTRY* pse)
{
ASSERT(pse);
HRESULT hres = E_FAIL;
TRACE(TF_SERVICE, TEXT("Entered _RegisterServiceCtrlHandler"));
pse->_ssh = RegisterServiceCtrlHandlerExW(pszServiceName,
_ServiceHandler, pse);
if (pse->_ssh)
{
#ifdef DEBUG
lstrcpy(pse->_szServiceName, pszServiceName);
#endif
hres = S_OK;
}
else
{
// convert GetLastError to some HRESULT
}
return hres;
}
// static
HRESULT CGenericServiceManager::StartServiceCtrlDispatcher()
{
HRESULT hres = E_FAIL;
TRACE(TF_SERVICE, TEXT("Entered StartServiceCtrlDispatcher"));
if (::StartServiceCtrlDispatcher(_rgste))
{
hres = S_OK;
}
return hres;
}
BOOL CGenericServiceManager::_SetServiceStatus(SERVICEENTRY* pse)
{
#ifdef DEBUG
WCHAR sz[256];
lstrcpy(sz, pse->_szServiceName);
switch (pse->_servicestatus.dwCurrentState)
{
case SERVICE_STOPPED:
lstrcat(sz, TEXT(": SERVICE_STOPPED"));
break;
case SERVICE_START_PENDING:
lstrcat(sz, TEXT(": SERVICE_START_PENDING"));
break;
case SERVICE_STOP_PENDING:
lstrcat(sz, TEXT(": SERVICE_STOP_PENDING"));
break;
case SERVICE_RUNNING:
lstrcat(sz, TEXT(": SERVICE_RUNNING"));
break;
case SERVICE_CONTINUE_PENDING:
lstrcat(sz, TEXT(": SERVICE_CONTINUE_PENDING"));
break;
case SERVICE_PAUSE_PENDING:
lstrcat(sz, TEXT(": SERVICE_PAUSE_PENDING"));
break;
case SERVICE_PAUSED:
lstrcat(sz, TEXT(": SERVICE_PAUSED"));
break;
default:
lstrcat(sz, TEXT(": Unknown state"));
break;
}
TRACE(TF_SERVICE, sz);
#endif
BOOL b = SetServiceStatus(pse->_ssh, &(pse->_servicestatus));
#ifdef DEBUG
if (!b)
{
TRACE(TF_SERVICE, TEXT("SetServiceStatus FAILED: GLE = 0x%08X"), GetLastError());
}
#endif
return b;
}
// static
HRESULT CGenericServiceManager::_HandleWantsDeviceEvents(
LPCWSTR UNREF_PARAM(pszServiceName), BOOL fWantsDeviceEvents)
{
if (fWantsDeviceEvents)
{
TRACE(TF_SERVICE, TEXT("Wants Device Events"));
}
return S_OK;
}