#include "shsrvice.h" #include "mischlpr.h" #include "dbg.h" #include "tfids.h" #include #define ARRAYSIZE(a) (sizeof((a))/sizeof((a)[0])) //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 SHOULDNOTFAIL(SUCCEEDED(StringCchCopy(pse->_szServiceName, ARRAYSIZE(pse->_szServiceName), pszServiceName))); #endif hres = S_OK; } else { // convert GetLastError to some HRESULT } return hres; } BOOL CGenericServiceManager::_SetServiceStatus(SERVICEENTRY* pse) { #ifdef DEBUG WCHAR sz[256]; SHOULDNOTFAIL(SUCCEEDED(StringCchCopy(sz, ARRAYSIZE(sz), pse->_szServiceName))); switch (pse->_servicestatus.dwCurrentState) { case SERVICE_STOPPED: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_STOPPED")))); break; case SERVICE_START_PENDING: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_START_PENDING")))); break; case SERVICE_STOP_PENDING: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_STOP_PENDING")))); break; case SERVICE_RUNNING: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_RUNNING")))); break; case SERVICE_CONTINUE_PENDING: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_CONTINUE_PENDING")))); break; case SERVICE_PAUSE_PENDING: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_PAUSE_PENDING")))); break; case SERVICE_PAUSED: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(sz), TEXT(": SERVICE_PAUSED")))); break; default: SHOULDNOTFAIL(SUCCEEDED(StringCchCat(sz, ARRAYSIZE(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; }