/*
 * 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_STATUS_TYPE
{
    WBEM_STATUS_COMPLETE     = 0,
    WBEM_STATUS_REQUIREMENTS = 1,
    WBEM_STATUS_PROGRESS     = 2
} WBEM_STATUS_TYPE;

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);
};

[
    object,
    restricted,
    uuid(7c857801-7381-11cf-884d-00aa004b2e24)
]
interface IWbemObjectSink : IUnknown
{
    HRESULT Indicate(
        [in] long lObjectCount,
        [in, size_is(lObjectCount)] IWbemClassObject **apObjArray);

    HRESULT SetStatus(
        [in] long lFlags,
        [in] HRESULT hResult,
        [in] BSTR strParam,
        [in] IWbemClassObject *pObjParam);
};

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);
}

[
    object,
    restricted,
    local,
    uuid(dc12a680-737f-11cf-884d-00aa004b2e24)
]
interface IWbemQualifierSet : IUnknown
{
    HRESULT Get(
        [in,string] LPCWSTR wszName,
        [in] long lFlags,
        [out] VARIANT *pVal,
        [out] long *plFlavor);

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

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

    HRESULT GetNames(
        [in] long lFlags,
        [out] SAFEARRAY **pNames);

    HRESULT BeginEnumeration(
        [in] long lFlags);

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

    HRESULT EndEnumeration();
};
