60 lines
1.8 KiB
C++
60 lines
1.8 KiB
C++
#ifndef _SERVICE_SERVICEHOOK_HPP_
|
|
#define _SERVICE_SERVICEHOOK_HPP_
|
|
#ifndef _HOOKPROC_APIENTRY_HPP_
|
|
#include <hookproc/apientry.hpp>
|
|
#endif
|
|
#ifndef _HOOKPROC_PROCADDRESS_HPP_
|
|
#include <hookproc/procaddr.hpp>
|
|
#endif
|
|
|
|
class ServiceHook;
|
|
typedef ProcAddress<ServiceHook> 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<ServiceHook>::LPFNMETHODVOID)&ServiceHook::serviceMainEntryProc)),
|
|
mServiceHandlerEntry(ServiceHandlerParamLength,(DWORD)this,getProcAddress((ProcAddress<ServiceHook>::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 |