47 lines
896 B
C++
47 lines
896 B
C++
|
|
|
|
template<SIZE_T Offset>
|
|
class TrackedClassObject
|
|
{
|
|
static LONG* GetCounter()
|
|
{
|
|
return reinterpret_cast<LONG*>( reinterpret_cast<char*>( g_GlobalInfo->m_StatSection ) + Offset );
|
|
}
|
|
protected:
|
|
TrackedClassObject()
|
|
{
|
|
InterlockedIncrement( GetCounter() );
|
|
}
|
|
~TrackedClassObject()
|
|
{
|
|
if (g_ServiceState == MANAGER_INACTIVE)
|
|
{
|
|
return;
|
|
}
|
|
InterlockedDecrement( GetCounter() );
|
|
}
|
|
};
|
|
|
|
//------------------------------------------------------------------------
|
|
|
|
template<class T>
|
|
class CSimpleExternalIUnknown : public T
|
|
{
|
|
public:
|
|
|
|
// IUnknown Methods
|
|
STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject);
|
|
ULONG _stdcall AddRef(void);
|
|
ULONG _stdcall Release(void);
|
|
|
|
protected:
|
|
CSimpleExternalIUnknown();
|
|
virtual ~CSimpleExternalIUnknown();
|
|
|
|
long m_ServiceInstance;
|
|
LONG m_refs;
|
|
|
|
};
|
|
|
|
|