//***************************************************************************
//
//  Copyright (c) 1998-2001 Microsoft Corporation
//
//  WBEMDISP.IDL
//
//  WBEM IDispatch Compatible Access for Automation
//
//***************************************************************************

import "dispex.idl";

[
	uuid(565783C6-CB41-11d1-8B02-00600806D9B6),
	lcid(0x00),
	version(1.2),
	helpstring("Microsoft WMI Scripting V1.2 Library")
]
library WbemScripting
{
    importlib("stdole2.tlb");

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

	interface ISWbemServicesEx;
	interface ISWbemObjectEx;
	interface ISWbemDateTime;
	interface ISWbemRefresher;
	interface ISWbemRefreshableItem;
    
	// These are used by ISWbemObject.Put_
    typedef 
	[
		v1_enum, 
		uuid(4A249B72-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines semantics of putting a Class or Instance")
	] 
	enum WbemChangeFlagEnum
    {
        wbemChangeFlagCreateOrUpdate = 0x0,
		wbemChangeFlagUpdateOnly = 0x1,
        wbemChangeFlagCreateOnly = 0x2,
		wbemChangeFlagUpdateCompatible = 0x0,
		wbemChangeFlagUpdateSafeMode = 0x20,
		wbemChangeFlagUpdateForceMode = 0x40,
		wbemChangeFlagStrongValidation = 0x80,
		wbemChangeFlagAdvisory = 0x000010000

    } WbemChangeFlagEnum;

	// These are used by ExecQuery, SubclassesOf, InstancesOf, etc.
    typedef 
	[
		v1_enum,
		uuid(4A249B73-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines behavior of various interface calls"),
	] 
	enum WbemFlagEnum
    {
        wbemFlagReturnImmediately = 0x10,
        wbemFlagReturnWhenComplete = 0,
        wbemFlagBidirectional = 0,
        wbemFlagForwardOnly = 0x20,
        wbemFlagNoErrorObject = 0x40,
        wbemFlagReturnErrorObject = 0,
        wbemFlagSendStatus = 0x80,
        wbemFlagDontSendStatus = 0,
		wbemFlagEnsureLocatable = 0x100,
        wbemFlagDirectRead = 0x200,
		wbemFlagSendOnlySelected = 0,
		wbemFlagUseAmendedQualifiers = 0x20000,
		wbemFlagGetDefault = 0x0,
		wbemFlagSpawnInstance = 0x1,
		wbemFlagUseCurrentTime = 0x1
    } WbemFlagEnum;

	// These are used by ISWbemServices::ExecQuery, SubclassesOf
	// and InstancesOf
    typedef 
	[
		v1_enum,
		uuid(4A249B76-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines depth of enumeration or query")
	] 
	enum WbemQueryFlagEnum
    {
        wbemQueryFlagDeep = 0,
        wbemQueryFlagShallow = 1,
		wbemQueryFlagPrototype = 2 
    } WbemQueryFlagEnum;

	// Following is used by ISWbemObject::GetObjectText_
    typedef 
	[
		v1_enum,
		uuid(4A249B78-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines content of generated object text")
	] 
	enum WbemTextFlagEnum
    {
        wbemTextFlagNoFlavors = 0x1
    } WbemTextFlagEnum;

	// Following is used by ISWbemServices::ExecNotificationQuery
    typedef 
	[
		v1_enum,
		uuid(BF078C2A-07D9-11d2-8B21-00600806D9B6),
		helpstring("Defines timeout constants")
	] 
	enum WbemTimeout
    {
        wbemTimeoutInfinite = 0xFFFFFFFF
    } WbemTimeout;

	// Following is used by ISWbemObject::CompareTo_
    typedef 
	[
		v1_enum,
		uuid(4A249B79-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines settings for object comparison")
	] 
	enum WbemComparisonFlagEnum
    {
        wbemComparisonFlagIncludeAll = 0,
        wbemComparisonFlagIgnoreQualifiers = 0x1,
        wbemComparisonFlagIgnoreObjectSource = 0x2,
        wbemComparisonFlagIgnoreDefaultValues = 0x4,
        wbemComparisonFlagIgnoreClass = 0x8,
        wbemComparisonFlagIgnoreCase = 0x10,
        wbemComparisonFlagIgnoreFlavor = 0x20
    } WbemComparisonFlagEnum;

	typedef 
	[
		v1_enum,
		uuid(4A249B7B-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines the valid CIM Types of a Property value")
	] 
	enum WbemCimtypeEnum
    {
        wbemCimtypeSint8 = 16,
        wbemCimtypeUint8 = 17,
        wbemCimtypeSint16 = 2,
        wbemCimtypeUint16 = 18,
        wbemCimtypeSint32 = 3,
        wbemCimtypeUint32 = 19,
        wbemCimtypeSint64 = 20,
        wbemCimtypeUint64 = 21,
        wbemCimtypeReal32 = 4,
        wbemCimtypeReal64 = 5,
        wbemCimtypeBoolean = 11,
        wbemCimtypeString = 8,
        wbemCimtypeDatetime = 101,
        wbemCimtypeReference = 102,
        wbemCimtypeChar16 = 103,
        wbemCimtypeObject = 13
    } WbemCimtypeEnum;

    /////////////////////////////////////////////////////////////////
    //

    typedef 
	[
		v1_enum,
		uuid(4A249B7C-FC9A-11d1-8B1E-00600806D9B6),
		helpstring("Defines the errors that may be returned by the WBEM Scripting library")
	] enum WbemErrorEnum
	{

        // Errors.
        // =======
		wbemNoErr = 0,

        wbemErrFailed = 0x80041001,
        wbemErrNotFound = 0x80041002,
        wbemErrAccessDenied = 0x80041003,
        wbemErrProviderFailure = 0x80041004,
        wbemErrTypeMismatch = 0x80041005,
        wbemErrOutOfMemory = 0x80041006,
        wbemErrInvalidContext = 0x80041007,
        wbemErrInvalidParameter = 0x80041008,
        wbemErrNotAvailable = 0x80041009,
        wbemErrCriticalError = 0x8004100A,
        wbemErrInvalidStream = 0x8004100B,
        wbemErrNotSupported = 0x8004100C,
        wbemErrInvalidSuperclass = 0x8004100D,
        wbemErrInvalidNamespace = 0x8004100E,
        wbemErrInvalidObject = 0x8004100F,
        wbemErrInvalidClass = 0x80041010,
        wbemErrProviderNotFound = 0x80041011,
        wbemErrInvalidProviderRegistration = 0x80041012,
        wbemErrProviderLoadFailure = 0x80041013,
        wbemErrInitializationFailure = 0x80041014,
        wbemErrTransportFailure = 0x80041015,
        wbemErrInvalidOperation = 0x80041016,
        wbemErrInvalidQuery = 0x80041017,
        wbemErrInvalidQueryType = 0x80041018,
        wbemErrAlreadyExists = 0x80041019,
        wbemErrOverrideNotAllowed = 0x8004101A,
        wbemErrPropagatedQualifier = 0x8004101B,
        wbemErrPropagatedProperty = 0x8004101C,
        wbemErrUnexpected = 0x8004101D,
        wbemErrIllegalOperation = 0x8004101E,
        wbemErrCannotBeKey = 0x8004101F,
        wbemErrIncompleteClass = 0x80041020,
        wbemErrInvalidSyntax = 0x80041021,
        wbemErrNondecoratedObject = 0x80041022,
        wbemErrReadOnly = 0x80041023,
        wbemErrProviderNotCapable = 0x80041024,
        wbemErrClassHasChildren = 0x80041025,
        wbemErrClassHasInstances = 0x80041026,
        wbemErrQueryNotImplemented = 0x80041027,
        wbemErrIllegalNull = 0x80041028,
        wbemErrInvalidQualifierType = 0x80041029,
        wbemErrInvalidPropertyType = 0x8004102A,
        wbemErrValueOutOfRange = 0x8004102B,
        wbemErrCannotBeSingleton = 0x8004102C,
        wbemErrInvalidCimType = 0x8004102D,
        wbemErrInvalidMethod = 0x8004102E,
        wbemErrInvalidMethodParameters = 0x8004102F,        
        wbemErrSystemProperty = 0x80041030,
        wbemErrInvalidProperty = 0x80041031,
        wbemErrCallCancelled = 0x80041032,
        wbemErrShuttingDown = 0x80041033,
        wbemErrPropagatedMethod = 0x80041034,
        wbemErrUnsupportedParameter = 0x80041035,
		wbemErrMissingParameter = 0x80041036,
		wbemErrInvalidParameterId = 0x80041037,
		wbemErrNonConsecutiveParameterIds = 0x80041038,
		wbemErrParameterIdOnRetval = 0x80041039,
		wbemErrInvalidObjectPath = 0x8004103A,
		wbemErrOutOfDiskSpace = 0x8004103B,
		wbemErrBufferTooSmall = 0x8004103C,
        wbemErrUnsupportedPutExtension = 0x8004103D,
		wbemErrUnknownObjectType = 0x8004103E,
		wbemErrUnknownPacketType = 0x8004103F,
		wbemErrMarshalVersionMismatch = 0x80041040,
		wbemErrMarshalInvalidSignature = 0x80041041,
		wbemErrInvalidQualifier = 0x80041042,
		wbemErrInvalidDuplicateParameter = 0x80041043,
        wbemErrTooMuchData = 0x80041044,
        wbemErrServerTooBusy = 0x80041045,
		wbemErrInvalidFlavor = 0x80041046,
		wbemErrCircularReference = 0x80041047,
		wbemErrUnsupportedClassUpdate = 0x80041048,
		wbemErrCannotChangeKeyInheritance = 0x80041049,
		wbemErrCannotChangeIndexInheritance = 0x80041050,
		wbemErrTooManyProperties = 0x80041051,
		wbemErrUpdateTypeMismatch = 0x80041052,
		wbemErrUpdateOverrideNotAllowed	= 0x80041053,
		wbemErrUpdatePropagatedMethod = 0x80041054,
		wbemErrMethodNotImplemented	= 0x80041055,
		wbemErrMethodDisabled = 0x80041056,
		wbemErrRefresherBusy = 0x80041057,
        wbemErrUnparsableQuery = 0x80041058,
        wbemErrNotEventClass = 0x80041059,
        wbemErrMissingGroupWithin = 0x8004105A,
        wbemErrMissingAggregationList = 0x8004105B,
        wbemErrPropertyNotAnObject = 0x8004105C,
        wbemErrAggregatingByObject = 0x8004105D,
        wbemErrUninterpretableProviderQuery = 0x8004105F,
		wbemErrBackupRestoreWinmgmtRunning = 0x80041060,
		wbemErrQueueOverflow = 0x80041061,
		wbemErrPrivilegeNotHeld = 0x80041062,
		wbemErrInvalidOperator = 0x80041063,
		wbemErrLocalCredentials = 0x80041064,
		wbemErrCannotBeAbstract = 0x80041065,
		wbemErrAmendedObject = 0x80041066,
		wbemErrClientTooSlow = 0x80041067,
        wbemErrNullSecurityDescriptor = 0x80041068,
        wbemErrTimeout = 0x80041069,
        wbemErrInvalidAssociation = 0x8004106A,
        wbemErrAmbiguousOperation = 0x8004106B,
        wbemErrQuotaViolation = 0x8004106C,
        wbemErrTransactionConflict = 0x8004106D,
        wbemErrForcedRollback = 0x8004106E,
        wbemErrUnsupportedLocale = 0x8004106F,
        wbemErrHandleOutOfDate = 0x80041070,
        wbemErrConnectionFailed = 0x80041071,
        wbemErrInvalidHandleRequest = 0x80041072,
        wbemErrPropertyNameTooWide = 0x80041073,
        wbemErrClassNameTooWide = 0x80041074,
        wbemErrMethodNameTooWide = 0x80041075,
        wbemErrQualifierNameTooWide = 0x80041076,
        wbemErrRerunCommand = 0x80041077,
        wbemErrDatabaseVerMismatch = 0x80041078,
		wbemErrVetoPut	= 0x80041079,
		wbemErrVetoDelete = 0x8004107A,

		wbemErrInvalidLocale = 0x80041080,
		wbemErrProviderSuspended = 0x80041081,
		wbemErrSynchronizationRequired = 0x80041082,
		wbemErrNoSchema = 0x80041083,

		wbemErrProviderAlreadyRegistered = 0x80041084,
		wbemErrProviderNotRegistered = 0x80041085,
		wbemErrFatalTransportError = 0x80041086,
		wbemErrEncryptedConnectionRequired = 0x80041087,

	// Event Subsystem Errors

        wbemErrRegistrationTooBroad = 0x80042001,
        wbemErrRegistrationTooPrecise = 0x80042002,

	// Automation-specific errors 

		wbemErrTimedout = 0x80043001,
		wbemErrResetToDefault = 0x80043002
        
    }   WbemErrorEnum;

	// The following are used in conjunction with the SWbemSecurity object

    typedef 
	[
		v1_enum,
		uuid(B54D66E7-2287-11d2-8B33-00600806D9B6),
		helpstring("Defines the security authentication level"),
	] 
	enum WbemAuthenticationLevelEnum
    {
        wbemAuthenticationLevelDefault = 0,
		wbemAuthenticationLevelNone = 1,
		wbemAuthenticationLevelConnect = 2,
		wbemAuthenticationLevelCall = 3,
		wbemAuthenticationLevelPkt = 4,
		wbemAuthenticationLevelPktIntegrity = 5,
		wbemAuthenticationLevelPktPrivacy = 6
	} WbemAuthenticationLevelEnum;

	typedef 
	[
		v1_enum,
		uuid(B54D66E8-2287-11d2-8B33-00600806D9B6),
		helpstring("Defines the security impersonation level"),
	] 
	enum WbemImpersonationLevelEnum
    {
        wbemImpersonationLevelAnonymous = 1,
		wbemImpersonationLevelIdentify = 2,
		wbemImpersonationLevelImpersonate = 3,
		wbemImpersonationLevelDelegate = 4
	} WbemImpersonationLevelEnum;

	typedef 
	[
		v1_enum,
		uuid(176D2F70-5AF3-11d2-8B4A-00600806D9B6),
		helpstring("Defines a privilege"),
	] 
	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 Text Formats
	typedef 
	[
		v1_enum,
		uuid(09FF1992-EA0E-11d3-B391-00105A1F473A),
		helpstring("Defines object text formats"),
	] 
	enum WbemObjectTextFormatEnum
    {
		wbemObjectTextFormatCIMDTD20 = 1,
		wbemObjectTextFormatWMIDTD20 = 2
	} WbemObjectTextFormatEnum;


	// This is new for Whistler and used with ConnectServer
	typedef
	[
		v1_enum,
		helpstring("Used to define connection behavior")
	] 
	enum WbemConnectOptionsEnum
	{
//		wbemConnectFlagRepositoryOnly = 0X40, //not exposed
		wbemConnectFlagUseMaxWait = 0X80

	} WbemConnectOptionsEnum;


	//coclasses
	//=========

	[
		uuid(76A64158-CB41-11d1-8B02-00600806D9B6),
		helpstring("Used to obtain Namespace connections")
    ]
    coclass SWbemLocator
    {
        interface ISWbemLocator;
    };

    [
		uuid(9AED384E-CE8B-11d1-8B05-00600806D9B6),
		helpstring("A collection of Named Values")
    ]
    coclass SWbemNamedValueSet
    {
        interface ISWbemNamedValueSet;
    };

   	[
		uuid(5791BC26-CE9C-11d1-97BF-0000F81E849C),
		helpstring("Object Path")
    ]
    coclass SWbemObjectPath
    {
        interface ISWbemObjectPath;
    };


	[
		uuid(C2FEEEAC-CFCD-11d1-8B05-00600806D9B6),
		helpstring("The last error on the current thread")
    ]
    coclass SWbemLastError
	{
		interface ISWbemLastError;
	};

	[
		uuid(75718C9A-F029-11d1-A1AC-00C04FB6C223),
		helpstring("A sink for events arising from asynchronous operations")
    ]
    coclass SWbemSink
	{
		interface ISWbemSink;
		[default, source] dispinterface ISWbemSinkEvents;

	};

	[
		uuid(47DFBE54-CF76-11d3-B38F-00105A1F473A),
		helpstring("Date & Time")
    ]
    coclass SWbemDateTime
    {
        interface ISWbemDateTime;
    };

    [
		uuid(D269BF5C-D9C1-11d3-B38F-00105A1F473A),
		helpstring("Refresher")
    ]
    coclass SWbemRefresher
    {
        interface ISWbemRefresher;
    };

	/* The following are non-creatable coclasses */
	[
		uuid(04B83D63-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A connection to a Namespace"),
		noncreatable
	]
	coclass SWbemServices
	{
		interface ISWbemServices;
	};

	[
		uuid(62E522DC-8CF3-40a8-8B2E-37D595651E40), 
		helpstring("A connection to a Namespace"),
		noncreatable
	]
	coclass SWbemServicesEx
	{
		interface ISWbemServicesEx;
	};
	
	[
		uuid(04B83D62-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A Class or Instance"),
		noncreatable
	]
	coclass SWbemObject
	{
		interface ISWbemObject;
	};

	[
		uuid(D6BDAFB2-9435-491f-BB87-6AA0F0BC31A2), 
		helpstring("A Class or Instance"),
		noncreatable
	]
	coclass SWbemObjectEx
	{
		interface ISWbemObjectEx;
	};
	
	[
		uuid(04B83D61-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A collection of Classes or Instances"),
		noncreatable
	]
	coclass SWbemObjectSet
	{
		interface ISWbemObjectSet;
	};

	[
		uuid(04B83D60-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A named value"),
		noncreatable
	]
	coclass SWbemNamedValue
	{
		interface ISWbemNamedValue;
	};

	[
		uuid(04B83D5F-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A Qualifier"),
		noncreatable
	]
    coclass SWbemQualifier
	{
		interface ISWbemQualifier;
	}

	[
		uuid(04B83D5E-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A collection of Qualifiers"),
		noncreatable
	]
    coclass SWbemQualifierSet
	{
		interface ISWbemQualifierSet;
	};

	[
		uuid(04B83D5D-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A Property"),
		noncreatable
	]
    coclass SWbemProperty
	{
		interface ISWbemProperty;
	};

	[
		uuid(04B83D5C-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A collection of Properties"),
		noncreatable
	]
    coclass SWbemPropertySet
	{
		interface ISWbemPropertySet;
	};

	[
		uuid(04B83D5B-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A Method"),
		noncreatable
	]
    coclass SWbemMethod
	{
		interface ISWbemMethod;
	};

	[
		uuid(04B83D5A-21AE-11d2-8B33-00600806D9B6), 
		helpstring("A collection of Methods"),
		noncreatable
	]
    coclass SWbemMethodSet
	{
		interface ISWbemMethodSet;
	}

	[
		uuid(04B83D58-21AE-11d2-8B33-00600806D9B6), 
		helpstring("An Event source"),
		noncreatable
	]
    coclass SWbemEventSource
	{
		interface ISWbemEventSource;
	};


	[
		uuid(B54D66E9-2287-11d2-8B33-00600806D9B6), 
		helpstring("A Security Configurator"),
		noncreatable
	]
    coclass SWbemSecurity
	{
		interface ISWbemSecurity;
	}

	[
		uuid(26EE67BC-5804-11d2-8B4A-00600806D9B6),
		helpstring("A Privilege Override"),
		noncreatable
	]
	coclass SWbemPrivilege
	{
		interface ISWbemPrivilege;
	}

	[
		uuid(26EE67BE-5804-11d2-8B4A-00600806D9B6),
		helpstring("A collection of Privilege Overrides"),
		noncreatable
	]
	coclass SWbemPrivilegeSet
	{
		interface ISWbemPrivilegeSet;
	}

	[
		uuid(8C6854BC-DE4B-11d3-B390-00105A1F473A),
		helpstring("A single item from a Refresher"),
		noncreatable
	]
	coclass SWbemRefreshableItem
	{
		interface ISWbemRefreshableItem;
	}
};

[
	object, 
	local, 
	uuid(76A6415B-CB41-11d1-8B02-00600806D9B6), 
	dual, 
	hidden,
	//nonextensible,
	oleautomation,
 	pointer_default(unique),
	helpstring("Used to obtain Namespace connections")
]
interface ISWbemLocator  : IDispatch
{
	[
		id(1),
		helpstring("Connect to a Namespace")
	]
    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)] 	/*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval]   					ISWbemServices 	**objWbemServices            
     );

	[
		id(2),
		propget,
		helpstring("The Security Configurator for this Object")
	]
	HRESULT Security_ ([out, retval] ISWbemSecurity **objWbemSecurity);
};


[
	local, 
	object, 
	uuid(76A6415C-CB41-11d1-8B02-00600806D9B6), 
	oleautomation, 
	dual,
	//nonextensible,
	pointer_default(unique),
	hidden,
	helpstring("A connection to a Namespace")
]
interface ISWbemServices : IDispatch
{
	// Object Operations
	// =====================

	[
		id(1),
		helpstring("Get a single Class or Instance")
	]
    HRESULT Get (
        [in, defaultvalue("")] BSTR strObjectPath,
		[in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
	    [out, retval] ISWbemObject **objWbemObject
        );

	[
		id(2),
		helpstring("Get a single Class or Instance asynchronously")
	]
    HRESULT GetAsync (
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in, defaultvalue("")] BSTR strObjectPath,
		[in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(3),
		helpstring("Delete a Class or Instance")
	]
    HRESULT Delete (
        [in] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
        );

	[
		id(4),
		helpstring("Delete a Class or Instance asynchronously")
	]
    HRESULT DeleteAsync (
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(5),
		helpstring("Enumerate the Instances of a Class")
	]
    HRESULT InstancesOf(
        [in] BSTR strClass,
        [in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(6),
		helpstring("Enumerate the Instances of a Class asynchronously")
	]
    HRESULT InstancesOfAsync(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in] BSTR strClass,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(7),
		helpstring("Enumerate the subclasses of a Class")
	]
    HRESULT SubclassesOf(
        [in, defaultvalue("")]  BSTR strSuperclass,
        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)]  long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
        [out, retval] ISWbemObjectSet **objWbemObjectSet
    );

	[
		id(8),
		helpstring("Enumerate the subclasses of a Class asynchronously ")
	]
    HRESULT SubclassesOfAsync(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in, defaultvalue("")]  BSTR strSuperclass,
        [in, defaultvalue(wbemQueryFlagDeep)]  long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
    );
  

	// Queries
	// =======

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

	[
		id(10),
		helpstring("Execute an asynchronous Query")
	]
    HRESULT ExecQueryAsync(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
		[in]  BSTR strQuery,
		[in, defaultvalue("WQL")]  BSTR strQueryLanguage,
        [in, defaultvalue(0)] long lFlags,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(11),
		helpstring("Get the Associators of a class or instance")
	]
    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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(12),
		helpstring("Get the Associators of a class or instance asynchronously")
	]
    HRESULT AssociatorsOfAsync(
		[in] /*SWbemSink*/ 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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(13),
		helpstring("Get the References to a class or instance")
	]
    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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(14),
		helpstring("Get the References to a class or instance asynchronously")
	]
    HRESULT ReferencesToAsync(
		[in] /*SWbemSink*/ 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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );
    
    [
		id(15),
		helpstring("Execute a Query to receive Notifications")
	]
    HRESULT ExecNotificationQuery(
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(wbemFlagReturnImmediately|wbemFlagForwardOnly)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemEventSource **objWbemEventSource
        );

    [
		id(16),
		helpstring("Execute an asynchronous Query to receive Notifications")
	]
    HRESULT ExecNotificationQueryAsync(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in] BSTR strQuery,
        [in, defaultvalue("WQL")] BSTR strQueryLanguage,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	// Method Invocation
	// =================
    [
		id(17),
		helpstring("Execute a Method")
	]
    HRESULT ExecMethod(
        [in] BSTR strObjectPath,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] /*ISWbemObject*/ IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObject **objWbemOutParameters
        );

    [
		id(18),
		helpstring("Execute a Method asynchronously")
	]
    HRESULT ExecMethodAsync(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in] BSTR strObjectPath,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] /*ISWbemObject*/ IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(19),
		propget,
		helpstring("The Security Configurator for this Object")
	]
	HRESULT Security_ ([out, retval] ISWbemSecurity **objWbemSecurity);
};

[
	local, 
	object, 
	uuid(D2F68443-85DC-427e-91D8-366554CC754C), 
	oleautomation, 
	dual,
	nonextensible,
	pointer_default(unique),
	hidden,
	helpstring("A connection to a Namespace")
]
interface ISWbemServicesEx : ISWbemServices
{

	[
		id(20),
		helpstring("Save the Object to this Namespace")
	]
    HRESULT Put(
		[in] ISWbemObjectEx *objWbemObject,
       	[in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval] ISWbemObjectPath **objWbemObjectPath
        );

	[
		id(21),
		helpstring("Save the Object to this Namespace asynchronously")
	]
    HRESULT PutAsync(
		[in] ISWbemSink *objWbemSink,
		[in] ISWbemObjectEx *objWbemObject,
       	[in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );
};

[
	local, 
	object, 
	uuid(76A6415A-CB41-11d1-8B02-00600806D9B6), 
	dual, 
	oleautomation,
	hidden,
	helpstring("A Class or Instance")
]
interface ISWbemObject : IDispatch
{
	[
		id(1),
		helpstring("Save this Object")
	]
    HRESULT Put_(
       	[in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval] ISWbemObjectPath **objWbemObjectPath
        );

	[
		id(2),
		helpstring("Save this Object asynchronously")
	]
    HRESULT PutAsync_(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
       	[in, defaultvalue(wbemChangeFlagCreateOrUpdate)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id (3),
		helpstring("Delete this Object")
	]
	HRESULT Delete_(
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
        );

	[
		id (4),
		helpstring("Delete this Object asynchronously")
	]
	HRESULT DeleteAsync_(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(5),
		helpstring("Return all instances of this Class")
	]
	HRESULT Instances_(
		[in, defaultvalue(wbemFlagReturnImmediately)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(6),
		helpstring("Return all instances of this Class asynchronously")
	]
	HRESULT InstancesAsync_(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
		[in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(7),
		helpstring("Enumerate subclasses of this Class")
	]
    HRESULT Subclasses_(
        [in, defaultvalue(wbemFlagReturnImmediately|wbemQueryFlagDeep)]  long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
        [out, retval] ISWbemObjectSet **objWbemObjectSet
    );		

	[
		id(8),
		helpstring("Enumerate subclasses of this Class asynchronously")
	]
    HRESULT SubclassesAsync_(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in, defaultvalue(wbemQueryFlagDeep)]  long iFlags,
        [in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,        
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
    );		

	[
		id(9),
		helpstring("Get the Associators of this Object")
	]
    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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(10),
		helpstring("Get the Associators of this Object asynchronously")
	]
    HRESULT AssociatorsAsync_(
		[in] /*SWbemSink*/ 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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(11),
		helpstring("Get the References to this Object")
	]
    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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObjectSet **objWbemObjectSet
        );

	[
		id(12),
		helpstring("Get the References to this Object asynchronously")
	]
    HRESULT ReferencesAsync_(
		[in] /*SWbemSink*/ 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)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );
    
	[
		id(13),
		helpstring("Execute a Method of this Object")
	]
    HRESULT ExecMethod_(
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] /*ISWbemObject*/ IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
        [out, retval] ISWbemObject **objWbemOutParameters
        );

	[
		id(14),
		helpstring("Execute a Method of this Object asynchronously")
	]
    HRESULT ExecMethodAsync_(
		[in] /*SWbemSink*/ IDispatch *objWbemSink,
        [in] BSTR strMethodName,
        [in, defaultvalue(0)] /*ISWbemObject*/ IDispatch *objWbemInParameters,
        [in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[in, defaultvalue(0)]  /*ISWbemNamedValueSet*/ IDispatch *objWbemAsyncContext
        );

	[
		id(15),
		helpstring("Clone this Object")
	]
    HRESULT Clone_(
        [out, retval] ISWbemObject **objWbemObject
        );

    [
		id(16),
		helpstring("Get the MOF text of this Object")
	]
    HRESULT GetObjectText_(
        [in, defaultvalue(0)] long iFlags,
		[out, retval] BSTR *strObjectText
        ); 

    [
		id(17),
		helpstring("Create a subclass of this Object")
	]
    HRESULT SpawnDerivedClass_(
        [in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemObject** objWbemObject
        );

    [
		id(18),
		helpstring("Create an Instance of this Object")
	]
    HRESULT SpawnInstance_(
        [in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemObject** objWbemObject
        );

    [
		id(19),
		helpstring("Compare this Object with another")
	]
    HRESULT CompareTo_(
        [in] /*ISWbemObject*/ IDispatch *objWbemObject,
        [in, defaultvalue(wbemComparisonFlagIncludeAll)] long iFlags,
        [out, retval] VARIANT_BOOL *bResult
        );

	[	
		id(20), 
		propget,
		helpstring("The collection of Qualifiers of this Object")	
	] 
	HRESULT Qualifiers_ ([out, retval] ISWbemQualifierSet **objWbemQualifierSet);
	
	[
		id(21), 
		propget,
		helpstring("The collection of Properties of this Object")
	] 
	HRESULT Properties_ ([out, retval] ISWbemPropertySet **objWbemPropertySet);

	[
		id(22), 
		propget,
		helpstring("The collection of Methods of this Object")
	] HRESULT Methods_ ([out, retval] ISWbemMethodSet **objWbemMethodSet);

const ULONG WBEMS_DISPID_DERIVATION = 23;

	[
		id(WBEMS_DISPID_DERIVATION), 
		propget,
		helpstring("An array of strings describing the class derivation heirarchy, in most-derived-from order (the first element in the array defines the superclass and the last element defines the dynasty class).")
	] 
	HRESULT Derivation_ ([out, retval] VARIANT *strClassNameArray);

	[
		id(24),
		propget,
		helpstring("The path of this Object")
	]
	HRESULT Path_ ([out, retval] ISWbemObjectPath **objWbemObjectPath);

	[
		id(25),
		propget,
		helpstring("The Security Configurator for this Object")
	]
	HRESULT Security_ ([out, retval] ISWbemSecurity **objWbemSecurity);
};

[
	local, 
	object, 
	uuid(269AD56A-8A67-4129-BC8C-0506DCFE9880), 
	dual, 
	oleautomation,
	hidden,
	helpstring("A Class or Instance")
]
interface ISWbemObjectEx : ISWbemObject
{
	[
		id(26),
		helpstring("Refresh this Object")
	]
	HRESULT Refresh_ (		
		[in, defaultvalue(0)] long iFlags,
        [in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
		);

	[
		id(27), 
		propget,
		helpstring("The collection of System Properties of this Object")
	] 
	HRESULT SystemProperties_ ([out, retval] ISWbemPropertySet **objWbemPropertySet);

	[
		id(28),
		helpstring("Retrieve a textual representation of this Object")
	]
	HRESULT GetText_ (
		[in] WbemObjectTextFormatEnum iObjectTextFormat,
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval] BSTR *bsText
		);

	[
		id(29),
		helpstring("Set this Object using the supplied textual representation")
	]
	HRESULT SetFromText_ (
		[in] BSTR bsText,
		[in] WbemObjectTextFormatEnum iObjectTextFormat,
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet
		);
};

[
	local, 
	object, 
	uuid(D962DB84-D4BB-11d1-8B09-00600806D9B6), 
	dual, 
	oleautomation,
	hidden,
	helpstring("The last error on the current thread")
]
interface ISWbemLastError : ISWbemObject
{
};

[
	local, 
	object, 
	uuid(76A6415F-CB41-11d1-8B02-00600806D9B6), 
	oleautomation, 
	dual,
	hidden,
	nonextensible,
	helpstring("A collection of Classes or Instances")
]
interface ISWbemObjectSet : IDispatch
{
	[id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **pUnk);

	[
		id(DISPID_VALUE),
		helpstring("Get an Object with a specific path from this collection")
	]
	HRESULT Item (
		[in] BSTR strObjectPath, 
		[in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemObject **objWbemObject
		);

	[
		id(1), 
		propget,
		helpstring("The number of items in this collection")
	] 
	HRESULT Count ([out, retval] long *iCount);

	[
		id(4),
		propget,
		helpstring("The Security Configurator for this Object")
	]
	HRESULT Security_ ([out, retval] ISWbemSecurity **objWbemSecurity);
};

/* ISWbemNamedValueSet is a Collection of ISWbemNamedValue elements */
[
	local, 
	object, 
	uuid(CF2376EA-CE8C-11d1-8B05-00600806D9B6), 
	oleautomation, 
	dual,
	hidden,
	//nonextensible,
	helpstring("A collection of named values")
]
interface ISWbemNamedValueSet : IDispatch
{
	/* These are used in the context of collections */
	[id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **pUnk);

	[
		id(DISPID_VALUE),
		helpstring("Get a named value from this Collection")
	]
	HRESULT Item (
		[in] BSTR strName, 
		[in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemNamedValue **objWbemNamedValue
		);

	[
		id(1), 
		propget,
		helpstring("The number of items in this collection")
	] 
	HRESULT Count ([out, retval] long *iCount);

	[
		id(2),
		helpstring("Add a named value to this collection")
	]
	HRESULT Add (
		[in] BSTR strName,
		[in] VARIANT *varValue,
        [in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemNamedValue **objWbemNamedValue
		);

	[
		id(3),
		helpstring("Remove a named value from this collection")
	]
	HRESULT Remove (
		[in] BSTR strName,
		[in, defaultvalue(0)] long iFlags
		);

	/* End of collection-specific members */
		
	[
		id(4),
		helpstring("Make a copy of this collection")
	]
    HRESULT Clone(
		[out, retval] ISWbemNamedValueSet **objWbemNamedValueSet
		);

    [
		id(5),
		helpstring("Delete all items in this collection")
	]                
    HRESULT DeleteAll();        
};

[
	local, 
	object, 
	uuid(76A64164-CB41-11d1-8B02-00600806D9B6), 
	dual, 
	oleautomation,
	hidden,
	//nonextensible,
	helpstring("A named value")
]
interface ISWbemNamedValue : IDispatch
{
	[
		id(DISPID_VALUE), 
		propget,
		helpstring("The Value of this Named element")
	] 
	HRESULT Value([out, retval] VARIANT *varValue);

	[
		id(DISPID_VALUE), 
		propput
	] 
	HRESULT Value([in] VARIANT *varValue);
	
	[
		id(2), 
		propget,
		helpstring("The Name of this Value")
	] 
	HRESULT Name([out, retval] BSTR *strName);
};

[
	object, 
	local, 
	uuid(5791BC27-CE9C-11d1-97BF-0000F81E849C), 
	dual, 
	oleautomation,
	hidden,
	//nonextensible,
 	pointer_default(unique),
	helpstring("An Object path")
]
interface ISWbemObjectPath : IDispatch
{
	[
		id(DISPID_VALUE), 
		propget,
		helpstring("The full path")
	] 
	HRESULT Path([out, retval] BSTR *strPath);
	
	[
		id(DISPID_VALUE), 
		propput
	] 
	HRESULT Path([in] BSTR strPath);

	[
		id(1), 
		propget,
		helpstring("The relative path")
	] 
	HRESULT RelPath([out, retval] BSTR *strRelPath);
	
	[
		id(1), 
		propput
	] 
	HRESULT RelPath([in] BSTR strRelPath);

	[
		id(2), 
		propget,
		helpstring("The name of the Server")
	] 
	HRESULT Server([out, retval] BSTR *strServer);
	
	[	
		id(2), 
		propput
	] 
	HRESULT Server([in] BSTR strServer);

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

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

	[
		id(4), 
		propget,
		helpstring("The parent Namespace path")
	] 
	HRESULT ParentNamespace([out, retval] BSTR *strParentNamespace);

	[
		id(5), 
		propget,
		helpstring("The Display Name for this path")
	] 
	HRESULT DisplayName([out, retval] BSTR *strDisplayName);
	
	[
		id(5), 
		propput
	] 
	HRESULT DisplayName([in] BSTR strDisplayName);

	[
		id(6), 
		propget,
		helpstring("The Class name")
	] 
	HRESULT Class([out, retval] BSTR *strClass);
	
	[
		id(6), 
		propput
	] 
	HRESULT Class([in] BSTR strClass);

	[
		id(7), 
		propget,
		helpstring("Indicates whether this path addresses a Class")
	] 
	HRESULT IsClass([out, retval] VARIANT_BOOL *bIsClass);

	[
		id(8),
		helpstring("Coerce this path to address a Class")
	] 
	HRESULT SetAsClass();

	[
		id(9), 
		propget,
		helpstring("Indicates whether this path addresses a Singleton Instance")
	] 
	HRESULT IsSingleton([out, retval] VARIANT_BOOL *bIsSingleton);

	[
		id(10),
		helpstring("Coerce this path to address a Singleton Instance")
	] 
	HRESULT SetAsSingleton();

	[
		id(11), 
		propget,
		helpstring("The collection of Key value bindings for this path")
	] 
	HRESULT Keys([out, retval] ISWbemNamedValueSet** objWbemNamedValueSet); 

	[
		id(12),
		propget,
		helpstring("Defines the security components of this path")
	]
	HRESULT Security_([out,retval] ISWbemSecurity** objWbemSecurity);

	[
		id(13),
		propget,
		helpstring("Defines locale component of this path")
	]
	HRESULT Locale([out,retval] BSTR* strLocale);

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

	[
		id(14),
		propget,
		helpstring("Defines authentication authority component of this path")
	]
	HRESULT Authority([out,retval] BSTR* strAuthority);

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

[
	object, 
	local, 
	uuid(1A388F98-D4BA-11d1-8B09-00600806D9B6), 
	dual, 
	oleautomation,
	hidden,
	//nonextensible,
 	pointer_default(unique),
	helpstring("A Property")
]
interface ISWbemProperty : IDispatch
{
	[
		id(DISPID_VALUE), 
		propget,
		helpstring("The value of this Property")
	] 
	HRESULT Value([out, retval] VARIANT *varValue);
	
	[
		id(DISPID_VALUE), 
		propput
	] 
	HRESULT Value([in] VARIANT *varValue);

	[
		id(1), 
		propget,
		helpstring("The name of this Property")
	] 
	HRESULT Name([out, retval] BSTR *strName);
	
	[
		id(2), 
		propget,
		helpstring("Indicates whether this Property is local or propagated")
	] 
	HRESULT IsLocal([out,retval] VARIANT_BOOL *bIsLocal);

	[
		id(3), 
		propget,
		helpstring("The originating class of this Property")
	] 
	HRESULT Origin([out,retval] BSTR *strOrigin);

	[
		id(4), 
		propget,
		helpstring("The CIM Type of this Property")
	] 
	HRESULT CIMType([out,retval] WbemCimtypeEnum *iCimType);

	[
		id(5), 
		propget,
		helpstring("The collection of Qualifiers of this Property")
	] HRESULT Qualifiers_ ([out, retval] ISWbemQualifierSet **objWbemQualifierSet);

	[
		id(6),
		propget,
		helpstring("Indicates whether this Property is an array type")
	]
	HRESULT IsArray([out,retval] VARIANT_BOOL *bIsArray);
};

/* ISWbemPropertySet is a Collection of ISWbemProperty elements */
[
	object, 
	local, 
	uuid(DEA0A7B2-D4BA-11d1-8B09-00600806D9B6), 
	oleautomation, 
	dual,
	hidden,
	//nonextensible,
	helpstring("A collection of Properties")
]
interface ISWbemPropertySet : IDispatch
{
	/* These are used in the context of collections */
	[id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **pUnk);

	[
		id(DISPID_VALUE),
		helpstring("Get a named Property from this collection")
	]
	HRESULT Item (
		[in] BSTR strName, 
		[in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemProperty **objWbemProperty
		);

	[
		id(1), 
		propget,
		helpstring("The number of items in this collection")
	] 
	HRESULT Count ([out, retval] long *iCount);

	[
		id(2),
		helpstring("Add a Property to this collection")
	]
	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),
		helpstring("Remove a Property from this collection")
	]
	HRESULT Remove (
		[in] BSTR strName,
		[in, defaultvalue(0)] long iFlags
		);

};

[
	object, 
	local, 
	uuid(79B05932-D3B7-11d1-8B06-00600806D9B6), 
	dual, 
	oleautomation,
	hidden,
	nonextensible,
 	pointer_default(unique),
	helpstring("A Qualifier")
]
interface ISWbemQualifier : IDispatch
{
	[
		id(DISPID_VALUE), 
		propget,
		helpstring("The value of this Qualifier")
	] 
	HRESULT Value([out, retval] VARIANT *varValue);
	
	[
		id(DISPID_VALUE), 
		propput
	] 
	HRESULT Value([in] VARIANT *varValue);

	[
		id(1), 
		propget,
		helpstring("The name of this Qualifier")
	] 
	HRESULT Name([out, retval] BSTR *strName);
	
	[
		id(2), 
		propget,
		helpstring("Indicates whether this Qualifier is local or propagated")
	] 
	HRESULT IsLocal([out,retval] VARIANT_BOOL *bIsLocal);

	[	
		id(3), 
		propget,
		helpstring("Determines whether this Qualifier can propagate to subclasses")
	] 
	HRESULT PropagatesToSubclass([out, retval] VARIANT_BOOL *bPropagatesToSubclass);

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

	[	
		id(4), 
		propget,
		helpstring("Determines whether this Qualifier can propagate to instances")
	] 
	HRESULT PropagatesToInstance([out, retval] VARIANT_BOOL *bPropagatesToInstance);

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


	[	
		id(5), 
		propget,
		helpstring("Determines whether this Qualifier can be overridden where propagated")
	] 
	HRESULT IsOverridable([out, retval] VARIANT_BOOL *bIsOverridable);

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

	[	
		id(6), 
		propget,
		helpstring("Determines whether the value of this Qualifier has been amended")
	] 
	HRESULT IsAmended([out, retval] VARIANT_BOOL *bIsAmended);
};


/* ISWbemQualifierSet is a Collection of ISWbemQualifier elements */
[
	object, 
	local, 
	uuid(9B16ED16-D3DF-11d1-8B08-00600806D9B6), 
	oleautomation, 
	dual,
	hidden,
	nonextensible,
	helpstring("A collection of Qualifiers")
]
interface ISWbemQualifierSet : IDispatch
{
	/* These are used in the context of collections */
	[
		id(DISPID_NEWENUM), 
		propget, 
		restricted
	] 
	HRESULT _NewEnum (
		[out, retval] IUnknown **pUnk
		);

	[
		id(DISPID_VALUE),
		helpstring("Get a named Qualifier from this collection")
	]
	HRESULT Item (
		[in] BSTR name, 
		[in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemQualifier **objWbemQualifier
		);

	[
		id(1),
		propget,
		helpstring("The number of items in this collection")	
	] 
	HRESULT Count (
		[out, retval] long *iCount
		);

	[
		id(2),
		helpstring("Add a Qualifier to this collection")
	]
	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),
		helpstring("Remove a Qualifier from this collection")
	]
	HRESULT Remove (
		[in] BSTR strName,
		[in, defaultvalue(0)] long iFlags
		);

	/* End of collection-specific members */
};

[
	object, 
	local, 
	uuid(422E8E90-D955-11d1-8B09-00600806D9B6), 
	dual, 
	oleautomation,
 	pointer_default(unique),
	nonextensible,
	hidden,
	helpstring("A Method")
]
interface ISWbemMethod : IDispatch
{
	[
		id(1), 
		propget,
		helpstring("The name of this Method")
	] 
	HRESULT Name([out, retval] BSTR *strName);
	
	[
		id(2), 
		propget,
		helpstring("The originating class of this Method")
	] 
	HRESULT Origin([out,retval] BSTR *strOrigin);

	[	
		id(3), 
		propget,
		helpstring("The in parameters for this Method.")
	] 
	HRESULT InParameters ([out, retval] ISWbemObject **objWbemInParameters);

	[	
		id(4), 
		propget,
		helpstring("The out parameters for this Method.")
	] 
	HRESULT OutParameters ([out, retval] ISWbemObject **objWbemOutParameters);

	[	
		id(5), 
		propget,
		helpstring("The collection of Qualifiers of this Method.")
	] 
	HRESULT Qualifiers_ ([out, retval] ISWbemQualifierSet **objWbemQualifierSet);
};


/* ISWbemMethodSet is a Collection of ISWbemMethod elements */
[
	local, 
	object, 
	uuid(C93BA292-D955-11d1-8B09-00600806D9B6), 
	oleautomation, 
	dual,
	nonextensible,
	hidden,
	helpstring("A collection of Methods")
]
interface ISWbemMethodSet : IDispatch
{
	/* These are used in the context of collections */
	[id(DISPID_NEWENUM), propget, restricted] HRESULT _NewEnum ([out, retval] IUnknown **pUnk);

	[
		id(DISPID_VALUE),
		helpstring("Get a named Method from this collection")
	]
	HRESULT Item (
		[in] BSTR strName, 
		[in, defaultvalue(0)] long iFlags,
		[out, retval] ISWbemMethod **objWbemMethod
		);

	[
		id(1), 
		propget,
		helpstring("The number of items in this collection")
	] 
	HRESULT Count ([out, retval] long *iCount);
	
	/* End of collection-specific members */
};

[
	object, 
	uuid(75718C9F-F029-11d1-A1AC-00C04FB6C223), 
	oleautomation,
	dual,
	hidden,
	nonextensible,
	helpstring("Asynchronous operation control")
]
interface ISWbemSink : IDispatch 
{
	[
		id(1),
		helpstring("Cancel an asynchronous operation")
	]
	HRESULT Cancel();
};

const ULONG WBEMS_DISPID_OBJECT_READY = 1;
const ULONG WBEMS_DISPID_COMPLETED = 2;
const ULONG WBEMS_DISPID_PROGRESS = 3;
const ULONG WBEMS_DISPID_OBJECT_PUT = 4;
const ULONG WBEMS_DISPID_CONNECTION_READY = 5;

[
	uuid(75718CA0-F029-11d1-A1AC-00C04FB6C223), 
	helpstring("A sink for events arising from asynchronous operations"),
	nonextensible,
	hidden
]
dispinterface ISWbemSinkEvents
{

	properties:
	methods:


	[
		id(WBEMS_DISPID_OBJECT_READY),
		helpstring("Event triggered when an Object is available")
	]
    void OnObjectReady(
		ISWbemObject *objWbemObject,
		ISWbemNamedValueSet *objWbemAsyncContext
		);

	[
		id(WBEMS_DISPID_COMPLETED),
		helpstring("Event triggered when an asynchronous operation is completed")
	]
    void OnCompleted (
		WbemErrorEnum iHResult,
		ISWbemObject *objWbemErrorObject,
		ISWbemNamedValueSet *objWbemAsyncContext
		);

	[
		id(WBEMS_DISPID_PROGRESS),
		helpstring("Event triggered to report the progress of an asynchronous operation")
	]
    void OnProgress (
		long iUpperBound,
		long iCurrent,
		BSTR strMessage,
		ISWbemNamedValueSet *objWbemAsyncContext
		);

	[
		id(WBEMS_DISPID_OBJECT_PUT),
		helpstring("Event triggered when an object path is available following a Put operation")
	]
    void OnObjectPut (
		ISWbemObjectPath *objWbemObjectPath,
		ISWbemNamedValueSet *objWbemAsyncContext
		);
};

/* ISWbemEventSource is an iterator for returned events from ExecQueryNotification */
[
	object, 
	local, 
	uuid(27D54D92-0EBE-11d2-8B22-00600806D9B6), 
	oleautomation, 
	dual,
	nonextensible,
	hidden,
	helpstring("An Event source"),
]
interface ISWbemEventSource : IDispatch
{
	[
		id(1),
		helpstring("Retrieve the next event within a specified time period. The timeout is specified in milliseconds.")
	]
	HRESULT NextEvent (
		[in, defaultvalue(wbemTimeoutInfinite)] long iTimeoutMs,
		[out, retval] ISWbemObject **objWbemObject
		);

	[
		id(2),
		propget,
		helpstring("The Security Configurator for this Object")
	]
	HRESULT Security_ ([out, retval] ISWbemSecurity **objWbemSecurity);
};

/* ISWbemSecurity provides security settings for remotable calls */
[
	object,
	local,
	uuid(B54D66E6-2287-11d2-8B33-00600806D9B6),
	oleautomation,
	dual,
	nonextensible,
	hidden,
	helpstring("A Security Configurator")
]
interface ISWbemSecurity : IDispatch
{
	[
		id(1), 
		propget,
		helpstring("The security impersonation level")
	] 
	HRESULT ImpersonationLevel ([out, retval] WbemImpersonationLevelEnum *iImpersonationLevel);
	
	[
		id(1), 
		propput
	] 
	HRESULT ImpersonationLevel ([in] WbemImpersonationLevelEnum iImpersonationLevel);
	
	[
		id(2), 
		propget,
		helpstring("The security authentication level")
	] 
	HRESULT AuthenticationLevel ([out, retval] WbemAuthenticationLevelEnum *iAuthenticationLevel);

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

	[
		id(3),
		propget,
		helpstring ("The collection of privileges for this object")
	]
	HRESULT Privileges ([out, retval] ISWbemPrivilegeSet **objWbemPrivilegeSet);
};

/* ISWbemPrivilege provides security settings for remotable calls */
[
	object,
	local,
	uuid(26EE67BD-5804-11d2-8B4A-00600806D9B6),
	oleautomation,
	dual,
	nonextensible,
	hidden,
	helpstring("A Privilege Override")
]
interface ISWbemPrivilege : IDispatch
{
	[
		id(DISPID_VALUE),
		propget,
		helpstring("Whether the Privilege is to be enabled or disabled")
	] 
	HRESULT IsEnabled ([out, retval] VARIANT_BOOL *bIsEnabled);

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

	[
		id(1), 
		propget,
		helpstring("The name of the Privilege")
	] 
	HRESULT Name ([out, retval] BSTR *strDisplayName);

	[
		id(2),
		propget,
		helpstring ("The display name of the Privilege")
	]
	HRESULT DisplayName ([out, retval] BSTR *strDisplayName);

	[
		id(3),
		propget,
		helpstring ("The Privilege identifier")
	]
	HRESULT Identifier ([out, retval] WbemPrivilegeEnum *iPrivilege);
};

/* ISWbemPrivilegeSet is a Collection of ISWbemPrivilege elements */
[
	object, 
	local, 
	uuid(26EE67BF-5804-11d2-8B4A-00600806D9B6), 
	oleautomation, 
	dual,
	hidden,
	nonextensible,
	helpstring("A collection of Privilege Overrides")
]
interface ISWbemPrivilegeSet : IDispatch
{
	/* These are used in the context of collections */
	[
		id(DISPID_NEWENUM), 
		propget, 
		restricted
	] 
	HRESULT _NewEnum (
		[out, retval] IUnknown **pUnk
		);

	[
		id(DISPID_VALUE),
		helpstring("Get a named Privilege from this collection")
	]
	HRESULT Item (
		[in] WbemPrivilegeEnum iPrivilege, 
		[out, retval] ISWbemPrivilege **objWbemPrivilege
		);

	[
		id(1),
		propget,
		helpstring("The number of items in this collection")	
	] 
	HRESULT Count (
		[out, retval] long *iCount
		);

	[
		id(2),
		helpstring("Add a Privilege to this collection")
	]
	HRESULT Add (
		[in] WbemPrivilegeEnum iPrivilege,
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,
		[out, retval] ISWbemPrivilege **objWbemPrivilege
		);

	[
		id(3),
		helpstring("Remove a Privilege from this collection")
	]
	HRESULT Remove (
		[in] WbemPrivilegeEnum iPrivilege
		);

	/* End of collection-specific members */
	[
		id(4),
		helpstring("Delete all items in this collection")
	]                
    HRESULT DeleteAll();        

	[
		id(5),
		helpstring("Add a named Privilege to this collection")
	]
	HRESULT AddAsString (
		[in] BSTR strPrivilege,
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsEnabled,
		[out, retval] ISWbemPrivilege **objWbemPrivilege
		);

};

/* ISWbemDateTime provides a datetime helper wrapper */
[
	object,
	local,
	uuid(5E97458A-CF77-11d3-B38F-00105A1F473A),
	oleautomation,
	dual,
	nonextensible,
	helpstring("A Datetime")
]
interface ISWbemDateTime : IDispatch
{
	[
		id(DISPID_VALUE),
		propget,
		helpstring("The DMTF datetime")
	] 
	HRESULT Value ([out, retval] BSTR *strValue);

	[
		id(DISPID_VALUE),
		propput
	]
	HRESULT Value ([in] BSTR strValue);

	[
		id(1),
		propget,
		helpstring("The Year component of the value (must be in the range 0-9999)")
	] 
	HRESULT Year ([out, retval] long *iYear);

	[
		id(1),
		propput
	]
	HRESULT Year ([in] long iYear);

	[
		id(2),
		propget,
		helpstring("Whether the Year component is specified")
	] 
	HRESULT YearSpecified ([out, retval] VARIANT_BOOL *bYearSpecified);

	[
		id(2),
		propput
	]
	HRESULT YearSpecified ([in] VARIANT_BOOL bYearSpecified);

	[
		id(3),
		propget,
		helpstring("The Month component of the value (must be in the range 1-12)")
	] 
	HRESULT Month ([out, retval] long *iMonth);

	[
		id(3),
		propput
	]
	HRESULT Month ([in] long iMonth);

	[
		id(4),
		propget,
		helpstring("Whether the Month component is specified")
	] 
	HRESULT MonthSpecified ([out, retval] VARIANT_BOOL *bMonthSpecified);

	[
		id(4),
		propput
	]
	HRESULT MonthSpecified ([in] VARIANT_BOOL bMonthSpecified);

	[
		id(5),
		propget,
		helpstring("The Day component of the value (must be in the range 1-31, or 0-999999 for interval values)")
	] 
	HRESULT Day ([out, retval] long *iDay);

	[
		id(5),
		propput
	]
	HRESULT Day ([in] long iDay);

	[
		id(6),
		propget,
		helpstring("Whether the Day component is specified")
	] 
	HRESULT DaySpecified ([out, retval] VARIANT_BOOL *bDaySpecified);

	[
		id(6),
		propput
	]
	HRESULT DaySpecified ([in] VARIANT_BOOL bDaySpecified);

	[
		id(7),
		propget,
		helpstring("The Hours component of the value (must be in the range 0-23)")
	] 
	HRESULT Hours ([out, retval] long *iHours);

	[
		id(7),
		propput
	]
	HRESULT Hours ([in] long iHours);

	[
		id(8),
		propget,
		helpstring("Whether the Hours component is specified")
	] 
	HRESULT HoursSpecified ([out, retval] VARIANT_BOOL *bHoursSpecified);

	[
		id(8),
		propput
	]
	HRESULT HoursSpecified ([in] VARIANT_BOOL bHoursSpecified);

	[
		id(9),
		propget,
		helpstring("The Minutes component of the value (must be in the range 0-59)")
	] 
	HRESULT Minutes ([out, retval] long *iMinutes);

	[
		id(9),
		propput
	]
	HRESULT Minutes ([in] long iMinutes);

	[
		id(10),
		propget,
		helpstring("Whether the Minutes component is specified")
	] 
	HRESULT MinutesSpecified ([out, retval] VARIANT_BOOL *bMinutesSpecified);

	[
		id(10),
		propput
	]
	HRESULT MinutesSpecified ([in] VARIANT_BOOL bMinutesSpecified);

	[
		id(11),
		propget,
		helpstring("The Seconds component of the value (must be in the range 0-59)")
	] 
	HRESULT Seconds ([out, retval] long *iSeconds);

	[
		id(11),
		propput
	]
	HRESULT Seconds ([in] long iSeconds);

	[
		id(12),
		propget,
		helpstring("Whether the Seconds component is specified")
	] 
	HRESULT SecondsSpecified ([out, retval] VARIANT_BOOL *bSecondsSpecified);

	[
		id(12),
		propput
	]
	HRESULT SecondsSpecified ([in] VARIANT_BOOL bSecondsSpecified);

	[
		id(13),
		propget,
		helpstring("The Microseconds component of the value (must be in the range 0-999999)")
	] 
	HRESULT Microseconds ([out, retval] long *iMicroseconds);

	[
		id(13),
		propput
	]
	HRESULT Microseconds ([in] long iMicroseconds);

	[
		id(14),
		propget,
		helpstring("Whether the Microseconds component is specified")
	] 
	HRESULT MicrosecondsSpecified ([out, retval] VARIANT_BOOL *bMicrosecondsSpecified);

	[
		id(14),
		propput
	]
	HRESULT MicrosecondsSpecified ([in] VARIANT_BOOL bMicrosecondsSpecified);

	[
		id(15),
		propget,
		helpstring("The UTC component of the value (must be in the range -720 to 720)")
	] 
	HRESULT UTC ([out, retval] long *iUTC);

	[
		id(15),
		propput
	]
	HRESULT UTC ([in] long iUTC);

	[
		id(16),
		propget,
		helpstring("Whether the UTC component is specified")
	] 
	HRESULT UTCSpecified ([out, retval] VARIANT_BOOL *bUTCSpecified);

	[
		id(16),
		propput
	]
	HRESULT UTCSpecified ([in] VARIANT_BOOL bUTCSpecified);

	[
		id(17),
		propget,
		helpstring("Indicates whether this value describes an absolute date and time or is an interval")
	] 
	HRESULT IsInterval ([out, retval] VARIANT_BOOL *bIsInterval);
	
	[
		id(17),
		propput
	]
	HRESULT IsInterval ([in] VARIANT_BOOL bIsInterval);	

	[
		id(18),
		helpstring("Retrieve value in Variant compatible (VT_DATE) format")
	]
	HRESULT GetVarDate (
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsLocal,
		[out, retval] DATE *dVarDate
	);
	
	[
		id(19),
		helpstring("Set the value using Variant compatible (VT_DATE) format")
	]
	HRESULT SetVarDate (
		[in] DATE dVarDate,
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsLocal
	);

	[
		id(20),
		helpstring("Retrieve value in FILETIME compatible string representation")
	]
	HRESULT GetFileTime (
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsLocal,
		[out, retval] BSTR *strFileTime
	);
	
	[
		id(21),
		helpstring("Set the value using FILETIME compatible string representation")
	]
	HRESULT SetFileTime (
		[in] BSTR strFileTime,
		[in, defaultvalue(TRUE)] VARIANT_BOOL bIsLocal
	);
};

/* ISWbemRefreshableItem defines an item in a refresher */
[
	object,
	local,
	uuid(5AD4BF92-DAAB-11d3-B38F-00105A1F473A),
	oleautomation,
	dual,
	nonextensible,
	helpstring("A single item in a Refresher")
]
interface ISWbemRefreshableItem : IDispatch
{
	[
		id(1),
		propget,
		helpstring("The index of this item in the parent refresher")	
	] 
	HRESULT Index (
		[out, retval] long *iIndex
		);

	[
		id(2),
		propget,
		helpstring("The parent refresher")	
	] 
	HRESULT Refresher (
		[out, retval] ISWbemRefresher **objWbemRefresher
		);

	[
		id(3),
		propget,
		helpstring("Whether this item represents a single object or an object set")	
	] 
	HRESULT IsSet (
		[out, retval] VARIANT_BOOL *bIsSet
		);

	[
		id(4),
		propget,
		helpstring("The object")	
	] 
	HRESULT Object (
		[out, retval] ISWbemObjectEx **objWbemObject
		);

	[
		id(5),
		propget,
		helpstring("The object set")	
	] 
	HRESULT ObjectSet (
		[out, retval] ISWbemObjectSet **objWbemObjectSet
		);

	[
		id(6),
		helpstring("Remove this item from the parent refresher")	
	] 
	HRESULT Remove (
		[in, defaultvalue(0)] long iFlags
		);
};

/* ISWbemRefresher provides an object refresher collection */
[
	object,
	local,
	uuid(14D8250E-D9C2-11d3-B38F-00105A1F473A),
	oleautomation,
	dual,
	nonextensible,
	helpstring("A Collection of Refreshable Objects")
]
interface ISWbemRefresher : IDispatch
{
	/* These are used in the context of collections */
	[
		id(DISPID_NEWENUM), 
		propget, 
		restricted
	] 
	HRESULT _NewEnum (
		[out, retval] IUnknown **pUnk
		);

	[
		id(DISPID_VALUE),
		helpstring("Get an item from this refresher")
	]
	HRESULT Item (
		[in] long iIndex, 
		[out, retval] ISWbemRefreshableItem **objWbemRefreshableItem
		);

	[
		id(1),
		propget,
		helpstring("The number of items in this refresher")	
	] 
	HRESULT Count (
		[out, retval] long *iCount
		);

	[
		id(2),
		helpstring("Add a refreshable instance to this refresher")
	]
	HRESULT Add (
		[in] ISWbemServicesEx *objWbemServices,
		[in] BSTR bsInstancePath,
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval] ISWbemRefreshableItem **objWbemRefreshableItem
		);

	[
		id(3),
		helpstring("Add a refreshable enumerator to this refresher")
	]
	HRESULT AddEnum (
		[in] ISWbemServicesEx *objWbemServices,
		[in] BSTR bsClassName,
		[in, defaultvalue(0)] long iFlags,
		[in, defaultvalue(0)] /*ISWbemNamedValueSet*/ IDispatch *objWbemNamedValueSet,
		[out, retval] ISWbemRefreshableItem **objWbemRefreshableItem
		);

	[
		id(4),
		helpstring("Remove an item from this refresher")
	]
	HRESULT Remove (
		[in] long iIndex,
		[in, defaultvalue(0)] long iFlags
		);

	[
		id(5),
		helpstring("Refresh all items in this collection")
	]
	HRESULT Refresh (
		[in, defaultvalue(0)] long iFlags
		);
		
	[
		id(6),
		propget,
		helpstring("Whether to attempt auto-reconnection to a remote provider")	
	] 
	HRESULT AutoReconnect (
		[out, retval] VARIANT_BOOL *bCount
		);

	[
		id(6),
		propput
	] 
	HRESULT AutoReconnect (
		[in] VARIANT_BOOL bCount
		);

	[
		id(7),
		helpstring("Delete all items in this collection")
	]                
    HRESULT DeleteAll();   
};


