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.

332 lines
8.9 KiB

  1. // File: ActionPolicy.inl
  2. //
  3. // Copyright (c) 2000 Microsoft Corporation
  4. //
  5. //
  6. // 3/20/00 v-marfin : bug 59492 : Create listener when creating action since that is
  7. // where the valid "this" object used to SetObjectPtr() is.
  8. #ifdef _DEBUG
  9. #define new DEBUG_NEW
  10. #endif
  11. /////////////////////////////////////////////////////////////////////////////
  12. // WMI Operations
  13. /////////////////////////////////////////////////////////////////////////////
  14. inline HRESULT CActionPolicy::EnumerateChildren()
  15. {
  16. TRACEX(_T("CActionPolicy::EnumerateChildren\n"));
  17. if( m_pActionListener == NULL )
  18. {
  19. m_pActionListener = new CActionConfigListener;
  20. m_pActionListener->SetObjectPtr(this);
  21. m_pActionListener->Create();
  22. }
  23. else
  24. {
  25. IncrementActiveSinkCount();
  26. }
  27. HRESULT hr = S_OK;
  28. CString sQuery = IDS_STRING_ACTIONCONFIG_QUERY;
  29. IWbemObjectSink* pSink = m_pActionListener->GetSink();
  30. if( !CHECKHRESULT(hr = CnxExecQueryAsync(GetSystemName(),sQuery,pSink)) )
  31. {
  32. TRACE(_T("FAILED : CConnectionManager::RegisterEventNotification failed!\n"));
  33. }
  34. return hr;
  35. }
  36. /////////////////////////////////////////////////////////////////////////////
  37. // Clipboard Operations
  38. /////////////////////////////////////////////////////////////////////////////
  39. inline bool CActionPolicy::Cut()
  40. {
  41. TRACEX(_T("CActionPolicy::Cut\n"));
  42. return false;
  43. }
  44. inline bool CActionPolicy::Copy()
  45. {
  46. TRACEX(_T("CActionPolicy::Copy\n"));
  47. return false;
  48. }
  49. inline bool CActionPolicy::Paste()
  50. {
  51. TRACEX(_T("CActionPolicy::Paste\n"));
  52. return false;
  53. }
  54. /////////////////////////////////////////////////////////////////////////////
  55. // Operations
  56. /////////////////////////////////////////////////////////////////////////////
  57. // v-marfin 59492 ---------------------------------------
  58. inline CString CActionPolicy::GetObjectPath()
  59. {
  60. TRACEX(_T("CActionPolicy::GetObjectPath\n"));
  61. CString sPath;
  62. sPath.Format(IDS_STRING_MOF_OBJECTPATH,IDS_STRING_MOF_HMACTION_STATUS,GetGuid());
  63. return sPath;
  64. }
  65. //-------------------------------------------------------
  66. inline CString CActionPolicy::GetUITypeName()
  67. {
  68. TRACEX(_T("CActionPolicy::GetUITypeName\n"));
  69. CString sTypeName;
  70. sTypeName.LoadString(IDS_STRING_ACTION_POLICY);
  71. return sTypeName;
  72. }
  73. /////////////////////////////////////////////////////////////////////////////
  74. // Scope Item Members
  75. /////////////////////////////////////////////////////////////////////////////
  76. inline CScopePaneItem* CActionPolicy::CreateScopeItem()
  77. {
  78. TRACEX(_T("CActionPolicy::CreateScopeItem\n"));
  79. CActionPolicyScopeItem * pNewItem = new CActionPolicyScopeItem;
  80. pNewItem->SetObjectPtr(this);
  81. return pNewItem;
  82. }
  83. /////////////////////////////////////////////////////////////////////////////
  84. // New Child Creation Members
  85. /////////////////////////////////////////////////////////////////////////////
  86. inline bool CActionPolicy::CreateChild(CHMObject* pObject, const CString& sWMIClassName, const CString& sWMIAssociatorClassName)
  87. {
  88. TRACEX(_T("CActionPolicy::CreateChild\n"));
  89. TRACEARGn(pObject);
  90. TRACEARGs(sWMIClassName);
  91. TRACEARGs(sWMIAssociatorClassName);
  92. if( ! GfxCheckObjPtr(pObject,CAction) )
  93. {
  94. return false;
  95. }
  96. pObject->SetSystemName(GetSystemName());
  97. // create the GUID
  98. GUID ChildGuid;
  99. CoCreateGuid(&ChildGuid);
  100. OLECHAR szGuid[GUID_CCH];
  101. ::StringFromGUID2(ChildGuid, szGuid, GUID_CCH);
  102. CString sGuid = OLE2CT(szGuid);
  103. pObject->SetGuid(sGuid);
  104. // Add Child to this parent
  105. AddChild(pObject);
  106. // create child instance
  107. CWbemClassObject ChildClassObject;
  108. if( ! CHECKHRESULT(ChildClassObject.Create(GetSystemName())) )
  109. {
  110. return false;
  111. }
  112. BSTR bsTemp = sWMIClassName.AllocSysString();
  113. if( ! CHECKHRESULT(ChildClassObject.CreateInstance(bsTemp)) )
  114. {
  115. ::SysFreeString(bsTemp);
  116. return false;
  117. }
  118. ::SysFreeString(bsTemp);
  119. // Save the child instance properties for name, guid and typeguid
  120. ChildClassObject.SetProperty(IDS_STRING_MOF_NAME,pObject->GetName());
  121. ChildClassObject.SetProperty(IDS_STRING_MOF_GUID,sGuid);
  122. ChildClassObject.SetProperty(IDS_STRING_MOF_TYPEGUID,((CAction*)pObject)->GetTypeGuid());
  123. // for the action type we must create an instance of the standard event consumer as well
  124. // and we must associate the event consumer instance to the ActionConfiguration instance.
  125. CString sConsumerClassName = ((CAction*)pObject)->GetConsumerClassName();
  126. CWbemClassObject EventConsumerObject;
  127. if( ! CHECKHRESULT(EventConsumerObject.Create(GetSystemName())) )
  128. {
  129. return false;
  130. }
  131. bsTemp = sConsumerClassName.AllocSysString();
  132. if( ! CHECKHRESULT(EventConsumerObject.CreateInstance(bsTemp)) )
  133. {
  134. ::SysFreeString(bsTemp);
  135. return false;
  136. }
  137. ::SysFreeString(bsTemp);
  138. // the name of the event consumer will match the GUID of the HMActionConfiguration
  139. EventConsumerObject.SetProperty(IDS_STRING_MOF_NAME, _T("{") + pObject->GetGuid() + _T("}"));
  140. // commit the changes to WMI
  141. EventConsumerObject.SaveAllProperties();
  142. CString sEventConsumerPath;
  143. sEventConsumerPath.Format(_T("\\\\.\\root\\cimv2\\MicrosoftHealthmonitor:%s.Name=\"{%s}\""),sConsumerClassName,pObject->GetGuid());
  144. ChildClassObject.SetProperty(IDS_STRING_MOF_EVENTCONSUMER,sEventConsumerPath);
  145. // commit the changes to WMI
  146. ChildClassObject.SaveAllProperties();
  147. //ERICVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
  148. //
  149. // create the __EventFilter instance and fill out the query
  150. //
  151. CWbemClassObject EventFilter;
  152. EventFilter.Create(GetSystemName());
  153. BSTR bsEventFilter = ::SysAllocString(L"__EventFilter");
  154. if( ! CHECKHRESULT(EventFilter.CreateInstance(bsEventFilter)) )
  155. {
  156. ::SysFreeString(bsEventFilter);
  157. return false;
  158. }
  159. ::SysFreeString(bsEventFilter);
  160. // create the GUID
  161. // GUID ChildGuid;
  162. // CoCreateGuid(&ChildGuid);
  163. // OLECHAR szGuid[GUID_CCH];
  164. // ::StringFromGUID2(ChildGuid, szGuid, GUID_CCH);
  165. // CString sGuid = OLE2CT(szGuid);
  166. EventFilter.SetProperty(_T("Name"),sGuid);
  167. EventFilter.SetProperty(_T("QueryLanguage"),CString(_T("WQL")));
  168. // set event filter query to ActionStatus creation event
  169. CString sQuery;
  170. sQuery.Format(IDS_STRING_HMACTIONSTATUS_QUERY_FMT,sGuid);
  171. EventFilter.SetProperty(_T("Query"),sQuery);
  172. EventFilter.SaveAllProperties();
  173. //
  174. // create the __FilterToConsumerBinding instance and fill out the paths
  175. //
  176. CWbemClassObject FilterToConsumerBinding;
  177. FilterToConsumerBinding.Create(GetSystemName());
  178. BSTR bsFTCB = ::SysAllocString(L"__FilterToConsumerBinding");
  179. if( ! CHECKHRESULT(FilterToConsumerBinding.CreateInstance(bsFTCB)) )
  180. {
  181. ::SysFreeString(bsFTCB);
  182. return false;
  183. }
  184. ::SysFreeString(bsFTCB);
  185. FilterToConsumerBinding.SetProperty(_T("Consumer"),sEventConsumerPath);
  186. CString sEventFilterPath;
  187. sEventFilterPath.Format(_T("\\\\.\\root\\cimv2\\MicrosoftHealthmonitor:__EventFilter.Name=\"%s\""),sGuid);
  188. FilterToConsumerBinding.SetProperty(_T("Filter"),sEventFilterPath);
  189. FilterToConsumerBinding.SaveAllProperties();
  190. //ERIC^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  191. return true;
  192. }
  193. inline void CActionPolicy::CreateNewChildAction(int iType)
  194. {
  195. TRACEX(_T("CActionPolicy::CreateNewChildAction\n"));
  196. CAction* pNewAction = new CAction;
  197. // v-marfin : bug 59492 : Create listener when creating action since that is
  198. // where the valid "this" object used to SetObjectPtr() is.
  199. if( ! pNewAction->m_pActionStatusListener )
  200. {
  201. pNewAction->m_pActionStatusListener = new CActionStatusListener;
  202. pNewAction->m_pActionStatusListener->SetObjectPtr(this);
  203. pNewAction->m_pActionStatusListener->Create();
  204. }
  205. switch( iType )
  206. {
  207. case IDM_ACTION_CMDLINE:
  208. {
  209. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_CMDLINE_FMT));
  210. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_CMDLINE);
  211. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  212. }
  213. break;
  214. case IDM_ACTION_EMAIL:
  215. {
  216. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_EMAIL_FMT));
  217. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_EMAIL);
  218. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  219. }
  220. break;
  221. case IDM_ACTION_LOGFILE:
  222. {
  223. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_LOGFILE_FMT));
  224. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_TEXTLOG);
  225. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  226. }
  227. break;
  228. case IDM_ACTION_NTEVENT:
  229. {
  230. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_NTEVENT_FMT));
  231. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_NTEVENT);
  232. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  233. }
  234. break;
  235. case IDM_ACTION_SCRIPT:
  236. {
  237. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_SCRIPT_FMT));
  238. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_SCRIPT);
  239. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  240. }
  241. break;
  242. case IDM_ACTION_PAGING:
  243. {
  244. pNewAction->SetName(GetUniqueChildName(IDS_STRING_ACTION_PAGING_FMT));
  245. pNewAction->SetTypeGuid(IDS_STRING_MOF_HMAT_PAGING);
  246. CreateChild(pNewAction,IDS_STRING_MOF_HMA_CONFIG,_T(""));
  247. }
  248. break;
  249. }
  250. if( pNewAction->GetScopeItemCount() )
  251. {
  252. CScopePaneItem* pItem = pNewAction->GetScopeItem(0);
  253. if( pItem )
  254. {
  255. pItem->SelectItem();
  256. pItem->InvokePropertySheet();
  257. }
  258. }
  259. }