Leaked source code of windows server 2003
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.
|
|
// --------------------------------------------------------------------------------
// Privunk.h
// Copyright (c)1993-1995 Microsoft Corporation, All Rights Reserved
// --------------------------------------------------------------------------------
#ifndef __PRIVUNK_H
#define __PRIVUNK_H
// --------------------------------------------------------------------------------
// CPrivateUnknown
// --------------------------------------------------------------------------------
class CPrivateUnknown : public IUnknown { private: // ----------------------------------------------------------------------------
// Embed default IUnknown handler
// ----------------------------------------------------------------------------
class CUnkInner : public IUnknown { private: LONG m_cRef; // Private Ref Count
public: // Construction
CUnkInner(void) { m_cRef = 1; }
// IUnknown Members
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj); virtual STDMETHODIMP_(ULONG) AddRef(void) ; virtual STDMETHODIMP_(ULONG) Release(void); };
friend class CUnkInner;
// ----------------------------------------------------------------------------
// Private Data
// ----------------------------------------------------------------------------
CUnkInner m_cUnkInner; // Private Inner
IUnknown *m_pUnkOuter; // points to _cUnkInner or aggregating IUnknown
protected: // ----------------------------------------------------------------------------
// Construction
// ----------------------------------------------------------------------------
CPrivateUnknown(IUnknown *pUnkOuter); virtual ~CPrivateUnknown(void) {};
// ----------------------------------------------------------------------------
// This is the QueryInterface the aggregator implements
// ----------------------------------------------------------------------------
virtual HRESULT PrivateQueryInterface(REFIID riid, LPVOID * ppvObj) = 0;
public: // ----------------------------------------------------------------------------
// This is the IUnknown that subclasses returns from their CreateInstance func
// ----------------------------------------------------------------------------
IUnknown* GetInner() { return &m_cUnkInner; }
// ----------------------------------------------------------------------------
// IUnknown Members
// ----------------------------------------------------------------------------
inline virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj) { return m_pUnkOuter->QueryInterface(riid, ppvObj); } inline virtual STDMETHODIMP_(ULONG) AddRef(void) { return m_pUnkOuter->AddRef(); } inline virtual STDMETHODIMP_(ULONG) Release(void) { return m_pUnkOuter->Release(); }
// ----------------------------------------------------------------------------
// Public Utilities
// ----------------------------------------------------------------------------
void SetOuter(IUnknown *pUnkOuter); };
#endif // __PRIVUNK_H
|