WMIUtils.Idl
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:20k
源码类别:

模拟服务器

开发平台:

C/C++

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