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.

86 lines
2.1 KiB

  1. // identity.cpp
  2. //
  3. // A dummy class whose sole purpose is to say, "Yes, I am BrowseUI"
  4. #include "priv.h"
  5. #include "sccls.h"
  6. class CBrowseuiIdentity : public IUnknown
  7. {
  8. public:
  9. STDMETHOD ( QueryInterface ) ( REFIID riid, LPVOID * ppvObj );
  10. STDMETHOD_( ULONG, AddRef ) ();
  11. STDMETHOD_( ULONG, Release ) ();
  12. protected:
  13. friend HRESULT CBrowseuiIdentity_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi);
  14. CBrowseuiIdentity();
  15. ~CBrowseuiIdentity();
  16. LONG m_cRef;
  17. };
  18. STDAPI CBrowseuiIdentity_CreateInstance(IUnknown* pUnkOuter, IUnknown** ppunk, LPCOBJECTINFO poi)
  19. {
  20. // class factory should've done these
  21. ASSERT(pUnkOuter == NULL);
  22. ASSERT(*ppunk == NULL);
  23. CBrowseuiIdentity* pid = new CBrowseuiIdentity();
  24. if (pid)
  25. {
  26. *ppunk = SAFECAST(pid, IUnknown*);
  27. return S_OK;
  28. }
  29. else
  30. {
  31. return E_OUTOFMEMORY;
  32. }
  33. }
  34. /////////////////////////////////////////////////////////////////////////////////////////////////////
  35. CBrowseuiIdentity::CBrowseuiIdentity() : m_cRef(1)
  36. {
  37. }
  38. /////////////////////////////////////////////////////////////////////////////////////////////////////
  39. CBrowseuiIdentity::~CBrowseuiIdentity()
  40. {
  41. }
  42. /////////////////////////////////////////////////////////////////////////////////////////////////////
  43. STDMETHODIMP CBrowseuiIdentity::QueryInterface ( REFIID riid, LPVOID * ppvObj )
  44. {
  45. if ( riid == IID_IUnknown )
  46. {
  47. *ppvObj = SAFECAST( this, IUnknown *);
  48. AddRef();
  49. }
  50. else
  51. {
  52. return E_NOINTERFACE;
  53. }
  54. return NOERROR;
  55. }
  56. /////////////////////////////////////////////////////////////////////////////////////////////////////
  57. STDMETHODIMP_( ULONG ) CBrowseuiIdentity:: AddRef ()
  58. {
  59. InterlockedIncrement( &m_cRef );
  60. return m_cRef;
  61. }
  62. /////////////////////////////////////////////////////////////////////////////////////////////////////
  63. STDMETHODIMP_( ULONG ) CBrowseuiIdentity:: Release ()
  64. {
  65. if ( InterlockedDecrement( &m_cRef ) == 0 )
  66. {
  67. delete this;
  68. return 0;
  69. }
  70. return m_cRef;
  71. }