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.

341 lines
7.6 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 2000-2001 Microsoft Corporation
  4. //
  5. // Module Name:
  6. // CClusCfgCallback.cpp
  7. //
  8. // Description:
  9. // This file contains the implementation of the CClusCfgCallback
  10. // class.
  11. //
  12. // Documentation:
  13. // TODO: fill in pointer to external documentation
  14. //
  15. // Header File:
  16. // CClusCfgCallback.h
  17. //
  18. // Maintained By:
  19. // David Potter (DavidP) 14-JUN-2001
  20. // Vij Vasu (VVasu) 07-MAR-2000
  21. //
  22. //////////////////////////////////////////////////////////////////////////////
  23. //////////////////////////////////////////////////////////////////////////////
  24. // Include Files
  25. //////////////////////////////////////////////////////////////////////////////
  26. // The precompiled header for this library
  27. #include "Pch.h"
  28. #include "CClusCfgCallback.h"
  29. //////////////////////////////////////////////////////////////////////////////
  30. //++
  31. //
  32. // CClusCfgCallback::CClusCfgCallback()
  33. //
  34. // Description:
  35. // Constructor of the CClusCfgCallback class. This initializes
  36. // the m_cRef variable to 1 instead of 0 to account of possible
  37. // QueryInterface failure in DllGetClassObject.
  38. //
  39. // Arguments:
  40. // None.
  41. //
  42. // Return Value:
  43. // None.
  44. //
  45. // Remarks:
  46. // None.
  47. //
  48. //--
  49. //////////////////////////////////////////////////////////////////////////////
  50. CClusCfgCallback::CClusCfgCallback( void )
  51. : m_cRef( 1 )
  52. {
  53. } //*** CClusCfgCallback::CClusCfgCallback
  54. //////////////////////////////////////////////////////////////////////////////
  55. //++
  56. //
  57. // CClusCfgCallback::~CClusCfgCallback()
  58. //
  59. // Description:
  60. // Destructor of the CClusCfgCallback class.
  61. //
  62. // Arguments:
  63. // None.
  64. //
  65. // Return Value:
  66. // None.
  67. //
  68. // Remarks:
  69. // None.
  70. //
  71. //--
  72. //////////////////////////////////////////////////////////////////////////////
  73. CClusCfgCallback::~CClusCfgCallback( void )
  74. {
  75. } //*** CClusCfgCallback::~CClusCfgCallback
  76. //////////////////////////////////////////////////////////////////////////////
  77. //++
  78. //
  79. // HRESULT
  80. // CClusCfgCallback::S_HrCreateInstance(
  81. // IUnknown ** ppunkOut
  82. // )
  83. //
  84. // Description:
  85. // Creates a CClusCfgCallback instance.
  86. //
  87. // Arguments:
  88. // ppunkOut
  89. // The IUnknown interface to the newly create object.
  90. //
  91. // Return Values:
  92. // S_OK
  93. // Success.
  94. //
  95. // E_OUTOFMEMORY
  96. // Not enough memory to create the object.
  97. //
  98. // other HRESULTs
  99. // Object initialization failed.
  100. //
  101. //--
  102. //////////////////////////////////////////////////////////////////////////////
  103. HRESULT
  104. CClusCfgCallback::S_HrCreateInstance(
  105. IUnknown ** ppunkOut
  106. )
  107. {
  108. CClusCfgCallback * pccb;
  109. HRESULT hr;
  110. pccb = new CClusCfgCallback();
  111. if ( pccb != NULL )
  112. {
  113. hr = pccb->QueryInterface( IID_IUnknown, reinterpret_cast< void ** >( ppunkOut ) );
  114. pccb->Release( );
  115. } // if: error allocating object
  116. else
  117. {
  118. hr = THR( E_OUTOFMEMORY );
  119. } // else: out of memory
  120. return hr;
  121. } //*** CClusCfgCallback::S_HrCreateInstance()
  122. //////////////////////////////////////////////////////////////////////////////
  123. //++
  124. //
  125. // CClusCfgCallback::AddRef
  126. //
  127. // Description:
  128. // Increment the reference count of this object by one.
  129. //
  130. // Arguments:
  131. // None.
  132. //
  133. // Return Value:
  134. // The new reference count.
  135. //
  136. // Remarks:
  137. // None.
  138. //
  139. //--
  140. //////////////////////////////////////////////////////////////////////////////
  141. STDMETHODIMP_( ULONG )
  142. CClusCfgCallback::AddRef( void )
  143. {
  144. InterlockedIncrement( &m_cRef );
  145. return m_cRef;
  146. } //*** CClusCfgCallback::AddRef
  147. //////////////////////////////////////////////////////////////////////////////
  148. //++
  149. //
  150. // CClusCfgCallback::Release
  151. //
  152. // Description:
  153. // Decrement the reference count of this object by one.
  154. //
  155. // Arguments:
  156. // None.
  157. //
  158. // Return Value:
  159. // The new reference count.
  160. //
  161. // Remarks:
  162. // None.
  163. //
  164. //--
  165. //////////////////////////////////////////////////////////////////////////////
  166. STDMETHODIMP_( ULONG )
  167. CClusCfgCallback::Release( void )
  168. {
  169. LONG cRef;
  170. cRef = InterlockedDecrement( &m_cRef );
  171. if ( cRef == 0 )
  172. {
  173. delete this;
  174. } // if: reference count decremented to zero
  175. return cRef;
  176. } //*** CClusCfgCallback::Release
  177. //////////////////////////////////////////////////////////////////////////////
  178. //++
  179. //
  180. // CClusCfgCallback::QueryInterface
  181. //
  182. // Description:
  183. // Query this object for the passed in interface.
  184. //
  185. // Arguments:
  186. // riidIn
  187. // Id of interface requested.
  188. //
  189. // ppvOut
  190. // Pointer to the requested interface.
  191. //
  192. // Return Value:
  193. // S_OK
  194. // If the interface is available on this object.
  195. //
  196. // E_NOINTERFACE
  197. // If the interface is not available.
  198. //
  199. // E_POINTER
  200. // If ppvOut is NULL.
  201. //
  202. // Remarks:
  203. // None.
  204. //
  205. //--
  206. //////////////////////////////////////////////////////////////////////////////
  207. STDMETHODIMP
  208. CClusCfgCallback::QueryInterface(
  209. REFIID riidIn
  210. , void ** ppvOut
  211. )
  212. {
  213. HRESULT hr = S_OK;
  214. //
  215. // Validate arguments.
  216. //
  217. Assert( ppvOut != NULL );
  218. if ( ppvOut == NULL )
  219. {
  220. hr = THR( E_POINTER );
  221. goto Cleanup;
  222. }
  223. //
  224. // Handle known interfaces.
  225. //
  226. if ( IsEqualIID( riidIn, IID_IUnknown ) )
  227. {
  228. *ppvOut = static_cast< IClusCfgCallback * >( this );
  229. } // if: IUnknown
  230. else if ( IsEqualIID( riidIn, IID_IClusCfgCallback ) )
  231. {
  232. *ppvOut = static_cast< IClusCfgCallback * >( this );
  233. } // else if: IClusCfgCallback
  234. else
  235. {
  236. *ppvOut = NULL;
  237. hr = E_NOINTERFACE;
  238. } // else
  239. //
  240. // Add a reference to the interface if successful.
  241. //
  242. if ( SUCCEEDED( hr ) )
  243. {
  244. ((IUnknown *) *ppvOut)->AddRef();
  245. } // if: success
  246. Cleanup:
  247. return hr;
  248. } //*** CClusCfgCallback::QueryInterface
  249. //////////////////////////////////////////////////////////////////////////////
  250. //++
  251. //
  252. // CClusCfgCallback::SendStatusReport
  253. //
  254. // Description:
  255. // Handle a progress notification
  256. //
  257. // Arguments:
  258. // bstrNodeNameIn
  259. // Name of the node that sent the status report.
  260. //
  261. // clsidTaskMajorIn
  262. // clsidTaskMinorIn
  263. // GUID identifying the notification.
  264. //
  265. // ulMinIn
  266. // ulMaxIn
  267. // ulCurrentIn
  268. // Values that indicate the percentage of this task that is
  269. // completed.
  270. //
  271. // hrStatusIn
  272. // Error code.
  273. //
  274. // bstrDescriptionIn
  275. // String describing the notification.
  276. //
  277. // pftTimeIn
  278. // bstrReferenceIn
  279. //
  280. // Return Value:
  281. // Always
  282. //
  283. // Exceptions Thrown:
  284. // None.
  285. //
  286. //--
  287. //////////////////////////////////////////////////////////////////////////////
  288. HRESULT
  289. CClusCfgCallback::SendStatusReport(
  290. BSTR bstrNodeNameIn
  291. , CLSID clsidTaskMajorIn
  292. , CLSID clsidTaskMinorIn
  293. , ULONG ulMinIn
  294. , ULONG ulMaxIn
  295. , ULONG ulCurrentIn
  296. , HRESULT hrStatusIn
  297. , BSTR bstrDescriptionIn
  298. , FILETIME * pftTimeIn
  299. , BSTR bstrReferenceIn
  300. ) throw()
  301. {
  302. wprintf( L"Notification ( %d, %d, %d ) =>\n '%s' ( Error Code %#08x )\n", ulMinIn, ulMaxIn, ulCurrentIn, bstrDescriptionIn, hrStatusIn );
  303. return S_OK;
  304. } //*** CClusCfgCallback::SendStatusReport