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.

352 lines
9.8 KiB

  1. //////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Copyright (c) 1999-2000 Microsoft Corporation
  4. //
  5. // Module Name: CClusterNodeRes.cpp
  6. //
  7. // Description:
  8. // Implementation of CClusterNodeRes class
  9. //
  10. // Author:
  11. // Henry Wang (HenryWa) 24-AUG-1999
  12. //
  13. //////////////////////////////////////////////////////////////////////////////
  14. #include "Pch.h"
  15. #include "ClusterNodeRes.h"
  16. //****************************************************************************
  17. //
  18. // CClusterNodeRes
  19. //
  20. //****************************************************************************
  21. //////////////////////////////////////////////////////////////////////////////
  22. //++
  23. //
  24. // CClusterNodeRes::CClusterNodeRes(
  25. // LPCWSTR pwszNameIn,
  26. // CWbemServices * pNamespaceIn
  27. // )
  28. //
  29. // Description:
  30. // Constructor
  31. //
  32. // Arguments:
  33. // pwszNameIn -- Class name
  34. // pNamespaceIn -- Namespace
  35. // dwEnumTypeIn -- Type id
  36. //
  37. // Return Values:
  38. // pointer to the CProvBase
  39. //
  40. //--
  41. //////////////////////////////////////////////////////////////////////////////
  42. CClusterNodeRes::CClusterNodeRes(
  43. LPCWSTR pwszNameIn,
  44. CWbemServices * pNamespaceIn,
  45. DWORD dwEnumTypeIn
  46. )
  47. : CClusterObjAssoc( pwszNameIn, pNamespaceIn, dwEnumTypeIn )
  48. {
  49. } //*** CClusterNodeRes::CClusterNodeRes()
  50. //////////////////////////////////////////////////////////////////////////////
  51. //++
  52. //
  53. // static
  54. // CProvBase *
  55. // CClusterNodeRes::S_CreateThis(
  56. // LPCWSTR pwszNameIn,
  57. // CWbemServices * pNamespaceIn,
  58. // DWORD // dwEnumTypeIn
  59. // )
  60. //
  61. // Description:
  62. // Create a cluster node resource object.
  63. //
  64. // Arguments:
  65. // pwszNameIn -- Class name
  66. // pNamespaceIn -- Namespace
  67. // dwEnumTypeIn -- Type id
  68. //
  69. // Return Values:
  70. // Pointer to the CProvBase
  71. //
  72. //--
  73. //////////////////////////////////////////////////////////////////////////////
  74. CProvBase *
  75. CClusterNodeRes::S_CreateThis(
  76. LPCWSTR pwszNameIn,
  77. CWbemServices * pNamespaceIn,
  78. DWORD dwEnumTypeIn
  79. )
  80. {
  81. return new CClusterNodeRes(
  82. pwszNameIn,
  83. pNamespaceIn,
  84. dwEnumTypeIn
  85. );
  86. } //*** CClusterNodeRes::S_CreateThis()
  87. //////////////////////////////////////////////////////////////////////////////
  88. //++
  89. //
  90. // SCODE
  91. // CClusterNodeRes::EnumInstance(
  92. // long lFlagsIn,
  93. // IWbemContext * pCtxIn,
  94. // IWbemObjectSink * pHandlerIn
  95. // )
  96. //
  97. // Description:
  98. // Enum cluster Node resource instance
  99. //
  100. // Arguments:
  101. // lFlagsIn -- WMI flag
  102. // pCtxIn -- WMI context
  103. // pHandlerIn -- WMI sink pointer
  104. //
  105. // Return Values:
  106. // WBEM_S_NO_ERROR
  107. //
  108. //--
  109. //////////////////////////////////////////////////////////////////////////////
  110. SCODE
  111. CClusterNodeRes::EnumInstance(
  112. long lFlagsIn,
  113. IWbemContext * pCtxIn,
  114. IWbemObjectSink * pHandlerIn
  115. )
  116. {
  117. SAFECLUSTER shCluster;
  118. SAFERESOURCE shResource;
  119. LPCWSTR pwszResName = NULL;
  120. CWbemClassObject wco;
  121. CWbemClassObject wcoGroup;
  122. CWbemClassObject wcoPart;
  123. _bstr_t bstrGroup;
  124. _bstr_t bstrPart;
  125. m_wcoGroup.SpawnInstance( 0, & wcoGroup );
  126. m_wcoPart.SpawnInstance( 0, & wcoPart );
  127. shCluster = OpenCluster( NULL );
  128. CClusterEnum cluEnum( shCluster, CLUSTER_ENUM_RESOURCE );
  129. while ( ( pwszResName = cluEnum.GetNext() ) != NULL )
  130. {
  131. CClusPropList theProp;
  132. CError er;
  133. CWstrBuf wsbNodeName;
  134. CWstrBuf wsbResName;
  135. DWORD cbNodeName = MAX_PATH;
  136. DWORD cbResName = MAX_PATH;
  137. DWORD cbBytesReturned;
  138. DWORD dwState;
  139. DWORD dwError;
  140. shResource = OpenClusterResource( shCluster, pwszResName );
  141. wsbNodeName.SetSize( cbNodeName );
  142. wsbResName.SetSize( cbResName );
  143. dwError = ClusterResourceControl(
  144. shResource,
  145. NULL,
  146. CLUSCTL_RESOURCE_GET_NAME, // this control code
  147. NULL,
  148. 0,
  149. wsbResName,
  150. cbResName,
  151. & cbBytesReturned
  152. );
  153. if ( dwError == ERROR_MORE_DATA )
  154. {
  155. cbResName = cbBytesReturned;
  156. wsbResName.SetSize( cbResName );
  157. er = ClusterResourceControl(
  158. shResource,
  159. NULL,
  160. CLUSCTL_RESOURCE_GET_NAME,
  161. NULL,
  162. 0,
  163. wsbResName,
  164. cbResName,
  165. & cbBytesReturned
  166. );
  167. } // if: buffer was too small
  168. wcoPart.SetProperty( wsbResName, PVD_PROP_RES_NAME );
  169. wcoPart.GetProperty( bstrPart, PVD_WBEM_RELPATH );
  170. dwState = GetClusterResourceState(
  171. shResource,
  172. wsbNodeName,
  173. & cbNodeName,
  174. NULL,
  175. NULL
  176. );
  177. if ( dwState == ClusterResourceStateUnknown )
  178. {
  179. er = GetLastError();
  180. }
  181. wcoGroup.SetProperty( wsbNodeName, PVD_PROP_NODE_NAME );
  182. wcoGroup.GetProperty( bstrGroup, PVD_WBEM_RELPATH );
  183. m_pClass->SpawnInstance( 0, & wco );
  184. wco.SetProperty( (LPWSTR) bstrGroup, PVD_PROP_GROUPCOMPONENT );
  185. wco.SetProperty( (LPWSTR) bstrPart, PVD_PROP_PARTCOMPONENT );
  186. pHandlerIn->Indicate( 1, & wco );
  187. } // while more resources
  188. return WBEM_S_NO_ERROR;
  189. } //*** CClusterNodeRes::EnumInstance()
  190. /*
  191. //////////////////////////////////////////////////////////////////////////////
  192. //++
  193. //
  194. // SCODE
  195. // CClusterNodeRes::GetObject(
  196. //
  197. // Description:
  198. // Retrieve cluster node active resource object based given object path.
  199. //
  200. // Arguments:
  201. // rObjPathIn -- Object path to cluster object
  202. // lFlagsIn -- WMI flag
  203. // pCtxIn -- WMI context
  204. // pHandlerIn -- WMI sink pointer
  205. //
  206. // Return Values:
  207. // WBEM_E_NOT_SUPPORTED
  208. //
  209. //--
  210. //////////////////////////////////////////////////////////////////////////////
  211. SCODE
  212. CClusterNodeRes::GetObject(
  213. CObjPath & rObjPathIn,
  214. long lFlagsIn,
  215. IWbemContext * pCtxIn,
  216. IWbemObjectSink * pHandlerIn
  217. )
  218. {
  219. return WBEM_E_NOT_SUPPORTED;
  220. } //*** CClusterNodeRes::GetObject()
  221. //////////////////////////////////////////////////////////////////////////////
  222. //++
  223. //
  224. // SCODE
  225. // CClusterNodeRes::ExecuteMethod(
  226. //
  227. // Description:
  228. // Execute methods defined in the mof for cluster node resource.
  229. //
  230. // Arguments:
  231. // rObjPathIn -- Object path to cluster object
  232. // pwszMethodNameIn -- Name of the method to be invoked
  233. // lFlagIn -- WMI flag
  234. // pParamsIn -- Input parameters for the method
  235. // pHandlerIn -- WMI sink pointer
  236. //
  237. // Return Values:
  238. // WBEM_E_NOT_SUPPORTED
  239. //
  240. //--
  241. //////////////////////////////////////////////////////////////////////////////
  242. SCODE
  243. CClusterNodeRes::ExecuteMethod(
  244. CObjPath & rObjPathIn,
  245. WCHAR * pwszMethodNameIn,
  246. long lFlagIn,
  247. IWbemClassObject * pParamsIn,
  248. IWbemObjectSink * pHandlerIn
  249. )
  250. {
  251. return WBEM_E_NOT_SUPPORTED;
  252. } //*** CClusterNodeRes::ExecuteMethod()
  253. //////////////////////////////////////////////////////////////////////////////
  254. //++
  255. //
  256. // SCODE
  257. // CClusterNodeRes::PutInstance(
  258. // CWbemClassObject & rInstToPutIn,
  259. // long lFlagIn,
  260. // IWbemContext * pCtxIn,
  261. // IWbemObjectSink * pHandlerIn
  262. // )
  263. //
  264. // Description:
  265. // Save this instance.
  266. //
  267. // Arguments:
  268. // rInstToPutIn -- WMI object to be saved
  269. // lFlagIn -- WMI flag
  270. // pCtxIn -- WMI context
  271. // pHandlerIn -- WMI sink pointer
  272. //
  273. // Return Values:
  274. // WBEM_E_NOT_SUPPORTED
  275. //
  276. //--
  277. //////////////////////////////////////////////////////////////////////////////
  278. SCODE
  279. CClusterNodeRes::PutInstance(
  280. CWbemClassObject & rInstToPutIn,
  281. long lFlagIn,
  282. IWbemContext * pCtxIn,
  283. IWbemObjectSink * pHandlerIn
  284. )
  285. {
  286. return WBEM_E_NOT_SUPPORTED;
  287. } //*** CClusterNodeRes::PutInstance()
  288. //////////////////////////////////////////////////////////////////////////////
  289. //++
  290. //
  291. // SCODE
  292. // CClusterNodeRes::DeleteInstance(
  293. // CObjPath & rObjPathIn,
  294. // long lFlagIn,
  295. // IWbemContext * pCtxIn,
  296. // IWbemObjectSink * pHandlerIn
  297. // )
  298. //
  299. // Description:
  300. // Delete the object specified in rObjPathIn.
  301. //
  302. // Arguments:
  303. // rObjPathIn -- ObjPath for the instance to be deleted
  304. // lFlagIn -- WMI flag
  305. // pCtxIn -- WMI context
  306. // pHandlerIn -- WMI sink pointer
  307. //
  308. // Return Values:
  309. // WBEM_E_NOT_SUPPORTED
  310. //
  311. //--
  312. //////////////////////////////////////////////////////////////////////////////
  313. SCODE
  314. CClusterNodeRes::DeleteInstance(
  315. CObjPath & rObjPathIn,
  316. long lFlagIn,
  317. IWbemContext * pCtxIn,
  318. IWbemObjectSink * pHandlerIn
  319. )
  320. {
  321. return WBEM_E_NOT_SUPPORTED;
  322. } //*** CClusterNodeRes::DeleteInstance()
  323. */