Source code of Windows XP (NT5)
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.
|
|
// 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; };
|