windows-nt/Source/XPSP1/NT/sdktools/pdh/wbemperf/wbemint.idl
2020-09-26 16:20:57 +08:00

869 lines
24 KiB
Plaintext

//***************************************************************************
//
// (c) 1996-1999 by Microsoft Corporation
//
// WBEMINT.IDL
//
// Internal CIMOM interfaces
//
//***************************************************************************
import "objidl.idl";
import "oleidl.idl";
import "oaidl.idl";
import "wbemtran.idl";
import "wbemprov.idl";
typedef VARIANT WBEM_VARIANT;
typedef [string] WCHAR* WBEM_WSTR;
#define OPTIONAL in, unique
[local, restricted, object, uuid(49353c99-516b-11d1-aea6-00c04fb68820)]
interface IWbemRefresher : IUnknown
{
HRESULT Refresh([in] long lFlags);
}
[local, restricted, object, uuid(49353c92-516b-11d1-aea6-00c04fb68820)]
interface IWbemConfigureRefresher : IUnknown
{
HRESULT AddObjectByPath(
[in] IWbemServices* pNamespace,
[in, string] LPCWSTR wszPath,
[in] long lFlags,
[in] IWbemContext* pContext,
[out] IWbemClassObject** ppRefreshable,
[out, OPTIONAL] long* plId);
HRESULT AddObjectByTemplate(
[in] IWbemServices* pNamespace,
[in] IWbemClassObject* pTemplate,
[in] long lFlags,
[in] IWbemContext* pContext,
[out] IWbemClassObject** ppRefreshable,
[out, OPTIONAL] long* plId);
HRESULT AddRefresher(
[in] IWbemRefresher* pRefresher,
[in] long lFlags,
[out, OPTIONAL] long* plId);
HRESULT Remove(
[in] long lId,
[in] long lFlags);
};
[restricted, object, uuid(49353c93-516b-11d1-aea6-00c04fb68820)]
interface IWbemHiPerfProvider : IUnknown
{
HRESULT QueryInstances(
[in] IWbemServices* pNamespace,
[in, string] WCHAR* wszClass,
[in] long lFlags,
[in] IWbemContext* pCtx,
[in] IWbemObjectSink* pSink // Return IWbemClassObject ptrs
);
HRESULT CreateRefresher(
[in] IWbemServices* pNamespace,
[in] long lFlags,
[out] IWbemRefresher** ppRefresher);
HRESULT CreateRefreshableObject(
[in] IWbemServices* pNamespace,
[in] IWbemObjectAccess* pTemplate,
[in] IWbemRefresher* pRefresher,
[in] long lFlags,
[in] IWbemContext* pContext,
[out] IWbemObjectAccess** ppRefreshable,
[out] long* plId);
HRESULT StopRefreshing(
[in] IWbemRefresher* pRefresher,
[in] long lId,
[in] long lFlags);
/*
HRESULT SendChangeNotifications(
[in] IWbemServices* pNamespace,
[in] long lFlags,
[in] long lEventTypes,
[in] IWbemContext* pContext,
[in] IWbemChangeSink* pSink);
*/
};
//==============================================================================
//
// 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.
//
//==============================================================================
typedef enum
{
WBEM_NAME_ELEMENT_TYPE_PROPERTY = 0,
WBEM_NAME_ELEMENT_TYPE_INDEX = 1
} WBEM_NAME_ELEMENT_TYPE;
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, 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_WSTR 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;
long m_lOperator; // WbemSql1ComparisonOperator
WBEM_VARIANT m_vConstValue;
long m_lPropertyFunction; // WbemSql1Function
long m_lConstFunction; // WbemSql1Function
long m_bQuoted;
} 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_EVENT_TYPE;
//==============================================================================
//==============================================================================
//
// Event-provider specific interfaces.
//
//==============================================================================
//==============================================================================
[restricted, object, uuid(e2461059-b06e-11d0-ad61-00c04fd8fdff)]
interface IWbemRawObjectSink : IUnknown
{
HRESULT IndicateRaw(
[in] long lNumObjects,
[in, size_is(lNumObjects)] IWbemPropertySource** apObjects);
};
[restricted, object, local, uuid(a658b5d6-021d-11d1-ad74-00c04fd8fdff)]
interface IWbemDecorator : IUnknown
{
HRESULT DecorateObject([in] IWbemClassObject* pObject,
WBEM_WSTR wszNamespace);
HRESULT UndecorateObject([in] IWbemClassObject* pObject);
};
[restricted, object, local, uuid(a658b6d6-021d-11d1-ad74-00c04fd8fdff)]
interface IWbemLifeControl : IUnknown
{
HRESULT AddRefCore();
HRESULT ReleaseCore();
};
[restricted, object, uuid(a553f3f0-3805-11d0-b6b2-00aa003240c7)]
interface IWbemEventSubsystem_m4 : IUnknown
{
HRESULT ProcessInternalEvent(
[in] LONG lSendType,
[in] BSTR strReserved1,
[in] BSTR strReserved2,
[in] BSTR strReserved3,
[in] unsigned long dwReserved1,
[in] unsigned long dwReserved2,
[in] unsigned long dwNumObjects,
[in, size_is(dwNumObjects)] IWbemClassObject** apObjects,
[in] IWbemContext* pContext
);
HRESULT VerifyInternalEvent(
[in] LONG lSendType,
[in] BSTR strReserved1,
[in] BSTR strReserved2,
[in] BSTR strReserved3,
[in] unsigned long dwReserved1,
[in] unsigned long dwReserved2,
[in] unsigned long dwNumObjects,
[in, size_is(dwNumObjects)] IWbemClassObject** apObjects,
[in] IWbemContext* pContext
);
HRESULT RegisterNotificationSink(
[in] WBEM_WSTR wszNamespace,
[in] WBEM_WSTR wszQueryLanguage,
[in] WBEM_WSTR wszQuery,
[in] long lFlags,
[in] IWbemContext* pContext,
[in] IWbemObjectSink* pSink);
HRESULT RemoveNotificationSink(
[in] IWbemObjectSink* pSink);
HRESULT GetNamespaceSink(
[in] WBEM_WSTR wszNamespace,
[out] IWbemObjectSink** ppNamespaceSink);
HRESULT Initialize(
[in] WBEM_WSTR wszServerName,
[in] IWbemLocator* pAdminLocator,
[in] IUnknown* pServices);
HRESULT Shutdown();
};
[object, restricted, uuid(6c19be32-7500-11d1-ad94-00c04fd8fdff)]
interface IWbemMetaData : IUnknown
{
HRESULT GetClass(
[in, string] LPCWSTR wszClassName,
[in] IWbemContext* pContext,
[out] IWbemClassObject** ppClass);
};
typedef struct tag_WBEM_EVENT_BLOB
{
/*
[string] LPWSTR m_wszClassName;
long m_lBlobLength;
[size_is(m_lBlobLength)] byte* m_aBlob;
*/
IWbemClassObject* m_pEventObj;
} WBEM_EVENT_BLOB;
typedef struct tag_WBEM_REM_SYNCH_TARGETS
{
long m_lNumTargets;
[size_is(m_lNumTargets)] long* m_alTargets;
} WBEM_REM_SYNCH_TARGETS;
typedef struct tag_WBEM_REM_TARGETS
{
WBEM_REM_SYNCH_TARGETS m_SynchTargets;
WBEM_REM_SYNCH_TARGETS m_AsynchTargets;
} WBEM_REM_TARGETS;
[object, restricted, uuid(755f9da6-7508-11d1-ad94-00c04fd8fdff)]
interface IWbemMultiTarget : IUnknown
{
HRESULT DeliverEvent(
[in] WBEM_EVENT_BLOB* pEvent,
[in] WBEM_REM_TARGETS* pTargets);
HRESULT DeliverStatus(
[in] long lFlags,
[in] HRESULT hresStatus,
[in, string] LPCWSTR wszStatus,
[in] IWbemClassObject* pErrorObj,
[in] WBEM_REM_TARGETS* pTargets);
};
typedef enum tag_WBEM_FILTER_TARGET_TYPE
{
WBEM_FILTER_TARGET_TYPE_NONE,
WBEM_FILTER_TARGET_TYPE_INTERNAL,
WBEM_FILTER_TARGET_TYPE_MARSHALLED,
WBEM_FILTER_TARGET_TYPE_LOADABLE,
} WBEM_FILTER_TARGET_TYPE;
/*
typedef struct tag_WBEM_FILTER_TARGET_INTERNAL_INFO
{
IWbemMultiTarget* m_pTarget;
long m_lIndex;
} WBEM_FILTER_TARGET_INTERNAL_INFO;
*/
typedef struct tag_WBEM_FILTER_TARGET_LOAD_INFO
{
CLSID m_clsidConsumerProvider;
IWbemClassObject* m_pLogicalConsumer;
IWbemUnboundObjectSink* m_pCached;
} WBEM_FILTER_TARGET_LOAD_INFO;
typedef struct tag_WBEM_FILTER_TARGET_MARSHALLED_INFO
{
IWbemUnboundObjectSink* m_pSink;
IWbemClassObject* m_pLogicalConsumer;
} WBEM_FILTER_TARGET_MARSHALLED_INFO;
typedef [switch_type(long)] union tag_WBEM_FILTER_TARGET_DATA
{
[case(WBEM_FILTER_TARGET_TYPE_INTERNAL)]
long m_lIndex;
[case(WBEM_FILTER_TARGET_TYPE_MARSHALLED)]
WBEM_FILTER_TARGET_MARSHALLED_INFO m_MarshInfo;
[case(WBEM_FILTER_TARGET_TYPE_LOADABLE)]
WBEM_FILTER_TARGET_LOAD_INFO m_LoadInfo;
[default]
;
} WBEM_FILTER_TARGET_DATA;
typedef struct tag_WBEM_FILTER_TARGET
{
long m_lType;
[switch_is(m_lType)] WBEM_FILTER_TARGET_DATA m_Data;
boolean m_bSynch;
} WBEM_FILTER_TARGET;
typedef struct tag_WBEM_FILTER_TARGETS
{
long m_lNumTargets;
[size_is(m_lNumTargets)] WBEM_FILTER_TARGET* m_aTargets;
} WBEM_FILTER_TARGETS;
[object, restricted, uuid(6c19be33-7500-11d1-ad94-00c04fd8fdff)]
interface IWbemFilterProxy : IUnknown
{
HRESULT Initialize(
[in] IWbemMetaData* pMetaData,
[in] IWbemMultiTarget* pMultiTarget);
HRESULT Lock();
HRESULT Unlock();
HRESULT AddFilter(
[in] IWbemContext* pContext,
[in, string] LPCWSTR wszQuery,
[in] WBEM_FILTER_TARGETS* pTargets);
HRESULT AddFilterTarget(
[in] IWbemContext* pContext,
[in] long lFilterIndex,
[in] WBEM_FILTER_TARGET* pTarget);
HRESULT RemoveFilterTarget(
[in] IWbemContext* pContext,
[in] long lFilterIndex,
[in] WBEM_FILTER_TARGET* pTarget);
HRESULT RemoveFilter(
[in] IWbemContext* pContext,
[in] long lFilterIndex);
HRESULT RemoveAllFilters(
[in] IWbemContext* pContext);
HRESULT AddDefinitionQuery(
[in] IWbemContext* pContext,
[in] LPCWSTR wszQuery);
HRESULT RemoveAllDefinitionQueries(
[in] IWbemContext* pContext);
HRESULT Disconnect();
};
[object, restricted, uuid(6c19be34-7500-11d1-ad94-00c04fd8fdff)]
interface IWbemFilterStub : IUnknown
{
HRESULT RegisterProxy(
[in] IWbemFilterProxy* pProxy);
HRESULT UnregisterProxy(
[in] IWbemFilterProxy* pProxy);
};
typedef GUID REQUESTID;
[restricted, 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);
};
//==============================================================================
//==============================================================================
//
// Hi-perf specific interfaces.
//
//==============================================================================
//==============================================================================
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_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(00b87752-57da-11d1-ad87-00c04fd8fdff)]
interface IWbemRemoteRefresher : IUnknown
{
HRESULT RemoteRefresh(
[in] long lFlags,
[out] long* plNumObjects,
[out, size_is(,*plNumObjects)] WBEM_REFRESHED_OBJECT** paObjects);
HRESULT StopRefreshing(
[in] long lRequestId,
[in] long lFlags);
};
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;
} 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
{
IWbemRefresher* m_pRefresher;
IWbemObjectAccess* m_pRefreshedObject;
IWbemHiPerfProvider* m_pProvider;
} WBEM_REFRESH_INFO_DIRECT;
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;
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_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;
[restricted, uuid(f72cacf8-57d9-11d1-ad87-00c04fd8fdff)]
interface IWbemRefreshingServices : IUnknown
{
HRESULT AddObjectToRefresher(
[in] WBEM_REFRESHER_ID* pRefresherId,
[in, string] LPCWSTR wszPath,
[in] long lFlags,
[in] IWbemContext* pContext,
[out] WBEM_REFRESH_INFO* pInfo);
HRESULT RemoveObjectFromRefresher(
[in] WBEM_REFRESHER_ID* pRefresherId,
[in] long lId,
[in] long lFlags);
};
[restricted, local, uuid(504e6fe4-dfcd-11d1-adb4-00c04fd8fdff)]
interface IWbemUnloadingControl : IUnknown
{
HRESULT SetMustPreventUnloading([in] boolean bPrevent);
};
//
// IWbemObjectInternals
//
// Allows access to internal elements of the BLOB backing
// a WBEM object.
//
// It's main intent is to allow us to break apart and/or
// disable components while marshalling/unmarshalling and
// then repackage said components at a later point in time.
//
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;
[local, restricted, object, uuid(7A7EC9AE-11D6-11d2-B5F9-00104B703EFD)]
interface IWbemObjectInternals : IUnknown
{
HRESULT QueryObjectInfo(
[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();
};
//
// IEnumWCOSmartEnum
//
// 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.
//
// Because it uses private data structures, it is intended to remain as an
// internal only interface.
//
[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
);
};
/*
Client programming notes:
(1) Client takes IWbemServices, and does QI to get IWbemPerfDataServices
(2) Client retrieves objects through normal means, and can QI any IWbemClassObject
to get IWbemClassObjectEx.
(3) IWbemClassObjectEx will support scalar types VT_I4, VT_UI4, VT_I8, VT_UI8, VT_LPWSTR
(4) To get continuous data, client must call IWbemPerfDataServices::GetRefresherByObject
or IWbemPerfDataServices::GetRefreshByPath.
(5) Client executes IWbemRefresher::Refresh() and then the associated object is updated.
The object can again be retrieved through IWbemRefresher::GetObject. However, the
pointer could simply have been maintained throughout.
(6) After a GetObject() or Refresh(), the object maintains its state, and can be
alternately accessed via IWbemClassObject or IWbemClassObjectEx.
How does the client proxy know whether to carry out the refresh through the shared
memory, local refresh, or remote?
Answer: When GetRefresherByObject/...ByPath is called, a search is made for the object
in CIMOM. If an in-proc provider is supported it will be transparently loaded
into
Provider programming notes:
(1) Provider's class is in the repository.
(2) Provider implements IWbemTimeCriticalProvider. The namespace is understood
by the registration & CLSID.
(3) QueryInstances() returns the instances to the provided sink.
(4) CreateObjectRefresher() returns a refresher for a given instance.
The incoming object is for reference purposes.
The provider takes the incoming object or an equivalent one and
calls MapObject(). The mapped object is gauranteed to be in shared
memory.
(5) Provider implements IWbemRefresher. When Refresh() is called
the provider calls Lock() and updates the local copy mapped to
the blob, followed by Unlock().
[a] Provider can be CIMOM hosted, client-hosted, self-hosted, or remote-hosted.
Continuous provider:
(1) Becomes a general purpose provider, hosted by CIMOM.
(2) Provider calls GetObject on class def, and creates the necessary
instances.
(3) Each instance is mapped using MapObject().
(4) Properties are directly updated as required.
(5) Provider can release any pointers held to CIMOM. However,
if the provider is in-proc to CIMOM, this could result in
the provider getting itself unloaded. Only out-of-proc
providers need to worry about this.
(6) Provider calls Lock() and updates the properties, followed
by Unlock().
(7) When client executes Refresh(), which calls Lock(), does a blob
copy and then an Unlock().
problems: Provider needs an IWbemServices pointer to get class definitions.
*/
[uuid(027947f3-d731-11ce-a357-000000000001)]
library WbemInternal_v1
{
importlib("stdole2.tlb");
typedef enum tag_WBEM_MISC_FLAG_TYPE
{
WBEM_FLAG_NO_CLASS_PROVIDERS = 0x40,
WBEM_FLAG_NO_EVENTS = 0x20,
WBEM_FLAG_IGNORE_IDS = 0x80
} WBEM_MISC_FLAG_TYPE;
interface IWbemPropertySource;
interface IWbemRawObjectSink;
interface IWbemDecorator;
interface IWbemEventSubsystem_m4;
interface IWbemCausalityAccess;
interface IWbemRefreshingServices;
interface IWbemRemoteRefresher;
interface IWbemMetaData;
interface IWbemFilterStub;
interface IWbemFilterProxy;
interface IWbemLifeControl;
/////////////////////////////////////////////////////////
//
// Marshaling proxy for WbemClassObjec
//
[restricted, uuid(4590f812-1d3a-11d0-891f-00aa004b2e24)]
coclass WbemClassObjectProxy
{
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;
};
interface IWbemRefresher;
interface IWbemConfigureRefresher;
interface IWbemHiPerfProvider;
[restricted, uuid(c71566f2-561e-11d1-ad87-00c04fd8fdff)]
coclass WbemRefresher
{
interface IMarshal;
interface IWbemRefresher;
interface IWbemConfigureRefresher;
};
};