WindowsXP-SP1/ds/adsi/router/auto_sid.h
2020-09-30 16:53:49 +02:00

62 lines
1.3 KiB
C++

// auto_sid.h
//
#pragma once
class auto_sid
{
public:
explicit auto_sid(SID* p = 0)
: m_psid(p) {};
auto_sid(auto_sid& rhs)
: m_psid(rhs.release()) {};
~auto_sid()
{ if (m_psid) FreeSid(m_psid); };
auto_sid& operator= (auto_sid& rhs)
{ if (this != rhs.getThis())
reset (rhs.release() );
return *this;
};
SID operator*() const
{ return *m_psid; };
void** operator& ()
{ reset(); return (void**)&m_psid; };
operator SID* ()
{ return m_psid; };
// Checks for NULL
BOOL operator== (LPVOID lpv)
{ return m_psid == lpv; };
BOOL operator!= (LPVOID lpv)
{ return m_psid != lpv; };
// return value of current dumb pointer
SID* get() const
{ return m_psid; };
// relinquish ownership
SID* release()
{ SID* oldpsid = m_psid;
m_psid = 0;
return oldpsid;
};
// delete owned pointer; assume ownership of p
void reset (SID* p = 0)
{
if (m_psid)
FreeSid(m_psid);
m_psid = p;
};
private:
// operator& throws off operator=
const auto_sid* getThis() const
{ return this; };
SID* m_psid;
};