windows-nt/Source/XPSP1/NT/net/mmc/remrras/server/ncutil.h
2020-09-26 16:20:57 +08:00

109 lines
1.9 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1998
//
// File: ncutil.h
//
//--------------------------------------------------------------------------
#pragma once
#define NOTHROW
inline void AddRefObj(IUnknown *punk)
{
if (punk)
punk->AddRef();
}
inline void ReleaseObj(IUnknown * punk)
{
if (punk)
punk->Release();
}
#define Assert(x) assert(x)
#define AssertSz(x,sz) assert(x)
#define celems(rgx) (sizeof(rgx) / sizeof(*rgx))
#define TraceTag(a,b,c)
#define TraceErrorOptional(a,b,c)
void TraceError(LPCSTR pszString, HRESULT hr);
void TraceResult(LPCSTR pszString, HRESULT hr);
void TraceSz(LPCSTR pszString);
/*---------------------------------------------------------------------------
Class: RtrCriticalSection
This class is used to support entering/leaving of critical sections.
Put this class at the top of a function that you want protected.
---------------------------------------------------------------------------*/
class RtrCriticalSection
{
public:
RtrCriticalSection(CRITICAL_SECTION *pCritSec)
: m_pCritSec(pCritSec)
{
// IfDebug(m_cEnter=0;)
// Assert(m_pCritSec);
Enter();
}
~RtrCriticalSection()
{
Detach();
}
void Enter()
{
if (m_pCritSec)
{
// IfDebug(m_cEnter++;)
EnterCriticalSection(m_pCritSec);
// AssertSz(m_cEnter==1, "EnterCriticalSection called too much!");
}
}
BOOL TryToEnter()
{
if (m_pCritSec)
return TryEnterCriticalSection(m_pCritSec);
return TRUE;
}
void Leave()
{
if (m_pCritSec)
{
// IfDebug(m_cEnter--;)
LeaveCriticalSection(m_pCritSec);
// Assert(m_cEnter==0);
}
}
void Detach()
{
Leave();
m_pCritSec = NULL;
}
private:
CRITICAL_SECTION * m_pCritSec;
// IfDebug(int m_cEnter;)
};
inline LPWSTR StrDupW(LPCWSTR pswz)
{
LPWSTR pswzcpy = new WCHAR[lstrlenW(pswz)+1];
return lstrcpyW(pswzcpy, pswz);
}