62 lines
1.2 KiB
C
62 lines
1.2 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;
|
||
|
};
|