cpp_quote("/*******************************************************************************/" ) cpp_quote("/* */" ) cpp_quote("/* Copyright © Microsoft Corporation. All rights reserved. */" ) cpp_quote("/* */" ) /* WBEMINT.IDL */ /* */ cpp_quote("/* WMI Core Internal Interfaces */" ) cpp_quote("/* */" ) cpp_quote("/*******************************************************************************/" ) import "objidl.idl"; import "oleidl.idl"; import "oaidl.idl"; import "wmiutils.idl"; import "wbemtran.idl"; import "wbemcli.idl"; import "wbemprov.idl"; typedef VARIANT WBEM_VARIANT; typedef [string] WCHAR* WBEM_WSTR; typedef [string] const WCHAR* WBEM_CWSTR; #define OPTIONAL in, unique //============================================================================== // // IWbemPropertySource // // Makes the object look like a property set to enable condition testing // (see IWbemCondition below). It is useful when a provider wants to test a // a condition without the expense of constructing IWbemClassObject. // // Used: by WBEMOM inside standard IWbemCondition implementation // Implemented: by providers who wish to check if their objects satisfy a // condition without constructing IWbemClassObjects. // //============================================================================== // // GetPropertyValue // // Retrieves the value of a property by name. In the case where embedded // objects may be present, the name can be a complex one, e.g. // "OldVersion.Manufacturer". // // PARAMETERS: // // WCHAR wszPropertyName The name of the property to retrieve // long lFlags Reserved. For future compatibility, use 0. // WBEM_VARIANT* pvValue Destination for the value of the property. The // caller must VariantClear it on success. // RETURNS: // // WBEM_S_NO_ERROR On Success // WBEM_E_NOT_FOUND No such property // WBEM_E_NOT_AVAILABLE The value is not available. Condition // evaluators should attempt to evaluate the // condition without it. // WBEM_E_FAILED Other critical error. // //============================================================================== interface _IWmiCoreHandle; interface _IWmiObject; typedef [v1_enum] enum tag_WBEM_GENERIC_FLAG_TYPE_INT { WBEM_FLAG_USE_SECURITY_DESCRIPTOR = 0x40000 } WBEM_GENERIC_FLAG_TYPE_INT; typedef [v1_enum] enum tag_CIMTYPE_ENUMERATION_INT { CIM_IUNKNOWN = 104 } CIMTYPE_ENUMERATION_INT; typedef enum { WBEM_NAME_ELEMENT_TYPE_PROPERTY = 0, WBEM_NAME_ELEMENT_TYPE_INDEX = 1 } WBEM_NAME_ELEMENT_TYPE; typedef enum { WBEM_CONN_TYPE_ADMINISTRATIVE = 1, // Always conncts, doesnt add to client count WBEM_CONN_TYPE_UNAUTHENTICATED = 2, // User is check for access, doesnt add to client list } WBEM_CONNECTION_TYPE; typedef [v1_enum] enum tag_WBEM_GET_SYSTEM_OBJECTS_FLAG { GET_SYSTEM_STD_OBJECTS = 0x1, // the normal list of std classes GET_SYSTEM_SECURITY_OBJECTS = 0x2, // old root\security namespace classes GET_SYSTEM_ROOT_OBJECTS = 0x4, // root specific objects GET_SYSTEM_STD_INSTANCES = 0x8, // __systemSecurity and __thisnamespace } tag_WBEM_GET_SYSTEM_OBJECTS_FLAG; typedef [switch_type(short)] union tag_NameElementUnion { [case(WBEM_NAME_ELEMENT_TYPE_PROPERTY)] WBEM_WSTR m_wszPropertyName; [case(WBEM_NAME_ELEMENT_TYPE_INDEX)] long m_lArrayIndex; } WBEM_NAME_ELEMENT_UNION; typedef struct tag_NameElement { short m_nType; [switch_is(m_nType)] WBEM_NAME_ELEMENT_UNION Element; } WBEM_NAME_ELEMENT; typedef struct _tag_WbemPropertyName { long m_lNumElements; [size_is(m_lNumElements)] WBEM_NAME_ELEMENT* m_aElements; } WBEM_PROPERTY_NAME; [restricted, local, object, uuid(e2451054-b06e-11d0-ad61-00c04fd8fdff)] interface IWbemPropertySource : IUnknown { HRESULT GetPropertyValue( [in] WBEM_PROPERTY_NAME* pName, [in] long lFlags, [in, unique, out] WBEM_WSTR* pwszCimType, [out] WBEM_VARIANT* pvValue); HRESULT InheritsFrom([in] WBEM_CWSTR wszClassName); }; //============================================================================== // // QL operators // //============================================================================== typedef enum _tag_Ql1ComparisonOperator { QL1_OPERATOR_NONE = 0, QL1_OPERATOR_EQUALS = 1, QL1_OPERATOR_NOTEQUALS, QL1_OPERATOR_GREATER, QL1_OPERATOR_LESS, QL1_OPERATOR_LESSOREQUALS, QL1_OPERATOR_GREATEROREQUALS, QL1_OPERATOR_LIKE, QL1_OPERATOR_UNLIKE, QL1_OPERATOR_ISA, QL1_OPERATOR_ISNOTA, QL1_OPERATOR_INV_ISA, QL1_OPERATOR_INV_ISNOTA, } WBEM_QL1_COMPARISON_OPERATOR; typedef enum _tag_Ql1Function { QL1_FUNCTION_NONE = 0, QL1_FUNCTION_UPPER, QL1_FUNCTION_LOWER } WBEM_QL1_FUNCTION; typedef enum _tag_Ql1TokenType { QL1_NONE = 0, QL1_OR = 1, QL1_AND, QL1_NOT, QL1_OP_EXPRESSION } WBEM_QL1_TOKEN_TYPE; typedef struct _tag_WbemQl1Token { long m_lTokenType; // WbemSql1TokenType WBEM_PROPERTY_NAME m_PropertyName; WBEM_PROPERTY_NAME m_PropertyName2; long m_lOperator; // WbemSql1ComparisonOperator WBEM_VARIANT m_vConstValue; long m_lPropertyFunction; // WbemSql1Function long m_lConstFunction; // WbemSql1Function long m_bQuoted; long m_bPropComp; } WBEM_QL1_TOKEN; typedef struct _tag_WbemQl1Tolerance { boolean m_bExact; double m_fTolerance; } WBEM_QL1_TOLERANCE; typedef enum tag_WBEM_EVENT_TYPE{ WBEM_EVENTTYPE_Invalid = 0, WBEM_EVENTTYPE_Extrinsic = 5, WBEM_EVENTTYPE_Timer, WBEM_EVENTTYPE_NamespaceCreation, WBEM_EVENTTYPE_NamespaceDeletion, WBEM_EVENTTYPE_NamespaceModification, WBEM_EVENTTYPE_ClassCreation, WBEM_EVENTTYPE_ClassDeletion, WBEM_EVENTTYPE_ClassModification, WBEM_EVENTTYPE_InstanceCreation, WBEM_EVENTTYPE_InstanceDeletion, WBEM_EVENTTYPE_InstanceModification, WBEM_EVENTTYPE_System } WBEM_EVENT_TYPE; typedef enum tag_WBEM_HOOK_FLAGS { WBEM_FLAG_INST_PUT = 0x01 , WBEM_FLAG_INST_DELETE = 0x02 , WBEM_FLAG_CLASS_PUT = 0x04 , WBEM_FLAG_CLASS_DELETE = 0x08 , WBEM_FLAG_DISABLE_WHEN_OWNER_UPDATE = 0x10 } WBEM_HOOK_FLAGS ; typedef [v1_enum] enum tag_WMI_THREAD_SECURITY_ORIGIN { WMI_ORIGIN_UNDEFINED = 0x0, WMI_ORIGIN_RPC = 0x1, // Obtain token from RPC server security WMI_ORIGIN_THREAD = 0x2, // Obtain token from thread/process WMI_ORIGIN_EXISTING = 0x4 // Obtain token from existing internal server security } WMI_THREAD_SECURITY_ORIGIN ; typedef [v1_enum] enum tag_WMI_CORE_HANDLE { WMI_HANDLE_TASK = 0x1, WMI_HANDLE_USER = 0x2, WMI_HANDLE_THREAD_SECURITY = 0x3 } WMI_CORE_HANDLE ; typedef enum tag_WMI_TASK_TYPE { WMICORE_TASK_NULL = 0, WMICORE_TASK_GET_OBJECT = 1, WMICORE_TASK_GET_INSTANCE = 2, WMICORE_TASK_PUT_INSTANCE = 3, WMICORE_TASK_DELETE_INSTANCE = 4, WMICORE_TASK_ENUM_INSTANCES = 5, WMICORE_TASK_GET_CLASS = 6, WMICORE_TASK_PUT_CLASS = 7, WMICORE_TASK_DELETE_CLASS = 8, WMICORE_TASK_ENUM_CLASSES = 9, WMICORE_TASK_EXEC_QUERY = 10, WMICORE_TASK_EXEC_METHOD = 11, WMICORE_TASK_OPEN = 12, WMICORE_TASK_OPEN_SCOPE = 13, WMICORE_TASK_OPEN_NAMESPACE = 14, WMICORE_TASK_OPEN_COLLECTION = 15, WMICORE_TASK_ADD = 16, WMICORE_TASK_REMOVE = 17, WMICORE_TASK_REFRESH_OBJECT = 18, WMICORE_TASK_RENAME_OBJECT = 19, WMICORE_TASK_ATOMIC_DYN_INST_GET = 20, WMICORE_TASK_ATOMIC_DYN_INST_ENUM = 21, WMICORE_TASK_ATOMIC_DYN_INST_QUERY = 22, WMICORE_TASK_ATOMIC_DYN_INST_PUT = 23, WMICORE_TASK_DYN_CLASS_ENUM = 24, WMICORE_TASK_EXEC_NOTIFICATION_QUERY = 25, // Bit mask ORed with above values. // ================================ WMICORE_TASK_TYPE_SYNC = 0x01000000, WMICORE_TASK_TYPE_SEMISYNC = 0x02000000, WMICORE_TASK_TYPE_ASYNC = 0x04000000, WMICORE_TASK_TYPE_PRIMARY = 0x10000000, WMICORE_TASK_TYPE_SUBTASK = 0x20000000, WMICORE_TASK_TYPE_DEPENDENT = 0x40000000 } WMI_TASK_TYPE; typedef enum tag_WMICORE_TASK_STATUS { WMICORE_TASK_STATUS_NEW, // this is 0 WMICORE_TASK_STATUS_CANCELLED, // Cancelled WMICORE_TASK_STATUS_SUSPENDED // Unused } WMICORE_TASK_STATUS; typedef [v1_enum] enum tag_WBEM_NOTIFICATION_FLAG_TYPE { WBEM_FLAG_MONITOR = 0x800 } WBEM_NOTIFICATION_FLAG_TYPE; typedef [v1_enum] enum tag_WBEM_CONNECT { WBEM_FLAG_CREDENTIALS_SPECIFIED = 0x1, WBEM_FLAG_CONNECT_SETUP_MODE = 0x2, WBEM_FLAG_CONNECT_CIM_COMPLIANCE_MODE = 0x4, WBEM_FLAG_OPEN_COLLECTION = 0x10, WBEM_FLAG_OPEN_SCOPE = 0x20, WBEM_FLAG_OPEN_NESTED_ONLY = 0x40, WBEM_FLAG_OPEN_NAMESPACE = 0x80, WBEM_FLAG_OPEN_VECTOR = 0x100, WBEM_FLAG_OPEN_ALLOW_NS_TRAVERSAL = 0x200, WBEM_FLAG_OPEN_ALLOW_MACHINE_TRAVERSAL = 0x400, } WBEM_CONNECT_FLAG_TYPE; typedef [v1_enum] enum tag_WBEM_GET_FLAGS { WBEM_FLAG_GET_DEFAULT = 0x0, WBEM_FLAG_SPAWN_INSTANCE = 0x1 } WBEM_GET_FLAGS; typedef [v1_enum] enum tag_WBEM_PUT_FLAGS { WBEM_FLAG_USE_CURRENT_TIME = 0x1, } WBEM_PUT_FLAGS; typedef [v1_enum] enum tag_WBEM_PUTEX_FLAGS { WBEM_FLAG_PUTEX_APPEND = 0x0, WBEM_FLAG_PUTEX_INSERTAT = 0x1, WBEM_MASK_PUTEX_OPERATION = 0x1 } WBEM_PUTEX_FLAGS; typedef [v1_enum] enum tag_WBEM_DELETEEX_FLAGS { WBEM_FLAG_PUTEX_DELETE = 0x0, WBEM_FLAG_PUTEX_DELETE_FIRST_MATCH = 0x1, WBEM_FLAG_DELETE_ALL_MATCHES = 0x2, WBEM_MASK_DELETEEX_OPERATION = 0x2 } WBEM_DELETEEX_FLAGS; typedef [v1_enum] enum tag_WBEM_MULTI_FLAG { WBEM_MULTI_FLAG_NO_OP = 0x0, WBEM_MULTI_FLAG_ARRAY_ALL = 0x1, WBEM_MULTI_FLAG_ARRAY_SUBRANGE = 0x2 } WBEM_MULTI_FLAG; typedef [v1_enum] enum tag_WBEMINTERNALSTATUS { // Non-error status codes. // ~~~~~~~~~~~~~~~~~~~~~~ WBEM_S_ARB_NOTHROTTLING = 0x41000, // Errors. // ~~~~~~~ WBEM_E_ARB_THROTTLE = 0x80043001, WBEM_E_ARB_CANCEL = 0x80043002, WBEM_E_CALL_CANCELLED_CLIENT = 0x80043003 } WBEMINTERNALSTATUS; typedef struct _tag_WmiInternalContext { unsigned __int64 m_IdentifyHandle ; unsigned long m_ProcessIdentifier ; } WmiInternalContext ; //============================================================================== //============================================================================== // // Event-provider specific interfaces. // //============================================================================== //============================================================================== [restricted, object, local, uuid(a658b5d6-021d-11d1-ad74-00c04fd8fdff)] interface IWbemDecorator : IUnknown { HRESULT DecorateObject([in] IWbemClassObject* pObject, WBEM_CWSTR wszNamespace); HRESULT UndecorateObject([in] IWbemClassObject* pObject); }; [restricted, local, object, uuid(a553f3f0-3805-11d0-b6b2-00aa003240c7)] interface IWbemEventSubsystem_m4 : IUnknown { HRESULT ProcessInternalEvent( [in] LONG lSendType, [in] LPCWSTR strReserved1, [in] LPCWSTR strReserved2, [in] LPCWSTR strGuidParam, [in] unsigned long dwReserved1, [in] unsigned long dwReserved2, [in] unsigned long dwNumObjects, [in, size_is(dwNumObjects)] _IWmiObject** apObjects, [in] IWbemContext* pContext ); HRESULT VerifyInternalEvent( [in] LONG lSendType, [in] LPCWSTR strReserved1, [in] LPCWSTR strReserved2, [in] LPCWSTR strReserved3, [in] unsigned long dwReserved1, [in] unsigned long dwReserved2, [in] unsigned long dwNumObjects, [in, size_is(dwNumObjects)] _IWmiObject** apObjects, [in] IWbemContext* pContext ); HRESULT RegisterNotificationSink( [in] LPCWSTR wszNamespace, [in] LPCWSTR wszQueryLanguage, [in] LPCWSTR wszQuery, [in] long lFlags, [in] IWbemContext* pContext, [in] IWbemObjectSink* pSink ); HRESULT RemoveNotificationSink( [in] IWbemObjectSink* pSink); HRESULT GetNamespaceSink( [in] LPCWSTR wszNamespace, [out] IWbemObjectSink** ppNamespaceSink ); HRESULT Initialize( [in] LPCWSTR wszServerName, [in] IWbemLocator* pAdminLocator, [in] IUnknown* pServices) ; HRESULT Shutdown(); HRESULT LastCallForCore([in] LONG lSystemShutDown); }; /*--------------------------------------------------------------------------- IWbemMetaData - this interface is used by the filter, installed in the event providers process, to obtain class information from WMI. -------------------------------------------------------------------------*/ [object, restricted, uuid(6c19be32-7500-11d1-ad94-00c04fd8fdff)] interface IWbemMetaData : IUnknown { // // Fetches the class identified by wszClassName. Context is any // context that the filter has while executing the operation causing // this method to be called. // HRESULT GetClass( [in, string] LPCWSTR wszClassName, [in] IWbemContext* pContext, [out] IWbemClassObject** ppClass); }; typedef DWORD WBEM_REMOTE_TARGET_ID_TYPE; typedef struct tag_WBEM_REM_TARGETS { long m_lNumTargets; [size_is(m_lNumTargets)] WBEM_REMOTE_TARGET_ID_TYPE* m_aTargets; } WBEM_REM_TARGETS; /*--------------------------------------------------------------------------- This interface is used by the filter proxy in the provider's process to indicate events/status back to ESS. The targets are the clients that are supposed to receive the event. --------------------------------------------------------------------------*/ [object, restricted, uuid(755f9da6-7508-11d1-ad94-00c04fd8fdff)] interface IWbemMultiTarget : IUnknown { // // Indicates Events back to ESS that are destined for multiple targets // A Security Descriptor can accompany the events describing what // security principals among the targets can actually receive the event. // HRESULT DeliverEvent( [in] ULONG dwNumEvents, [in, size_is(dwNumEvents)] IWbemClassObject** aEvents, [in, size_is(dwNumEvents)] WBEM_REM_TARGETS* aTargets, [in] long lSDLength, [in, size_is(lSDLength)] BYTE* pSD); // // Indicates Status back to ESS that is destined for multiple targets. // This method is not implemented and will return WBEM_E_UNEXPECTED. // HRESULT DeliverStatus( [in] long lFlags, [in] HRESULT hresStatus, [in, string] LPCWSTR wszStatus, [in] IWbemClassObject* pErrorObj, [in] WBEM_REM_TARGETS* pTargets, [in] long lSDLength, [in, size_is(lSDLength)] BYTE* pSD); }; /*--------------------------------------------------------------------------- IWbemEventProviderRequirements - this interface is used by an event provider to indicate requests back to the WMI Service. --------------------------------------------------------------------------*/ [object, restricted, uuid(755f9da7-7508-11d1-ad94-00c04fd8fdff)] interface IWbemEventProviderRequirements : IUnknown { // // Only flag supported is WBEM_REQUIREMENTS_RECHECK_SUBSCRIPTIONS. This // indicates to ESS to resync all the subscriptions with the provider. // Usually it does this to recheck security for all subscriptions. // HRESULT DeliverProviderRequest( [in] long lFlags); }; /*--------------------------------------------------------------------------- IWbemSmartMultiTarget - See IWbemMultiTarget for description of interface. This interface is used to represent a more efficient version of IWbemMultiTarget that removes redundant class data from the events. --------------------------------------------------------------------------*/ [object, restricted, uuid(37196B38-CCCF-11d2-B35C-00105A1F8177)] interface IWbemSmartMultiTarget : IUnknown { HRESULT DeliverEvent( [in] ULONG dwNumEvents, [in] ULONG dwBuffSize, [in, size_is(dwBuffSize)] byte* pBuffer, [in, size_is(dwNumEvents)] WBEM_REM_TARGETS* pTargets, [in] long lSDLength, [in, size_is(lSDLength)] BYTE* pSD); }; /*--------------------------------------------------------------------------- IWbemFetchSmartMultiTarget - This Interface is used to return a smart multi-target. It assists us when we need to get an enumerator but want to do so without causing AddRef problem with the Proxy Manager. ---------------------------------------------------------------------------*/ [restricted, object, uuid(37196B39-CCCF-11d2-B35C-00105A1F8177)] interface IWbemFetchSmartMultiTarget : IUnknown { HRESULT GetSmartMultiTarget( [out] IWbemSmartMultiTarget** ppSmartMultiTarget ); }; /*------------------------------------------------------------------------- IWbemFilterProxy - used for ESS to populate a provider's filter with the necessary definition and filters queries. ------------------------------------------------------------------------*/ [object, restricted, uuid(60e512d4-c47b-11d2-b338-00105a1f4aaf)] interface IWbemFilterProxy : IUnknown { // // Initializes the filter with callback sinks. MetaData param is used // to obtain class information from WMI. MultiTarget param is used to // indicate events that have made it through the filter. // HRESULT Initialize( [in] IWbemMetaData* pMetaData, [in] IWbemMultiTarget* pMultiTarget); // // Locks the proxy so that no events can't be processed by the filter. // Used by ESS when resync-ing the filter so that no events are lost. // HRESULT Lock(); // // Unlocks the proxy so that events can be processed by the filter. // HRESULT Unlock(); // // adds a consumer's filter to the filter tree for this proxy. // pContext is the context passed to the WMI client operation causing this // method to be called. // wszQuery is the actual filter. // Id identifies the consumer, it is used on callback. // HRESULT AddFilter( [in] IWbemContext* pContext, [in, string] LPCWSTR wszQuery, [in] WBEM_REMOTE_TARGET_ID_TYPE Id); // // Removes a consumer's filter from the filter tree for this proxy. // pContext is the context passed to the WMI client operation causing this // method to be called. // Id identifies the consumer, it is used on callback. // HRESULT RemoveFilter( [in] IWbemContext* pContext, [in] WBEM_REMOTE_TARGET_ID_TYPE Id); // // Removes all consumer's filters from the filter tree for this proxy. // pContext is the context passed to the WMI client operation causing this // method to be called. // HRESULT RemoveAllFilters( [in] IWbemContext* pContext); // // Adds a definition query to the filter tree for this proxy. // pContext is the context passed to the WMI client operation causing this // method to be called. // wszQuery is the definition query. // HRESULT AddDefinitionQuery( [in] IWbemContext* pContext, [in] LPCWSTR wszQuery); // // Removes all definition queries from the filter tree for this proxy. // pContext is the context passed to the WMI client operation causing this // method to be called. // HRESULT RemoveAllDefinitionQueries( [in] IWbemContext* pContext); // // Only allow utilization of the guarantee if the proxy's definition // matches the provider's definition. In other words, only when // the provider's registration has been successfully processed, // and the proxies are set up to reflect it, should utilization of // the guarantee be allowed. The reason for this is that an incomplete // source definition can cause bad things to happen when events are // evaluated using a filter that was optimized for that definition. // HRESULT AllowUtilizeGuarantee(); // // Disconnects this proxy from the stub. // HRESULT Disconnect(); }; interface IWbemFilterStub; [object, local, uuid(dddaa3dc-2907-41ad-9e74-a91b5af092d4)] interface IWbemLocalFilterProxy : IWbemFilterProxy { HRESULT SetStub( [in] IWbemFilterStub* pStub); HRESULT LocalAddFilter( [in] IWbemContext* pContext, [in, string] LPCWSTR wszQuery, [in] void* pParsedQuery, [in] WBEM_REMOTE_TARGET_ID_TYPE Id); HRESULT GetMainSink( [out] IWbemEventSink** ppSink); }; [object, restricted, uuid(6c19be34-7500-11d1-ad94-00c04fd8fdff)] interface IWbemFilterStub : IUnknown { HRESULT RegisterProxy( [in] IWbemFilterProxy* pProxy); HRESULT UnregisterProxy( [in] IWbemFilterProxy* pProxy); }; [restricted, uuid(04963311-c399-408e-ad51-05d01506eed0), object] interface _IWmiObjectSinkSecurity : IUnknown { HRESULT AddCallbackPrincipalSid( [in, size_is(cSid),unique] BYTE* pSid, [in] DWORD cSid ); }; typedef GUID REQUESTID; [restricted, local, object, uuid(a57be31e-efe3-11d0-ad71-00c04fd8fdff)] interface IWbemCausalityAccess : IUnknown { HRESULT GetRequestId([out] REQUESTID* pId); HRESULT IsChildOf([in] REQUESTID Id); HRESULT CreateChild([out] IWbemCausalityAccess** ppChild); HRESULT GetParentId([out] REQUESTID* pId); HRESULT GetHistoryInfo([out] long* plNumParents, [out] long* plNumSiblings); HRESULT MakeSpecial(); HRESULT IsSpecial(); }; //============================================================================== //============================================================================== // // Hi-perf specific interfaces. // //============================================================================== //============================================================================== interface _IWbemRefresherMgr; // Client and server side version typedef enum _WBEM_REFR_VERSION_NUMBER { WBEM_REFRESHER_VERSION = 2 } WBEM_REFR_VERSION_NUMBER; typedef enum _WBEM_INSTANCE_BLOB_TYPE { WBEM_BLOB_TYPE_DATA_TABLE_ONLY, WBEM_BLOB_TYPE_DATA_AND_HEAP, WBEM_BLOB_TYPE_ALL, WBEM_BLOB_TYPE_ERROR, // m_lBlobLength contains error code WBEM_BLOB_TYPE_ENUM } WBEM_INSTANCE_BLOB_TYPE; typedef struct _WBEM_REFRESHED_OBJECT { long m_lRequestId; long m_lBlobType; long m_lBlobLength; [size_is(m_lBlobLength)] byte* m_pbBlob; } WBEM_REFRESHED_OBJECT; [restricted, uuid(F1E9C5B2-F59B-11d2-B362-00105A1F8177)] interface IWbemRemoteRefresher : IUnknown { HRESULT RemoteRefresh( [in] long lFlags, [out] long* plNumObjects, [out, size_is(,*plNumObjects)] WBEM_REFRESHED_OBJECT** paObjects); HRESULT StopRefreshing( [in] long lNumIds, [in,size_is(lNumIds)] long* aplIds, [in] long lFlags); HRESULT GetGuid( [in] long lFlags, [out] GUID* pGuid ); }; typedef struct _WBEM_REFRESH_DIRECT_NAMES { [string] WCHAR* m_wszNamespace; [string] WCHAR* m_wszProviderName; } WBEM_REFRESH_DIRECT_NAMES; typedef struct _WBEM_REFRESH_INFO_CLIENT_LOADABLE { CLSID m_clsid; [string] WCHAR* m_wszNamespace; IWbemObjectAccess* m_pTemplate; } WBEM_REFRESH_INFO_CLIENT_LOADABLE; typedef struct _WBEM_REFRESH_INFO_REMOTE { IWbemRemoteRefresher* m_pRefresher; IWbemObjectAccess* m_pTemplate; GUID m_guid; } WBEM_REFRESH_INFO_REMOTE; typedef struct _WBEM_REFRESH_INFO_SHARED { [string] WCHAR* m_wszSharedMemoryName; IWbemRefresher* m_pRefresher; } WBEM_REFRESH_INFO_SHARED; typedef struct _WBEM_REFRESH_INFO_CONTINUOUS { [string] WCHAR* m_wszSharedMemoryName; } WBEM_REFRESH_INFO_CONTINUOUS; typedef struct _WBEM_REFRESH_INFO_DIRECT { CLSID m_clsid; WBEM_REFRESH_DIRECT_NAMES* m_pDirectNames; IWbemObjectAccess* m_pTemplate; _IWbemRefresherMgr* m_pRefrMgr; } WBEM_REFRESH_INFO_DIRECT; typedef struct _WBEM_REFRESH_INFO_NON_HIPERF { [string] WCHAR* m_wszNamespace; IWbemObjectAccess* m_pTemplate; } WBEM_REFRESH_INFO_NON_HIPERF; typedef enum _WBEM_REFRESH_TYPE { WBEM_REFRESH_TYPE_INVALID, WBEM_REFRESH_TYPE_DIRECT, WBEM_REFRESH_TYPE_CLIENT_LOADABLE, WBEM_REFRESH_TYPE_REMOTE, WBEM_REFRESH_TYPE_SHARED, WBEM_REFRESH_TYPE_CONTINUOUS, WBEM_REFRESH_TYPE_NON_HIPERF } WBEM_REFRESH_TYPE; typedef enum _WBEM_RECONNECT_TYPE { WBEM_RECONNECT_TYPE_OBJECT, WBEM_RECONNECT_TYPE_ENUM, WBEM_RECONNECT_TYPE_LAST, } WBEM_RECONNECT_TYPE; typedef [switch_type(long)] union _WBEM_REFRESH_INFO_UNION { [case (WBEM_REFRESH_TYPE_CLIENT_LOADABLE)] WBEM_REFRESH_INFO_CLIENT_LOADABLE m_ClientLoadable; [case (WBEM_REFRESH_TYPE_REMOTE)] WBEM_REFRESH_INFO_REMOTE m_Remote; [case (WBEM_REFRESH_TYPE_SHARED)] WBEM_REFRESH_INFO_SHARED m_Shared; [case (WBEM_REFRESH_TYPE_CONTINUOUS)] WBEM_REFRESH_INFO_CONTINUOUS m_Continuous; [case (WBEM_REFRESH_TYPE_DIRECT)] WBEM_REFRESH_INFO_DIRECT m_Direct; [case (WBEM_REFRESH_TYPE_NON_HIPERF)] WBEM_REFRESH_INFO_NON_HIPERF m_NonHiPerf; [case (WBEM_REFRESH_TYPE_INVALID)] HRESULT m_hres; } WBEM_REFRESH_INFO_UNION; typedef struct _WBEM_REFRESH_INFO { long m_lType; [switch_is(m_lType)] WBEM_REFRESH_INFO_UNION m_Info; long m_lCancelId; } WBEM_REFRESH_INFO; typedef struct _WBEM_REFRESHER_ID { [string] LPSTR m_szMachineName; DWORD m_dwProcessId; GUID m_guidRefresherId; } WBEM_REFRESHER_ID; typedef struct _WBEM_RECONNECT_INFO { long m_lType; [string] LPCWSTR m_pwcsPath; } WBEM_RECONNECT_INFO; typedef struct _WBEM_RECONNECT_RESULTS { long m_lId; HRESULT m_hr; } WBEM_RECONNECT_RESULTS; [restricted, uuid(2C9273E0-1DC3-11d3-B364-00105A1F8177)] interface IWbemRefreshingServices : IUnknown { HRESULT AddObjectToRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in, string] LPCWSTR wszPath, [in] long lFlags, [in] IWbemContext* pContext, [in] DWORD dwClientRefrVersion, [out] WBEM_REFRESH_INFO* pInfo, [out] DWORD* pdwSvrRefrVersion); HRESULT AddObjectToRefresherByTemplate( [in] WBEM_REFRESHER_ID* pRefresherId, [in] IWbemClassObject* pTemplate, [in] long lFlags, [in] IWbemContext* pContext, [in] DWORD dwClientRefrVersion, [out] WBEM_REFRESH_INFO* pInfo, [out] DWORD* pdwSvrRefrVersion); HRESULT AddEnumToRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in, string] LPCWSTR wszClass, [in] long lFlags, [in] IWbemContext* pContext, [in] DWORD dwClientRefrVersion, [out] WBEM_REFRESH_INFO* pInfo, [out] DWORD* pdwSvrRefrVersion); HRESULT RemoveObjectFromRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in] long lId, [in] long lFlags, [in] DWORD dwClientRefrVersion, [out] DWORD* pdwSvrRefrVersion); HRESULT GetRemoteRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in] long lFlags, [in] DWORD dwClientRefrVersion, [out] IWbemRemoteRefresher** ppRemRefresher, [out] GUID* pGuid, [out] DWORD* pdwSvrRefrVersion); HRESULT ReconnectRemoteRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in] long lFlags, [in] long lNumObjects, [in] DWORD dwClientRefrVersion, [in, size_is(lNumObjects)] WBEM_RECONNECT_INFO* apReconnectInfo, [in, out, size_is(lNumObjects)] WBEM_RECONNECT_RESULTS* apReconnectResults , [out] DWORD* pdwSvrRefrVersion); }; [restricted, local, uuid(61d629e4-e546-11d2-b33a-00105a1f4aaf)] interface IWbemInternalServices : IUnknown { HRESULT FindKeyRoot( [in, string] LPCWSTR wszClassName, [out] IWbemClassObject** ppKeyRootClass); HRESULT InternalGetClass( [in, string] LPCWSTR wszClassName, [out] IWbemClassObject** ppClass); HRESULT InternalGetInstance( [in, string] LPCWSTR wszPath, [out] IWbemClassObject** ppInstance); HRESULT InternalExecQuery( [in, string] LPCWSTR wszQueryLanguage, [in, string] LPCWSTR wszQuery, [in] long lFlags, [in] IWbemObjectSink* pSink); HRESULT InternalCreateInstanceEnum( [in, string] LPCWSTR wszClassName, [in] long lFlags, [in] IWbemObjectSink* pSink); HRESULT GetDbInstance( [in, string] LPCWSTR wszDbKey, [out] IWbemClassObject** ppInstance); HRESULT GetDbReferences( [in] IWbemClassObject* pEndpoint, [in] IWbemObjectSink* pSink); HRESULT InternalPutInstance( [in] IWbemClassObject* pInstance); HRESULT GetNormalizedPath( [in] BSTR pstrPath, [out] BSTR* pstrStandardPath); }; // // IWbemWCOSmartEnum // // This Interface is intended to provide alternate synchronous enumeration of // objects for IEnumWbemClassObject. If this is called, it calls the normal // ::Next function, then repackages the data into a BYTE array which must // be appropriateky unmarshaled on the receiving end. // // [restricted, object, uuid(423EC01E-2E35-11d2-B604-00104B703EFD)] interface IWbemWCOSmartEnum : IUnknown { HRESULT Next( [in] REFGUID proxyGUID, [in] LONG lTimeout, [in] ULONG uCount, [out] ULONG* puReturned, [out] ULONG* pdwBuffSize, [out, size_is(,*pdwBuffSize)] byte** pBuffer ); }; // // IWbemFetchSmartEnum // // This Interface is used to return a smart enumerator. It assists // us when we need to get an enumerator but want to do so without // causing AddRef problem with the Proxy Manager. // [restricted, object, uuid(1C1C45EE-4395-11d2-B60B-00104B703EFD)] interface IWbemFetchSmartEnum : IUnknown { HRESULT GetSmartEnum( [out] IWbemWCOSmartEnum** ppSmartEnum ); }; // // IWbemLoginClientID // // [restricted, object, uuid(d4781cd6-e5d3-44df-ad94-930efe48a887)] interface IWbemLoginClientID : IUnknown { HRESULT SetClientInfo( [in, unique, string ] LPWSTR wszClientMachine, [in] LONG lClientProcId, [in] LONG lReserved ); }; // // IWinmgmtMofCompiler // // // [local, object, uuid(C10B4772-4DA0-11d2-A2F5-00C04F86FB7D)] interface IWinmgmtMofCompiler : IUnknown { HRESULT WinmgmtCompileFile( [in, string] LPWSTR FileName, [in, string] LPWSTR ServerAndNamespace, [in] LONG lOptionFlags, // autocomp, check, etc [in] LONG lClassFlags, [in] LONG lInstanceFlags, [in] IWbemServices * pOverride, [in] IWbemContext * pCtx, [in, out] WBEM_COMPILE_STATUS_INFO * pInfo ); // lFlags correspond to all the available command-line flags. HRESULT WinmgmtCompileBuffer( [in] long BuffSize, [in, size_is(BuffSize)]BYTE * pBuffer, [in] LONG lOptionFlags, // autocomp, check, etc [in] LONG lClassFlags, [in] LONG lInstanceFlags, [in] IWbemServices * pOverride, [in] IWbemContext * pCtx, [in, out] WBEM_COMPILE_STATUS_INFO * pInfo ); // lFlags correspond to all the available command-line flags. }; // // IWinmgmtMofCompilerOOP it's exactly the same as above, // but it's remotable // // /////////////////////////////////////////////////////// [object, uuid(92b9503d-19c3-4181-9f42-57ffc1a4bf37)] interface IWinmgmtMofCompilerOOP : IUnknown { HRESULT WinmgmtCompileFile( [in, string, unique] LPWSTR FileName, [in, string, unique] LPWSTR ServerAndNamespace, [in] LONG lOptionFlags, // autocomp, check, etc [in] LONG lClassFlags, [in] LONG lInstanceFlags, [in, unique] IWbemServices * pOverride, [in, unique] IWbemContext * pCtx, [in, out, ref] WBEM_COMPILE_STATUS_INFO * pInfo ); // lFlags correspond to all the available command-line flags. HRESULT WinmgmtCompileBuffer( [in] long BuffSize, [in, size_is(BuffSize)]BYTE * pBuffer, [in] LONG lOptionFlags, // autocomp, check, etc [in] LONG lClassFlags, [in] LONG lInstanceFlags, [in, unique] IWbemServices * pOverride, [in, unique] IWbemContext * pCtx, [in, out, ref] WBEM_COMPILE_STATUS_INFO * pInfo ); } // Are strings ASCII or UNICODE? typedef enum tagWMI_STRING_FLAGS { WMIOBJECT_STRING_FLAG_ASCII = 0, WMIOBJECT_STRING_FLAG_UNICODE = 0x1, WMIOBJECT_STRING_FLAG_MASK = 0x1, } WMIOBJECT_STRING_FLAGS; // Get Object Flags, LoPart of 64-bit value typedef enum tagWMIOBJECT_GETOBJECT_LOFLAGS { WMIOBJECT_GETOBJECT_LOFLAG_ASSOCIATION = 0x1, WMIOBJECT_GETOBJECT_LOFLAG_DYNAMIC = 0x2, WMIOBJECT_GETOBJECT_LOFLAG_SINGLETON = 0x4, WMIOBJECT_GETOBJECT_LOFLAG_AMENDMENT = 0x8, WMIOBJECT_GETOBJECT_LOFLAG_LOCALIZED = 0x10, WMIOBJECT_GETOBJECT_LOFLAG_KEYED = 0x20, WMIOBJECT_GETOBJECT_LOFLAG_ABSTRACT = 0x40, WMIOBJECT_GETOBJECT_LOFLAG_HIPERF = 0x80, WMIOBJECT_GETOBJECT_LOFLAG_AUTOCOOK = 0x100, WMIOBJECT_GETOBJECT_LOFLAG_DECORATED = 0x200, WMIOBJECT_GETOBJECT_LOFLAG_LIMITED = 0x400, WMIOBJECT_GETOBJECT_LOFLAG_CLIENTONLY = 0x800, WMIOBJECT_GETOBJECT_LOFLAG_TINY = 0x1000, WMIOBJECT_GETOBJECT_LOFLAG_ALL = 0xFFFFFFFF } WMIOBJECT_GETOBJECT_LOFLAGS; // Get Property Flags, LoPart of 64-bit value typedef enum tagWMIOBJECT_GETPROPERTY_LOFLAGS { WMIOBJECT_GETPROPERTY_LOFLAG_KEY = 0x1, WMIOBJECT_GETPROPERTY_LOFLAG_INDEX = 0x2, WMIOBJECT_GETPROPERTY_LOFLAG_DYNAMIC = 0x4, WMIOBJECT_GETPROPERTY_LOFLAG_ALL = 0xFFFFFFFF } WMIOBJECT_GETPROPERTY_LOFLAGS; // Set Object Flags, LoPart of 64-bit value typedef enum tagWMIOBJECT_SETOBJECT_LOFLAGS { WMIOBJECT_SETOBJECT_LOFLAG_LIMITED = 0x1, WMIOBJECT_SETOBJECT_LOFLAG_CLIENTONLY = 0x2, WMIOBJECT_SETOBJECT_LOFLAG_LOCALIZED = 0x4, WMIOBJECT_SETOBJECT_LOFLAG_TINY = 0x8, WMIOBJECT_SETOBJECT_LOFLAG_ALL = 0xFFFFFFFF } WMIOBJECT_SETOBJECT_LOFLAGS; typedef enum tagWMIARRAY_FLAGS { WMIARRAY_FLAG_ALLELEMENTS = 0x1 } WMIARRAY_FLAGS; typedef enum tagWMIOBJECT_MERGEAMENDED_FLAGS { WMIOBJECT_MERGEAMENDED_FLAG_PARENTLOCALIZED = 0x1 } WMIOBJECT_MERGEAMENDED_FLAGS; typedef enum tagWMIOBJECT_FREEFORM_FLAGS { WMIOBJECT_FREEFORM_FLAG_WRITE_TO_INSTANCE = 0x1 } WMIOBJECT_FREEFORM_FLAGS; typedef enum tagWBEM_OBJINTERNALPARTS_INFO { WBEM_OBJ_DECORATION_PART = 0x1, WBEM_OBJ_INSTANCE_PART = 0x2, WBEM_OBJ_CLASS_PART = 0x4, WBEM_OBJ_CLASS_PART_INTERNAL = 0x8, WBEM_OBJ_CLASS_PART_SHARED = 0x10 } WBEM_OBJINTERNALPARTS_INFO; typedef enum tagWMIOBJECT_RECONCILE_FLAGS { WMIOBJECT_RECONCILE_FLAG_TESTRECONCILE = 0x1 } WMIOBJECT_RECONCILE_FLAGS; typedef enum tagWMIOBJECT_MERGE_FLAGS { WMIOBJECT_MERGE_FLAG_CLASS = 0x0, WMIOBJECT_MERGE_FLAG_INSTANCE = 0x1 } WMIOBJECT_MERGE_FLAGS; typedef enum tagWMIOBJECT_ENCODING_FLAGS { WMIOBJECT_FLAG_ENCODING_V1 = 0x1 } WMIOBJECT_ENCODING_FLAGS; typedef enum tagWMIOBJECT_BEGINENUMEX_FLAGS { WMIOBJECT_BEGINENUMEX_FLAG_GETEXTPROPS = 0x1 } WMIOBJECT_BEGINENUMEX_FLAGS; typedef enum tagWMIOBJECT_VALIDATEOBJECT_FLAGS { WMIOBJECT_VALIDATEOBJECT_FLAG_FORCE = 0x1 } WMIOBJECT_VALIDATEOBJECT_FLAGS; //*************************************************************************** // // _IWmiArray - Private Array Access interface -- DO NOT MODIFY THIS // WITHOUT CHECKING WITH SANJES AND/OR RAYMCC! [restricted, object, local, uuid(D471B667-6CF7-4a55-9B29-4F1E9FC06C72)] interface _IWmiArray : IUnknown { HRESULT Initialize( [in] long lFlags, [in] CIMTYPE cimtype, [in] ULONG uNumElements ); // Initializes the array. Number of initial elements as well // as the type (determines the size of each element) and dimension // currently only 1 is supported. HRESULT GetInfo( [in] long lFlags, [out] CIMTYPE* pcimtype, // Optional [out] ULONG* puNumElements // Optional ); HRESULT Empty( [in] long lFlags ); // Clears the array as well as internal data. HRESULT GetAt( [in] long lFlags, [in] ULONG uStartIndex, // Which Element [in] ULONG uNumElements, // How many Elements [in] ULONG uBuffSize, // Buffer Size in BYTES, not chars. [out] ULONG* puNumReturned, // Number of elements returned. [out] ULONG* puBuffSizeUsed, // Amount of buffer used [out] LPVOID pDest // Data Buffer ); // Returns the requested elements. Buffer must be large enough to hold // the element. Embedded objects returned as AddRef'd _IWmiObject pointers. // Strings are copied directly into the specified buffer and null-terminatead. UNICODE only. HRESULT SetAt( [in] long lFlags, [in] ULONG uStartIndex, // Which Element [in] ULONG uNumElements, // How many Elements [in] ULONG uBuffSize, // Buffer Size in BYTES, not chars. [in] LPVOID pDest // Data Buffer ); // Sets the specified elements. Buffer must supply data matching the CIMTYPE // of the Array. Embedded objects set as _IWmiObject pointers. // Strings accessed as LPCWSTRs and the 2-byte null is copied. HRESULT Append( [in] long lFlags, [in] ULONG uNumElements, // How many Elements [in] ULONG uBuffSize, // Buffer Size [in] LPVOID pDest // Data Buffer ); // Appends the specified elements. Buffer must supply data matching // the CIMTYPE of the Array. Embedded objects set as _IWmiObject pointers. // Strings accessed as LPCWSTRs and the 2-byte null is copied. HRESULT RemoveAt( [in] long lFlags, [in] ULONG uStartIndex, // Starting endex [in] ULONG uNumElements // How many Elements ); // Removes the specified elements from the array. Subseqent elements are copied back // to the starting point }; //*************************************************************************** // // _IWmiObjectAccessEx - internal interface exposing guts of our object BLOBs // Inherits from IWbemObjectAccess so regular functionality is available. // -- DO NOT MODIFY THIS WITHOUT CHECKING WITH SANJES AND/OR RAYMCC! [restricted, object, local, uuid(235FE06E-00E6-4990-A624-2D4DCD5EB63A)] interface _IWmiObjectAccessEx : IWbemObjectAccess { HRESULT GetPropertyHandleEx( [in] LPCWSTR pszPropName, [in] long lFlags, [out] CIMTYPE* puCimType, // optional [out] long* plHandle ); // Returns property handle for ALL types HRESULT SetPropByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uDataSize, [in] LPVOID pvData ); // Sets properties using a handle. If pvData is NULL, it NULLs the property. // Can set an array to NULL. To set actual data use the corresponding array // function HRESULT GetPropAddrByHandle( [in] long lHandle, [in] long lFlags, [out] ULONG* puFlags, // Datatype dependent flags [out] LPVOID *pAddress ); // Returns a pointer to a memory address containing the requested data // Caller should not write into the memory address. The memory address is // not guaranteed to be valid if the object is modified. // For String properties, puFlags will contain info on the string // For object properties, LPVOID will get back an _IWmiObject pointer // that must be released by the caller. Does not return arrays. // Supports __CLASS and __SUPERCLASS HRESULT GetArrayPropAddrByHandle( [in] long lHandle, [in] long lFlags, [out] ULONG* puNumElements, [out] LPVOID* pAddress ); // Returns a pointer directly to a memory address containing contiguous // elements. Limited to non-string/obj types HRESULT GetArrayPropInfoByHandle( [in] long lHandle, [in] long lFlags, [out] BSTR* pstrName, [out] CIMTYPE* pct, [out] ULONG* puNumElements // How many elements are available ); // Returns the number of elements available in an array property. HRESULT GetArrayPropElementByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uElement, [out] ULONG* puFlags, // Datatype dependent flags [out] ULONG* puNumElements, // How many elements are available [out] LPVOID* pAddress ); // Returns a pointer to a memory address containing the requested data // Caller should not write into the memory address. The memory address is // not guaranteed to be valid if the object is modified. // For String properties, puFlags will contain info on the string // For object properties, LPVOID will get back an _IWmiObject pointer // that must be released by the caller. HRESULT SetArrayPropElementByHandle( [in] long lHandle, // Property Handle [in] long lFlags, // Must be 0L [in] ULONG uElement, // Which element to set [in] ULONG uBuffSize, // The actual buffer size in bytes (ignored for CIM_OBJECT) [in] LPVOID pData // The actual data buffer ); // Sets the data at the specified array element. BuffSize must be appropriate based on the // actual element being set. Object properties require an _IWmiObject pointer. Strings must // be WCHAR null-terminated HRESULT RemoveArrayPropElementByHandle( [in] long lHandle, // Property Handle [in] long lFlags, // Must be 0L [in] ULONG uElement // Which element to remove ); // Removes the data at the specified array element. HRESULT GetArrayPropRangeByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uStartIndex, // Range Start Index [in] ULONG uNumElements, // Number of elements to get [in] ULONG uBuffSize, // Size of the buffer in bytes [out] ULONG* puNumReturned, // Number of elements returned [out] ULONG* puBuffUsed, // How much buffer was used [in,out] LPVOID pData // Storage to copy into ); // Gets a range of elements from inside an array. BuffSize must reflect uNumElements of the size of // element being set. Strings must be linear WCHAR strings separated by NULLs. Object properties // must consist of an array of _IWmiObject pointers. The range MUST fit within the bounds // of the current array. If lFlags is WMIARRAY_FLAG_ALLELEMENTS, we get all elements // from the starting index on HRESULT SetArrayPropRangeByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uStartIndex, // Range Start Index [in] ULONG uNumElements, // Number of elements to set [in] ULONG uBuffSize, // Size of the buffer in bytes [in] LPVOID pData // Storage to copy from ); // Sets a range of elements inside an array. BuffSize must reflect uNumElements of the size of // element being set. Strings must be linear WCHAR strings separated by NULLs. Object properties // must consist of an array of _IWmiObject pointers. The range MUST fit within the bounds // of the current array. If lFlags is WMIARRAY_FLAG_ALLELEMENTS, and the start index is 0, the // array will be sized/resized/etc. as needed to fit the requested range HRESULT RemoveArrayPropRangeByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uStartIndex, // Range Start Index [in] ULONG uNumElements // Number of elements to remove ); // Removes a range of elements from an array. The range MUST fit within the bounds // of the current array HRESULT AppendArrayPropRangeByHandle( [in] long lHandle, [in] long lFlags, [in] ULONG uNumElements, // Number of elements to append [in] ULONG uBuffSize, // Size of the buffer in bytes [in] LPVOID pData // Storage to copy from ); // Appends elements to the end of an array. BuffSize must reflect uNumElements of the size of // element being set. Strings must be linear WCHAR strings separated by NULLs. Object properties // must consist of an array of _IWmiObject pointers. HRESULT ReadProp( [in] LPCWSTR pszPropName, [in] long lFlags, [in] ULONG uBufSize, [out] CIMTYPE *puCimType, // optional [out] long *plFlavor, // optional [out] BOOL *pfIsNull, [out] ULONG *puBuffSizeUsed, [in, out] LPVOID pUserBuf ); // Assumes caller knows prop type; Supports all CIMTYPES // Strings are copied in-place WCHAR and null-terminated. // Objects come out as _IWmiObject pointers // Arrays come out as a pointer to _IWmiArray HRESULT WriteProp( [in] LPCWSTR pszPropName, [in] long lFlags, [in] ULONG uBufSize, // Size of the buffer [in] ULONG uNumElements, // Number of array elements [in] CIMTYPE uCimType, [in] LPVOID pUserBuf ); // Assumes caller knows prop type; Supports all CIMTYPES. // Strings MUST be null-terminated wchar_t arrays. // Objects are passed in as _IWmiObject pointers // Using a NULL buffer will set the property to NULL // Array properties must conform to array guidelines. Will // completely blow away an old array. HRESULT GetObjQual( [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [out] CIMTYPE *puCimType, // optional [out] ULONG *puQualFlavor, // optional [out] ULONG* puBuffSizeUsed, // optional [out] LPVOID pDestBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings are copied in-place and null-terminated. // Arrays come out as a pointer to IWmiArray HRESULT SetObjQual( [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [in] ULONG uNumElements, [in] CIMTYPE uCimType, [in] ULONG uQualFlavor, [in] LPVOID pUserBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings MUST be WCHAR // Arrays are set using _IWmiArray interface from Get HRESULT GetPropQual( [in] LPCWSTR pszPropName, [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [out] CIMTYPE *puCimType, [out] ULONG *puQualFlavor, [out] ULONG* puBuffSizeUsed, // optional [in, out] LPVOID pDestBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings MUST be WCHAR HRESULT SetPropQual( [in] LPCWSTR pszPropName, [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [in] ULONG uNumElements, [in] CIMTYPE uCimType, [in] ULONG uQualFlavor, [in] LPVOID pUserBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings MUST be WCHAR // Arrays are set using _IWmiArray interface from Get HRESULT GetMethodQual( [in] LPCWSTR pszMethodName, [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [out] CIMTYPE *puCimType, [out] ULONG *puQualFlavor, [out] ULONG* puBuffSizeUsed, // optional [in, out] LPVOID pDestBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings MUST be WCHAR HRESULT SetMethodQual( [in] LPCWSTR pszMethodName, [in] LPCWSTR pszQualName, [in] long lFlags, [in] ULONG uBufSize, [in] ULONG uNumElements, [in] CIMTYPE uCimType, [in] ULONG uQualFlavor, [in] LPVOID pUserBuf ); // Limited to numeric, simple null terminated string types and simple arrays // Strings MUST be WCHAR // Arrays are set using _IWmiArray interface from Get }; //*************************************************************************** // // _IWmiObject - internal interface exposing guts of our object BLOBs // Inherits from _IWmiObjectAccessEx so regular functionality is available. // -- DO NOT MODIFY THIS WITHOUT CHECKING WITH SANJES AND/OR RAYMCC! [restricted, object, local, uuid(B308C72B-7FEA-4c98-A459-7F5FCC3ED39F)] interface _IWmiObject : _IWmiObjectAccessEx { HRESULT CloneEx( [in] long lFlags, [in] _IWmiObject* pDestObject ); // Clones the current object into the supplied one. Reuses memory as // needed HRESULT CopyInstanceData( [in] long lFlags, [in] _IWmiObject* pSourceInstance ); // Copies instance data from source instance into current instance // Class Data must be exactly the same HRESULT QueryObjectFlags( [in] long lFlags, [in] unsigned __int64 qObjectInfoMask, [out] unsigned __int64 *pqObjectInfo ); // Returns flags indicating singleton, dynamic, association, etc. HRESULT SetObjectFlags( [in] long lFlags, [in] unsigned __int64 qObjectInfoOnFlags, [in] unsigned __int64 qObjectInfoOffFlags ); // Sets flags, including internal ones normally inaccessible. HRESULT QueryPropertyFlags( [in] long lFlags, [in] LPCWSTR pszPropertyName, [in] unsigned __int64 qPropertyInfoMask, [out] unsigned __int64 *pqPropertyInfo ); // Returns flags indicating key, index, etc. HRESULT IsParentClass( [in] long lFlags, [in] _IWmiObject* pClass ); // Checks if the current object is a child of the specified class (i.e. is Instance of, // or is Child of ) HRESULT CompareDerivedMostClass( [in] long lFlags, [in] _IWmiObject* pClass ); // Compares the derived most class information of two class objects. HRESULT MergeAmended( [in] long lFlags, [in] _IWmiObject* pAmendedClass ); // Merges in amended qualifiers from the amended class object into the // current object. If lFlags is WMIOBJECT_MERGEAMENDED_FLAG_PARENTLOCALIZED, // this means that the parent object was localized, but not the current, // so we need to prevent certain qualifiers from "moving over." HRESULT GetDerivation( [in] long lFlags, [in] ULONG uBufferSize, [out] ULONG* puNumAntecedents, [out] ULONG* puBuffSizeUsed, [out] LPWSTR pwstrUserBuffer ); // Retrieves the derivation of an object as an array of LPCWSTR's, each one // terminated by a NULL. Leftmost class is at the top of the chain HRESULT _GetCoreInfo( [in] long lFlags, [out] void** pvData ); // Returns core data. See SANJES or RAYMCC before implementing or calling // Old IWbemObjectInternals methods HRESULT QueryPartInfo( [out] DWORD *pdwResult ); HRESULT SetObjectMemory( [in] LPVOID pMem, [in] DWORD dwMemSize ); HRESULT GetObjectMemory( [out] LPVOID pDestination, [in] DWORD dwDestBufSize, [out] DWORD *pdwUsed ); HRESULT SetObjectParts( [in] LPVOID pMem, [in] DWORD dwDestBufSize, [in] DWORD dwParts ); HRESULT GetObjectParts( [out] LPVOID pDestination, [in] DWORD dwDestBufSize, [in] DWORD dwParts, [out] DWORD *pdwUsed ); HRESULT StripClassPart(); HRESULT SetClassPart( [in] LPVOID pClassPart, [in] DWORD dwSize ); HRESULT MergeClassPart( [in] IWbemClassObject *pClassPart ); HRESULT IsObjectInstance(); HRESULT SetDecoration( [in, string] LPCWSTR pwcsServer, [in, string] LPCWSTR pwcsNamespace ); HRESULT RemoveDecoration(); HRESULT CompareClassParts( [in] IWbemClassObject* pObj, [in] long lFlags ); HRESULT ClearWriteOnlyProperties(); HRESULT GetClassSubset( [in] DWORD dwNumNames, [in] LPCWSTR *pPropNames, [out] _IWmiObject **pNewClass ); // Creates a limited representation class for projection queries HRESULT MakeSubsetInst( [in] _IWmiObject *pInstance, [out] _IWmiObject** pNewInstance ); // Creates a limited representation instance for projection queries // "this" _IWmiObject must be a limited class HRESULT Unmerge( [in] long lFlags, [in] ULONG uBuffSize, [out] ULONG* puBuffSizeUsed, [in,out] LPVOID pData ); // Returns a BLOB of memory containing minimal data (local) HRESULT Merge( [in] long lFlags, [in] ULONG uBuffSize, [in] LPVOID pbData, [out] _IWmiObject** ppNewObj ); // Merges a blob with the current object memory and creates a new object HRESULT ReconcileWith( [in] long lFlags, [out] _IWmiObject* pNewObj ); // Reconciles an object with the current one. If WMIOBJECT_RECONCILE_FLAG_TESTRECONCILE // is specified this will only perform a test HRESULT GetKeyOrigin( [in] long lFlags, [in] DWORD dwNumChars, [out] DWORD* pdwNumUsed, [out] LPWSTR pwzClassName ); // Returns the name of the class where the keys were defined HRESULT GetKeyString( [in] long lFlags, [out] BSTR* pwzKeyString ); // Returns the key of the instance HRESULT GetNormalizedPath( [in] long lFlags, BSTR* pstrStandardPath ); // Returns a normalized path from the object HRESULT Upgrade( [in] _IWmiObject* pNewParentClass, [in] long lFlags, [out] _IWmiObject** ppNewChild ); // Upgrades class and instance objects HRESULT Update( [in] _IWmiObject* pOldChildClass, [in] long lFlags, [out] _IWmiObject** ppNewChildClass ); // Updates derived class object using the safe/force mode logic HRESULT BeginEnumerationEx( [in] long lFlags, [in] long lExtFlags ); // Allows special filtering when enumerating properties outside the // bounds of those allowed via BeginEnumeration(). HRESULT CIMTYPEToVARTYPE( [in] CIMTYPE ct, [out] VARTYPE* pvt ); // Returns a VARTYPE from a CIMTYPE HRESULT SpawnKeyedInstance( [in] long lFlags, [in] LPCWSTR pwszPath, [out] _IWmiObject** ppInst ); HRESULT ValidateObject( [in] long lFlags ); // Validates an object blob HRESULT GetParentClassFromBlob( [in] long lFlags, [in] ULONG uBuffSize, [in] LPVOID pbData, [out] BSTR* pbstrParentClass ); // Returns the parent class name from a BLOB HRESULT CloneAndDecorate( [in] long lFlags, [in,string] WCHAR * pszServer, [in,string] WCHAR * pszNamespace, [out] IWbemClassObject ** pDestObject); HRESULT MergeAndDecorate( [in] long lFlags, [in] ULONG uBuffSize, [in] LPVOID pbData, [in, string] WCHAR * pServer, [in, string] WCHAR * pNamespace, [out] _IWmiObject** ppNewObj ); }; // // _IWmiObjectFactory - internal object factory, allowing for creation of // specific types of WMI objects. // -- DO NOT MODIFY THIS WITHOUT CHECKING WITH SANJES AND/OR RAYMCC! [restricted, object, local, uuid(855A71D0-E5CD-46de-9707-17F2BD1ED694)] interface _IWmiObjectFactory : IUnknown { HRESULT Create( [in] IUnknown* pUnkOuter, [in] ULONG ulFlags, [in] REFCLSID rclsid, [in] REFIID riid, [out,iid_is(riid)] LPVOID* ppObj ); }; // // _IWbemUMIContextWrapper - Wrapper Interface to pull UMI related // properties from an IWbemContext and apply them to appropriate // interfaces. // -- DO NOT MODIFY THIS WITHOUT CHECKING WITH SANJES AND/OR RAYMCC! [restricted, object, local, uuid(90F22E4D-3266-4eac-A1B1-837AF5FEDEDD)] interface _IWbemUMIContextWrapper : IUnknown { HRESULT SetConnectionProps( [in] long lFlags, [in] IWbemContext* pContext, [in,out] IUnknown* pUnk ); // Sets the specified System Properties on a connection object HRESULT SetQueryProps( [in] long lFlags, [in] IWbemContext* pContext, [in,out] IUnknown* pUnk ); // Sets the specified System Properties on a UMI Query object HRESULT SetPropertyListProps( [in] long lFlags, [in] LPCWSTR pwszName, [in] IWbemContext* pContext, [in,out] IUnknown* pUnk ); // Sets the specified System Properties on a UMI Query object, filtering on the // specified name. }; //*************************************************************************** // // interface _IWmiCoreServices; interface _IWmiProvSS; interface _IWmiESS; interface _IWmiFinalizer; typedef enum { WMIESS_INIT_REPOSITORY_RECOVERED = 1 } WMIESS_FLAGS; [object, local, uuid(c0e3eeb3-b2ce-4a6a-9284-f38475cee099)] interface _IWmiESS : IUnknown { HRESULT Initialize( [in] long lFlags, [in] IWbemContext *pCtx, [in] _IWmiCoreServices *pSvc ); HRESULT ExecNotificationQuery( [in] LPCWSTR pszNamespace, [in] LPCWSTR pszQueryText, [in] long lFlags, [in] IWbemContext* pContext, [in] IWbemObjectSink* pSink ); HRESULT CancelAsyncCall( [in] IWbemObjectSink* pSink ); HRESULT QueryObjectSink( [in] LPCWSTR pszNamespace, [out] IWbemObjectSink** ppNamespaceSink ); }; // UMI Object wrapper flags typedef enum _IWMIPROVSSSINK_FLAGS { _IWMIPROVSSSINK_FLAGS_LOAD = 0x1 , _IWMIPROVSSSINK_FLAGS_UNLOAD = 0x2 , _IWMIPROVSSSINK_FLAGS_RELOAD = 0x3 } _IWMIPROVSSSINK_FLAGS; [object, uuid(2a504ca2-ca90-4731-87bc-6e99ca2019af) ] interface _IWmiProvSSSink : IUnknown { HRESULT Synchronize ( long lFlags, IWbemContext* pContext, LPCWSTR wszNamespace, LPCWSTR wszProvider ); }; [object, uuid(e8107bdf-baaf-4c7c-bb5f-9d732e8d8f07)] interface _IWmiProvSS: IUnknown { HRESULT Initialize( [in] long lFlags, [in] IWbemContext *pCtx, [in] _IWmiCoreServices *pSvc ); HRESULT Create( [in] IWbemServices *pCore, // Namespace ptr [in] long lFlags, [in] IWbemContext *pContext, [in,string] LPCWSTR pNamespacePath, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); HRESULT RegisterNotificationSink( [in] long lFlags, [in] IWbemContext *pContext, [in] _IWmiProvSSSink* pSink ); HRESULT UnRegisterNotificationSink( [in] long lFlags, [in] IWbemContext *pContext, [in] _IWmiProvSSSink* pSink ); HRESULT CreateRefresherManager( [in] IWbemServices *pCore, // Namespace ptr [in] long lFlags, [in] IWbemContext *pContext, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); }; //*************************************************************************** [object, local, restricted, uuid(6d8d984b-9965-4023-921a-610b348ee54e)] interface _IWmiUserHandle : _IWmiCoreHandle { }; [object, local, restricted, uuid(52631080-ab99-46f4-b3c4-da127b94bed5)] interface _IWmiConnectionHandle : _IWmiCoreHandle { }; //*************************************************************************** [object, local, uuid(dc9a2bf5-c244-4a01-9206-f28cd51a3c3d)] interface _IWmiThreadSecHandle : _IWmiCoreHandle { HRESULT GetTokenOrigin ( [out] WMI_THREAD_SECURITY_ORIGIN *a_Origin ) ; /* * Analyzes the stored security token, tells caller what * impersonation level would occur */ HRESULT GetImpersonation ( [out] DWORD *a_Level ) ; /* * Analyzes the stored security token, tells caller what * impersonation level would occur */ HRESULT GetAuthentication ( [out] DWORD *a_Level ) ; /* * Domain\user of the thread.security handle */ HRESULT GetUser ( [in,out] ULONG *a_Size , [in,out] LPWSTR a_Buffer ) ; /* * Sid of the thread.security handle */ HRESULT GetUserSid ( [in,out] ULONG *a_Size , [in,out] PSID a_Sid ) ; /* * This is actually a PLUID, but LUID isn't defined in std idls yet */ HRESULT GetAuthenticationLuid ( [out] LPVOID a_Luid ) ; /* * Returns the 'real' thread token * Caller must call CloseHandle (). * return WBEM_E_NO_TOKEN if no token */ HRESULT GetToken ( [out] HANDLE *a_ThreadToken ) ; } ; //*************************************************************************** [object, local, uuid(b19f2ce0-5df4-40e5-8b1d-dc5f3cf39d65)] interface _IWmiCallSec : IUnknown { /* * Analyzes the calling thread, tells caller the * current impersonation level */ HRESULT GetImpersonation ( [out] DWORD *a_Level ) ; /* * Domain\user of the calling thread */ HRESULT GetUser ( [in,out] ULONG *a_Size , [in,out] LPWSTR a_Buffer ) ; /* * Sid of the calling thread. */ HRESULT GetUserSid ( [in,out] ULONG *a_Size , [in,out] PSID a_Sid ) ; /* * This is actually a PLUID, but LUID isn't defined in std idls yet */ HRESULT GetAuthenticationLuid ( [out] LPVOID a_Luid ) ; /* * Get or manufacture an internal thread security token */ HRESULT GetThreadSecurity ( [in] WMI_THREAD_SECURITY_ORIGIN a_Origin , [out] _IWmiThreadSecHandle **a_ThreadSecurity ) ; /* * Set the current internal thread security.token */ HRESULT SetThreadSecurity ( [in] _IWmiThreadSecHandle *a_ThreadSecurity ) ; } ; //*************************************************************************** [object,uuid(07435309-D440-41B7-83F3-EB82DB6C622F)] interface _IWmiProviderHost : IUnknown { HRESULT GetObject ( [in] REFCLSID rclsid , [in] long lFlags, [in] IWbemContext *pContext, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ) ; HRESULT GetProcessIdentifier ( [out] DWORD *a_ProcessIdentifier ) ; } ; typedef enum { e_Hosting_Undefined = 0 , e_Hosting_WmiCore , e_Hosting_WmiCoreOrSelfHost , e_Hosting_SelfHost , e_Hosting_Decoupled , e_Hosting_SharedLocalSystemHost , e_Hosting_SharedLocalSystemHostOrSelfHost , e_Hosting_SharedLocalServiceHost , e_Hosting_SharedNetworkServiceHost , e_Hosting_SharedUserHost , e_Hosting_NonCom } Enum_Hosting; //*************************************************************************** [object,uuid(21CD80A2-B305-4f37-9D4C-4534A8D9B568)] interface _IWmiProviderFactory : IUnknown { HRESULT GetHostedProvider ( [in] long lFlags, [in] IWbemContext *pContext , [in,unique] GUID *a_TransactionIdentifier, [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in,string,unique] LPCWSTR pPath, [in,string] LPCWSTR pName, [in] ULONG uHost, [in,string,unique] LPCWSTR pHostingGroup, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); HRESULT GetClassProvider ( [in] long lFlags, [in] IWbemContext *pContext , [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in,string] LPCWSTR pPath, [in] IWbemClassObject *pSuperclass, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); HRESULT GetProvider ( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [in] IWbemContext *pContext , [in,unique] GUID *a_TransactionIdentifier, [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in,string,unique] LPCWSTR pPath, [in,string] LPCWSTR pName, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); HRESULT GetDynamicPropertyResolver ( [in] long lFlags, [in] IWbemContext *pContext, [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); HRESULT GetDecoupledProvider ( [in] long lFlags, [in] IWbemContext *pContext , [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in,string] LPCWSTR pPath, [in,string] LPCWSTR pName, [in] REFIID riid, [out, iid_is(riid)] void **pInterface ); }; [object, uuid(BAC6B661-167E-4957-AD77-286AB256585E)] interface _IWmiDynamicPropertyResolver : IUnknown { HRESULT Read( [in] IWbemContext *a_Context, [in] IWbemClassObject *a_Class, [in,out] IWbemClassObject **a_Instance ); HRESULT Write( [in] IWbemContext *a_Context, [in] IWbemClassObject *a_Class, [in] IWbemClassObject *a_Instance ); } ; [object,uuid(5fba5051-3124-4112-b723-46bfbaf1d622)] interface _IWmiProviderInitialize : IUnknown { HRESULT Initialize ( [in] long a_Flags , [in] IWbemContext *a_Context , [in,unique] GUID *a_TransactionIdentifier, [in,string,unique] LPCWSTR a_User, [in,string,unique] LPCWSTR a_Locale, [in,string] LPCWSTR a_Namespace , [in] IWbemServices *a_Repository , [in,unique] IWbemServices *a_Service , [in] IWbemProviderInitSink *a_InitializeSink ) ; HRESULT WaitProvider ( [in] IWbemContext *a_Context , [in] ULONG a_Timeout ) ; HRESULT GetInitializeResult () ; HRESULT IsPerUserInitialization ( [out] BOOL *a_Value ) ; HRESULT IsPerLocaleInitialization ( [out] BOOL *a_Value ) ; HRESULT GetHosting ( [out] ULONG *a_Value ) ; HRESULT GetHostingGroup ( [out,string] BSTR *a_Value ) ; HRESULT IsInternal ( [out] BOOL *a_Value ) ; } ; [object,uuid(b1b55910-8ba0-47a5-a16e-2b733b1d987c)] interface _IWmiProviderStack : IUnknown { HRESULT DownLevel ( [in] long a_Flags , [in] IWbemContext *a_Context , [in] REFIID riid, [out, iid_is(riid)] void **pInterface ) ; } ; [object,uuid(06413D98-405C-4a5a-8D6F-19B8B7C6ACF7)] interface _IWmiProviderFactoryInitialize : IUnknown { HRESULT Initialize ( [in,unique] _IWmiProvSS *a_SubSystem , [in,unique] _IWmiProviderFactory *a_OuterFactory , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Namespace , [in] IWbemServices *a_Repository , [in,unique] IWbemServices *a_Service ) ; } ; [object,uuid(fec1b0ac-5808-4033-a915-c0185934581e)] interface _IWmiProviderSite : IUnknown { HRESULT GetSite ( [out] DWORD *a_ProcessIdentifier ) ; HRESULT SetContainer ( [in,unique] IUnknown *a_Container ) ; } ; [object,uuid(eb658b8a-7a64-4ddc-9b8d-a92610db0206)] interface _IWmiProviderQuota : IUnknown { HRESULT Violation ( [in] long a_Flags , [in] IWbemContext *a_Context , [in] IWbemClassObject *a_Object ) ; } ; [object,uuid(48ff3109-a366-4b56-b340-01fae758ba64)] interface _IWmiProviderAbnormalShutdown : IUnknown { HRESULT AbnormalShutdown () ; } ; [object,uuid(f0e4edde-475a-498a-93d7-d4347f68a8f3)] interface _IWmiProviderCache : IUnknown { HRESULT Expel ( [in] long a_Flags , [in] IWbemContext *a_Context ) ; HRESULT ForceReload () ; } ; typedef enum { WBEM_PROVIDER_CONFIGURATION_CLASS_ID_INSTANCE_PROVIDER_REGISTRATION = 0 } WBEM_PROVIDER_CONFIGURATION_CLASS_ID ; typedef enum { WBEM_PROVIDER_CONFIGURATION_PROPERTY_ID_EXTENDEDQUERY_SUPPORT = 0 } WBEM_PROVIDER_CONFIGURATION_PROPERTY_ID ; [object,uuid(6b3fc272-bf37-4968-933a-6df9222a2607)] interface _IWmiProviderConfiguration : IUnknown { HRESULT Get ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemObjectSink *a_Sink ) ; HRESULT Enumerate ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in] IWbemObjectSink *a_Sink ) ; HRESULT Set ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemClassObject *a_OldObject , [in] IWbemClassObject *a_NewObject ) ; HRESULT Deleted ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemClassObject *a_Object ) ; HRESULT Shutdown ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in] ULONG a_MilliSeconds ) ; HRESULT Call ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in,string] LPCWSTR a_Method, [in] IWbemClassObject *a_InParams, [in] IWbemObjectSink *a_Sink ) ; HRESULT Query ( [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in] WBEM_PROVIDER_CONFIGURATION_CLASS_ID a_ClassIdentifier , [in] WBEM_PROVIDER_CONFIGURATION_PROPERTY_ID a_PropertyIdentifer , [in,out] VARIANT *a_Value ) ; } ; [object,uuid(484e3ece-1f81-4591-b9d4-943ba13b609d)] interface _IWmiProviderLoad : IUnknown { HRESULT Unload ( [in] long a_Flags , [in] IWbemContext *a_Context ) ; HRESULT Load ( [in] long a_Flags , [in] IWbemContext *a_Context ) ; } [object,uuid(41aa40e6-2fba-4e80-ade9-34306567206d)] interface _IWmiProviderSubsystemRegistrar : IUnknown { HRESULT Register ( [in] long a_Flags , [in] IWbemContext *a_Context , [in,unique] LPCWSTR a_User , [in,unique] LPCWSTR a_Locale , [in] LPCWSTR a_Scope , [in] LPCWSTR a_Registration , [in] DWORD a_ProcessIdentifier , [in] IUnknown *a_Unknown , [in] GUID a_Identity ) ; HRESULT UnRegister ( [in] long a_Flags , [in] IWbemContext *a_Context , [in,unique] LPCWSTR a_User , [in,unique] LPCWSTR a_Locale , [in] LPCWSTR a_Scope , [in] LPCWSTR a_Registration , [in] GUID a_Identity ) ; } ; //*************************************************************************** // This is obtained by a QI from IWbemContext typedef enum { WMI_CTX_ID_ORIGIN = 1, WMI_CTX_CLIENT_TYPE = 2, } WMI_CTX_ID_TYPE; typedef enum { // FOR WMI_CTX_ID_ORIGIN WMI_CTX_INF_ORIGINAL = 1, WMI_CTX_INF_DEPENDENT = 2, WMI_CTX_INF_TASK_ID = 3, // FOR WMI_CTX_ID_CLIENT_TYPE WMI_CTX_INF_CORE = 1, WMI_CTX_INF_INPROC_PROVIDER = 2, WMI_CTX_INF_REMOTE_PROVIDER = 3, WMI_CTX_INF_CLIENT = 4, WMI_CTX_INF_ESS = 5, WMI_CTX_INF_PROVSS = 6 } WMI_CTX_INFO; //*************************************************************************** typedef enum { WMI_HOOK_FLAG_ORIGINAL_OBJECT = 1, WMI_HOOK_FLAG_NEW_OBJECT = 2, WMI_CORE_FLAG_INSTANCE_HOOK = 0x1, WMI_CORE_FLAG_CLASS_HOOK = 0x2 } WMI_HOOK_FLAG_TYPE; // Hook status enum values // Moved here from wbemcli.idl (RAID 278480). typedef [v1_enum] enum tag_WBEMHOOKSTATUS { WBEM_S_NO_POSTHOOK = 0x40011, WBEM_S_POSTHOOK_WITH_BOTH = 0x40012, WBEM_S_POSTHOOK_WITH_NEW = 0x40013, WBEM_S_POSTHOOK_WITH_STATUS = 0x40014, WBEM_S_POSTHOOK_WITH_OLD = 0x40015, WBEM_S_REDO_PREHOOK_WITH_ORIGINAL_OBJECT = 0x40016 } WBEM_HOOK_STATUS; [object, local, uuid(76cc24d6-e776-42bc-9a09-025920f4f486)] interface _IWmiCoreWriteHook : IUnknown { HRESULT PrePut( [in] long lFlags, // WBEM_FLAG_INST_PUT, WBEM_FLAG_CLASS_PUT [in] long lUserFlags, // Copy of flags in user API [in] IWbemContext *pCtx, // Copy of context object, may be NULL [in] IWbemPath *pPath, // Optional [in] LPCWSTR pszNamespace, // Always present [in] LPCWSTR pszClass, // Always present [in] _IWmiObject *pCopy // Always present ); // Return WBEM_E_VETO_PUT // WBEM_S_POSTHOOK_WITH_STATUS // WBEM_S_POSTHOOK_WITH_NEW // WBEM_S_POSTHOOK_WITH_BOTH // WBEM_S_NO_POSTHOOK HRESULT PostPut( [in] long lFlags, // WBEM_FLAG_INST_PUT, WBEM_FLAG_CLASS_PUT [in] HRESULT hRes, // Result of put [in] IWbemContext *pCtx, // Copy of context object, may be NULL [in] IWbemPath *pPath, // Optional [in] LPCWSTR pszNamespace, // Always present [in] LPCWSTR pszClass, // Always present [in] _IWmiObject *pNew, // New copy (based on return code of PrePut) [in] _IWmiObject *pOld // Old (based on return code of PrePut) ); // Must return WBEM_S_NO_ERROR HRESULT PreDelete( [in] long lFlags, [in] long lUserFlags, [in] IWbemContext *pCtx, [in] IWbemPath *pPath, // Required [in] LPCWSTR pszNamespace, // Required [in] LPCWSTR pszClass // Required ); // Return WBEM_E_VETO_DELETE // WBEM_S_POSTHOOK_WITH_STATUS // WBEM_S_POSTHOOK_WITH_OLD // WBEM_S_NO_POSTHOOK HRESULT PostDelete( [in] long lFlags, // WBEM_FLAG_CLASS_DELETE, WBEM_FLAG_INST_DELETE [in] HRESULT hRes, // Result of put [in] IWbemContext *pCtx, [in] IWbemPath *pPath, // Required [in] LPCWSTR pszNamespace, // Required [in] LPCWSTR pszClass, // Required [in] _IWmiObject *pOld // Based on return of PreDelete ); // Must return WBEM_S_NO_ERROR }; //*************************************************************************** // [object, local, uuid(69a4735b-6328-436b-8d7f-0a641559c585)] interface _IWmiQuery : IWbemQuery { HRESULT Dump([in] LPSTR pszFile); }; //*************************************************************************** // // [restricted, object, local,uuid(43F684C8-3A13-4fab-89D8-D47C60F83715)] interface _IWmiArbitratee : IUnknown { HRESULT SetOperationResult( [in] ULONG uFlags, [in] HRESULT hRes ); HRESULT SetTaskHandle( [in] _IWmiCoreHandle *phTask ); HRESULT DumpDebugInfo( [in] ULONG uFlags, [in] const BSTR strFile ); }; //*************************************************************************** // // [restricted, object, local,uuid(41074D24-7C24-4c4b-B8E8-94DA3466FCCD)] interface _IWmiArbitratedQuery : IUnknown { HRESULT IsMerger( void ); }; typedef enum tag_WMIARB_FLAG_TYPE { WMIARB_REQUEST_NULL = 0x0, WMIARB_REQUEST_CONTINUATION = 0x1, WMIARB_REQUEST_APPROVAL = 0x2, WMIARB_CALL_CANCELLED_CLIENT = 0x4, WMIARB_CALL_CANCELLED_THROTTLING = 0x8 } WMIARB_FLAG_TYPE; [restricted, object, local,uuid(f99a3ec1-8329-4d03-ab7a-797410bcc98e)] interface _IWmiArbitrator : IUnknown { HRESULT RegisterTask( [in] _IWmiCoreHandle *phTask ); HRESULT UnregisterTask( [in] _IWmiCoreHandle *phTask ); HRESULT RegisterUser( [in] _IWmiCoreHandle *phUser ); HRESULT UnregisterUser( [in] _IWmiCoreHandle *phUser ); HRESULT CheckTask( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTask ); HRESULT TaskStateChange( [in] ULONG uNewState, // Duplicate of the state in the task handle itself [in] _IWmiCoreHandle *phTask ); HRESULT CancelTasksBySink( [in] ULONG uFlags, [in] REFIID riid, [in, iid_is(riid)] LPVOID pSink // IWbemObjectSink or IWbemObjectSinkEx ); HRESULT CheckThread( [in] ULONG uFlags ); HRESULT CheckUser( [in] ULONG uFlags, [in] _IWmiUserHandle *phUser ); HRESULT CancelTask( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTtask ); HRESULT RegisterThreadForTask( [in] _IWmiCoreHandle *phTask ); HRESULT UnregisterThreadForTask( [in] _IWmiCoreHandle *phTask ); HRESULT Maintenance(); HRESULT RegisterFinalizer( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTask, [in] _IWmiFinalizer *pFinal ); HRESULT RegisterNamespace( [in] _IWmiCoreHandle *phNamespace ); HRESULT UnregisterNamespace( [in] _IWmiCoreHandle *phNamespace ); HRESULT ReportMemoryUsage( [in] ULONG uFlags, [in] LONG lDelta, [in] _IWmiCoreHandle *phTask ); HRESULT Throttle( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTask ); HRESULT RegisterArbitratee( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTask, [in] _IWmiArbitratee *pArbitratee ); HRESULT UnRegisterArbitratee( [in] ULONG uFlags, [in] _IWmiCoreHandle *phTask, [in] _IWmiArbitratee *pArbitratee ); // HRESULT Shutdown(); }; //Valid values for the _IWmiFinalizer::Configure uConfigID parameter typedef enum { WMI_FNLZR_FLAG_FAST_TRACK = 0, WMI_FNLZR_FLAG_DECOUPLED = 1, WMI_FNLZR_FLAG_CANCEL = 2 } WMI_FNLZR_CFG_TYPE; //Values used in the _IWmiFinalizer::SetResultObject uFlags parameter typedef enum { WMI_FNLZR_UNARY_OBJECT = 0, WMI_FNLZR_RESULT_SET_OBJECT = 1, WMI_FNLZR_STATUS_OBJECT = 2, WMI_FNLZE_SET_OBJECT = 3 //Internal to the finalizer. Takes an IWbemObjectSinkEx::Set parameters } WMI_FNLZE_RESULT_TYPE; typedef enum { WMI_FNLZR_STATE_NO_INPUT = 0, // No Indicate() or SetStatus() calls so far WMI_FNLZR_STATE_ACTIVE = 1, // At least one Indicate() so far WMI_FNLZR_STATE_CORE_COMPLETE = 2, // SetStatus was received, but not finished delivering to client WMI_FNLZR_STATE_CLIENT_COMPLETE = 3, // Final SetStatus delivered to client WMI_FNLZR_STATE_CLIENT_DEAD = 4, // Client not responding, considered dead WMI_FNLZR_STATE_PREMATURE_RELEASE = 5, // Internal Release() with no SetStatus() WMI_FNLZR_STATE_CANCELED = 6 // Explicitly canceled } WMI_FNLZR_INTERNAL_STATE; [restricted, object, local,uuid(fe4e94e6-7f40-4447-8240-f154412d9cd6)] interface _IWmiFinalizer : IUnknown { // Also, implements IWbemShutdown HRESULT Configure( [in] ULONG uFlags, [in] ULONG uValue ); // At construct-time // Allows decoupled & fast-track configuration with no thread switches HRESULT SetTaskHandle( [in] _IWmiCoreHandle *phTask ); // Task handle has user-specific stuff. Finalizer just // passes this through to _IWmiArbitrator::CheckTask HRESULT SetDestinationSink( [in] ULONG uFlags, [in] REFIID riid, [in, iid_is(riid)] LPVOID pSink ); // Supports one of IID_IWbemObjectSink or IID_IWbemObjectSinkEx HRESULT SetSelfDestructCallback( [in] ULONG uFlags, [in] IWbemObjectSink *pSink ); // The callback called during final Release(); Set() is called with the task handle, followed by SetStatus() // HRESULT GetStatus( [out] ULONG* pFlags ); HRESULT NewInboundSink( [in] ULONG uFlags, [out] IWbemObjectSink **pSink ); HRESULT Merge( [in] ULONG uFlags, [in] REFIID riid, [in] LPVOID pObj ); // Allows merging another Finalizer, _IWmiCache, etc. // For sorting, we will create a sorted _IWmiCache and merge it in later when // the sort is completed. // For setting, getting objects HRESULT SetResultObject( [in] ULONG uFlags, [in] REFIID riid, [in] LPVOID pObj ); HRESULT GetResultObject( [in] ULONG uFlags, [in] REFIID riid, [out, iid_is(riid)] LPVOID *pObj ); // Support _IWmiObject, IWbemClassObject, etc. // IEnumWbemClassObject // _IWmiCache // For status-only operations HRESULT SetOperationResult( [in] ULONG uFlags, [in] HRESULT hRes ); HRESULT GetOperationResult( [in] ULONG uFlags, [in] ULONG uTimeout, [out] HRESULT *phRes ); HRESULT CancelTask ( [in] ULONG uFlags ); }; //*************************************************************************** // // typedef enum { WMICACHE_CFG_MAX_DISKSPACE = 1, WMICACHE_CFG_MAX_MEMORY = 2, WMICACHE_CFG_MAX_AGESECONDS = 3, } WMICACHE_CFG_TYPE; [restricted, object, local, uuid(a784eb18-cf32-49c7-893a-d9889d234cdb)] interface _IWmiCache : IUnknown { HRESULT SetConfigValue( [in] ULONG uID, [in] ULONG uValue ); HRESULT GetConfigValue( [in] ULONG uID, [in] ULONG *puValue ); HRESULT Empty( [in] ULONG uFlags, [in] LPCWSTR pszClass ); HRESULT AddObject( [in] ULONG uFlags, [in] _IWmiObject *pObj ); // Also subsumes replace functionality // // __PATH Property is used as a real key HRESULT DeleteByPath( [in] ULONG uFlags, [in] LPCWSTR pszPath ); HRESULT DeleteByPointer( [in] ULONG uFlags, [in] _IWmiObject *pTarget ); ///////////////// HRESULT GetByPath( [in] ULONG uFlags, [in] LPCWSTR pszFullPath, [out] _IWmiObject **pObj ); HRESULT BeginEnum( [in] ULONG uFlags, [in] LPCWSTR pszFilter ); // Filters: uFlags==0==all, uFlags==WMICACHE_CLASS_SHALLOW, WMICACHE_CLASS_DEEP HRESULT Next( [in] ULONG uBufSize, [out, size_is(uBufSize), length_is(*puReturned)] _IWmiObject **pObjects, [out] ULONG *puReturned ); }; //*************************************************************************** // // typedef enum { WMICORE_FLAG_REPOSITORY = 0x1, WMICORE_FLAG_SECURITY = 0x2, WMICORE_FLAG_CLASS_PROVIDERS = 0x4, WMICORE_FLAG_INST_PROVIDERS = 0x8, WMICORE_FLAG_PROP_PROVIDERS = 0x10, WMICORE_FLAG_ESS_DELIVERY = 0x20, WMICORE_FLAG_FULL_SERVICES = 0xFE, // DONT INCLUDE WMICORE_FLAG_REPOSITORY since // that seriously limits the usefullness. WMICORE_CLIENT_TYPE_SYSTEM = 0x1000, WMICORE_CLIENT_TYPE_PROVSS = 0x2000, WMICORE_CLIENT_TYPE_ESS = 0x4000, WMICORE_CLIENT_TYPE_USER = 0x8000, WMICORE_CLIENT_TYPE_PROVIDER = 0x10000, WMICORE_CLIENT_TYPE_ALT_TRANSPORT = 0x100000, // used for authenticated login. WMICORE_CLIENT_ORIGIN_INPROC = 0x20000, WMICORE_CLIENT_ORIGIN_LOCAL = 0x40000, WMICORE_CLIENT_ORIGIN_REMOTE = 0x80000, WMICORE_FLAG_SETUP_MODE = 0x80000000, } WMICORE_FLAG_TYPE; [restricted, object, local, uuid(5fc92893-a9be-475f-bf9e-cf50eea1c958)] interface _IWmiCoreServices : IUnknown { HRESULT GetObjFactory( [in] long lFlags, [out] _IWmiObjectFactory **pFact ); HRESULT GetServices( [in,string] LPCWSTR pszNamespace, [in,string,unique] LPCWSTR pszUser, [in,string,unique] LPCWSTR pszLocale, [in] long lFlags, [in] REFIID riid, [out, iid_is(riid)] void **pServices ); // lFlags == WMI_CORE_FLAG_REPOSITORY // lFlags == WMI_CORE_FLAG_ADMIN_ONLY // lFlags == WMI_CORE_FLAG_INST_PROVIDERS // lFlags == WMI_CORE_FLAG_CLASS_PROVIDERS // lFlags == WMI_CORE_FLAG_PROP_PROVIDERS // lFlags == WMI_CORE_FLAG_ALL_PROVIDERS HRESULT GetRepositoryDriver( [in] long lFlags, [in] REFIID riid, [out, iid_is(riid)] void **pDriver ); HRESULT GetCallSec( [in] long lFlags, [out] _IWmiCallSec **pCallSec ); HRESULT GetProviderSubsystem( [in] long lFlags, [out] _IWmiProvSS **pProvSS ); HRESULT StopEventDelivery(); HRESULT StartEventDelivery(); HRESULT DeliverIntrinsicEvent( [in] LPCWSTR pszNamespace, // Normalized to \\.\ns1\n2... etc. [in] ULONG uType, // WBEM_EVENTTYPE_ const [in] IWbemContext *pCtx, // If available [in] LPCWSTR pszParam, // Required: Class name, or new namespace name (isolated name, not path) [in] LPCWSTR pszTransGuid, // GUID in string form transaction, NULL if not in a transaction [in] ULONG uObjectCount, [in] _IWmiObject **ppObjList // Target Object [in modification events [0]=new object, [1]=old object ); HRESULT DeliverExtrinsicEvent( [in] LPCWSTR pszNamespace, [in] ULONG uFlags, [in] IWbemContext *pCtx, [in] _IWmiObject *pEvt ); HRESULT IncrementCounter( [in] ULONG uID, [in] ULONG uParam ); HRESULT DecrementCounter( [in] ULONG uID, [in] ULONG uParam ); HRESULT SetCounter( [in] ULONG uID, [in] ULONG uParam ); HRESULT GetSelfInstInstances( [in] LPCWSTR pszClass, [in] IWbemObjectSink *pSink ); HRESULT GetSystemObjects( [in] ULONG lFlags, // see tag_WBEM_GET_SYSTEM_OBJECTS_FLAG for values [out] ULONG * puArraySize, [out] _IWmiObject **pObjects // Avoid an enumerator; just return an array ); HRESULT GetSystemClass( [in] LPCWSTR pszClassName, [out] _IWmiObject **pClassDef ); HRESULT GetConfigObject( ULONG uID, // Integer-based path; [out] _IWmiObject **pCfgObject ); HRESULT RegisterWriteHook( [in] ULONG uFlags, // WMI_CORE_FLAG_INSTANCE_HOOK | WMI_CORE_FLAG_CLASS_HOOK [in] _IWmiCoreWriteHook *pHook ); HRESULT UnregisterWriteHook( [in] _IWmiCoreWriteHook *pHook ); HRESULT CreateCache( [in] ULONG uFlags, [out] _IWmiCache **pCache ); HRESULT CreateFinalizer( [in] ULONG uFlags, [out] _IWmiFinalizer **pFinalizer ); HRESULT CreatePathParser( [in] ULONG uFlags, [out] IWbemPath **pParser ); HRESULT CreateQueryParser( [in] ULONG uFlags, [out] _IWmiQuery **pQuery ); HRESULT GetDecorator( [in] ULONG uFlags, [out] IWbemDecorator **pDec ); HRESULT GetServices2( [in] LPCWSTR pszPath, [in] LPCWSTR pszUser, [in] IWbemContext *pCtx, [in] ULONG uClientFlags, // Copy of client's flags [in] DWORD dwSecFlags, [in] DWORD dwPermissions, [in] ULONG uInternalFlags, // One or more WMICORE_CLIENT_TYPE flags [in] LPCWSTR pszClientMachine, [in] DWORD dwClientProcessID, [in] REFIID riid, [out, iid_is(riid)] void **pServices ); /* HRESULT GetConnector( [in] ULONG uFlags, // see WBEM_CONNECTION_TYPE [out] IWbemConnection **pConnect ); */ HRESULT NewPerTaskHook( [out] _IWmiCoreWriteHook **pHook ); HRESULT GetArbitrator( [out] _IWmiArbitrator **pArb ); HRESULT InitRefresherMgr( [in] long lFlags ); }; //*************************************************************************** [restricted, object, local, uuid(7698dab9-9327-4fce-8b0d-3a276cf2d6e3)] interface _IWmiDecorator : IUnknown { HRESULT DecorateObject( [in] LPCWSTR pszServer, // can be NULL [in] LPCWSTR pszScopePrefix, [in] LONG lFlags, // Use local machine name, use dot, etc. [in] _IWmiObject *pObj ); // Unresolved: How do we decorate scoped objects? HRESULT UndecorateObject( [in] _IWmiObject *pObj ); }; //*************************************************************************** [object, local, restricted, uuid(6603d042-e217-45d7-b706-b07ec7c06490)] interface IWbemToken : IUnknown { HRESULT AccessCheck( [in] DWORD dwDesiredAccess, [in] const byte* pSD, [out] DWORD* pdwGrantedAccess); }; [object, local, restricted, uuid(b1eb126b-4a5e-4848-9e6a-5a513dc7f57a)] interface IWbemTokenCache : IUnknown { HRESULT GetToken( [in] const byte* pSid, [out] IWbemToken** ppToken); HRESULT Shutdown(); }; //*************************************************************************** [object, local, restricted, uuid(ac062f20-9935-4aae-98eb-0532fb17147a)] interface _IWmiCoreHandle : IUnknown { HRESULT GetHandleType([out] ULONG *puType); }; //*************************************************************************** //*************************************************************************** [restricted, object, uuid(B60EF4F1-A411-462b-B51E-477CBDBB90B4)] interface _IWbemRefresherMgr : IUnknown { HRESULT AddObjectToRefresher( [in] IWbemServices* pNamespace, [in] LPCWSTR pwszServerName, [in] LPCWSTR pwszNamespace, [in] IWbemClassObject* pClassObject, [in] WBEM_REFRESHER_ID* pDestRefresherId, [in] IWbemClassObject* pInstTemplate, [in] long lFlags, [in] IWbemContext* pContext, [in] IUnknown* pLockMgr, [out] WBEM_REFRESH_INFO* pInfo ); HRESULT AddEnumToRefresher( [in] IWbemServices* pNamespace, [in] LPCWSTR pwszServerName, [in] LPCWSTR pwszNamespace, [in] IWbemClassObject* pClassObject, [in] WBEM_REFRESHER_ID* pDestRefresherId, [in] IWbemClassObject* pInstTemplate, [in] LPCWSTR wszClass, [in] long lFlags, [in] IWbemContext* pContext, [in] IUnknown* pLockMgr, [out] WBEM_REFRESH_INFO* pInfo ); HRESULT GetRemoteRefresher( [in] WBEM_REFRESHER_ID* pRefresherId, [in] long lFlags, [in] BOOL fAddRefresher, [out] IWbemRemoteRefresher** ppRemRefresher, [in] IUnknown* pLockMgr, [out] GUID* pGuid ); HRESULT Startup( [in] long lFlags, [in] IWbemContext *pCtx, [in] _IWmiProvSS *pProvSS ); HRESULT LoadProvider( [in] IWbemServices* pNamespace, [in, string] LPCWSTR pwszProviderName, [in, string] LPCWSTR pwszNamespace, [in] IWbemContext * pContext, [out] IWbemHiPerfProvider** ppProv, [out] _IWmiProviderStack** ppProvStack ); }; [restricted, object, uuid(6963B029-B969-40aa-9180-2B2F84075973)] interface _IWbemFetchRefresherMgr : IUnknown { HRESULT Get( [out] _IWbemRefresherMgr** ppMgr ); HRESULT Init( [in] _IWmiProvSS* pProvSS, [in] IWbemServices* pSvc ); HRESULT Uninit(); }; //*************************************************************************** //*************************************************************************** [restricted, object, uuid(25411283-46FC-4326-8DF2-FF5D34B2DFEF)] interface _IWbemConfigureRefreshingSvcs : IUnknown { HRESULT SetServiceData( [in] BSTR pwszMachineName, [in] BSTR pwszNamespace ); }; [restricted, local, object, uuid(368732C2-80D8-403e-854B-1B2BAFB9842C)] interface _IWbemEnumMarshaling : IUnknown { HRESULT GetMarshalPacket( [in] REFGUID proxyGUID, [in] ULONG uCount, [in, size_is(uCount), length_is(uCount)] IWbemClassObject** apObjects, [out] ULONG* pdwBuffSize, [out, size_is(,*pdwBuffSize)] byte** pBuffer ); }; //*************************************************************************** //*************************************************************************** [object, uuid(6919dd07-1637-4611-a8a7-c16fac5b2d53)] interface Internal_IWbemProviderInit : IUnknown { HRESULT Internal_Initialize ( [in] WmiInternalContext a_InternalContext , [in, unique, string] LPWSTR wszUser, [in] LONG lFlags, [in, string] LPWSTR wszNamespace, [in, unique, string] LPWSTR wszLocale, [in] IWbemServices* pNamespace, [in] IWbemContext* pCtx, [in] IWbemProviderInitSink* pInitSink ) ; }; [restricted, object, uuid(2b322b6e-a9df-44e3-97bf-259e3583fda4)] interface Internal_IWbemProviderIdentity : IUnknown { HRESULT Internal_SetRegistrationObject( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [in] IWbemClassObject* pProvReg); }; [object, uuid(f50a28cf-5c9c-4f7e-9d80-e25e16e18c59)] interface Internal_IWbemServices : IUnknown { // Context. // ======== HRESULT Internal_OpenNamespace ( [in] WmiInternalContext a_InternalContext , [in] const BSTR strNamespace, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemServices** ppWorkingNamespace, [out, OPTIONAL] IWbemCallResult** ppResult ); HRESULT Internal_CancelAsyncCall( [in] WmiInternalContext a_InternalContext , [in] IWbemObjectSink* pSink ); HRESULT Internal_QueryObjectSink( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [out] IWbemObjectSink** ppResponseHandler ); // Classes and instances. // ====================== HRESULT Internal_GetObject( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemClassObject** ppObject, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_GetObjectAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); // Class manipulation. // =================== HRESULT Internal_PutClass( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pObject, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_PutClassAsync( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pObject, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); HRESULT Internal_DeleteClass( [in] WmiInternalContext a_InternalContext , [in] const BSTR strClass, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_DeleteClassAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strClass, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); HRESULT Internal_CreateClassEnum( [in] WmiInternalContext a_InternalContext , [in] const BSTR strSuperclass, [in] long lFlags, [in] IWbemContext* pCtx, [out] IEnumWbemClassObject** ppEnum ); HRESULT Internal_CreateClassEnumAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strSuperclass, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); // Instances. // ========== HRESULT Internal_PutInstance( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pInst, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_PutInstanceAsync( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pInst, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); HRESULT Internal_DeleteInstance( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext* pCtx, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_DeleteInstanceAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); HRESULT Internal_CreateInstanceEnum( [in] WmiInternalContext a_InternalContext , [in] const BSTR strFilter, // allow more things than a class name [in] long lFlags, [in] IWbemContext* pCtx, [out] IEnumWbemClassObject** ppEnum ); HRESULT Internal_CreateInstanceEnumAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strFilter, // allow more things than a class name [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); // Queries. // ======== HRESULT Internal_ExecQuery( [in] WmiInternalContext a_InternalContext , [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext* pCtx, [out] IEnumWbemClassObject** ppEnum ); HRESULT Internal_ExecQueryAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); HRESULT Internal_ExecNotificationQuery( [in] WmiInternalContext a_InternalContext , [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext* pCtx, [out] IEnumWbemClassObject** ppEnum ); HRESULT Internal_ExecNotificationQueryAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strQueryLanguage, [in] const BSTR strQuery, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemObjectSink* pResponseHandler ); // Methods // ======= HRESULT Internal_ExecMethod( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] const BSTR strMethodName, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemClassObject* pInParams, [out, OPTIONAL] IWbemClassObject** ppOutParams, [out, OPTIONAL] IWbemCallResult** ppCallResult ); HRESULT Internal_ExecMethodAsync( [in] WmiInternalContext a_InternalContext , [in] const BSTR strObjectPath, [in] const BSTR strMethodName, [in] long lFlags, [in] IWbemContext* pCtx, [in] IWbemClassObject* pInParams, [in] IWbemObjectSink* pResponseHandler ); }; //*************************************************************************** //*************************************************************************** [object,uuid(2db9fa90-9973-46cf-b310-9865b644699d)] interface Internal_IWbemObjectSink : IUnknown { HRESULT Internal_Indicate( [in] WmiInternalContext a_InternalContext , [in] long lObjectCount, [in, size_is(lObjectCount)] IWbemClassObject** apObjArray ); HRESULT Internal_SetStatus( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [in] HRESULT hResult, [in] BSTR strParam, [in] IWbemClassObject* pObjParam ); }; //*************************************************************************** //*************************************************************************** [object,uuid(ac9ea02a-2c8a-4acd-b562-d7e8ebee8e8e)] interface Internal_IEnumWbemClassObject : IUnknown { HRESULT Internal_Reset( [in] WmiInternalContext a_InternalContext ); HRESULT Internal_Next( [in] WmiInternalContext a_InternalContext , [in] long lTimeout, [in] ULONG uCount, [out, size_is(uCount), length_is(*puReturned)] IWbemClassObject** apObjects, [out] ULONG* puReturned ); HRESULT Internal_NextAsync( [in] WmiInternalContext a_InternalContext , [in] ULONG uCount, [in] IWbemObjectSink* pSink ); HRESULT Internal_Clone( [in] WmiInternalContext a_InternalContext , [out] IEnumWbemClassObject** ppEnum ); HRESULT Internal_Skip( [in] WmiInternalContext a_InternalContext , [in] long lTimeout, [in] ULONG nCount ); }; //*************************************************************************** //*************************************************************************** [object,uuid(11caa957-4e80-474e-a819-7fd72148ada9)] interface Internal_IWbemPropertyProvider : IUnknown { HRESULT Internal_GetProperty( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [in] const BSTR strLocale, [in] const BSTR strClassMapping, [in] const BSTR strInstMapping, [in] const BSTR strPropMapping, [out] VARIANT* pvValue ); HRESULT Internal_PutProperty( [in] WmiInternalContext a_InternalContext , [in] long lFlags, [in] const BSTR strLocale, [in] const BSTR strClassMapping, [in] const BSTR strInstMapping, [in] const BSTR strPropMapping, [in] const VARIANT* pvValue ); }; //*************************************************************************** //*************************************************************************** [object,uuid(fd450835-cf1b-4c87-9fd2-5e0d42fde081)] interface Internal_IWbemEventProvider : IUnknown { HRESULT Internal_ProvideEvents( [in] WmiInternalContext a_InternalContext , [in] IWbemObjectSink* pSink, [in] long lFlags ); }; //*************************************************************************** //*************************************************************************** [object,uuid(df2373f5-efb2-475c-ad58-3102d61967d4)] interface Internal_IWbemEventProviderSecurity : IUnknown { HRESULT Internal_AccessCheck( [in] WmiInternalContext a_InternalContext , [in] WBEM_CWSTR wszQueryLanguage, [in] WBEM_CWSTR wszQuery, [in] long lSidLength, [in, size_is(lSidLength), unique] const BYTE* pSid ); }; //*************************************************************************** //*************************************************************************** [object,uuid(854d745c-6742-42c0-8bb9-01ec466b6e87)] interface Internal_IWbemEventConsumerProvider : IUnknown { HRESULT Internal_FindConsumer( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pLogicalConsumer, [out] IWbemUnboundObjectSink** ppConsumer ); }; //*************************************************************************** //*************************************************************************** [object,uuid(88f3781c-6902-4647-9a6b-a74f450af861)] interface Internal_IWbemEventConsumerProviderEx : Internal_IWbemEventConsumerProvider { HRESULT Internal_ValidateSubscription( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pLogicalConsumer ); }; //*************************************************************************** //*************************************************************************** [object,uuid(8a0dc377-a9d3-41cb-bd69-ae1fdaf2dc68)] interface Internal_IWbemEventProviderQuerySink : IUnknown { HRESULT Internal_NewQuery( [in] WmiInternalContext a_InternalContext , [in] unsigned long dwId, [in] WBEM_WSTR wszQueryLanguage, [in] WBEM_WSTR wszQuery ); HRESULT Internal_CancelQuery( [in] WmiInternalContext a_InternalContext , [in] unsigned long dwId ); }; //*************************************************************************** //*************************************************************************** [object,uuid(a210bfe9-c9f7-4919-b114-0d98b3d5341e)] interface Internal_IWbemUnboundObjectSink : IUnknown { HRESULT Internal_IndicateToConsumer( [in] WmiInternalContext a_InternalContext , [in] IWbemClassObject* pLogicalConsumer, [in] long lNumObjects, [in, size_is(lNumObjects)] IWbemClassObject** apObjects ); }; //*************************************************************************** //*************************************************************************** [object,uuid(0fc8c622-1728-4149-a57f-ad19d0970710)] interface Internal_IWmiProviderConfiguration : IUnknown { HRESULT Internal_Get ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemObjectSink *a_Sink ) ; HRESULT Internal_Enumerate ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in] IWbemObjectSink *a_Sink ) ; HRESULT Internal_Set ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemClassObject *a_OldObject , [in] IWbemClassObject *a_NewObject ) ; HRESULT Internal_Deleted ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in] IWbemClassObject *a_Object ) ; HRESULT Internal_Shutdown ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Provider , [in] ULONG a_MilliSeconds ) ; HRESULT Internal_Call ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in,string] LPCWSTR a_Class , [in,string] LPCWSTR a_Path , [in,string] LPCWSTR a_Method, [in] IWbemClassObject *a_InParams, [in] IWbemObjectSink *a_Sink ) ; HRESULT Internal_Query ( [in] WmiInternalContext a_InternalContext , [in,unique] IWbemServices *a_Service , [in] long a_Flags , [in] IWbemContext *a_Context , [in] WBEM_PROVIDER_CONFIGURATION_CLASS_ID a_ClassIdentifier , [in] WBEM_PROVIDER_CONFIGURATION_PROPERTY_ID a_PropertyIdentifer , [in,out] VARIANT *a_Value ) ; } ; //*************************************************************************** //*************************************************************************** [object, local, uuid(E7174AED-B55B-42f9-B322-D79F49921012)] interface _IWmiProviderAssociatorsHelper : IUnknown { HRESULT GetReferencesClasses ( [in] long a_Flags , [in] IWbemContext *a_Context , [in] IWbemObjectSink *a_Sink ) ; } ; //*************************************************************************** //*************************************************************************** [uuid(027947f3-d731-11ce-a357-000000000001)] library WbemInternal_v1 { importlib("stdole32.tlb"); typedef enum tag_WBEM_MISC_FLAG_TYPE { WBEM_FLAG_VALIDATE_CLASS_EXISTENCE = 0x200000, WBEM_FLAG_KEEP_SHAPE = 0x100000, WBEM_FLAG_NO_CLASS_PROVIDERS = 0x8000, WBEM_FLAG_NO_EVENTS = 0x4000, WBEM_FLAG_IGNORE_IDS = 0x2000, WBEM_FLAG_IS_INOUT = 0x1000, } WBEM_MISC_FLAG_TYPE; typedef enum tag_WBEM_CLASSPART_FLAG_TYPE { WBEM_FLAG_CLASSPART_NOT_LOCALIZED = 0x00, WBEM_FLAG_CLASSPART_LOCALIZED = 0x01, WBEM_FLAG_CLASSPART_LOCALIZATION_MASK = 0x01, } WBEM_CLASSPART_FLAG_TYPE; typedef enum tag_WBEM_INSTANCEPART_FLAG_TYPE { WBEM_FLAG_INSTANCEPART_NOT_LOCALIZED = 0x00, WBEM_FLAG_INSTANCEPART_LOCALIZED = 0x01, WBEM_FLAG_INSTANCEPART_LOCALIZATION_MASK = 0x01, } WBEM_INSTANCEPART_FLAG_TYPE; typedef enum tag_WBEM_CMPCLSPART_FLAG_TYPE { WBEM_FLAG_COMPARE_FULL = 0x00, WBEM_FLAG_COMPARE_BINARY = 0x01, WBEM_FLAG_COMPARE_LOCALIZED = 0x02 } WBEM_CMPCLSPART_FLAG_TYPE; interface IWbemPropertySource; interface IWbemRawObjectSink; interface IWbemDecorator; interface IWbemEventSubsystem_m4; interface IWbemCausalityAccess; interface IWbemRefreshingServices; interface IWbemRemoteRefresher; interface IWbemMetaData; interface IWbemFilterStub; interface IWbemFilterProxy; interface IWbemLocalFilterProxy; interface IWbemLifeControl; interface IWbemCreateSecondaryStub; ///////////////////////////////////////////////////////// // // Marshaling proxy for WbemClassObjec // [restricted, uuid(4590f812-1d3a-11d0-891f-00aa004b2e24)] coclass WbemClassObjectProxy { interface IWbemClassObject; interface IMarshal; }; [restricted, uuid(4E6AC63C-BF69-495d-9000-E45A4E517B0C)] coclass UmiObjectWrapperProxy { interface IWbemClassObject; interface IMarshal; }; [restricted, uuid(5d08b586-343a-11d0-ad46-00c04fd8fdff)] coclass WbemEventSubsystem { interface IWbemEventSubsystem_m4; }; [restricted, uuid(08a59b5d-dd50-11d0-ad6b-00c04fd8fdff)] coclass HmmpEventConsumerProvider { interface IWbemUnboundObjectSink; }; [restricted, uuid(6c19be35-7500-11d1-ad94-00c04fd8fdff)] coclass WbemFilterProxy { interface IWbemFilterProxy; interface IWbemObjectSink; }; [restricted, uuid(4fa18276-912a-11d1-ad9b-00c04fd8fdff)] coclass InProcWbemLevel1Login { interface IWbemLevel1Login; }; [restricted, uuid(78103FB7-AED7-4066-8BCD-30BB27B02331)] coclass _WmiObjectFactory { interface _IWmiObjectFactory; }; [uuid(C10B4771-4DA0-11d2-A2F5-00C04F86FB7D)] coclass WinmgmtMofCompiler { interface IWinmgmtMofCompiler; }; [uuid(d215781d-019e-4fa0-903d-0cdcde13a4f5)] coclass MofCompilerOOP { interface IWinmgmtMofCompilerOOP; }; [uuid(dc923725-0fdd-45e1-ae74-ea09182e739b)] coclass WbemTokenCache { interface IWbemTokenCache; }; [uuid(f3130cdb-aa52-4c3a-ab32-85ffc23af9c1)] coclass WmiESS { interface _IWmiESS; interface IWbemShutdown; }; [uuid(4de225bf-cf59-4cfc-85f7-68b90f185355)] coclass WmiProvSS { interface _IWmiProvSS; interface IWbemShutdown; }; [uuid(73E709EA-5D93-4B2E-BBB0-99B7938DA9E4)] coclass WmiProviderHost { interface _IWmiProviderHost ; interface IWbemShutdown; }; [uuid(F5A55D36-8750-432C-AB52-AD49A016EABC)] coclass WmiProviderBindingFactory { interface _IWmiProviderFactory ; interface _IWmiProviderFactoryInitialize ; interface IWbemShutdown; }; [uuid(8BEBCE8B-1AF0-4323-8B4D-36994567CAE1)] coclass WmiProviderInProcFactory { interface _IWmiProviderFactory ; interface _IWmiProviderFactoryInitialize ; interface IWbemShutdown; }; [uuid(688A906C-0B60-449C-AE2C-40B02AD53E41)] coclass WmiProviderHostedInProcFactory { interface _IWmiProviderFactory ; interface _IWmiProviderFactoryInitialize ; interface IWbemShutdown; }; [uuid(1860e246-e924-4f73-b2c5-93e0577e3aa1)] coclass IWmiCoreServices { interface _IWmiCoreServices; }; [uuid(0859CCC9-209D-4110-9613-DAB6EAF9093F)] coclass _WmiWbemClass { interface _IWMIObject; }; [uuid(DD51FE78-43E1-405a-A44E-6C226391CF0D)] coclass _WmiWbemInstance { interface _IWMIObject; }; [uuid(da1fc6d2-40e4-4e2f-bb42-e70d28c891b3)] coclass _WmiQuery { interface _IWmiQuery; }; [uuid(695B5458-D6E9-4a6a-881F-B68F953397D8)] coclass _WbemEmptyClassObject { interface _IWmiObject; }; [uuid(1108be51-f58a-4cda-bb99-7a0227d11d5e)] coclass _IWbemCallSec { interface _IWmiCallSec; }; [uuid(CD1ABFC8-6C5E-4a8d-B90B-2A3B153B886D)] coclass _WbemConfigureRefreshingSvcs { interface _IWbemConfigureRefreshingSvcs; }; [uuid(DCF33DF4-B510-439f-832A-16B6B514F2A7)] coclass _WbemRefresherMgr { interface _IWbemRefresherMgr; interface IWbemShutdown; }; [uuid(288d70f7-11c8-42d5-a612-8e46a7e922d8)] coclass _WbemHostedRefresherMgr { interface _IWbemRefresherMgr; interface IWbemShutdown; }; [uuid(CC9072AB-C000-49d8-A5AA-00266C8DBB9B)] coclass _WbemEnumMarshaling { interface _IWbemEnumMarshaling; }; [uuid(5839FCA9-774D-42a1-ACDA-D6A79037F57F)] coclass _WbemFetchRefresherMgr { interface _IWbemFetchRefresherMgr; }; // This is the actual core implementation of the admin login [uuid(1f0bc6ad-46d4-488b-be1f-047fc7505e60)] coclass ActualWbemAdministrativeLocator { interface IWbemLocator; }; // this assumes that the transport has verified that // the user has access. Unlike the Administrative locator, // it increases the count of external connections [uuid(6543d242-a80b-44a3-b828-95c1ec452423)] coclass ActualWbemAuthenticatedLocator { interface IWbemLocator; }; // this is used by providers who dont know if a user // has access or not. [uuid(ed999ff5-223a-4052-8ece-0b10c8dbaa39)] coclass ActualWbemUnauthenticatedLocator { interface IWbemLocator; }; }; //*************************************************************************** // Following interface allows for management of refreshable objects and enums // that can be cooked. [restricted,local,object,uuid(13ED7E55-8D63-41b0-9086-D0C5C17364C8)] interface IWMIRefreshableCooker : IUnknown { // Adds a new instance to the refreshable cooker. The Refreshable Instance // will be updated on calls to recalc. HRESULT AddInstance( [in] IWbemServices* pService, // The object's namespace [in] IWbemContext * pContext, // The context passed from client [in] IWbemObjectAccess* pCookingClass, // Cooking class [in] IWbemObjectAccess* pCookingInstance, // An instance of the cooking class [out] IWbemObjectAccess** ppRefreshableInstance, // A clone of the instance used for refreshing [out] long* plId // The id of the refreshable cooking instance ); // Adds a new enumeration to the refreshable cooker. The Refreshable Enumerator // will be updated on calls to recalc. HRESULT AddEnum( [in] IWbemServices* pService, // The object's namespace [in] IWbemContext * pContext, // The context passed from client [in,string] LPCWSTR szCookingClass, // The cooking class' name [in] IWbemHiPerfEnum* pRefreshableEnum, // The enumerator passed in from WMI [out] long* plId // THe id of the refreshable cooking enumerator ); // Removes the instance or enumerator specified by ulId from the // Refreshable Cooker. HRESULT Remove( [in] long lId ); // Refreshes all instances and enumerators in the refreshable cooker HRESULT Refresh(); }; //*************************************************************************** // Following interface allows for refreshable objects of the same class to be // cooked as a group. [restricted,local,object,uuid(A239BDF1-0AB1-45a0-8764-159115689589)] interface IWMISimpleObjectCooker : IUnknown { // Sets the class used by the cooker in order to fill out // instances when cooking. Once the class is set, it cannot // be reset HRESULT SetClass( [in] WCHAR* wszCookingClassName, [in] IWbemObjectAccess* pCookingClass, [in] IWbemObjectAccess* pRawClass ); // Retrieves a new cooked instance and an id which can be used // to identify it. The instance will not be updated unless // a sample instance is bound to it via BeginCooking() HRESULT SetCookedInstance( [in] IWbemObjectAccess* pCookedInstance, [out] long* plId ); // Provides an initial sample for cooking the instance specified // by ulId. Once the initial sample is set, it can be // cleared by calling BeginCooking again with another // instance HRESULT BeginCooking( [in] long lId, [in] IWbemObjectAccess* pSampleInstance, [in] unsigned long dwRefresherId ); // Tells the cooker to stop cooking the instance specified // by ulId. Cooking can be restarted by calling BeginCooking // again. HRESULT StopCooking( [in] long lId ); // Recalcs all instances using the appropriate cooking instances. HRESULT Recalc([in] unsigned long dwRefresherId); // Removes an instance from the object cooker HRESULT Remove( [in] long lId ); // Clears all instances from the cooker. HRESULT Reset( void ); }; /*-------------------------------------------------------------------------- This was actually supposed to be a public interface, but was never tested out as one. I'm moving it here and making it local so that it does not have to be documented as a public interface. In a future release, we should think about making this public again. -pkenny -------------------------------------------------------------------------*/ [object, restricted, local, uuid(17cf534a-d8a3-4ad0-ac92-5e3d01717151)] interface IWbemEventConsumerProviderEx : IWbemEventConsumerProvider { HRESULT ValidateSubscription( [in] IWbemClassObject* pLogicalConsumer); }; //*************************************************************************** // Following interface allows for simple cooking of properties whose formulas // can be defined using 1 or 2 value samples. [restricted,local,object,uuid(510ADF6E-D481-4a64-B74A-CC712E11AA34)] interface IWMISimpleCooker : IUnknown { // Simple method for cooking a two value, one base counter HRESULT CookRawValues( [in] DWORD dwCookingType, [in] DWORD dwNumSamples, [in, size_is(dwNumSamples)] __int64* anTimeStamp, [in, size_is(dwNumSamples)] __int64* anRawValue, [in, size_is(dwNumSamples)] __int64* anBase, [in] __int64 nTimeFrequency, [in] long Scale, [out] __int64* pnResult ); }; cpp_quote("#define IWbemBinder IWbemConnection") cpp_quote("#define IID_IWbemBinder IID_IWbemConnection") cpp_quote("#define CLSID_WbemBinder CLSID_WbemConnection")