/*
 * Copyright 2013 Hans Leidekker for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

import "dispex.idl";

#ifndef __WIDL__
#define threading(model)
#define progid(str)
#define vi_progid(str)
#endif

[
    uuid(565783c6-cb41-11d1-8b02-00600806d9b6),
    helpstring("Microsoft WMI Scripting V1.2 Library"),
    lcid(0x0000),
    version(1.2)
]
library WbemScripting
{

importlib("stdole2.tlb");

interface ISWbemEventSource;
interface ISWbemLocator;
interface ISWbemMethod;
interface ISWbemMethodSet;
interface ISWbemNamedValue;
interface ISWbemNamedValueSet;
interface ISWbemObject;
interface ISWbemObjectPath;
interface ISWbemObjectSet;
interface ISWbemPrivilege;
interface ISWbemPrivilegeSet;
interface ISWbemProperty;
interface ISWbemPropertySet;
interface ISWbemQualifier;
interface ISWbemQualifierSet;
interface ISWbemSecurity;
interface ISWbemServices;

typedef
[
    v1_enum,
    uuid(bf078c2a-07d9-11d2-8b21-00600806d9b6)
]
enum WbemTimeout
{
    wbemTimeoutInfinite = 0xffffffff
} WbemTimeout;

typedef
[
    v1_enum,
    uuid(4a249b72-fc9a-11d1-8b1e-00600806d9b6)
]
enum WbemChangeFlagEnum
{
    wbemChangeFlagCreateOrUpdate   = 0,
    wbemChangeFlagUpdateOnly       = 0x00000001,
    wbemChangeFlagCreateOnly       = 0x00000002,
    wbemChangeFlagUpdateCompatible = 0x00000000,
    wbemChangeFlagUpdateSafeMode   = 0x00000020,
    wbemChangeFlagUpdateForceMode  = 0x00000040,
    wbemChangeFlagStrongValidation = 0x00000080,
    wbemChangeFlagAdvisory         = 0x00010000
} WbemChangeFlagEnum;

typedef
[
    v1_enum,
    uuid(4a249b73-fc9a-11d1-8b1e-00600806d9b6)
]
enum WbemFlagEnum
{
    wbemFlagReturnImmediately    = 0x00010,
    wbemFlagReturnWhenComplete   = 0,
    wbemFlagBidirectional        = 0,
    wbemFlagForwardOnly          = 0x00020,
    wbemFlagNoErrorObject        = 0x00040,
    wbemFlagReturnErrorObject    = 0,
    wbemFlagSendStatus           = 0x00080,
    wbemFlagDontSendStatus       = 0,
    wbemFlagEnsureLocatable      = 0x00100,
    wbemFlagDirectRead           = 0x00200,
    wbemFlagSendOnlySelected     = 0,
    wbemFlagUseAmendedQualifiers = 0x20000,
    wbemFlagGetDefault           = 0x0,
    wbemFlagSpawnInstance        = 0x00001,
    wbemFlagUseCurrentTime       = 0x00001
} WbemFlagEnum;

typedef
[
    v1_enum,
    uuid(4a249b76-fc9a-11d1-8b1e-00600806d9b6)
]
enum WbemQueryFlagEnum
{
    wbemQueryFlagDeep,
    wbemQueryFlagShallow,
    wbemQueryFlagPrototype
} WbemQueryFlagEnum;

typedef
[
    v1_enum,
    uuid(4A249B79-FC9A-11d1-8B1E-00600806D9B6)
]
enum WbemComparisonFlagEnum
{
    wbemComparisonFlagIncludeAll          = 0,
    wbemComparisonFlagIgnoreQualifiers    = 1,
    wbemComparisonFlagIgnoreObjectSource  = 2,
    wbemComparisonFlagIgnoreDefaultValues = 4,
    wbemComparisonFlagIgnoreClass         = 8,
    wbemComparisonFlagIgnoreCase          = 16,
    wbemComparisonFlagIgnoreFlavor        = 32
} WbemComparisonFlagEnum;

[
    object,
    local,
    uuid(27d54d92-0ebe-11d2-8b22-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemEventSource : IDispatch
{
    [ id(1) ]
    HRESULT NextEvent(
        [in, defaultvalue(wbemTimeoutInfinite)] long iTimeoutMs,
        [out, retval] ISWbemObject **objWbemObject);

    [ id(2), propget ]
    HRESULT Security_(
        [out, retval] ISWbemSecurity **objWbemSecurity);
};

[
    object,
    local,
    uuid(76a6415b-cb41-11d1-8b02-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    pointer_default(unique)
]
interface ISWbemLocator : IDispatch
{
    [ id(1) ]
    HRESULT ConnectServer(
        [in, defaultvalue(".")] BSTR strServer,
        [in, defaultvalue("")]  BSTR strNamespace,
        [in, defaultvalue("")]  BSTR strUser,
        [in, defaultvalue("")]  BSTR strPassword,
        [in, defaultvalue("")]  BSTR strLocale,
        [in, defaultvalue("")]  BSTR strAuthority,
        [in, defaultvalue(0)]   long iSecurityFlags,
        [in, defaultvalue(0)]   IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemServices **objWbemServices);

    [ id(2), propget ]
    HRESULT Security_([out, retval] ISWbemSecurity **objWbemSecurity);
};

[
    object,
    local,
    uuid(422e8e90-d955-11d1-8b09-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    pointer_default(unique),
    nonextensible
]
interface ISWbemMethod : IDispatch
{
    [ id(1), propget ]
    HRESULT Name(
        [out, retval] BSTR *strName);

    [ id(2), propget ]
    HRESULT Origin(
        [out, retval] BSTR *strOrigin);

    [ id(3), propget ]
    HRESULT InParameters(
        [out, retval] ISWbemObject **objWbemInParameters);

    [ id(4), propget ]
    HRESULT OutParameters(
        [out, retval] ISWbemObject **objWbemOutParameters);

    [ id(5), propget ]
    HRESULT Qualifiers_(
        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);
};

[
    object,
    local,
    uuid(c93ba292-d955-11d1-8b09-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemMethodSet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemMethod **objWbemMethod);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);
};

[
    object,
    local,
    uuid(76a64164-cb41-11d1-8b02-00600806d9b6),
    dual,
    hidden,
    oleautomation
]
interface ISWbemNamedValue : IDispatch
{
    [ id(DISPID_VALUE), propget ]
    HRESULT Value(
        [out, retval] VARIANT *varValue);

    [ id(DISPID_VALUE), propput ]
    HRESULT Value(
        [in] VARIANT *varValue);

    [ id(2), propget ]
    HRESULT Name(
        [out, retval] BSTR *strName);
};

[
    object,
    local,
    uuid(cf2376ea-ce8c-11d1-8b05-00600806d9b6),
    dual,
    hidden,
    oleautomation
]
interface ISWbemNamedValueSet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemNamedValue **objWbemNamedValue);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);

    [ id(2) ]
    HRESULT Add(
        [in] BSTR strName,
        [in] VARIANT *varValue,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemNamedValue **objWbemNamedValue);

    [ id(3) ]
    HRESULT Remove(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags);

    [ id(4) ]
    HRESULT Clone(
        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);

    [ id(5) ]
    HRESULT DeleteAll();
};

[
    object,
    local,
    uuid(76A6415A-CB41-11d1-8B02-00600806D9B6),
    dual,
    hidden,
    oleautomation
]
interface ISWbemObject : IDispatch
{
    [ id(1) ]
    HRESULT Put_(
        [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectPath **objWbemObjectPath);

    [ id(2) ]
    HRESULT PutAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id (3) ]
    HRESULT Delete_(
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet);

    [ id (4) ]
    HRESULT DeleteAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(5) ]
    HRESULT Instances_(
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(6) ]
    HRESULT InstancesAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(7) ]
    HRESULT Subclasses_(
        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(8) ]
    HRESULT SubclassesAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue(wbemQueryFlagDeep)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(9) ]
    HRESULT Associators_(
        [in, defaultvalue("")] BSTR strAssocClass,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strResultRole,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredAssocQualifier,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(10) ]
    HRESULT AssociatorsAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue("")] BSTR strAssocClass,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strResultRole,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredAssocQualifier,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(11) ]
    HRESULT References_(
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(12) ]
    HRESULT ReferencesAsync_(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(13) ]
    HRESULT ExecMethod_(
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObject **objWbemOutParameters);

    [ id(14) ]
    HRESULT ExecMethodAsync_(
        [in] IDispatch *objWbemSink,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(15) ]
    HRESULT Clone_(
        [out, retval] ISWbemObject **objWbemObject);

    [ id(16) ]
    HRESULT GetObjectText_(
        [in, defaultvalue(0)] long iFlags,
        [out, retval] BSTR *strObjectText);

    [ id(17) ]
    HRESULT SpawnDerivedClass_(
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemObject **objWbemObject);

    [ id(18) ]
    HRESULT SpawnInstance_(
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemObject **objWbemObject);

    [ id(19) ]
    HRESULT CompareTo_(
        [in] IDispatch *objWbemObject,
        [in, defaultvalue(wbemComparisonFlagIncludeAll)] long iFlags,
        [out, retval] VARIANT_BOOL *bResult);

    [ id(20), propget ]
    HRESULT Qualifiers_(
        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);

    [ id(21), propget ]
    HRESULT Properties_(
        [out, retval] ISWbemPropertySet **objWbemPropertySet);

    [ id(22), propget ]
    HRESULT Methods_(
        [out, retval] ISWbemMethodSet **objWbemMethodSet);

    [ id(23), propget ]
    HRESULT Derivation_(
        [out, retval] VARIANT *strClassNameArray);

    [ id(24), propget ]
    HRESULT Path_(
        [out, retval] ISWbemObjectPath **objWbemObjectPath);

    [ id(25), propget ]
    HRESULT Security_(
        [out, retval] ISWbemSecurity **objWbemSecurity);
};

[
    object,
    local,
    uuid(5791bc27-ce9c-11d1-97bf-0000f81e849c),
    dual,
    hidden,
    oleautomation,
    pointer_default(unique)
]
interface ISWbemObjectPath : IDispatch
{
    [ id(DISPID_VALUE), propget ]
    HRESULT Path(
        [out, retval] BSTR *strPath);

    [ id(DISPID_VALUE), propput ]
    HRESULT Path(
        [in] BSTR strPath);

    [ id(1), propget ]
    HRESULT RelPath(
        [out, retval] BSTR *strRelPath);

    [ id(1), propput ]
    HRESULT RelPath(
        [in] BSTR strRelPath);

    [ id(2), propget ]
    HRESULT Server(
        [out, retval] BSTR *strServer);

    [ id(2), propput ]
    HRESULT Server(
        [in] BSTR strServer);

    [ id(3), propget ]
    HRESULT Namespace(
        [out, retval] BSTR *strNamespace);

    [ id(3), propput ]
    HRESULT Namespace(
        [in] BSTR strNamespace);

    [ id(4), propget ]
    HRESULT ParentNamespace(
        [out, retval] BSTR *strParentNamespace);

    [ id(5), propget ]
    HRESULT DisplayName(
        [out, retval] BSTR *strDisplayName);

    [ id(5), propput ]
    HRESULT DisplayName(
        [in] BSTR strDisplayName);

    [ id(6), propget ]
    HRESULT Class(
        [out, retval] BSTR *strClass);

    [ id(6), propput ]
    HRESULT Class(
        [in] BSTR strClass);

    [ id(7), propget ]
    HRESULT IsClass(
        [out, retval] VARIANT_BOOL *bIsClass);

    [ id(8) ]
    HRESULT SetAsClass();

    [ id(9), propget ]
    HRESULT IsSingleton(
        [out, retval] VARIANT_BOOL *bIsSingleton);

    [ id(10) ]
    HRESULT SetAsSingleton();

    [ id(11), propget ]
    HRESULT Keys(
        [out, retval] ISWbemNamedValueSet **objWbemNamedValueSet);

    [ id(12), propget ]
    HRESULT Security_(
        [out, retval] ISWbemSecurity **objWbemSecurity);

    [ id(13), propget ]
    HRESULT Locale(
        [out, retval] BSTR *strLocale);

    [ id(13), propput ]
    HRESULT Locale(
        [in] BSTR strLocale);

    [ id(14), propget ]
    HRESULT Authority(
        [out, retval] BSTR *strAuthority);

    [ id(14), propput ]
    HRESULT Authority(
        [in] BSTR strAuthority);
};

[
    object,
    local,
    uuid(76a6415f-cb41-11d1-8b02-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemObjectSet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemObject **objWbemObject);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);

    [ id(4), propget ]
    HRESULT Security_(
        [out, retval] ISWbemSecurity **objWbemSecurity);

    [ id(5) ]
    HRESULT ItemIndex(
        [in] long lIndex,
        [out, retval] ISWbemObject **objWbemObject);
};

typedef
[
    v1_enum,
    uuid(176d2f70-5af3-11d2-8b4a-00600806d9b6)
]
enum WbemPrivilegeEnum
{
    wbemPrivilegeCreateToken          = 1,
    wbemPrivilegePrimaryToken         = 2,
    wbemPrivilegeLockMemory           = 3,
    wbemPrivilegeIncreaseQuota        = 4,
    wbemPrivilegeMachineAccount       = 5,
    wbemPrivilegeTcb                  = 6,
    wbemPrivilegeSecurity             = 7,
    wbemPrivilegeTakeOwnership        = 8,
    wbemPrivilegeLoadDriver           = 9,
    wbemPrivilegeSystemProfile        = 10,
    wbemPrivilegeSystemtime           = 11,
    wbemPrivilegeProfileSingleProcess = 12,
    wbemPrivilegeIncreaseBasePriority = 13,
    wbemPrivilegeCreatePagefile       = 14,
    wbemPrivilegeCreatePermanent      = 15,
    wbemPrivilegeBackup               = 16,
    wbemPrivilegeRestore              = 17,
    wbemPrivilegeShutdown             = 18,
    wbemPrivilegeDebug                = 19,
    wbemPrivilegeAudit                = 20,
    wbemPrivilegeSystemEnvironment    = 21,
    wbemPrivilegeChangeNotify         = 22,
    wbemPrivilegeRemoteShutdown       = 23,
    wbemPrivilegeUndock               = 24,
    wbemPrivilegeSyncAgent            = 25,
    wbemPrivilegeEnableDelegation     = 26,
    wbemPrivilegeManageVolume         = 27
} WbemPrivilegeEnum;

[
    object,
    local,
    uuid(26ee67bd-5804-11d2-8b4a-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemPrivilege : IDispatch
{
    [ id(DISPID_VALUE), propget ]
    HRESULT IsEnabled(
        [out, retval] VARIANT_BOOL *bIsEnabled);

    [ id(DISPID_VALUE), propput ]
    HRESULT IsEnabled(
        [in] VARIANT_BOOL bIsEnabled);

    [ id(1), propget ]
    HRESULT Name(
        [out, retval] BSTR *strDisplayName);

    [ id(2), propget ]
    HRESULT DisplayName(
        [out, retval] BSTR *strDisplayName);

    [ id(3), propget ]
    HRESULT Identifier(
        [out, retval] WbemPrivilegeEnum *iPrivilege);
};

[
    object,
    local,
    uuid(26ee67bf-5804-11d2-8b4a-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemPrivilegeSet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] WbemPrivilegeEnum iPrivilege,
        [out, retval] ISWbemPrivilege **objWbemPrivilege);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);

    [ id(2) ]
    HRESULT Add(
        [in] WbemPrivilegeEnum iPrivilege,
        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,
        [out, retval] ISWbemPrivilege **objWbemPrivilege);

    [ id(3) ]
    HRESULT Remove(
        [in] WbemPrivilegeEnum iPrivilege);

    [ id(4) ]
    HRESULT DeleteAll();

    [ id(5) ]
    HRESULT AddAsString(
        [in] BSTR strPrivilege,
        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,
        [out, retval] ISWbemPrivilege **objWbemPrivilege);
};

typedef
[
    v1_enum,
    uuid(4a249b7b-fc9a-11d1-8b1e-00600806d9b6),
]
enum WbemCimtypeEnum
{
    wbemCimtypeSint16    = 2,
    wbemCimtypeSint32    = 3,
    wbemCimtypeReal32    = 4,
    wbemCimtypeReal64    = 5,
    wbemCimtypeString    = 8,
    wbemCimtypeBoolean   = 11,
    wbemCimtypeObject    = 13,
    wbemCimtypeSint8     = 16,
    wbemCimtypeUint8     = 17,
    wbemCimtypeUint16    = 18,
    wbemCimtypeUint32    = 19,
    wbemCimtypeSint64    = 20,
    wbemCimtypeUint64    = 21,
    wbemCimtypeDatetime  = 101,
    wbemCimtypeReference = 102,
    wbemCimtypeChar16    = 103
} WbemCimtypeEnum;

[
    object,
    local,
    uuid(1a388f98-d4ba-11d1-8b09-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    pointer_default(unique)
]
interface ISWbemProperty : IDispatch
{
    [ id(DISPID_VALUE), propget ]
    HRESULT Value(
        [out, retval] VARIANT *varValue);

    [ id(DISPID_VALUE), propput ]
    HRESULT Value(
        [in] VARIANT *varValue);

    [ id(1), propget ]
    HRESULT Name(
        [out, retval] BSTR *strName);

    [ id(2), propget ]
    HRESULT IsLocal(
        [out, retval] VARIANT_BOOL *bIsLocal);

    [ id(3), propget ]
    HRESULT Origin(
        [out, retval] BSTR *strOrigin);

    [ id(4), propget ]
    HRESULT CIMType(
        [out, retval] WbemCimtypeEnum *iCimType);

    [ id(5), propget ]
    HRESULT Qualifiers_(
        [out, retval] ISWbemQualifierSet **objWbemQualifierSet);

    [ id(6), propget ]
    HRESULT IsArray(
        [out, retval] VARIANT_BOOL *bIsArray);
};

[
    object,
    local,
    uuid(dea0a7b2-d4ba-11d1-8b09-00600806d9b6),
    dual,
    hidden,
    oleautomation
]
interface ISWbemPropertySet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemProperty **objWbemProperty);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);

    [ id(2) ]
    HRESULT Add(
        [in] BSTR strName,
        [in] WbemCimtypeEnum iCIMType,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bIsArray,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemProperty **objWbemProperty);

    [ id(3) ]
    HRESULT Remove(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags);
};

[
    object,
    local,
    uuid(79b05932-d3b7-11d1-8b06-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible,
    pointer_default(unique)
]
interface ISWbemQualifier : IDispatch
{
    [ id(DISPID_VALUE), propget ]
    HRESULT Value(
        [out, retval] VARIANT *varValue);

    [ id(DISPID_VALUE), propput ]
    HRESULT Value(
        [in] VARIANT *varValue);

    [ id(1), propget ]
    HRESULT Name(
        [out, retval] BSTR *strName);

    [ id(2), propget ]
    HRESULT IsLocal(
        [out, retval] VARIANT_BOOL *bIsLocal);

    [ id(3), propget ]
    HRESULT PropagatesToSubclass(
        [out, retval] VARIANT_BOOL *bPropagatesToSubclass);

    [ id(3), propput ]
    HRESULT PropagatesToSubclass(
        [in] VARIANT_BOOL bPropagatesToSubclass);

    [ id(4), propget ]
    HRESULT PropagatesToInstance(
        [out, retval] VARIANT_BOOL *bPropagatesToInstance);

    [ id(4), propput ]
    HRESULT PropagatesToInstance(
        [in] VARIANT_BOOL bPropagatesToInstance);

    [ id(5), propget ]
    HRESULT IsOverridable(
        [out, retval] VARIANT_BOOL *bIsOverridable);

    [ id(5), propput ]
    HRESULT IsOverridable(
        [in] VARIANT_BOOL bIsOverridable);

    [ id(6), propget ]
    HRESULT IsAmended(
        [out, retval] VARIANT_BOOL *bIsAmended);
};

[
    object,
    local,
    uuid(9b16ed16-d3df-11d1-8b08-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemQualifierSet : IDispatch
{
    [ id(DISPID_NEWENUM), propget, restricted ]
    HRESULT _NewEnum(
        [out, retval] IUnknown **pUnk);

    [ id(DISPID_VALUE) ]
    HRESULT Item(
        [in] BSTR name,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemQualifier **objWbemQualifier);

    [ id(1), propget ]
    HRESULT Count(
        [out, retval] long *iCount);

    [ id(2) ]
    HRESULT Add(
        [in] BSTR strName,
        [in] VARIANT *varVal,
        [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToSubclass,
        [in, defaultvalue(TRUE)] VARIANT_BOOL bPropagatesToInstance,
        [in, defaultvalue(TRUE)] VARIANT_BOOL bIsOverridable,
        [in, defaultvalue(0)] long iFlags,
        [out, retval] ISWbemQualifier **objWbemQualifier);

    [ id(3) ]
    HRESULT Remove(
        [in] BSTR strName,
        [in, defaultvalue(0)] long iFlags);
};

typedef
[
    v1_enum,
    uuid(b54d66e8-2287-11d2-8b33-00600806d9b6)
]
enum WbemImpersonationLevelEnum
{
    wbemImpersonationLevelAnonymous   = 1,
    wbemImpersonationLevelIdentify    = 2,
    wbemImpersonationLevelImpersonate = 3,
    wbemImpersonationLevelDelegate    = 4
} WbemImpersonationLevelEnum;

typedef
[
    v1_enum,
    uuid(b54d66e7-2287-11d2-8b33-00600806d9b6)
]
enum WbemAuthenticationLevelEnum
{
    wbemAuthenticationLevelDefault      = 0,
    wbemAuthenticationLevelNone         = 1,
    wbemAuthenticationLevelConnect      = 2,
    wbemAuthenticationLevelCall         = 3,
    wbemAuthenticationLevelPkt          = 4,
    wbemAuthenticationLevelPktIntegrity = 5,
    wbemAuthenticationLevelPktPrivacy   = 6
} WbemAuthenticationLevelEnum;

[
    object,
    local,
    uuid(b54d66e6-2287-11d2-8b33-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    nonextensible
]
interface ISWbemSecurity : IDispatch
{
    [ id(1), propget ]
    HRESULT ImpersonationLevel(
        [out, retval] WbemImpersonationLevelEnum *iImpersonationLevel);

    [ id(1), propput ]
    HRESULT ImpersonationLevel(
        [in] WbemImpersonationLevelEnum iImpersonationLevel);

    [ id(2), propget ]
    HRESULT AuthenticationLevel(
        [out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel);

    [ id(2), propput ]
    HRESULT AuthenticationLevel(
        [in] WbemAuthenticationLevelEnum iAuthenticationLevel);

    [ id(3), propget ]
    HRESULT Privileges(
        [out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet);
};

[
    object,
    local,
    uuid(76a6415c-cb41-11d1-8b02-00600806d9b6),
    dual,
    hidden,
    oleautomation,
    pointer_default(unique)
]
interface ISWbemServices : IDispatch
{
    [ id(1) ]
    HRESULT Get(
        [in, defaultvalue("")] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObject **objWbemObject);

    [ id(2) ]
    HRESULT GetAsync(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue("")] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(3) ]
    HRESULT Delete(
        [in] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet);

    [ id(4) ]
    HRESULT DeleteAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(5) ]
    HRESULT InstancesOf(
        [in] BSTR strClass,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(6) ]
    HRESULT InstancesOfAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strClass,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(7) ]
    HRESULT SubclassesOf(
        [in, defaultvalue("")]  BSTR strSuperclass,
        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)]  long iFlags,
        [in, defaultvalue(0)]  IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(8) ]
    HRESULT SubclassesOfAsync(
        [in] IDispatch *objWbemSink,
        [in, defaultvalue("")] BSTR strSuperclass,
        [in, defaultvalue(wbemQueryFlagDeep)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(9) ]
    HRESULT ExecQuery(
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(10) ]
    HRESULT ExecQueryAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(0)] long lFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(11) ]
    HRESULT AssociatorsOf(
        [in] BSTR strObjectPath,
        [in, defaultvalue("")] BSTR strAssocClass,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strResultRole,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredAssocQualifier,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(12) ]
    HRESULT AssociatorsOfAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in, defaultvalue("")] BSTR strAssocClass,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strResultRole,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredAssocQualifier,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(13) ]
    HRESULT ReferencesTo(
        [in] BSTR strObjectPath,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet);

    [ id(14) ]
    HRESULT ReferencesToAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in, defaultvalue("")] BSTR strResultClass,
        [in, defaultvalue("")] BSTR strRole,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bClassesOnly,
        [in, defaultvalue(FALSE)] VARIANT_BOOL bSchemaOnly,
        [in, defaultvalue("")] BSTR strRequiredQualifier,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(15) ]
    HRESULT ExecNotificationQuery(
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(wbemFlagReturnImmediately|wbemFlagForwardOnly)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemEventSource **objWbemEventSource);

    [ id(16) ]
    HRESULT ExecNotificationQueryAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(17) ]
    HRESULT ExecMethod(
        [in] BSTR strObjectPath,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObject **objWbemOutParameters);

    [ id(18) ]
    HRESULT ExecMethodAsync(
        [in] IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] IDispatch *objWbemNamedValueSet,
        [in, defaultvalue(0)] IDispatch *objWbemAsyncContext);

    [ id(19), propget ]
    HRESULT Security_(
        [out, retval] ISWbemSecurity **objWbemSecurity);
};

[
    threading(apartment),
    uuid(76a64158-cb41-11d1-8b02-00600806d9b6),
    progid("WbemScripting.SWbemLocator.1"),
    vi_progid("WbemScripting.SWbemLocator")
]
coclass SWbemLocator
{
    interface ISWbemLocator;
};

}; /* WbemScripting */
