Files
Work/watchdog/ServiceHandle.hpp
2024-08-07 09:16:27 -04:00

93 lines
1.6 KiB
C++

#ifndef _WATCHDOG_SERVICEHANDLE_HPP_
#define _WATCHDOG_SERVICEHANDLE_HPP_
#ifndef _COMMON_WINSVC_HPP_
#include <common/winsvc.hpp>
#endif
class ServiceHandle
{
public:
enum Disposition{Assume,Delete};
ServiceHandle();
ServiceHandle(SC_HANDLE handle,Disposition disposition=Assume);
virtual ~ServiceHandle();
SC_HANDLE getHandle(void)const;
void setHandle(SC_HANDLE handle,Disposition disposition);
Disposition getDisposition(void)const;
void setDisposition(Disposition disposition);
bool isOkay(void)const;
private:
void closeHandle(void);
SC_HANDLE mSCHandle;
Disposition mDisposition;
};
inline
ServiceHandle::ServiceHandle()
: mSCHandle(0), mDisposition(Delete)
{
}
inline
ServiceHandle::ServiceHandle(SC_HANDLE handle,Disposition disposition)
: mSCHandle(handle), mDisposition(disposition)
{
}
inline
ServiceHandle::~ServiceHandle()
{
}
inline
SC_HANDLE ServiceHandle::getHandle(void)const
{
return mSCHandle;
}
inline
void ServiceHandle::setHandle(SC_HANDLE handle,Disposition disposition)
{
closeHandle();
mSCHandle=handle;
mDisposition=disposition;
}
inline
ServiceHandle::Disposition ServiceHandle::getDisposition(void)const
{
return mDisposition;
}
inline
void ServiceHandle::setDisposition(Disposition disposition)
{
mDisposition=disposition;
}
inline
bool ServiceHandle::isOkay(void)const
{
return mSCHandle?true:false;
}
inline
void ServiceHandle::closeHandle()
{
if(!mSCHandle)
{
mDisposition=Delete;
return;
}
if(Assume==mDisposition)
{
mSCHandle=0;
mDisposition=Delete;
return;
}
::CloseServiceHandle(mSCHandle);
mSCHandle=0;
}
#endif