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.

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