/*
 * Copyright 2009 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
 */

cpp_quote("DEFINE_GUID(CLSID_WbemLocator, 0x4590f811,0x1d3A,0x11d0,0x89,0x1f,0x00,0xaa,0x00,0x4b,0x2e,0x24);")
cpp_quote("DEFINE_GUID(CLSID_WbemStatusCode, 0xeb87e1bd,0x3233,0x11d2,0xae,0xc9,0x00,0xc0,0x4f,0xb6,0x88,0x20);")

import "oaidl.idl";
import "objidl.idl";

interface IWbemContext;
interface IWbemServices;
interface IWbemStatusCodeText;
interface IWbemCallResult;
interface IWbemObjectSink;
interface IWbemClassObject;
interface IEnumWbemClassObject;
interface IWbemQualifierSet;

typedef [v1_enum] enum tag_WBEMSTATUS
{
    WBEM_NO_ERROR                           = 0,
    WBEM_S_NO_ERROR                         = 0,
    WBEM_S_SAME                             = 0,
    WBEM_S_FALSE                            = 1,
    WBEM_S_ALREADY_EXISTS                   = 0x40001,
    WBEM_S_RESET_TO_DEFAULT                 = 0x40002,
    WBEM_S_DIFFERENT                        = 0x40003,
    WBEM_S_TIMEDOUT                         = 0x40004,
    WBEM_S_NO_MORE_DATA                     = 0x40005,
    WBEM_S_OPERATION_CANCELLED              = 0x40006,
    WBEM_S_PENDING                          = 0x40007,
    WBEM_S_DUPLICATE_OBJECTS                = 0x40008,
    WBEM_S_ACCESS_DENIED                    = 0x40009,
    WBEM_S_PARTIAL_RESULTS                  = 0x40010,
    WBEM_S_SOURCE_NOT_AVAILABLE             = 0x40017,
    WBEM_E_FAILED                           = 0x80041001,
    WBEM_E_NOT_FOUND                        = 0x80041002,
    WBEM_E_ACCESS_DENIED                    = 0x80041003,
    WBEM_E_PROVIDER_FAILURE                 = 0x80041004,
    WBEM_E_TYPE_MISMATCH                    = 0x80041005,
    WBEM_E_OUT_OF_MEMORY                    = 0x80041006,
    WBEM_E_INVALID_CONTEXT                  = 0x80041007,
    WBEM_E_INVALID_PARAMETER                = 0x80041008,
    WBEM_E_NOT_AVAILABLE                    = 0x80041009,
    WBEM_E_CRITICAL_ERROR                   = 0x8004100a,
    WBEM_E_INVALID_STREAM                   = 0x8004100b,
    WBEM_E_NOT_SUPPORTED                    = 0x8004100c,
    WBEM_E_INVALID_SUPERCLASS               = 0x8004100d,
    WBEM_E_INVALID_NAMESPACE                = 0x8004100e,
    WBEM_E_INVALID_OBJECT                   = 0x8004100f,
    WBEM_E_INVALID_CLASS                    = 0x80041010,
    WBEM_E_PROVIDER_NOT_FOUND               = 0x80041011,
    WBEM_E_INVALID_PROVIDER_REGISTRATION    = 0x80041012,
    WBEM_E_PROVIDER_LOAD_FAILURE            = 0x80041013,
    WBEM_E_INITIALIZATION_FAILURE           = 0x80041014,
    WBEM_E_TRANSPORT_FAILURE                = 0x80041015,
    WBEM_E_INVALID_OPERATION                = 0x80041016,
    WBEM_E_INVALID_QUERY                    = 0x80041017,
    WBEM_E_INVALID_QUERY_TYPE               = 0x80041018,
    WBEM_E_ALREADY_EXISTS                   = 0x80041019,
    WBEM_E_OVERRIDE_NOT_ALLOWED             = 0x8004101a,
    WBEM_E_PROPAGATED_QUALIFIER             = 0x8004101b,
    WBEM_E_PROPAGATED_PROPERTY              = 0x8004101c,
    WBEM_E_UNEXPECTED                       = 0x8004101d,
    WBEM_E_ILLEGAL_OPERATION                = 0x8004101e,
    WBEM_E_CANNOT_BE_KEY                    = 0x8004101f,
    WBEM_E_INCOMPLETE_CLASS                 = 0x80041020,
    WBEM_E_INVALID_SYNTAX                   = 0x80041021,
    WBEM_E_NONDECORATED_OBJECT              = 0x80041022,
    WBEM_E_READ_ONLY                        = 0x80041023,
    WBEM_E_PROVIDER_NOT_CAPABLE             = 0x80041024,
    WBEM_E_CLASS_HAS_CHILDREN               = 0x80041025,
    WBEM_E_CLASS_HAS_INSTANCES              = 0x80041026,
    WBEM_E_QUERY_NOT_IMPLEMENTED            = 0x80041027,
    WBEM_E_ILLEGAL_NULL                     = 0x80041028,
    WBEM_E_INVALID_QUALIFIER_TYPE           = 0x80041029,
    WBEM_E_INVALID_PROPERTY_TYPE            = 0x8004102a,
    WBEM_E_VALUE_OUT_OF_RANGE               = 0x8004102b,
    WBEM_E_CANNOT_BE_SINGLETON              = 0x8004102c,
    WBEM_E_INVALID_CIM_TYPE                 = 0x8004102d,
    WBEM_E_INVALID_METHOD                   = 0x8004102e,
    WBEM_E_INVALID_METHOD_PARAMETERS        = 0x8004102f,
    WBEM_E_SYSTEM_PROPERTY                  = 0x80041030,
    WBEM_E_INVALID_PROPERTY                 = 0x80041031,
    WBEM_E_CALL_CANCELLED                   = 0x80041032,
    WBEM_E_SHUTTING_DOWN                    = 0x80041033,
    WBEM_E_PROPAGATED_METHOD                = 0x80041034,
    WBEM_E_UNSUPPORTED_PARAMETER            = 0x80041035,
    WBEM_E_MISSING_PARAMETER_ID             = 0x80041036,
    WBEM_E_INVALID_PARAMETER_ID             = 0x80041037,
    WBEM_E_NONCONSECUTIVE_PARAMETER_IDS     = 0x80041038,
    WBEM_E_PARAMETER_ID_ON_RETVAL           = 0x80041039,
    WBEM_E_INVALID_OBJECT_PATH              = 0x8004103a,
    WBEM_E_OUT_OF_DISK_SPACE                = 0x8004103b,
    WBEM_E_BUFFER_TOO_SMALL                 = 0x8004103c,
    WBEM_E_UNSUPPORTED_PUT_EXTENSION        = 0x8004103d,
    WBEM_E_UNKNOWN_OBJECT_TYPE              = 0x8004103e,
    WBEM_E_UNKNOWN_PACKET_TYPE              = 0x8004103f,
    WBEM_E_MARSHAL_VERSION_MISMATCH         = 0x80041040,
    WBEM_E_MARSHAL_INVALID_SIGNATURE        = 0x80041041,
    WBEM_E_INVALID_QUALIFIER                = 0x80041042,
    WBEM_E_INVALID_DUPLICATE_PARAMETER      = 0x80041043,
    WBEM_E_TOO_MUCH_DATA                    = 0x80041044,
    WBEM_E_SERVER_TOO_BUSY                  = 0x80041045,
    WBEM_E_INVALID_FLAVOR                   = 0x80041046,
    WBEM_E_CIRCULAR_REFERENCE               = 0x80041047,
    WBEM_E_UNSUPPORTED_CLASS_UPDATE         = 0x80041048,
    WBEM_E_CANNOT_CHANGE_KEY_INHERITANCE    = 0x80041049,
    WBEM_E_CANNOT_CHANGE_INDEX_INHERITANCE  = 0x80041050,
    WBEM_E_TOO_MANY_PROPERTIES              = 0x80041051,
    WBEM_E_UPDATE_TYPE_MISMATCH             = 0x80041052,
    WBEM_E_UPDATE_OVERRIDE_NOT_ALLOWED      = 0x80041053,
    WBEM_E_UPDATE_PROPAGATED_METHOD         = 0x80041054,
    WBEM_E_METHOD_NOT_IMPLEMENTED           = 0x80041055,
    WBEM_E_METHOD_DISABLED                  = 0x80041056,
    WBEM_E_REFRESHER_BUSY                   = 0x80041057,
    WBEM_E_UNPARSABLE_QUERY                 = 0x80041058,
    WBEM_E_NOT_EVENT_CLASS                  = 0x80041059,
    WBEM_E_MISSING_GROUP_WITHIN             = 0x8004105a,
    WBEM_E_MISSING_AGGREGATION_LIST         = 0x8004105b,
    WBEM_E_PROPERTY_NOT_AN_OBJECT           = 0x8004105c,
    WBEM_E_AGGREGATING_BY_OBJECT            = 0x8004105d,
    WBEM_E_UNINTERPRETABLE_PROVIDER_QUERY   = 0x8004105f,
    WBEM_E_BACKUP_RESTORE_WINMGMT_RUNNING   = 0x80041060,
    WBEM_E_QUEUE_OVERFLOW                   = 0x80041061,
    WBEM_E_PRIVILEGE_NOT_HELD               = 0x80041062,
    WBEM_E_INVALID_OPERATOR                 = 0x80041063,
    WBEM_E_LOCAL_CREDENTIALS                = 0x80041064,
    WBEM_E_CANNOT_BE_ABSTRACT               = 0x80041065,
    WBEM_E_AMENDED_OBJECT                   = 0x80041066,
    WBEM_E_CLIENT_TOO_SLOW                  = 0x80041067,
    WBEM_E_NULL_SECURITY_DESCRIPTOR         = 0x80041068,
    WBEM_E_TIMED_OUT                        = 0x80041069,
    WBEM_E_INVALID_ASSOCIATION              = 0x8004106a,
    WBEM_E_AMBIGUOUS_OPERATION              = 0x8004106b,
    WBEM_E_QUOTA_VIOLATION                  = 0x8004106c,
    WBEM_E_RESERVED_001                     = 0x8004106d,
    WBEM_E_RESERVED_002                     = 0x8004106e,
    WBEM_E_UNSUPPORTED_LOCALE               = 0x8004106f,
    WBEM_E_HANDLE_OUT_OF_DATE               = 0x80041070,
    WBEM_E_CONNECTION_FAILED                = 0x80041071,
    WBEM_E_INVALID_HANDLE_REQUEST           = 0x80041072,
    WBEM_E_PROPERTY_NAME_TOO_WIDE           = 0x80041073,
    WBEM_E_CLASS_NAME_TOO_WIDE              = 0x80041074,
    WBEM_E_METHOD_NAME_TOO_WIDE             = 0x80041075,
    WBEM_E_QUALIFIER_NAME_TOO_WIDE          = 0x80041076,
    WBEM_E_RERUN_COMMAND                    = 0x80041077,
    WBEM_E_DATABASE_VER_MISMATCH            = 0x80041078,
    WBEM_E_VETO_DELETE                      = 0x80041079,
    WBEM_E_VETO_PUT                         = 0x8004107a,
    WBEM_E_INVALID_LOCALE                   = 0x80041080,
    WBEM_E_PROVIDER_SUSPENDED               = 0x80041081,
    WBEM_E_SYNCHRONIZATION_REQUIRED         = 0x80041082,
    WBEM_E_NO_SCHEMA                        = 0x80041083,
    WBEM_E_PROVIDER_ALREADY_REGISTERED      = 0x80041084,
    WBEM_E_PROVIDER_NOT_REGISTERED          = 0x80041085,
    WBEM_E_FATAL_TRANSPORT_ERROR            = 0x80041086,
    WBEM_E_ENCRYPTED_CONNECTION_REQUIRED    = 0x80041087,
    WBEM_E_PROVIDER_TIMED_OUT               = 0x80041088,
    WBEM_E_NO_KEY                           = 0x80041089,
    WBEM_E_PROVIDER_DISABLED                = 0x8004108a
} WBEMSTATUS;

typedef [v1_enum] enum tag_WBEM_TIMEOUT_TYPE
{
    WBEM_NO_WAIT  = 0,
    WBEM_INFINITE = 0xffffffff
} WBEM_TIMEOUT_TYPE;

typedef [v1_enum] enum tag_WBEM_CONDITION_FLAG_TYPE
{
    WBEM_FLAG_ALWAYS                    = 0,
    WBEM_FLAG_ONLY_IF_TRUE              = 0x1,
    WBEM_FLAG_ONLY_IF_FALSE             = 0x2,
    WBEM_FLAG_ONLY_IF_IDENTICAL         = 0x3,
    WBEM_MASK_PRIMARY_CONDITION         = 0x3,
    WBEM_FLAG_KEYS_ONLY                 = 0x4,
    WBEM_FLAG_REFS_ONLY                 = 0x8,
    WBEM_FLAG_LOCAL_ONLY                = 0x10,
    WBEM_FLAG_PROPAGATED_ONLY           = 0x20,
    WBEM_FLAG_SYSTEM_ONLY               = 0x30,
    WBEM_FLAG_NONSYSTEM_ONLY            = 0x40,
    WBEM_MASK_CONDITION_ORIGIN          = 0x70,
    WBEM_FLAG_CLASS_OVERRIDES_ONLY      = 0x100,
    WBEM_FLAG_CLASS_LOCAL_AND_OVERRIDES = 0x200,
    WBEM_MASK_CLASS_CONDITION           = 0x300
} WBEM_CONDITION_FLAG_TYPE;

typedef [v1_enum] enum tag_WBEM_FLAVOR_TYPE
{
    WBEM_FLAVOR_DONT_PROPAGATE                  = 0,
    WBEM_FLAVOR_FLAG_PROPAGATE_TO_INSTANCE      = 0x1,
    WBEM_FLAVOR_FLAG_PROPAGATE_TO_DERIVED_CLASS = 0x2,
    WBEM_FLAVOR_MASK_PROPAGATION                = 0xf,
    WBEM_FLAVOR_OVERRIDABLE                     = 0,
    WBEM_FLAVOR_NOT_OVERRIDABLE                 = 0x10,
    WBEM_FLAVOR_MASK_PERMISSIONS                = 0x10,
    WBEM_FLAVOR_ORIGIN_LOCAL                    = 0,
    WBEM_FLAVOR_ORIGIN_PROPAGATED               = 0x20,
    WBEM_FLAVOR_ORIGIN_SYSTEM                   = 0x40,
    WBEM_FLAVOR_MASK_ORIGIN                     = 0x60,
    WBEM_FLAVOR_NOT_AMENDED                     = 0,
    WBEM_FLAVOR_AMENDED                         = 0x80,
    WBEM_FLAVOR_MASK_AMENDED                    = 0x80
} WBEM_FLAVOR_TYPE;

typedef [v1_enum] enum tag_WBEM_GENUS_TYPE
{
    WBEM_GENUS_CLASS = 1,
    WBEM_GENUS_INSTANCE = 2
} WBEM_GENUS_TYPE;

typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION
{
    CIM_ILLEGAL = 0xfff,
    CIM_EMPTY   = 0,
    CIM_SINT16  = 2,
    CIM_SINT32  = 3,
    CIM_REAL32  = 4,
    CIM_REAL64  = 5,
    CIM_STRING  = 8,
    CIM_BOOLEAN = 11,
    CIM_OBJECT  = 13,
    CIM_SINT8   = 16,
    CIM_UINT8   = 17,
    CIM_UINT16  = 18,
    CIM_UINT32  = 19,
    CIM_SINT64  = 20,
    CIM_UINT64  = 21,
    CIM_DATETIME   = 101,
    CIM_REFERENCE  = 102,
    CIM_CHAR16     = 103,
    CIM_FLAG_ARRAY = 0x2000
} CIMTYPE_ENUMERATION;

typedef long CIMTYPE;

[
    object,
    restricted,
    local,
    uuid(dc12a687-737f-11cf-884d-00aa004b2e24),
    pointer_default(unique)
]
interface IWbemLocator : IUnknown
{
    HRESULT ConnectServer(
        [in] const BSTR strNetworkResource,
        [in] const BSTR strUser,
        [in] const BSTR strPassword,
        [in] const BSTR strLocale,
        [in] LONG lSecurityFlags,
        [in] const BSTR strAuthority,
        [in] IWbemContext *pCtx,
        [out] IWbemServices **ppNamespace);
};

[
    object,
    local,
    uuid(eb87e1bc-3233-11d2-aec9-00c04fb68820)
]
interface IWbemStatusCodeText : IUnknown
{
    HRESULT GetErrorCodeText(
        [in] HRESULT hRes,
        [in] LCID LocaleId,
        [in] LONG lFlags,
        [out] BSTR *MessageText);

    HRESULT GetFacilityCodeText(
        [in] HRESULT hRes,
        [in] LCID LocaleId,
        [in] LONG lFlags,
        [out] BSTR *MessageText);
};

typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE
{
    WBEM_FLAG_RETURN_WBEM_COMPLETE      = 0,
    WBEM_FLAG_BIDIRECTIONAL             = 0,
    WBEM_FLAG_RETURN_ERROR_OBJECT       = 0,
    WBEM_FLAG_DONT_SEND_STATUS          = 0,
    WBEM_FLAG_SEND_ONLY_SELECTED        = 0,
    WBEM_FLAG_RETURN_IMMEDIATELY        = 0x10,
    WBEM_FLAG_FORWARD_ONLY              = 0x20,
    WBEM_FLAG_NO_ERROR_OBJECT           = 0x40,
    WBEM_FLAG_SEND_STATUS               = 0x80,
    WBEM_FLAG_ENSURE_LOCATABLE          = 0x100,
    WBEM_FLAG_DIRECT_READ               = 0x200,
    WBEM_MASK_RESERVED_FLAGS            = 0x1f000,
    WBEM_FLAG_USE_AMENDED_QUALIFIERS    = 0x20000,
    WBEM_FLAG_STRONG_VALIDATION         = 0x100000
} WBEM_GENERIC_FLAG_TYPE;

[
    object,
    restricted,
    uuid(9556dc99-828c-11cf-a37e-00aa003240c7),
    pointer_default(unique)
]
interface IWbemServices : IUnknown
{
    HRESULT OpenNamespace(
        [in] const BSTR strNamespace,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemServices **ppWorkingNamespace,
        [out] IWbemCallResult **ppResult);

    HRESULT CancelAsyncCall(
        [in] IWbemObjectSink *pSink);

    HRESULT QueryObjectSink(
        [in] long lFlags,
        [out] IWbemObjectSink **ppResponseHandler);

    HRESULT GetObject(
        [in] const BSTR strObjectPath,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemClassObject **ppObject,
        [out] IWbemCallResult **ppCallResult);

    HRESULT GetObjectAsync(
        [in] const BSTR strObjectPath,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT PutClass(
        [in] IWbemClassObject *pObject,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemCallResult **ppCallResult);

    HRESULT PutClassAsync(
        [in] IWbemClassObject *pObject,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT DeleteClass(
        [in] const BSTR strClass,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemCallResult **ppCallResult);

    HRESULT DeleteClassAsync(
        [in] const BSTR strClass,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT CreateClassEnum(
        [in] const BSTR strSuperclass,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IEnumWbemClassObject **ppEnum);

    HRESULT CreateClassEnumAsync(
        [in] const BSTR strSuperclass,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT PutInstance(
        [in] IWbemClassObject *pInst,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemCallResult **ppCallResult);

    HRESULT PutInstanceAsync(
        [in] IWbemClassObject *pInst,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT DeleteInstance(
        [in] const BSTR strObjectPath,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IWbemCallResult **ppCallResult);

    HRESULT DeleteInstanceAsync(
        [in] const BSTR strObjectPath,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT CreateInstanceEnum(
        [in] const BSTR strFilter,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IEnumWbemClassObject **ppEnum);

    HRESULT CreateInstanceEnumAsync(
        [in] const BSTR strFilter,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT ExecQuery(
        [in] const BSTR strQueryLanguage,
        [in] const BSTR strQuery,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IEnumWbemClassObject **ppEnum);

    HRESULT ExecQueryAsync(
        [in] const BSTR strQueryLanguage,
        [in] const BSTR strQuery,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT ExecNotificationQuery(
        [in] const BSTR strQueryLanguage,
        [in] const BSTR strQuery,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [out] IEnumWbemClassObject **ppEnum);

    HRESULT ExecNotificationQueryAsync(
        [in] const BSTR strQueryLanguage,
        [in] const BSTR strQuery,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemObjectSink *pResponseHandler);

    HRESULT ExecMethod(
        [in] const BSTR strObjectPath,
        [in] const BSTR strMethodName,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemClassObject *pInParams,
        [out] IWbemClassObject **ppOutParams,
        [out] IWbemCallResult **ppCallResult);

    HRESULT ExecMethodAsync(
        [in] const BSTR strObjectPath,
        [in] const BSTR strMethodName,
        [in] long lFlags,
        [in] IWbemContext *pCtx,
        [in] IWbemClassObject *pInParams,
        [in] IWbemObjectSink *pResponseHandler);
};

[
    object,
    restricted,
    uuid(027947e1-d731-11ce-a357-000000000001)
]
interface IEnumWbemClassObject : IUnknown
{
    HRESULT Reset();

    HRESULT Next(
        [in] long lTimeout,
        [in] ULONG uCount,
        [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject **apObjects,
        [out] ULONG *puReturned);

    HRESULT NextAsync(
        [in] ULONG uCount,
        [in] IWbemObjectSink *pSink);

    HRESULT Clone(
        [out] IEnumWbemClassObject **ppEnum);

    HRESULT Skip(
        [in] long lTimeout,
        [in] ULONG nCount);
};

[
    object,
    restricted,
    local,
    uuid(dc12a681-737f-11cf-884d-00aa004b2e24)
]
interface IWbemClassObject : IUnknown
{
    HRESULT GetQualifierSet(
        [out] IWbemQualifierSet **ppQualSet);

    HRESULT Get(
        [in,string] LPCWSTR wszName,
        [in] long lFlags,
        [out] VARIANT *pVal,
        [out] CIMTYPE *pType,
        [out] long *plFlavor);

    HRESULT Put(
        [in,string] LPCWSTR wszName,
        [in] long lFlags,
        [in] VARIANT *pVal,
        [in] CIMTYPE Type);

    HRESULT Delete(
        [in,string] LPCWSTR wszName);

    HRESULT GetNames(
        [in,string] LPCWSTR wszQualifierName,
        [in] long lFlags,
        [in] VARIANT *pQualifierVal,
        [out] SAFEARRAY **pNames);

    HRESULT BeginEnumeration(
        [in] long lEnumFlags);

    HRESULT Next(
        [in] long lFlags,
        [out] BSTR *strName,
        [out] VARIANT *pVal,
        [out] CIMTYPE *pType,
        [out] long *plFlavor);

    HRESULT EndEnumeration();

    HRESULT GetPropertyQualifierSet(
        [in,string] LPCWSTR wszProperty,
        [out] IWbemQualifierSet **ppQualSet);

    HRESULT Clone(
        [out] IWbemClassObject **ppCopy);

    HRESULT GetObjectText(
        [in] long lFlags,
        [out] BSTR *pstrObjectText);

    HRESULT SpawnDerivedClass(
        [in] long lFlags,
        [out] IWbemClassObject **ppNewClass);

    HRESULT SpawnInstance(
        [in] long lFlags,
        [out] IWbemClassObject **ppNewInstance);

    HRESULT CompareTo(
        [in] long lFlags,
        [in] IWbemClassObject *pCompareTo);

    HRESULT GetPropertyOrigin(
        [in,string] LPCWSTR wszName,
        [out] BSTR *pstrClassName);

    HRESULT InheritsFrom(
        [in] LPCWSTR strAncestor);

    HRESULT GetMethod(
        [in,string] LPCWSTR wszName,
        [in] long lFlags,
        [out] IWbemClassObject **ppInSignature,
        [out] IWbemClassObject **ppOutSignature);

    HRESULT PutMethod(
        [in,string] LPCWSTR wszName,
        [in] long lFlags,
        [in] IWbemClassObject *pInSignature,
        [in] IWbemClassObject *pOutSignature);

    HRESULT DeleteMethod(
        [in,string] LPCWSTR wszName);

    HRESULT BeginMethodEnumeration(
        [in] long lEnumFlags);

    HRESULT NextMethod(
        [in] long lFlags,
        [out] BSTR *pstrName,
        [out] IWbemClassObject **ppInSignature,
        [out] IWbemClassObject **ppOutSignature);

    HRESULT EndMethodEnumeration();

    HRESULT GetMethodQualifierSet(
        [in,string] LPCWSTR wszMethod,
        [out] IWbemQualifierSet **ppQualSet);

    HRESULT GetMethodOrigin(
        [in,string] LPCWSTR wszMethodName,
        [out] BSTR *pstrClassName);
}
