mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.2 KiB
85 lines
2.2 KiB
//----------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1996.
|
|
//
|
|
// File: dll.hxx
|
|
//
|
|
// Contents: Classes for maintaining reference counts required to
|
|
// implement
|
|
//
|
|
// Classes: CDll
|
|
// CDllRef
|
|
//
|
|
// History: 06-26-1997 MarkBl Heisted from the eventlog snapin.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#ifndef __DLLREF_HXX_
|
|
#define __DLLREF_HXX_
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CDll
|
|
//
|
|
// Purpose: Maintains reference and lock counts.
|
|
//
|
|
// History: 08-14-96 DavidMun Created
|
|
//
|
|
// Notes: Everything in this class is static, so nowhere is there an
|
|
// instantiation of this class.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CDll
|
|
{
|
|
public:
|
|
|
|
static ULONG AddRef() { return InterlockedIncrement((LONG*)&s_cObjs); }
|
|
static ULONG Release() { return InterlockedDecrement((LONG*)&s_cObjs); }
|
|
|
|
static void LockServer(BOOL fLock) {
|
|
fLock ? InterlockedIncrement((LONG*)&s_cLocks)
|
|
: InterlockedDecrement((LONG*)&s_cLocks);
|
|
}
|
|
|
|
static HRESULT CanUnloadNow(void) {
|
|
if (0L == s_cObjs && 0L == s_cLocks)
|
|
{
|
|
Dbg(DEB_TRACE, "Can unload\n");
|
|
return S_OK;
|
|
}
|
|
Dbg(DEB_TRACE,
|
|
"Can NOT unload, %u objects, %u locks\n",
|
|
s_cObjs,
|
|
s_cLocks);
|
|
return S_FALSE;
|
|
}
|
|
|
|
static ULONG s_cObjs;
|
|
static ULONG s_cLocks;
|
|
|
|
}; // class CDll
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CDllRef
|
|
//
|
|
// Purpose: Helper class to automatically maintain object count.
|
|
//
|
|
// History: 08-14-96 DavidMun Created
|
|
//
|
|
// Notes: All objects returned to the outside world should contain
|
|
// a CDllRef member.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
class CDllRef
|
|
{
|
|
public:
|
|
|
|
CDllRef(void) { CDll::AddRef(); }
|
|
~CDllRef(void) { CDll::Release(); }
|
|
|
|
}; // class CDllRef
|
|
|
|
#endif // __DLLREF_HXX_
|