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.

563 lines
18 KiB

  1. /*++
  2. Copyright (C) 1996-2001 Microsoft Corporation
  3. Module Name:
  4. MOFPROP.H
  5. Abstract:
  6. History:
  7. --*/
  8. #ifndef __MOFPROP__H_
  9. #define __MOFPROP__H_
  10. #include <miniafx.h>
  11. #include <wbemidl.h>
  12. #include "wstring.h"
  13. #include "parmdefs.h"
  14. #include <wbemutil.h>
  15. //#include "mofparse.h"
  16. #include "trace.h"
  17. #define VT_EX_EMBEDDED (VT_RESERVED | VT_EMBEDDED_OBJECT)
  18. #define SCOPE_CLASS 1
  19. #define SCOPE_INSTANCE 2
  20. #define SCOPE_PROPERTY 4
  21. #define SCOPE_METHOD 8
  22. #define SCOPE_PARAMETER 0X10
  23. #define SCOPE_ASSOCIATION 0X20
  24. #define SCOPE_REFERENCE 0x40
  25. enum QUALSCOPE{CLASSINST_SCOPE, PROPMETH_SCOPE};
  26. enum PARSESTATE {INITIAL, REFLATE_INST, REFLATE_CLASS};
  27. class CMObject;
  28. class CMoClass;
  29. class CMofParse;
  30. class ParseState;
  31. class CMoValue
  32. {
  33. protected:
  34. VARTYPE m_vType;
  35. VARIANT m_varValue;
  36. struct CAlias
  37. {
  38. LPWSTR m_wszAlias;
  39. int m_nArrayIndex;
  40. CAlias() : m_wszAlias(NULL), m_nArrayIndex(-1){}
  41. CAlias(COPY LPCWSTR wszAlias, int nArrayIndex = -1);
  42. ~CAlias();
  43. };
  44. CPtrArray m_aAliases; // CAlias*
  45. PDBG m_pDbg;
  46. public:
  47. CMoValue(PDBG pDbg);
  48. ~CMoValue();
  49. INTERNAL VARIANT& AccessVariant() {return m_varValue;}
  50. VARTYPE GetType() {return m_vType;}
  51. VARTYPE GetVarType() {return m_varValue.vt;}
  52. void SetType(VARTYPE vType) {m_vType = vType;}
  53. int GetNumAliases() {return m_aAliases.GetSize();}
  54. BOOL GetAlias(IN int nAliasIndeex,
  55. OUT INTERNAL LPWSTR& wszAlias, OUT int& nArrayIndex);
  56. HRESULT AddAlias(COPY LPCWSTR wszAlias, int nArrayIndex = -1);
  57. BOOL Split(COutput & out);
  58. };
  59. //*****************************************************************************
  60. typedef enum {OBJECT, PROP, ARG} QualType;
  61. class CMoQualifier
  62. {
  63. protected:
  64. LPWSTR m_wszName;
  65. CMoValue m_Value;
  66. PDBG m_pDbg;
  67. DWORD m_dwScope;
  68. long m_lFlavor;
  69. bool m_bNotOverrideSet;
  70. bool m_bOverrideSet;
  71. bool m_bIsRestricted;
  72. bool m_bNotToInstance;
  73. bool m_bToInstance;
  74. bool m_bNotToSubclass;
  75. bool m_bToSubclass;
  76. bool m_bAmended;
  77. bool m_bCimDefaultQual;
  78. bool m_bUsingDefaultValue;
  79. public:
  80. CMoQualifier(PDBG pDbg);
  81. ~CMoQualifier();
  82. BOOL IsRestricted(){return m_bIsRestricted;};
  83. void SetRestricted(){m_bIsRestricted = TRUE;};
  84. void SetCimDefault(bool bSet){m_bCimDefaultQual = bSet;};
  85. bool IsCimDefault(){return m_bCimDefaultQual;};
  86. void SetUsingDefaultValue(bool bSet){m_bUsingDefaultValue = bSet;};
  87. bool IsUsingDefaultValue(){return m_bUsingDefaultValue;};
  88. HRESULT SetQualName(COPY LPCWSTR wszName);
  89. INTERNAL LPWSTR GetName() {return m_wszName;}
  90. VARIANT * GetpVar(){return & m_Value.AccessVariant();};
  91. VARTYPE GetType(){return m_Value.GetType();};
  92. void SetType(VARTYPE vt){m_Value.SetType(vt);};
  93. bool IsAmended(){return m_bAmended;};
  94. void SetAmended(bool bAmended){m_bAmended = bAmended;};
  95. CMoValue& AccessValue() {return m_Value;}
  96. void SetFlavor(long lFlavor) { m_lFlavor = lFlavor;};
  97. long GetFlavor(void) { return m_lFlavor;};
  98. void OverrideSet(){m_bOverrideSet = TRUE;};
  99. BOOL IsOverrideSet(){return m_bOverrideSet;};
  100. HRESULT SetFlag(int iToken, LPCWSTR pwsText);
  101. BOOL SetScope(int iToken, LPCWSTR pwsText);
  102. DWORD GetScope(){return m_dwScope;};
  103. BOOL Split(COutput & out);
  104. BOOL SplitFlavors( COutput& out );
  105. BOOL IsDisplayable(COutput & out, QualType qt);
  106. BOOL IsLocaleQual( void ) { return wbem_wcsicmp( m_wszName, L"Locale" ) == 0; }
  107. private:
  108. BOOL AddToSet(OLE_MODIFY IWbemQualifierSet* pQualifierSet, BOOL bClass);
  109. friend class CMoQualifierArray;
  110. friend class CBMOFOut;
  111. };
  112. //*****************************************************************************
  113. class CMoQualifierArray
  114. {
  115. protected:
  116. CPtrArray m_aQualifiers;
  117. PDBG m_pDbg;
  118. public:
  119. CMoQualifierArray(PDBG pDbg){m_pDbg = pDbg;}
  120. ~CMoQualifierArray();
  121. void RemoveAll(){m_aQualifiers.RemoveAll();};
  122. int GetSize() {return m_aQualifiers.GetSize();}
  123. INTERNAL CMoQualifier* GetAt(int nIndex)
  124. {return (CMoQualifier*) m_aQualifiers[nIndex];}
  125. INTERNAL CMoQualifier* operator[](int nIndex) {return GetAt(nIndex);}
  126. INTERNAL CMoValue* Find(READ_ONLY LPCWSTR wszName);
  127. BOOL Add(ACQUIRE CMoQualifier* pQualifier);
  128. BOOL RegisterAliases(MODIFY CMObject* pObject,
  129. READ_ONLY LPCWSTR wszPropName);
  130. BOOL AddToSet(OLE_MODIFY IWbemQualifierSet* pQualifierSet, BOOL bClass);
  131. BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, BOOL bClass);
  132. BOOL AddToPropOrMeth(OLE_MODIFY IWbemClassObject* pObject,
  133. READ_ONLY LPCWSTR wszProperty, BOOL bClass, BOOL bProp);
  134. BOOL Split(COutput & out, QualType qt);
  135. bool HasAmended();
  136. };
  137. //*****************************************************************************
  138. class CMoProperty
  139. {
  140. protected:
  141. LPWSTR m_wszName;
  142. CMoValue m_Value;
  143. LPWSTR m_wszTypeTitle;
  144. PDBG m_pDbg;
  145. CMoQualifierArray* m_paQualifiers;
  146. IWbemClassObject * GetInstPtr(const WCHAR * pClassName, IWbemServices* pNamespace, CMObject * pMo, IWbemContext * pCtx);
  147. public:
  148. CMoProperty(CMoQualifierArray * paQualifiers, PDBG pDbg);
  149. virtual ~CMoProperty();
  150. virtual BOOL IsValueProperty(){return TRUE;};
  151. INTERNAL LPWSTR GetName() {return m_wszName;}
  152. HRESULT SetPropName(COPY LPCWSTR wszName);
  153. HRESULT SetTypeTitle(COPY LPCWSTR wszName);
  154. VARTYPE GetType(){return m_Value.GetType();};
  155. void SetType(VARTYPE vType){m_Value.SetType(vType);};
  156. CMoValue& AccessValue() {return m_Value;}
  157. VARIANT * GetpVar(){return & m_Value.AccessVariant();};
  158. void SetQualifiers(ACQUIRE CMoQualifierArray* pQualifiers);
  159. INTERNAL CMoQualifierArray* GetQualifiers() {return m_paQualifiers;}
  160. virtual BOOL RegisterAliases(MODIFY CMObject* pObject){return TRUE;};
  161. virtual BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx) = 0;
  162. virtual BOOL Split(COutput & out) = 0;
  163. private:
  164. friend CMObject;
  165. friend CMoClass;
  166. };
  167. class CValueProperty : public CMoProperty
  168. {
  169. protected:
  170. private:
  171. BOOL AddEmbeddedObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, IWbemContext * pCtx);
  172. friend CMObject;
  173. friend CMoClass;
  174. BOOL m_bIsArg;
  175. PDBG m_pDbg;
  176. public:
  177. CValueProperty(CMoQualifierArray * paQualifiers, PDBG pDbg);
  178. BOOL RegisterAliases(MODIFY CMObject* pObject);
  179. BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
  180. void SetAsArg(){m_bIsArg = TRUE;};
  181. BOOL Split(COutput & out);
  182. };
  183. class CMoType;
  184. class CMoInstance;
  185. class CMethodProperty : public CMoProperty
  186. {
  187. protected:
  188. enum ParamIDType {UNSPECIFIED, AUTOMATIC, MANUAL, INVALID};
  189. public:
  190. BOOL IsValueProperty(){return FALSE;};
  191. CMethodProperty(CMoQualifierArray * paQualifiers, PDBG pDbg, BOOL bBinary);
  192. ~CMethodProperty();
  193. BOOL AddToObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
  194. BOOL AddArg(CValueProperty * pAdd){return m_Args.Add(pAdd);};
  195. CMoInstance * GetInObj(){return m_pInObj;};
  196. CMoInstance * GetOutObj(){return m_pOutObj;};
  197. BOOL AddToArgObjects(CMoQualifierArray * paQualifiers, WString & sName, CMoType & Type, BOOL bRetValue,
  198. int & ErrCtx, VARIANT * pVar, CMoValue & Value);
  199. void SetIn(CMoInstance * pIn){m_pInObj = pIn;};
  200. void SetOut(CMoInstance * pOut){m_pOutObj = pOut;};
  201. bool IsIDSpecified(CMoQualifierArray * paQualifiers);
  202. BOOL Split(COutput & out);
  203. BOOL IsDisplayable(COutput & out);
  204. private:
  205. ParamIDType m_IDType;
  206. DWORD m_NextAutoID;
  207. BOOL AddIt(WString & sName, CMoType & Type, BOOL bInput, CMoQualifierArray * paQualifiers,
  208. VARIANT * pVar, CMoValue & Value, BOOL bRetValue, BOOL bSecondPass);
  209. BOOL AddEmbeddedObject(OLE_MODIFY IWbemClassObject* pObject, IWbemServices* pNamespace, IWbemContext * pCtx);
  210. friend CMObject;
  211. friend CMoClass;
  212. CMoInstance * m_pInObj;
  213. CMoInstance * m_pOutObj;
  214. CPtrArray m_Args;
  215. PDBG m_pDbg;
  216. BOOL m_bBinaryMof;
  217. };
  218. //*****************************************************************************
  219. class CMoType
  220. {
  221. protected:
  222. BOOL m_bIsRef;
  223. BOOL m_bIsEmbedding;
  224. BOOL m_bIsArray;
  225. LPWSTR m_wszTitle;
  226. PDBG m_pDbg;
  227. DELETE_ME CMoQualifier* CreateSyntax(READ_ONLY LPCWSTR wszSyntax);
  228. public:
  229. CMoType(PDBG pDbg) : m_bIsRef(FALSE), m_bIsEmbedding(FALSE), m_bIsArray(FALSE),
  230. m_wszTitle(NULL), m_pDbg(pDbg){}
  231. ~CMoType();
  232. HRESULT SetTitle(COPY LPCWSTR wszTitle);
  233. INTERNAL LPCWSTR GetTitle() {return m_wszTitle;}
  234. BOOL IsDefined() {return (m_wszTitle != NULL);}
  235. BOOL IsString() {return !wbem_wcsicmp(m_wszTitle, L"string");};
  236. void SetIsRef(BOOL bIsRef) {m_bIsRef = bIsRef;}
  237. BOOL IsRef() {return m_bIsRef;}
  238. void SetIsEmbedding(BOOL bIsEmbedding) {m_bIsEmbedding = bIsEmbedding;}
  239. BOOL IsEmbedding() {return m_bIsEmbedding;}
  240. void SetIsArray(BOOL bIsArray) {m_bIsArray = bIsArray;}
  241. BOOL IsArray() {return m_bIsArray;}
  242. VARTYPE GetCIMType();
  243. bool IsUnsupportedType();
  244. BOOL StoreIntoQualifiers(CMoQualifierArray * pQualifiers);
  245. };
  246. //*****************************************************************************
  247. class CValueLocation
  248. {
  249. public:
  250. virtual ~CValueLocation(){}
  251. virtual HRESULT Set(READ_ONLY VARIANT& varValue,
  252. OLE_MODIFY IWbemClassObject* pObject) = 0;
  253. protected:
  254. HRESULT SetArrayElement(
  255. MODIFY VARIANT& vArray,
  256. int nIndex,
  257. READ_ONLY VARIANT& vValue);
  258. };
  259. class CPropertyLocation : public CValueLocation
  260. {
  261. protected:
  262. LPWSTR m_wszName;
  263. int m_nArrayIndex;
  264. bool m_bOK;
  265. public:
  266. CPropertyLocation(COPY LPCWSTR wszName, int nArrayIndex = -1);
  267. ~CPropertyLocation();
  268. virtual HRESULT Set(READ_ONLY VARIANT& varValue,
  269. OLE_MODIFY IWbemClassObject* pObject);
  270. bool IsOK(){return m_bOK;};
  271. };
  272. class CQualifierLocation : public CValueLocation
  273. {
  274. protected:
  275. LPWSTR m_wszName;
  276. LPWSTR m_wszPropName;
  277. int m_nArrayIndex;
  278. PDBG m_pDbg;
  279. bool m_bOK;
  280. public:
  281. CQualifierLocation(COPY LPCWSTR wszName, PDBG pDbg, COPY LPCWSTR wszPropName = NULL,
  282. int nArrayIndex = -1);
  283. ~CQualifierLocation();
  284. virtual HRESULT Set(READ_ONLY VARIANT& varValue,
  285. OLE_MODIFY IWbemClassObject* pObject);
  286. bool IsOK(){return m_bOK;};
  287. };
  288. //*****************************************************************************
  289. class CMofAliasCollection
  290. {
  291. public:
  292. virtual INTERNAL LPCWSTR FindAliasee(READ_ONLY LPWSTR wszAlias) = 0;
  293. };
  294. //*****************************************************************************
  295. class CMofParser;
  296. class CMObject
  297. {
  298. protected:
  299. CMoQualifierArray* m_paQualifiers;
  300. CPtrArray m_aProperties; // CMoProperty*
  301. LPWSTR m_wszAlias;
  302. LPWSTR m_wszNamespace;
  303. long m_lDefClassFlags;
  304. long m_lDefInstanceFlags;
  305. BOOL m_bDone;
  306. IWbemClassObject * m_pWbemObj;
  307. LPWSTR m_wszFullPath;
  308. struct CAliasedValue
  309. {
  310. CValueLocation* pLocation;
  311. LPWSTR wszAlias;
  312. CAliasedValue(ACQUIRE CValueLocation* _pLocation,
  313. COPY LPCWSTR _wszAlias);
  314. ~CAliasedValue();
  315. };
  316. CPtrArray m_aAliased; // CAliasedValue*
  317. int m_nFirstLine;
  318. LPWSTR m_wFileName;
  319. int m_nLastLine;
  320. bool m_bParameter;
  321. bool m_bAmended;
  322. ParseState m_DataState;
  323. ParseState m_QualState;
  324. bool m_bDeflated;
  325. bool m_bOK;
  326. public:
  327. CMObject();
  328. virtual ~CMObject();
  329. bool IsOK(){return m_bOK;};
  330. ParseState * GetDataState(){return &m_DataState;};
  331. ParseState * GetQualState(){return &m_QualState;};
  332. void SetQualState(ParseState * pNew){if(pNew)m_QualState = *pNew;};
  333. void SetWbemObject(IWbemClassObject *pObj){m_pWbemObj = pObj;};
  334. IWbemClassObject * GetWbemObject(){return m_pWbemObj;};
  335. BOOL IsDone(){return m_bDone;};
  336. void SetDone(){m_bDone = TRUE;};
  337. virtual INTERNAL LPCWSTR GetClassName() = 0;
  338. HRESULT SetNamespace(COPY LPCWSTR wszNamespace);
  339. void SetOtherDefaults(long lClass, long lInst)
  340. {m_lDefClassFlags = lClass;m_lDefInstanceFlags=lInst;return;};
  341. void SetFullPath(BSTR bstr);
  342. INTERNAL LPCWSTR GetNamespace() {return m_wszNamespace;}
  343. long GetClassFlags(void){return m_lDefClassFlags;};
  344. long GetInstanceFlags(void){return m_lDefInstanceFlags;};
  345. HRESULT SetAlias(COPY LPCWSTR wszAlias);
  346. INTERNAL LPCWSTR GetAlias() {return m_wszAlias;}
  347. INTERNAL LPCWSTR GetFullPath() {return m_wszFullPath;}
  348. int GetFirstLine() {return m_nFirstLine;}
  349. int GetLastLine() {return m_nLastLine;}
  350. WCHAR * GetFileName() {return m_wFileName;};
  351. HRESULT SetLineRange(int nFirstLine, int nLastLine, WCHAR * pFileName);
  352. BOOL AddProperty(ACQUIRE CMoProperty* pProperty);
  353. int GetNumProperties() {return m_aProperties.GetSize();}
  354. INTERNAL CMoProperty* GetProperty(int nIndex)
  355. {return (CMoProperty*)m_aProperties[nIndex];}
  356. CMoProperty* GetPropertyByName(WCHAR * pwcName);
  357. int GetNumAliasedValues();
  358. BOOL GetAliasedValue(
  359. IN int nIndex,
  360. OUT INTERNAL LPWSTR& wszAlias);
  361. HRESULT AddAliasedValue(ACQUIRE CValueLocation* pLocation,
  362. COPY LPCWSTR wszAlias);
  363. void SetQualifiers(ACQUIRE CMoQualifierArray* pQualifiers);
  364. INTERNAL CMoQualifierArray* GetQualifiers() {return m_paQualifiers;}
  365. virtual BOOL IsInstance(){return FALSE;};
  366. virtual BOOL IsDelete(){return FALSE;};
  367. public:
  368. virtual HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
  369. RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx) = 0;
  370. virtual BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx) = 0;
  371. virtual HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
  372. long lClassFlags, long lInstanceFlags,
  373. OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
  374. WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority) = 0;
  375. BOOL ResolveAliasedValue(
  376. IN int nIndex, READ_ONLY LPCWSTR wszPath,
  377. OLE_MODIFY IWbemClassObject* pObject);
  378. HRESULT ResolveAliasesInWbemObject(
  379. OLE_MODIFY IWbemClassObject* pObject,
  380. READ_ONLY CMofAliasCollection* pCollection);
  381. bool CheckIfAmended();
  382. void SetAmended(bool bVal){m_bAmended = bVal;};
  383. bool IsAmended(){return m_bAmended;};
  384. virtual BOOL Split(COutput & out);
  385. virtual void FreeWbemObjectIfPossible();
  386. virtual HRESULT Deflate(bool bDestruct);
  387. virtual HRESULT Reflate(CMofParser & Parser);
  388. protected:
  389. BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, BOOL bClass, IWbemContext * pCtx);
  390. };
  391. class CMoClass : public CMObject
  392. {
  393. protected:
  394. LPWSTR m_wszParentName;
  395. LPWSTR m_wszClassName;
  396. BOOL m_bUpdateOnly;
  397. PDBG m_pDbg;
  398. public:
  399. CMoClass(COPY LPCWSTR wszParentName, COPY LPCWSTR wszClassName, PDBG pDbg,
  400. BOOL bUpdateOnly = FALSE);
  401. ~CMoClass();
  402. INTERNAL LPCWSTR GetParentName() {return m_wszParentName;}
  403. INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
  404. HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
  405. RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx);
  406. BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
  407. {return CMObject::ApplyToWbemObject(pObject,pNamespace, TRUE, pCtx); /* class */ }
  408. HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
  409. long lClassFlags, long lInstanceFlags,
  410. OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
  411. WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
  412. };
  413. class CMoInstance : public CMObject
  414. {
  415. protected:
  416. LPWSTR m_wszClassName;
  417. PDBG m_pDbg;
  418. public:
  419. CMoInstance(COPY LPCWSTR wszClassName, PDBG m_pDbg, bool bParameter = false);
  420. ~CMoInstance();
  421. BOOL IsInput();
  422. INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
  423. HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
  424. RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx);
  425. BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
  426. {return CMObject::ApplyToWbemObject(pObject, pNamespace, FALSE, pCtx); /* instance */ }
  427. HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
  428. long lClassFlags, long lInstanceFlags,
  429. OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
  430. WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
  431. BOOL IsInstance(){return TRUE;};
  432. };
  433. class CMoActionPragma : public CMObject
  434. {
  435. protected:
  436. LPWSTR m_wszClassName;
  437. PDBG m_pDbg;
  438. BOOL m_bFail; // if true, the failure of the delete will stop the compile
  439. BOOL m_bClass;
  440. public:
  441. CMoActionPragma(COPY LPCWSTR wszClassName, PDBG m_pDbg, bool bFail, BOOL bClass);
  442. ~CMoActionPragma();
  443. INTERNAL LPCWSTR GetClassName() {return m_wszClassName;}
  444. HRESULT CreateWbemObject(READ_ONLY IWbemServices* pNamespace,
  445. RELEASE_ME IWbemClassObject** ppObject, IWbemContext * pCtx){return S_OK;};
  446. BOOL ApplyToWbemObject(OLE_MODIFY IWbemClassObject* pObject,IWbemServices* pNamespace, IWbemContext * pCtx)
  447. {return TRUE;}
  448. HRESULT StoreWbemObject(READ_ONLY IWbemClassObject* pObject,
  449. long lClassFlags, long lInstanceFlags,
  450. OLE_MODIFY IWbemServices* pNamespace, IWbemContext * pCtx,
  451. WCHAR * pUserName, WCHAR * pPassword, WCHAR * pAuthority);
  452. BOOL IsInstance(){return FALSE;};
  453. BOOL IsDelete(){return TRUE;};
  454. BOOL Split(COutput & out);
  455. };
  456. #endif