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.

330 lines
6.9 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // ConnectionInfo.cpp
  7. //
  8. // Description:
  9. // CConnectionInfo implementation.
  10. //
  11. // Maintained By:
  12. // Geoffrey Pease (GPease) 02-FEB-2000
  13. //
  14. //////////////////////////////////////////////////////////////////////////////
  15. #include "pch.h"
  16. #include "ConnectionInfo.h"
  17. DEFINE_THISCLASS("CConnectionInfo")
  18. // ************************************************************************
  19. //
  20. // Constructor / Destructor
  21. //
  22. // ************************************************************************
  23. //////////////////////////////////////////////////////////////////////////////
  24. //
  25. // HRESULT
  26. // CConnectionInfo::S_HrCreateInstance(
  27. // OBJECTCOOKIE cookieParentIn
  28. // )
  29. //
  30. //////////////////////////////////////////////////////////////////////////////
  31. HRESULT
  32. CConnectionInfo::S_HrCreateInstance(
  33. IUnknown ** ppunkOut,
  34. OBJECTCOOKIE cookieParentIn
  35. )
  36. {
  37. TraceFunc1( "ppunkOut, cookieParentIn = %u", cookieParentIn );
  38. Assert( ppunkOut != NULL );
  39. HRESULT hr;
  40. CConnectionInfo * pci = new CConnectionInfo;
  41. if ( pci != NULL )
  42. {
  43. hr = THR( pci->Init( cookieParentIn ) );
  44. if ( SUCCEEDED( hr ) )
  45. {
  46. hr = THR( pci->TypeSafeQI( IUnknown, ppunkOut ) );
  47. }
  48. pci->Release( );
  49. }
  50. else
  51. {
  52. hr = E_OUTOFMEMORY;
  53. }
  54. HRETURN( hr );
  55. } // S_HrCreateInstance( )
  56. //////////////////////////////////////////////////////////////////////////////
  57. //
  58. // CConnectionInfo::CConnectionInfo( void )
  59. //
  60. //////////////////////////////////////////////////////////////////////////////
  61. CConnectionInfo::CConnectionInfo( void )
  62. {
  63. TraceFunc( "" );
  64. InterlockedIncrement( &g_cObjects );
  65. TraceFuncExit();
  66. } // CConnectionInfo( )
  67. //////////////////////////////////////////////////////////////////////////////
  68. //
  69. // STDMETHODIMP
  70. // CConnectionInfo::Init(
  71. // OBJECTCOOKIE cookieParentIn
  72. // )
  73. //
  74. //////////////////////////////////////////////////////////////////////////////
  75. STDMETHODIMP
  76. CConnectionInfo::Init(
  77. OBJECTCOOKIE cookieParentIn
  78. )
  79. {
  80. TraceFunc( "" );
  81. HRESULT hr = S_OK;
  82. // IUnknown stuff
  83. Assert( m_cRef == 0 );
  84. AddRef( ); // Add one count
  85. // IConnectionInfo
  86. Assert( m_pcc == NULL );
  87. m_cookieParent = cookieParentIn;
  88. HRETURN( hr );
  89. } // Init( )
  90. //////////////////////////////////////////////////////////////////////////////
  91. //
  92. // CConnectionInfo::~CConnectionInfo( )
  93. //
  94. //////////////////////////////////////////////////////////////////////////////
  95. CConnectionInfo::~CConnectionInfo( )
  96. {
  97. TraceFunc( "" );
  98. InterlockedDecrement( &g_cObjects );
  99. TraceFuncExit();
  100. } // ~CConnectionInfo( )
  101. // ************************************************************************
  102. //
  103. // IUnknown
  104. //
  105. // ************************************************************************
  106. //////////////////////////////////////////////////////////////////////////////
  107. //
  108. // STDMETHODIMP
  109. // CConnectionInfo::QueryInterface(
  110. // REFIID riid,
  111. // LPVOID *ppv
  112. // )
  113. //
  114. //////////////////////////////////////////////////////////////////////////////
  115. STDMETHODIMP
  116. CConnectionInfo::QueryInterface(
  117. REFIID riid,
  118. LPVOID *ppv
  119. )
  120. {
  121. TraceQIFunc( riid, ppv );
  122. HRESULT hr = E_NOINTERFACE;
  123. if ( IsEqualIID( riid, IID_IUnknown ) )
  124. {
  125. *ppv = static_cast< IConnectionInfo * >( this );
  126. hr = S_OK;
  127. } // if: IUnknown
  128. else if ( IsEqualIID( riid, IID_IConnectionInfo ) )
  129. {
  130. *ppv = TraceInterface( __THISCLASS__, IConnectionInfo, this, 0 );
  131. hr = S_OK;
  132. } // else if: IConnectionInfo
  133. if ( SUCCEEDED( hr ) )
  134. {
  135. ((IUnknown*) *ppv)->AddRef( );
  136. } // if: success
  137. QIRETURN_IGNORESTDMARSHALLING( hr, riid );
  138. } // QueryInterface( )
  139. //////////////////////////////////////////////////////////////////////////////
  140. //
  141. // STDMETHODIMP_(ULONG)
  142. // CConnectionInfo::AddRef( void )
  143. //
  144. //////////////////////////////////////////////////////////////////////////////
  145. STDMETHODIMP_(ULONG)
  146. CConnectionInfo::AddRef( void )
  147. {
  148. TraceFunc( "[IUnknown]" );
  149. InterlockedIncrement( &m_cRef );
  150. RETURN( m_cRef );
  151. } // AddRef( )
  152. //////////////////////////////////////////////////////////////////////////////
  153. //
  154. // STDMETHODIMP_(ULONG)
  155. // CConnectionInfo::Release( void )
  156. //
  157. //////////////////////////////////////////////////////////////////////////////
  158. STDMETHODIMP_(ULONG)
  159. CConnectionInfo::Release( void )
  160. {
  161. TraceFunc( "[IUnknown]" );
  162. InterlockedDecrement( &m_cRef );
  163. if ( m_cRef )
  164. RETURN( m_cRef );
  165. TraceDo( delete this );
  166. RETURN(0);
  167. } // Release( )
  168. //****************************************************************************
  169. //
  170. // IConnectionInfo
  171. //
  172. //****************************************************************************
  173. //////////////////////////////////////////////////////////////////////////////
  174. //
  175. // STDMETHODIMP
  176. // CConnectionInfo::GetConnection(
  177. // IConfigurationConnection ** pccOut
  178. // )
  179. //
  180. //////////////////////////////////////////////////////////////////////////////
  181. STDMETHODIMP
  182. CConnectionInfo::GetConnection(
  183. IConfigurationConnection ** pccOut
  184. )
  185. {
  186. TraceFunc( "[IConnectionInfo]" );
  187. HRESULT hr = S_OK;
  188. if ( pccOut == NULL )
  189. goto InvalidPointer;
  190. *pccOut = m_pcc;
  191. if ( m_pcc == NULL )
  192. {
  193. hr = S_FALSE;
  194. }
  195. else
  196. {
  197. (*pccOut)->AddRef( );
  198. }
  199. Cleanup:
  200. HRETURN( hr );
  201. InvalidPointer:
  202. hr = THR( E_POINTER );
  203. goto Cleanup;
  204. } // GetConnection( )
  205. //////////////////////////////////////////////////////////////////////////////
  206. //
  207. // STDMETHODIMP
  208. // CConnectionInfo::SetConnection(
  209. // IConfigurationConnection * pccIn
  210. // )
  211. //
  212. //////////////////////////////////////////////////////////////////////////////
  213. STDMETHODIMP
  214. CConnectionInfo::SetConnection(
  215. IConfigurationConnection * pccIn
  216. )
  217. {
  218. TraceFunc( "[IConnectionInfo]" );
  219. HRESULT hr = S_OK;
  220. if ( m_pcc != NULL )
  221. {
  222. m_pcc->Release( );
  223. }
  224. m_pcc = pccIn;
  225. if ( m_pcc != NULL )
  226. {
  227. m_pcc->AddRef( );
  228. }
  229. HRETURN( hr );
  230. } // SetConnection( )
  231. //////////////////////////////////////////////////////////////////////////////
  232. //
  233. // STDMETHODIMP
  234. // CConnectionInfo::GetParent(
  235. // OBJECTCOOKIE * pcookieOut
  236. // )
  237. //
  238. //////////////////////////////////////////////////////////////////////////////
  239. STDMETHODIMP
  240. CConnectionInfo::GetParent(
  241. OBJECTCOOKIE * pcookieOut
  242. )
  243. {
  244. TraceFunc( "[IConnectionInfo]" );
  245. HRESULT hr = S_OK;
  246. if ( pcookieOut == NULL )
  247. goto InvalidPointer;
  248. Assert( m_cookieParent != NULL );
  249. *pcookieOut = m_cookieParent;
  250. if ( m_cookieParent == NULL )
  251. {
  252. hr = S_FALSE;
  253. }
  254. Cleanup:
  255. HRETURN( hr );
  256. InvalidPointer:
  257. hr = THR( E_INVALIDARG );
  258. goto Cleanup;
  259. } // GetParent( )