WMIUtils.Idl 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. cpp_quote("/*******************************************************************************/" )
  2. cpp_quote("/* */" )
  3. cpp_quote("/* Copyright © Microsoft Corporation. All rights reserved. */" )
  4. cpp_quote("/* */" )
  5. cpp_quote("/*******************************************************************************/" )
  6. [uuid(226c9290-dd96-11d3-a120-00105a1f515a)]
  7. library WbemUtilities_v1
  8. {
  9. importlib("stdole32.tlb");
  10. typedef [v1_enum] enum tag_WBEM_PATH_STATUS_FLAG
  11. {
  12. WBEMPATH_INFO_ANON_LOCAL_MACHINE = 0x1, // <path has \\. as server name>
  13. WBEMPATH_INFO_HAS_MACHINE_NAME = 0x2, // <not a dot>
  14. WBEMPATH_INFO_IS_CLASS_REF = 0x4, // <a path to a classs, not a path to an instance>
  15. WBEMPATH_INFO_IS_INST_REF = 0x8, // <a path to an instance>
  16. WBEMPATH_INFO_HAS_SUBSCOPES = 0x10, // <true if a subscope is present>
  17. WBEMPATH_INFO_IS_COMPOUND = 0x20, // <true if compound key is used>
  18. WBEMPATH_INFO_HAS_V2_REF_PATHS = 0x40, // <true if V2-style ref paths are used>
  19. WBEMPATH_INFO_HAS_IMPLIED_KEY = 0x80, // <true if keynames are missing somewhere>
  20. WBEMPATH_INFO_CONTAINS_SINGLETON = 0x100, // <true if one or more singletons>
  21. WBEMPATH_INFO_V1_COMPLIANT = 0x200, // <true if path is WBEM-V1-compliant>
  22. WBEMPATH_INFO_V2_COMPLIANT = 0x400, // <true if path is WBEM-V2-compliant>
  23. WBEMPATH_INFO_CIM_COMPLIANT = 0x800, // <true if path is CIM-compliant>
  24. WBEMPATH_INFO_IS_SINGLETON = 0x1000, // <a path to a singleton>
  25. WBEMPATH_INFO_IS_PARENT = 0x2000, // <path is just "..">
  26. WBEMPATH_INFO_SERVER_NAMESPACE_ONLY = 0x4000, // <path is just "..">
  27. WBEMPATH_INFO_NATIVE_PATH = 0X8000,
  28. WBEMPATH_INFO_WMI_PATH = 0X10000,
  29. WBEMPATH_INFO_PATH_HAD_SERVER = 0X20000, // server name is present and was not set by default
  30. } tag_WBEM_PATH_STATUS_FLAG;
  31. typedef [v1_enum] enum tag_WBEM_PATH_CREATE_FLAG
  32. {
  33. WBEMPATH_CREATE_ACCEPT_RELATIVE = 0x1,
  34. WBEMPATH_CREATE_ACCEPT_ABSOLUTE = 0x2,
  35. WBEMPATH_CREATE_ACCEPT_ALL = 0x4,
  36. WBEMPATH_TREAT_SINGLE_IDENT_AS_NS = 0x8,
  37. } tag_WBEM_PATH_CREATE_FLAG;
  38. // A flag of 0 will get the namespace and relative part
  39. typedef [v1_enum] enum tag_WBEM_GET_TEXT_FLAGS
  40. {
  41. WBEMPATH_COMPRESSED = 0x1, // Obsolete, dont use
  42. WBEMPATH_GET_RELATIVE_ONLY = 0X2, // gets relative path
  43. WBEMPATH_GET_SERVER_TOO = 0X4, // gets everything
  44. WBEMPATH_GET_SERVER_AND_NAMESPACE_ONLY = 0X8, // gets server and namespace
  45. WBEMPATH_GET_NAMESPACE_ONLY = 0X10, // gets just namespace
  46. WBEMPATH_GET_ORIGINAL = 0X20, // returns whatever was passed in
  47. } tag_WBEM_GET_TEXT_FLAGS;
  48. typedef [v1_enum] enum tag_WBEM_GET_KEY_FLAGS
  49. {
  50. WBEMPATH_TEXT = 0x1,
  51. WBEMPATH_QUOTEDTEXT = 0X2
  52. } tag_WBEM_GET_KEY_FLAGS;
  53. //*******************************************************************
  54. // NOT CoCreatable; get this from IWbemPath
  55. [local, object, uuid(9AE62877-7544-4bb0-AA26-A13824659ED6)]
  56. interface IWbemPathKeyList : IUnknown
  57. {
  58. HRESULT GetCount(
  59. [out] ULONG * puKeyCount
  60. );
  61. HRESULT SetKey(
  62. [in, string] LPCWSTR wszName,
  63. [in] ULONG uFlags, // Add flag for SINGLETON
  64. [in] ULONG uCimType, // Implies the size
  65. [in] LPVOID pKeyVal
  66. );
  67. HRESULT SetKey2(
  68. [in, string] LPCWSTR wszName,
  69. [in] ULONG uFlags, // Add flag for SINGLETON
  70. [in] ULONG uCimType,
  71. [in] VARIANT * pKeyVal
  72. );
  73. HRESULT GetKey(
  74. [in] ULONG uKeyIx,
  75. [in] ULONG uFlags, // Add flag for SINGLETON
  76. [in,out] ULONG * puNameBufSize, // In bytes; must be large enough for UNICODE null
  77. [in,out] LPWSTR pszKeyName, // May be NULL for implicit keys
  78. [in,out] ULONG * puKeyValBufSize, // In Bytes, includes double NULL
  79. [in,out] LPVOID pKeyVal, // Key Val
  80. [out] ULONG *puApparentCimType // One of CIM_SINT32, CIM_SINT64, CIM_STRING, etc.
  81. );
  82. HRESULT GetKey2(
  83. [in] ULONG uKeyIx,
  84. [in] ULONG uFlags, // Add flag for SINGLETON
  85. [in,out] ULONG * puNameBufSize, // In bytes; must be large enough for UNICODE null
  86. [in,out] LPWSTR pszKeyName, // May be NULL for implicit keys
  87. [in,out] VARIANT * pKeyValue, // In Bytes, includes double NULL
  88. [out] ULONG *puApparentCimType // One of CIM_SINT32, CIM_SINT64, CIM_STRING, etc.
  89. );
  90. HRESULT RemoveKey(
  91. [in, string] LPCWSTR wszName,
  92. [in] ULONG uFlags
  93. );
  94. HRESULT RemoveAllKeys(
  95. [in] ULONG uFlags
  96. );
  97. HRESULT MakeSingleton([in] boolean bSet);
  98. // WBEMPATH_INFO_IS_COMPOUND <true if compound key is used
  99. // WBEMPATH_INFO_HAS_V2_REF_PATHS <true if V2-style ref paths are used
  100. // WBEMPATH_INFO_HAS_IMPLIED_KEY <true if keynames are missing somewhere
  101. // WBEMPATH_INFO_CONTAINS_SINGLETON <true if one or more singletons
  102. HRESULT GetInfo(
  103. [in] ULONG uRequestedInfo,
  104. [out] ULONGLONG *puResponse
  105. );
  106. HRESULT GetText(
  107. [in] long lFlags, // tag_WBEM_GET_KEY_FLAGS
  108. [in,out] ULONG * puBuffLength,
  109. [in, out, string] LPWSTR pszText
  110. );
  111. };
  112. //*******************************************************************
  113. // CoCreatable
  114. [local, object, uuid(3BC15AF2-736C-477e-9E51-238AF8667DCC)]
  115. interface IWbemPath : IUnknown
  116. {
  117. HRESULT SetText(
  118. [in] ULONG uMode, // see tag_WBEM_PATH_CREATE_FLAG
  119. [in] LPCWSTR pszPath
  120. );
  121. HRESULT GetText(
  122. [in] long lFlags, // see tag_WBEM_GET_TEXT_FLAGS
  123. [in,out] ULONG * puBuffLength,
  124. [in, out, string] LPWSTR pszText
  125. );
  126. // Path tests
  127. // ==========
  128. HRESULT GetInfo(
  129. [in] ULONG uRequestedInfo, // zero for now
  130. [out] ULONGLONG *puResponse // see tag_WBEM_PATH_STATUS_FLAG
  131. );
  132. // Server access
  133. // =============
  134. HRESULT SetServer(
  135. [in, string] LPCWSTR Name
  136. );
  137. HRESULT GetServer(
  138. [in,out] ULONG * puNameBufLength,
  139. [in, out, string] LPWSTR pName
  140. );
  141. // Namespace access. Example, root\default, root is 0, 1 is def
  142. // =============================================================
  143. HRESULT GetNamespaceCount(
  144. [out] ULONG* puCount
  145. );
  146. HRESULT SetNamespaceAt(
  147. [in] ULONG uIndex,
  148. [in, string] LPCWSTR pszName
  149. );
  150. HRESULT GetNamespaceAt(
  151. [in] ULONG uIndex,
  152. [in,out] ULONG * puNameBufLength,
  153. [in, out, string] LPWSTR pName
  154. );
  155. HRESULT RemoveNamespaceAt(
  156. [in] ULONG uIndex
  157. );
  158. HRESULT RemoveAllNamespaces(
  159. );
  160. //
  161. // Scope manipulators. The leftmost scope is 0
  162. // ============================================
  163. HRESULT GetScopeCount(
  164. [out] ULONG *puCount
  165. );
  166. HRESULT SetScope(
  167. [in] ULONG uIndex,
  168. [in] LPWSTR pszClass
  169. );
  170. HRESULT SetScopeFromText(
  171. [in] ULONG uIndex,
  172. [in] LPWSTR pszText
  173. );
  174. HRESULT GetScope(
  175. [in] ULONG uIndex,
  176. [in,out] ULONG * puClassNameBufSize,
  177. [in,out] LPWSTR pszClass,
  178. [out] IWbemPathKeyList **pKeyList
  179. );
  180. HRESULT GetScopeAsText(
  181. [in] ULONG uIndex,
  182. [in,out] ULONG * puTextBufSize,
  183. [in,out] LPWSTR pszText
  184. );
  185. HRESULT RemoveScope(
  186. [in] ULONG uIndex
  187. );
  188. HRESULT RemoveAllScopes(
  189. );
  190. // General class and key access routines
  191. // =====================================
  192. HRESULT SetClassName(
  193. [in, string] LPCWSTR Name
  194. );
  195. HRESULT GetClassName(
  196. [in,out] ULONG * puBuffLength,
  197. [in, out, string] LPWSTR pszName
  198. );
  199. HRESULT GetKeyList(
  200. [out] IWbemPathKeyList ** pOut
  201. );
  202. HRESULT CreateClassPart(
  203. [in] long lFlags,
  204. [in, string] LPCWSTR Name
  205. );
  206. HRESULT DeleteClassPart(
  207. [in] long lFlags
  208. );
  209. BOOL IsRelative(
  210. [in, string] LPWSTR wszMachine,
  211. [in, string] LPWSTR wszNamespace
  212. );
  213. BOOL IsRelativeOrChild(
  214. [in, string] LPWSTR wszMachine,
  215. [in, string] LPWSTR wszNamespace,
  216. [in] long lFlags
  217. );
  218. BOOL IsLocal(
  219. [in, string] LPCWSTR wszMachine
  220. );
  221. BOOL IsSameClassName(
  222. [in, string] LPCWSTR wszClass
  223. );
  224. };
  225. //***********************************************************************
  226. //
  227. [restricted, uuid(cf4cc405-e2c5-4ddd-b3ce-5e7582d8c9fa)]
  228. coclass WbemDefPath
  229. {
  230. interface IWbemPath;
  231. };
  232. interface IWbemQuery;
  233. [uuid(EAC8A024-21E2-4523-AD73-A71A0AA2F56A)]
  234. coclass WbemQuery
  235. {
  236. interface IWbemQuery;
  237. };
  238. };
  239. //*******************************************************************
  240. // Query parser & analysis interfaces
  241. typedef enum
  242. {
  243. WMIQ_ANALYSIS_RPN_SEQUENCE = 0x1,
  244. WMIQ_ANALYSIS_ASSOC_QUERY = 0x2,
  245. WMIQ_ANALYSIS_PROP_ANALYSIS_MATRIX = 0x3,
  246. WMIQ_ANALYSIS_QUERY_TEXT = 0x4,
  247. WMIQ_ANALYSIS_RESERVED = 0x8000000
  248. } WMIQ_ANALYSIS_TYPE;
  249. typedef enum
  250. {
  251. // Group 1
  252. WMIQ_RPN_TOKEN_EXPRESSION = 1,
  253. WMIQ_RPN_TOKEN_AND = 2,
  254. WMIQ_RPN_TOKEN_OR = 3,
  255. WMIQ_RPN_TOKEN_NOT = 4,
  256. // Group 2
  257. WMIQ_RPN_OP_UNDEFINED = 0,
  258. WMIQ_RPN_OP_EQ = 1,
  259. WMIQ_RPN_OP_NE = 2,
  260. WMIQ_RPN_OP_GE = 3,
  261. WMIQ_RPN_OP_LE = 4,
  262. WMIQ_RPN_OP_LT = 5,
  263. WMIQ_RPN_OP_GT = 6,
  264. WMIQ_RPN_OP_LIKE = 7,
  265. WMIQ_RPN_OP_ISA = 8,
  266. WMIQ_RPN_OP_ISNOTA = 9,
  267. WMIQ_RPN_OP_ISNULL = 10,
  268. WMIQ_RPN_OP_ISNOTNULL = 11,
  269. // Group 3
  270. WMIQ_RPN_LEFT_PROPERTY_NAME = 0x1,
  271. WMIQ_RPN_RIGHT_PROPERTY_NAME = 0x2,
  272. WMIQ_RPN_CONST2 = 0x4,
  273. WMIQ_RPN_CONST = 0x8,
  274. WMIQ_RPN_RELOP = 0x10,
  275. WMIQ_RPN_LEFT_FUNCTION = 0x20,
  276. WMIQ_RPN_RIGHT_FUNCTION = 0x40,
  277. // Group 4
  278. WMIQ_RPN_GET_TOKEN_TYPE = 1, // Returns Group 1 ULONG value
  279. WMIQ_RPN_GET_EXPR_SHAPE = 2, // Returns Group 3 ULONG mask
  280. WMIQ_RPN_GET_LEFT_FUNCTION = 3, // Returns LPWSTR
  281. WMIQ_RPN_GET_RIGHT_FUNCTION = 4, // Returns LPWSTR
  282. WMIQ_RPN_GET_RELOP = 5, // Returns a Group 2 ULONG
  283. // Group 5
  284. WMIQ_RPN_NEXT_TOKEN = 1,
  285. // Group 6 (FROM clause options)
  286. WMIQ_RPN_FROM_UNARY = 0x1,
  287. WMIQ_RPN_FROM_PATH = 0x2,
  288. WMIQ_RPN_FROM_CLASS_LIST = 0x4,
  289. WMIQ_RPN_FROM_MULTIPLE = 0x8
  290. } WMIQ_RPN_TOKEN_FLAGS;
  291. typedef enum
  292. {
  293. WMIQ_ASSOCQ_ASSOCIATORS = 0x1,
  294. WMIQ_ASSOCQ_REFERENCES = 0x2,
  295. WMIQ_ASSOCQ_RESULTCLASS = 0x4,
  296. WMIQ_ASSOCQ_ASSOCCLASS = 0x8,
  297. WMIQ_ASSOCQ_ROLE = 0x10,
  298. WMIQ_ASSOCQ_RESULTROLE = 0x20,
  299. WMIQ_ASSOCQ_REQUIREDQUALIFIER = 0x40,
  300. WMIQ_ASSOCQ_REQUIREDASSOCQUALIFIER = 0x80,
  301. WMIQ_ASSOCQ_CLASSDEFSONLY = 0x100,
  302. WMIQ_ASSOCQ_KEYSONLY = 0x200,
  303. WMIQ_ASSOCQ_SCHEMAONLY = 0x400,
  304. WMIQ_ASSOCQ_CLASSREFSONLY = 0x800
  305. } WMIQ_ASSOCQ_FLAGS;
  306. // **********************************************************************
  307. //
  308. typedef struct tag_SWbemQueryQualifiedName
  309. {
  310. ULONG m_uVersion;
  311. ULONG m_uTokenType;
  312. ULONG m_uNameListSize;
  313. LPCWSTR *m_ppszNameList;
  314. BOOL m_bArraysUsed;
  315. BOOL *m_pbArrayElUsed;
  316. ULONG *m_puArrayIndex;
  317. } SWbemQueryQualifiedName;
  318. // **********************************************************************
  319. //
  320. typedef union tag_SWbemRpnConst
  321. {
  322. LPCWSTR m_pszStrVal; // VT_LPWSTR
  323. BOOL m_bBoolVal; // VT_BOOL
  324. LONG m_lLongVal; // VT_I4
  325. ULONG m_uLongVal; // VT_UI4
  326. double m_dblVal; // VT_R8
  327. __int64 m_lVal64; // VT_I8
  328. __int64 m_uVal64; // VT_UI8
  329. } SWbemRpnConst;
  330. // **********************************************************************
  331. // RPN token for normal queries
  332. typedef struct tag_SWbemRpnQueryToken
  333. {
  334. ULONG m_uVersion;
  335. ULONG m_uTokenType;
  336. ULONG m_uSubexpressionShape;
  337. ULONG m_uOperator;
  338. SWbemQueryQualifiedName *m_pRightIdent;
  339. SWbemQueryQualifiedName *m_pLeftIdent;
  340. ULONG m_uConstApparentType; // VT_
  341. SWbemRpnConst m_Const;
  342. // Const2 used only for BETWEEN
  343. ULONG m_uConst2ApparentType; // VT_
  344. SWbemRpnConst m_Const2;
  345. LPCWSTR m_pszRightFunc;
  346. LPCWSTR m_pszLeftFunc;
  347. } SWbemRpnQueryToken;
  348. typedef struct tag_SWbemRpnTokenList
  349. {
  350. ULONG m_uVersion;
  351. ULONG m_uTokenType;
  352. ULONG m_uNumTokens;
  353. } SWbemRpnTokenList;
  354. typedef enum tag_WMIQ_LANGUAGE_FEATURES
  355. {
  356. // The LF1 corresponds to the integer value. Do not alter!
  357. WMIQ_LF1_BASIC_SELECT = 1, // *
  358. WMIQ_LF2_CLASS_NAME_IN_QUERY = 2, // *
  359. WMIQ_LF3_STRING_CASE_FUNCTIONS = 3, // *
  360. WMIQ_LF4_PROP_TO_PROP_TESTS = 4, // *
  361. WMIQ_LF5_COUNT_STAR = 5,
  362. WMIQ_LF6_ORDER_BY = 6, // *
  363. WMIQ_LF7_DISTINCT = 7,
  364. WMIQ_LF8_ISA = 8, // *
  365. WMIQ_LF9_THIS = 9, // *
  366. WMIQ_LF10_COMPEX_SUBEXPRESSIONS = 10,
  367. WMIQ_LF11_ALIASING = 11,
  368. WMIQ_LF12_GROUP_BY_HAVING = 12, // *
  369. WMIQ_LF13_WMI_WITHIN = 13, // *
  370. WMIQ_LF14_SQL_WRITE_OPERATIONS = 14,
  371. WMIQ_LF15_GO = 15,
  372. WMIQ_LF16_SINGLE_LEVEL_TRANSACTIONS = 16,
  373. WMIQ_LF17_QUALIFIED_NAMES = 17, // *
  374. WMIQ_LF18_ASSOCIATONS = 18, // *
  375. WMIQ_LF19_SYSTEM_PROPERTIES = 19,
  376. WMIQ_LF20_EXTENDED_SYSTEM_PROPERTIES = 20,
  377. WMIQ_LF21_SQL89_JOINS = 21,
  378. WMIQ_LF22_SQL92_JOINS = 22,
  379. WMIQ_LF23_SUBSELECTS = 23,
  380. WMIQ_LF24_UMI_EXTENSIONS = 24,
  381. WMIQ_LF25_DATEPART = 25, // *
  382. WMIQ_LF26_LIKE = 26, // *
  383. WMIQ_LF27_CIM_TEMPORAL_CONSTRUCTS = 27, // *
  384. WMIQ_LF28_STANDARD_AGGREGATES = 28,
  385. WMIQ_LF29_MULTI_LEVEL_ORDER_BY = 29,
  386. WMIQ_LF30_WMI_PRAGMAS = 30,
  387. WMIQ_LF31_QUALIFIER_TESTS = 31,
  388. WMIQ_LF32_SP_EXECUTE = 32,
  389. WMIQ_LF33_ARRAY_ACCESS = 33, // *
  390. WMIQ_LF34_UNION = 34,
  391. WMIQ_LF35_COMPLEX_SELECT_TARGET = 35,
  392. WMIQ_LF36_REFERENCE_TESTS = 36,
  393. WMIQ_LF37_SELECT_INTO = 37,
  394. WMIQ_LF38_BASIC_DATETIME_TESTS = 38,
  395. WMIQ_LF39_COUNT_COLUMN = 39,
  396. WMIQ_LF40_BETWEEN = 40,
  397. WMIQ_LF_LAST = 40
  398. } WMIQ_LANGUAGE_FEATURES;
  399. typedef enum tag_WMIQ_RPNQ_FEATURE
  400. {
  401. WMIQ_RPNF_WHERE_CLAUSE_PRESENT = 0x1, // *
  402. WMIQ_RPNF_QUERY_IS_CONJUNCTIVE = 0x2, // *
  403. WMIQ_RPNF_QUERY_IS_DISJUNCTIVE = 0x4, // *
  404. WMIQ_RPNF_PROJECTION = 0x8, // *
  405. WMIQ_RPNF_FEATURE_SELECT_STAR = 0x10, // *
  406. WMIQ_RPNF_EQUALITY_TESTS_ONLY = 0x20, // *
  407. WMIQ_RPNF_COUNT_STAR = 0x40, // *
  408. WMIQ_RPNF_QUALIFIED_NAMES_USED = 0x80, // *
  409. WMIQ_RPNF_SYSPROP_CLASS_USED = 0x100, // *
  410. WMIQ_RPNF_PROP_TO_PROP_TESTS = 0x200, // *
  411. WMIQ_RPNF_ORDER_BY = 0x400, // *
  412. WMIQ_RPNF_ISA_USED = 0x800, // *
  413. WMIQ_RPNF_GROUP_BY_HAVING = 0x1000, // *
  414. WMIQ_RPNF_ARRAY_ACCESS_USED = 0x2000, // *
  415. } WMIQ_RPNF_FEATURE;
  416. typedef struct tag_SWbemRpnEncodedQuery
  417. {
  418. ULONG m_uVersion;
  419. ULONG m_uTokenType;
  420. // General query features
  421. // ======================
  422. unsigned __int64 m_uParsedFeatureMask;
  423. // Overall language features encountered
  424. // ======================================
  425. ULONG m_uDetectedArraySize;
  426. ULONG *m_puDetectedFeatures; // Array of LFn_ constants
  427. // Values being selected if WMIQ_RPNF_PROJECTION is set
  428. // =====================================================
  429. ULONG m_uSelectListSize;
  430. SWbemQueryQualifiedName **m_ppSelectList;
  431. // FROM clause
  432. // ===========
  433. ULONG m_uFromTargetType; // WMIQ_RPN_FROM_ constants
  434. LPCWSTR m_pszOptionalFromPath; // NULL if not used
  435. ULONG m_uFromListSize;
  436. LPCWSTR *m_ppszFromList;
  437. // Where clause
  438. // ============
  439. ULONG m_uWhereClauseSize;
  440. SWbemRpnQueryToken **m_ppRpnWhereClause;
  441. // WITHIN value
  442. // ============
  443. double m_dblWithinPolling;
  444. double m_dblWithinWindow;
  445. // ORDER BY
  446. // ========
  447. ULONG m_uOrderByListSize;
  448. LPCWSTR *m_ppszOrderByList;
  449. ULONG *m_uOrderDirectionEl;
  450. } SWbemRpnEncodedQuery;
  451. // **********************************************************************
  452. typedef struct tag_SWbemAnalysisMatrix
  453. {
  454. ULONG m_uVersion;
  455. ULONG m_uMatrixType;
  456. LPCWSTR m_pszProperty;
  457. ULONG m_uPropertyType;
  458. ULONG m_uEntries;
  459. LPVOID *m_pValues;
  460. BOOL *m_pbTruthTable;
  461. } SWbemAnalysisMatrix;
  462. typedef struct tag_SWbemAnalysisMatrixList
  463. {
  464. ULONG m_uVersion;
  465. ULONG m_uMatrixType;
  466. ULONG m_uNumMatrices;
  467. SWbemAnalysisMatrix *m_pMatrices;
  468. } SWbemAnalysisMatrixList;
  469. // **********************************************************************
  470. // Associators/ References queries
  471. typedef struct tag_SWbemAssocQueryInf
  472. {
  473. ULONG m_uVersion;
  474. ULONG m_uAnalysisType;
  475. ULONG m_uFeatureMask;
  476. IWbemPath *m_pPath;
  477. LPWSTR m_pszPath;
  478. LPWSTR m_pszQueryText;
  479. LPWSTR m_pszResultClass;
  480. LPWSTR m_pszAssocClass;
  481. LPWSTR m_pszRole;
  482. LPWSTR m_pszResultRole;
  483. LPWSTR m_pszRequiredQualifier;
  484. LPWSTR m_pszRequiredAssocQualifier;
  485. } SWbemAssocQueryInf;
  486. [local, object, uuid(81166f58-dd98-11d3-a120-00105a1f515a)]
  487. interface IWbemQuery : IUnknown
  488. {
  489. HRESULT Empty();
  490. HRESULT SetLanguageFeatures(
  491. [in] ULONG uFlags,
  492. [in] ULONG uArraySize,
  493. [in] ULONG *puFeatures
  494. );
  495. // If not called, all features are supported
  496. HRESULT TestLanguageFeatures(
  497. [in] ULONG uFlags,
  498. [in,out] ULONG *uArraySize,
  499. [out] ULONG *puFeatures
  500. );
  501. HRESULT Parse(
  502. [in] LPCWSTR pszLang,
  503. [in] LPCWSTR pszQuery,
  504. [in] ULONG uFlags
  505. );
  506. HRESULT GetAnalysis(
  507. [in] ULONG uAnalysisType,
  508. [in] ULONG uFlags,
  509. [out] LPVOID *pAnalysis
  510. );
  511. HRESULT FreeMemory(
  512. [in] LPVOID pMem
  513. );
  514. HRESULT GetQueryInfo(
  515. [in] ULONG uAnalysisType,
  516. [in] ULONG uInfoId,
  517. [in] ULONG uBufSize,
  518. [out] LPVOID pDestBuf
  519. );
  520. };