#ifndef _SERVICE_SERVICEHOOK_HPP_ #define _SERVICE_SERVICEHOOK_HPP_ #ifndef _HOOKPROC_APIENTRY_HPP_ #include #endif #ifndef _HOOKPROC_PROCADDRESS_HPP_ #include #endif class ServiceHook; typedef ProcAddress ServiceHookProc; class ServiceHook : private ServiceHookProc { public: typedef void (__stdcall *LPFNSERVICEMAIN)(DWORD dwArgc,LPTSTR *lpszArg); typedef void (__stdcall *LPFNSERVICEHANDLER)(DWORD dwControl); ServiceHook(void); virtual ~ServiceHook(); LPFNSERVICEMAIN getServiceMainBase(void)const; LPFNSERVICEHANDLER getServiceHandlerBase(void)const; protected: virtual void svcMain(DWORD dwArgc,LPTSTR *lpszArg); virtual void svcHandler(DWORD dwControl); private: enum {ParamLength=8}; enum {ServiceMainParamLength=8,ServiceHandlerParamLength=4}; ServiceHook &operator=(const ServiceHook &someServiceHook); void serviceMainEntryProc(DWORD dwArgc,LPTSTR *lpszArg); void serviceHandlerEntryProc(DWORD dwControl); APIEntry mServiceMainEntry; APIEntry mServiceHandlerEntry; }; inline ServiceHook::ServiceHook(void) : mServiceMainEntry(ServiceMainParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&ServiceHook::serviceMainEntryProc)), mServiceHandlerEntry(ServiceHandlerParamLength,(DWORD)this,getProcAddress((ProcAddress::LPFNMETHODVOID)&ServiceHook::serviceHandlerEntryProc)) { } inline ServiceHook &ServiceHook::operator=(const ServiceHook &someServiceHook) { // private implementation return *this; } inline ServiceHook::LPFNSERVICEMAIN ServiceHook::getServiceMainBase(void)const { return (LPFNSERVICEMAIN)mServiceMainEntry.codeBase(); } inline ServiceHook::LPFNSERVICEHANDLER ServiceHook::getServiceHandlerBase(void)const { return (LPFNSERVICEHANDLER)mServiceHandlerEntry.codeBase(); } #endif