1075 lines
37 KiB
C++
1075 lines
37 KiB
C++
|
|
|
|
/*++
|
|
|
|
Copyright (C) 1996-2001 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
WBEMNAME.H
|
|
|
|
Abstract:
|
|
|
|
Implements the COM layer of WINMGMT --- the class representing a namespace.
|
|
It is defined in wbemname.h
|
|
|
|
History:
|
|
|
|
23-Jul-96 raymcc Created.
|
|
3/10/97 levn Fully documented (ha ha)
|
|
22-Feb-00 raymcc Whistler revisions/extensions
|
|
|
|
--*/
|
|
|
|
#ifndef _WBEM_NAME_H_
|
|
#define _WBEM_NAME_H_
|
|
|
|
#define WBEM_FLAG_NO_STATIC 0x80000000
|
|
#define WBEM_FLAG_ONLY_STATIC 0x40000000
|
|
|
|
class CFlexAceArray;
|
|
|
|
struct SAssocTriad
|
|
{
|
|
IWbemClassObject *m_pEp1;
|
|
IWbemClassObject *m_pEp2;
|
|
IWbemClassObject *m_pAssoc;
|
|
|
|
SAssocTriad() { m_pEp1 = 0; m_pEp2 = 0; m_pAssoc = 0; }
|
|
~SAssocTriad() { ReleaseIfNotNULL(m_pEp1); ReleaseIfNotNULL(m_pEp2); ReleaseIfNotNULL(m_pAssoc); }
|
|
|
|
static void ArrayCleanup(CFlexArray &Array)
|
|
{
|
|
for (int i = 0; i < Array.Size(); i++)
|
|
delete (SAssocTriad *) Array[i];
|
|
Array.Empty();
|
|
}
|
|
};
|
|
|
|
//******************************************************************************
|
|
//******************************************************************************
|
|
//
|
|
// class CWbemNamespace
|
|
//
|
|
// This class represents the COM layer of WINMGMT --- what the client sees. An
|
|
// instance of this class is created whenever a namespace is opened by a client
|
|
// (at the moment, we don't cache namespace pointers, so if a client opens the
|
|
// same namespace twice, we will create to of these).
|
|
//
|
|
//******************************************************************************
|
|
//
|
|
// Constructor
|
|
//
|
|
// Enumerates all the class providers in this namespace (instances of
|
|
// __Win32Provider with the method mask indicating a class provider), loads
|
|
// them all and initializes them by calling ConnectServer.
|
|
//
|
|
//******************************************************************************
|
|
//*************************** interface IWbemServices **************************
|
|
//
|
|
// See help for documentation of the IWbemServices interface.
|
|
//
|
|
//******************************************************************************
|
|
//************************** helper functions **********************************
|
|
//
|
|
// Are documented in the wbemname.cpp file.
|
|
//
|
|
//******************************************************************************
|
|
|
|
class CWbemNamespace :
|
|
public IWbemServicesEx,
|
|
public IWbemInternalServices,
|
|
public IWbemShutdown,
|
|
public IWbemUnloadingControl
|
|
{
|
|
public:
|
|
enum ERestriction
|
|
{
|
|
e_NoRestriction = 0,
|
|
e_RestrictionDisabled,
|
|
e_RestrictionNoClassProv,
|
|
e_RestrictionStaticOnly
|
|
};
|
|
|
|
enum EIFaceType
|
|
{
|
|
eNull = 0,
|
|
eNamespace = 1,
|
|
eScope = 2,
|
|
eCollection = 3
|
|
};
|
|
|
|
protected:
|
|
friend class CQueryEngine;
|
|
|
|
DWORD m_dwIfaceType;
|
|
BOOL m_bShutDown;
|
|
// Collection-related
|
|
IWbemClassObject *m_pCollectionClass;
|
|
IWbemClassObject *m_pCollectionEp;
|
|
LPWSTR m_pszCollectionEpPath;
|
|
long m_lEpRefPropHandle;
|
|
long m_lTargetRefPropHandle;
|
|
|
|
//
|
|
DWORD Status;
|
|
ULONG m_uSecondaryRefCount;
|
|
ULONG m_uPrimaryRefCount; // owned by the arbitrator
|
|
LONG m_lConfigFlags;
|
|
|
|
IWmiDbSession *m_pSession;
|
|
IWmiDbController *m_pDriver;
|
|
IWmiDbHandle *m_pNsHandle;
|
|
IWmiDbHandle *m_pScopeHandle;
|
|
_IWmiArbitrator *m_pArb;
|
|
BOOL m_bSubscope;
|
|
|
|
LPWSTR m_pThisNamespace;
|
|
|
|
DWORD m_dwPermission;
|
|
DWORD m_dwSecurityFlags;
|
|
LPWSTR m_wszUserName;
|
|
ERestriction m_eRestriction;
|
|
BOOL m_bProvider;
|
|
BOOL m_bESS;
|
|
BOOL m_bForClient;
|
|
ULONG m_uClientMask;
|
|
CRITICAL_SECTION m_cs;
|
|
WString m_wsLocale;
|
|
CNtSecurityDescriptor m_sd;
|
|
CNtSecurityDescriptor m_sdCheckAdmin;
|
|
BOOL m_bSecurityInitialized;
|
|
BOOL m_bNT;
|
|
|
|
DWORD m_dwTransactionState;
|
|
GUID *m_pTransGuid;
|
|
|
|
_IWmiProviderFactory *m_pProvFact;
|
|
_IWmiCoreServices *m_pCoreSvc;
|
|
|
|
BOOL m_bRepositOnly;
|
|
IUnknown *m_pRefreshingSvc;
|
|
IUnknown *m_pWbemComBinding;
|
|
LPWSTR m_pszClientMachineName;
|
|
DWORD m_dwClientProcessID;
|
|
|
|
// No access
|
|
CWbemNamespace();
|
|
~CWbemNamespace();
|
|
|
|
|
|
// Async impl entry points
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _GetObjectAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler
|
|
);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _PutClassAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN IWbemClassObject __RPC_FAR *pObject,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _DeleteClassAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _CreateClassEnumAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strSuperclass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _PutInstanceAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN IWbemClassObject __RPC_FAR *pInst,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _DeleteInstanceAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _CreateInstanceEnumAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strFilter,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _ExecQueryAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _ExecNotificationQueryAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _ExecMethodAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strObjectPath,
|
|
IN const BSTR strMethodName,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemClassObject __RPC_FAR *pInParams,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _OpenAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strScope,
|
|
IN const BSTR strParam,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _AddAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _RemoveAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _RefreshObjectAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN OUT IWbemClassObject __RPC_FAR *__RPC_FAR *pTarget,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE _RenameObjectAsync(
|
|
IN ULONG uInternalFlags,
|
|
IN _IWmiFinalizer *p,
|
|
IN _IWmiCoreHandle *phTask,
|
|
IN const BSTR strOldObjectPath,
|
|
IN const BSTR strNewObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
HRESULT CreateNamespace(CWbemInstance *pNewInst);
|
|
|
|
public:
|
|
/* IUnknown methods */
|
|
STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);
|
|
STDMETHOD_(ULONG, AddRef)(THIS);
|
|
STDMETHOD_(ULONG, Release)(THIS);
|
|
|
|
// Real entry points
|
|
|
|
|
|
// IWbemServices
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OpenNamespace(
|
|
IN const BSTR strNamespace,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemServices __RPC_FAR *__RPC_FAR *ppWorkingNamespace,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE CancelAsyncCall(
|
|
IN IWbemObjectSink __RPC_FAR *pSink);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE QueryObjectSink(
|
|
IN long lFlags,
|
|
/* [out] */ IWbemObjectSink __RPC_FAR *__RPC_FAR *ppResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE GetObject(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE GetObjectAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutClass(
|
|
IN IWbemClassObject __RPC_FAR *pObject,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutClassAsync(
|
|
IN IWbemClassObject __RPC_FAR *pObject,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteClass(
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteClassAsync(
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE CreateClassEnum(
|
|
IN const BSTR strSuperclass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE CreateClassEnumAsync(
|
|
IN const BSTR strSuperclass,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutInstance(
|
|
IN IWbemClassObject __RPC_FAR *pInst,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutInstanceAsync(
|
|
IN IWbemClassObject __RPC_FAR *pInst,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteInstance(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteInstanceAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnum(
|
|
IN const BSTR strFilter,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE CreateInstanceEnumAsync(
|
|
IN const BSTR strFilter,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecQuery(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecQueryAsync(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecNotificationQuery(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [out] */ IEnumWbemClassObject __RPC_FAR *__RPC_FAR *ppEnum);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecNotificationQueryAsync(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecMethod(
|
|
IN const BSTR strObjectPath,
|
|
IN const BSTR strMethodName,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemClassObject __RPC_FAR *pInParams,
|
|
/* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppOutParams,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE ExecMethodAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN const BSTR strMethodName,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemClassObject __RPC_FAR *pInParams,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
|
|
|
|
// IWbemServicesEx
|
|
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE Open(
|
|
IN const BSTR strScope,
|
|
IN const BSTR strParam,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemServicesEx __RPC_FAR *__RPC_FAR *ppScope,
|
|
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE OpenAsync(
|
|
IN const BSTR strScope,
|
|
IN const BSTR strParam,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE Add(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE AddAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE Remove(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE RemoveAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE RefreshObject(
|
|
/* [out][in] */ IWbemClassObject __RPC_FAR *__RPC_FAR *pTarget,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE RefreshObjectAsync(
|
|
/* [out][in] */ IWbemClassObject __RPC_FAR *__RPC_FAR *pTarget,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE RenameObject(
|
|
IN const BSTR strOldObjectPath,
|
|
IN const BSTR strNewObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE RenameObjectAsync(
|
|
IN const BSTR strOldObjectPath,
|
|
IN const BSTR strNewObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteObject(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE DeleteObjectAsync(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutObject(
|
|
IN IWbemClassObject __RPC_FAR *pObj,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
/* [unique][in][out] */ IWbemCallResult __RPC_FAR *__RPC_FAR *ppCallResult);
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE PutObjectAsync(
|
|
IN IWbemClassObject __RPC_FAR *pObj,
|
|
IN long lFlags,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN IWbemObjectSink __RPC_FAR *pResponseHandler);
|
|
|
|
// IWbemInternalServices
|
|
|
|
STDMETHOD(FindKeyRoot)(LPCWSTR wszClassName,
|
|
IWbemClassObject** ppKeyRootClass);
|
|
STDMETHOD(InternalGetClass)(
|
|
LPCWSTR wszClassName,
|
|
IWbemClassObject** ppClass);
|
|
|
|
STDMETHOD(InternalGetInstance)(
|
|
LPCWSTR wszPath,
|
|
IWbemClassObject** ppInstance);
|
|
|
|
STDMETHOD(InternalExecQuery)(
|
|
LPCWSTR wszQueryLanguage,
|
|
LPCWSTR wszQuery,
|
|
long lFlags,
|
|
IWbemObjectSink* pSink);
|
|
|
|
STDMETHOD(InternalCreateInstanceEnum)(
|
|
LPCWSTR wszClassName,
|
|
long lFlags,
|
|
IWbemObjectSink* pSink);
|
|
|
|
STDMETHOD(GetDbInstance)(
|
|
LPCWSTR wszDbKey,
|
|
IWbemClassObject** ppInstance);
|
|
|
|
STDMETHOD(GetDbReferences)(
|
|
IWbemClassObject* pEndpoint,
|
|
IWbemObjectSink* pSink);
|
|
|
|
STDMETHOD(InternalPutInstance)(
|
|
IWbemClassObject* pInst);
|
|
|
|
|
|
// IWbemShutdown
|
|
|
|
|
|
virtual HRESULT STDMETHODCALLTYPE Shutdown(
|
|
IN LONG uReason,
|
|
IN ULONG uMaxMilliseconds,
|
|
IN IWbemContext __RPC_FAR *pCtx);
|
|
|
|
|
|
/* IWbemUnloadingControl methods */
|
|
|
|
STDMETHOD(SetMustPreventUnloading)(boolean bPrevent);
|
|
|
|
|
|
// Other
|
|
|
|
STDMETHOD(GetNormalizedPath)( BSTR pstrPath, BSTR* pstrStandardPath );
|
|
|
|
|
|
static CWbemNamespace* CreateInstance();
|
|
|
|
HRESULT Initialize(
|
|
LPWSTR pName,
|
|
LPWSTR wszUserName,
|
|
DWORD dwSecFlags,
|
|
DWORD dwPermission,
|
|
BOOL bForClient,
|
|
BOOL bRepositOnly,
|
|
LPCWSTR pszClientMachineName,
|
|
DWORD dwClientProcessID,
|
|
BOOL bSkipSDInitialize,
|
|
IWmiDbSession *pParentSession
|
|
);
|
|
|
|
int __cdecl taskprintf(const char *fmt, ...);
|
|
|
|
public:
|
|
|
|
IWmiDbHandle *GetNsHandle() { return m_pNsHandle; }
|
|
IWmiDbSession *GetNsSession() { return m_pSession; }
|
|
IWmiDbHandle *GetScope() { return m_pScopeHandle; }
|
|
BOOL IsSubscope() { return m_bSubscope; }
|
|
|
|
INTERNAL LPWSTR GetName() {return m_pThisNamespace;}
|
|
|
|
DWORD& GetStatus() {return Status;}
|
|
LONG GetConfigurationFlags();
|
|
INTERNAL LPWSTR GetUserName() {return m_wszUserName;}
|
|
INTERNAL void SetUserName(LPWSTR wName);
|
|
DWORD GetSecurityFlags() {return m_dwSecurityFlags;}
|
|
bool Allowed(DWORD dwRequired);
|
|
void SetRestriction(ERestriction eRestriction)
|
|
{m_eRestriction = eRestriction;}
|
|
|
|
void SetIsProvider(BOOL bProvider)
|
|
{m_bProvider = bProvider;}
|
|
|
|
void SetIsESS ( BOOL bESS )
|
|
{ m_bESS = bESS; }
|
|
|
|
BOOL GetIsESS ( ) { return m_bESS; }
|
|
BOOL GetIsProvider ( ) { return m_bProvider ; }
|
|
|
|
// void MapSink(IWbemObjectSink* pSink, CWrapperSink* pWrapper);
|
|
// void UnmapSink(IWbemObjectSink* pSink, CWrapperSink* pWrapper);
|
|
// CWrapperSink* FindWrapper(IWbemObjectSink* pSink);
|
|
|
|
void SetLocale(LPCWSTR wszLocale) {m_wsLocale = wszLocale;}
|
|
LPCWSTR GetLocale() {return m_wsLocale;}
|
|
LPWSTR GetClientMachine(){return m_pszClientMachineName;};
|
|
DWORD GetClientProcID(){return m_dwClientProcessID;};
|
|
|
|
HRESULT AdjustPutContext(IWbemContext *pCtx);
|
|
HRESULT MergeGetKeysCtx(IN IWbemContext *pCtx);
|
|
|
|
|
|
HRESULT SplitLocalized (CWbemObject *pOriginal, CWbemObject *pStoredObj = NULL);
|
|
HRESULT FixAmendedQualifiers(IWbemQualifierSet *pOriginal, IWbemQualifierSet *pNew);
|
|
|
|
// Worker functions for sync/async
|
|
// ===============================
|
|
|
|
HRESULT Exec_DeleteClass(LPWSTR wszClass, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_GetObjectByPath(READONLY LPWSTR wszObjectPath, long lFlags,
|
|
IWbemContext* pContext, IWbemClassObject** ppObj,
|
|
IWbemClassObject** ppErrorObj);
|
|
HRESULT Exec_GetObject(READONLY LPWSTR wszObjectPath, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_DeleteInstance(LPWSTR wszObjectPath, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_PutClass(IWbemClassObject* pClass, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink, BOOL fIsInternal = FALSE);
|
|
HRESULT Exec_PutInstance(IWbemClassObject* pInstance, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_CreateClassEnum(LPWSTR wszParent, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_CreateInstanceEnum(LPWSTR wszClass, long lFlags,
|
|
IWbemContext* pContext, CBasicObjectSink* pSink);
|
|
HRESULT Exec_ExecMethod(LPWSTR wszObjectPath, LPWSTR wszMethodName,
|
|
long lFlags, IWbemClassObject *pInParams, IWbemContext *pCtx,
|
|
CBasicObjectSink* pSink);
|
|
static HRESULT Exec_CancelAsyncCall(IWbemObjectSink* pSink);
|
|
static HRESULT Exec_CancelProvAsyncCall( IWbemServices* pProv, IWbemObjectSink* pSink );
|
|
HRESULT GetImplementationClass(IWbemClassObject *pTestObj,
|
|
LPWSTR wszMethodName, IWbemContext* pCtx,
|
|
IWbemClassObject **pClassObj);
|
|
HRESULT Exec_GetInstance(LPCWSTR wszObjectPath,
|
|
IWbemPath* pParsedPath, long lFlags, IWbemContext* Context,
|
|
CBasicObjectSink* pSink);
|
|
|
|
HRESULT Exec_GetClass(LPCWSTR wszClassName,
|
|
long lFlags, IWbemContext* Context, CBasicObjectSink* pSink);
|
|
|
|
HRESULT Exec_Open(LPWSTR pszScope, LPWSTR pszParam,
|
|
LONG lUserFlags, IWbemContext *pCtx, IWbemObjectSinkEx *pSink
|
|
);
|
|
|
|
HRESULT Exec_Rename(LPWSTR pszOld, LPWSTR pszNew, LONG lUserFlags, IWbemContext *pCtx, IWbemObjectSink *pSink);
|
|
|
|
HRESULT Exec_Add(LPWSTR pszPath, LONG lUserFlags, IWbemContext *pCtx, IWbemObjectSink *pSink);
|
|
HRESULT Exec_Remove(LPWSTR pszPath, LONG lUserFlags, IWbemContext *pCtx, IWbemObjectSink *pSink);
|
|
HRESULT Exec_Refresh(IWbemClassObject *pObj, LONG lUserFlags, IWbemContext *pCtx, IWbemObjectSink *pSink);
|
|
|
|
HRESULT SetErrorObj(IWbemClassObject* pErrorObj);
|
|
HRESULT RecursivePutInstance(CWbemInstance* pInst,
|
|
CWbemClass* pClassDef, long lFlags, IWbemContext* pContext,
|
|
CBasicObjectSink* pSink, BOOL bLast);
|
|
|
|
HRESULT RecursiveDeleteInstance(LPCWSTR wszObjectPath,
|
|
CDynasty* pDynasty, long lFlags, IWbemContext* pContext,
|
|
CBasicObjectSink* pSink);
|
|
HRESULT DeleteSingleInstance(
|
|
READONLY LPWSTR wszObjectPath, long lFlags, IWbemContext* pContext,
|
|
CBasicObjectSink* pSink);
|
|
|
|
HRESULT InternalPutStaticClass( IWbemClassObject* pClass );
|
|
|
|
|
|
// Assoc-by-rule helpers
|
|
// =====================
|
|
|
|
HRESULT ManufactureAssocs(
|
|
IN IWbemClassObject *pAssocClass,
|
|
IN IWbemClassObject *pEp, // Optional
|
|
IN IWbemContext *pCtx,
|
|
IN LPWSTR pszJoinQuery,
|
|
OUT CFlexArray &aTriads
|
|
);
|
|
|
|
HRESULT BuildAssocTriads(
|
|
IN IWbemClassObject *pAssocClass,
|
|
IN IWbemClassObject *pClsDef1,
|
|
IN IWbemClassObject *pClsDef2,
|
|
IN LPWSTR pszJoinProp1,
|
|
IN LPWSTR pszJoinProp2,
|
|
IN LPWSTR pszAssocRef1, // Prop which points to EP1
|
|
IN LPWSTR pszAssocRef2, // Prop which points to EP2
|
|
IN CFlexArray &aEp1,
|
|
IN CFlexArray &aEp2,
|
|
IN OUT CFlexArray &aTriads
|
|
);
|
|
|
|
HRESULT BuildRuleBasedPathToInst(
|
|
IN IWbemClassObject *pEp,
|
|
IN LPWSTR pszJoinProp1,
|
|
IN IWbemClassObject *pEp2,
|
|
IN LPWSTR pszJoinProp2,
|
|
OUT WString &wsNewPath
|
|
);
|
|
|
|
HRESULT ExtractEpInfoFromQuery(
|
|
IWbemQuery *pQuery,
|
|
LPWSTR *pszClass1,
|
|
LPWSTR *pszProp1,
|
|
LPWSTR *pClass2,
|
|
LPWSTR *pszProp2
|
|
);
|
|
|
|
HRESULT MapAssocRefsToClasses(
|
|
IN IWbemClassObject *pAssocClass,
|
|
IN IWbemClassObject *pClsDef1,
|
|
IN IWbemClassObject *pClsDef2,
|
|
IN LPWSTR *pszAssocRef1,
|
|
OUT LPWSTR *pszAssocRef2
|
|
);
|
|
|
|
|
|
// Property provider access.
|
|
// =========================
|
|
|
|
typedef enum {GET, PUT} Operation;
|
|
|
|
HRESULT GetOrPutDynProps (
|
|
|
|
IWbemClassObject *pObj,
|
|
Operation op,
|
|
BOOL bIsDynamic = false
|
|
);
|
|
|
|
HRESULT Exec_DynAux_GetInstances (
|
|
|
|
READONLY CWbemObject *pClassDef,
|
|
long lFlags,
|
|
IWbemContext* pCtx,
|
|
CBasicObjectSink* pSink
|
|
) ;
|
|
|
|
HRESULT DynAux_GetInstances (
|
|
|
|
CWbemObject *pClassDef,
|
|
long lFlags,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink,
|
|
BOOL bComplexQuery
|
|
) ;
|
|
|
|
HRESULT DynAux_GetInstance (
|
|
|
|
LPWSTR pObjPath,
|
|
long lFlags,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink
|
|
);
|
|
|
|
HRESULT DynAux_AskRecursively (
|
|
|
|
CDynasty* pDynasty,
|
|
long lFlags,
|
|
LPWSTR wszObjectPath,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink
|
|
);
|
|
|
|
HRESULT DynAux_GetSingleInstance (
|
|
|
|
CWbemClass* pClassDef,
|
|
long lFlags,
|
|
LPWSTR wszObjectPath,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink
|
|
);
|
|
|
|
HRESULT Exec_DynAux_ExecQueryAsync (
|
|
|
|
CWbemObject* pClassDef,
|
|
LPWSTR Query,
|
|
LPWSTR QueryFormat,
|
|
long lFlags,
|
|
IWbemContext* pCtx,
|
|
CBasicObjectSink* pSink
|
|
) ;
|
|
|
|
HRESULT DynAux_ExecQueryAsync (
|
|
|
|
CWbemObject* pClassDef,
|
|
LPWSTR Query,
|
|
LPWSTR QueryFormat,
|
|
long lFlags,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink,
|
|
BOOL bComplexQuery
|
|
);
|
|
|
|
HRESULT DynAux_ExecQueryExtendedAsync(
|
|
|
|
LPWSTR wsProvider,
|
|
LPWSTR Query,
|
|
LPWSTR QueryFormat,
|
|
long lFlags,
|
|
IWbemContext* pCtx,
|
|
CComplexProjectionSink* pSink
|
|
) ;
|
|
|
|
HRESULT GetObjectByFullPath(
|
|
READONLY LPWSTR wszObjectPath,
|
|
IWbemPath * pOutput,
|
|
long lFlags,
|
|
IWbemContext* pContext,
|
|
CBasicObjectSink* pSink
|
|
);
|
|
|
|
HRESULT DynAux_BuildClassHierarchy(IN LPWSTR wszClassName,
|
|
IN LONG lFlags,
|
|
IN IWbemContext* pContext,
|
|
OUT CDynasty** ppDynasty,
|
|
OUT IWbemClassObject** ppErrorObj);
|
|
HRESULT DynAux_BuildChainUp(IN CDynasty* pOriginal,
|
|
IN IWbemContext* pContext,
|
|
OUT CDynasty** ppTop,
|
|
OUT IWbemClassObject** ppErrorObj);
|
|
|
|
HRESULT DecorateObject(IWbemClassObject* pObject);
|
|
BOOL IsDerivableClass(LPCWSTR wszClassName, CWbemClass* pClass);
|
|
|
|
static HRESULT IsPutRequiredForClass(CWbemClass* pClass,
|
|
CWbemInstance* pInst, IWbemContext* pContext,
|
|
BOOL bParentTakenCareOf);
|
|
|
|
static HRESULT DoesNeedToBePut(LPCWSTR wszName, CWbemInstance* pInst,
|
|
BOOL bRestrictedPut, BOOL bStrictNulls, BOOL bPropertyList,
|
|
CWStringArray& awsProperties);
|
|
|
|
static HRESULT GetContextPutExtensions(IWbemContext* pContext,
|
|
BOOL& bRestrictedPut, BOOL& bStrictNulls, BOOL& bPropertyList,
|
|
CWStringArray& awsProperties);
|
|
|
|
static HRESULT GetContextBoolean(IWbemContext* pContext,
|
|
LPCWSTR wszName, BOOL* pbValue);
|
|
|
|
void Enter() {EnterCriticalSection(&m_cs);}
|
|
void Leave() {LeaveCriticalSection(&m_cs);}
|
|
HRESULT GetAceList(CFlexAceArray **);
|
|
HRESULT PutAceList(CFlexAceArray *);
|
|
HRESULT InitializeSD(IWmiDbSession *pSession);
|
|
CNtSecurityDescriptor & GetSDRef(){return m_sd;};
|
|
DWORD GetUserAccess();
|
|
DWORD GetWin9XUserAccess();
|
|
DWORD GetNTUserAccess();
|
|
HRESULT EnsureSecurity();
|
|
void SetPermissions(DWORD dwPerm){m_dwPermission = dwPerm;};
|
|
HRESULT InitializeUserLists(CFlexAceArray & AllowList,CFlexAceArray & DenyList);
|
|
HRESULT SecurityMethod(LPWSTR wszMethodName, long lFlags,
|
|
IWbemClassObject *pInParams, IWbemContext *pCtx, IWbemObjectSink* pSink);
|
|
HRESULT GetSDMethod(IWbemClassObject* pOutParams);
|
|
HRESULT Get9XUserListMethod(IWbemClassObject* pOutParams);
|
|
HRESULT RecursiveSDMerge();
|
|
BOOL IsNamespaceSDProtected();
|
|
HRESULT GetParentsInheritableAces(CNtSecurityDescriptor &sd);
|
|
|
|
HRESULT SetSDMethod(IWbemClassObject* pInParams);
|
|
HRESULT Set9XUserListMethod(IWbemClassObject* pInParams);
|
|
HRESULT GetCallerAccessRightsMethod(IWbemClassObject* pOutParams);
|
|
|
|
static void EmptyObjectList(CFlexArray &);
|
|
|
|
// Helper function for refresher operations
|
|
HRESULT CreateRefreshableObjectTemplate(
|
|
LPCWSTR wszObjectPath, long lFlags,
|
|
IWbemClassObject** ppInst );
|
|
BOOL IsForClient(){return m_bForClient;};
|
|
HRESULT PossibleDbUpgrade(CFlexAceArray * pNew);
|
|
HRESULT EnumerateSecurityClassInstances(LPWSTR wszClassName,
|
|
IWbemObjectSink* pOwnSink, IWbemContext* pContext, long lFlags);
|
|
HRESULT PutSecurityClassInstances(LPWSTR wszClassName, IWbemClassObject * pClass,
|
|
IWbemObjectSink* pSink, IWbemContext* pContext, long lFlags);
|
|
HRESULT DeleteSecurityClassInstances(ParsedObjectPath* pParsedPath,
|
|
IWbemObjectSink* pSink, IWbemContext* pContext, long lFlags);
|
|
HRESULT GetSecurityClassInstances(ParsedObjectPath* pParsedPath, CBasicObjectSink* pSink,
|
|
IWbemContext* pContext,long lFlags);
|
|
|
|
|
|
HRESULT CheckNs();
|
|
|
|
HRESULT TestForVector(
|
|
IN IWbemClassObject *pVector,
|
|
OUT BSTR* strVectorPath
|
|
);
|
|
|
|
HRESULT InitNewTask(
|
|
IN CAsyncReq *pReq,
|
|
IN _IWmiFinalizer *pFnz,
|
|
IN ULONG uTaskType,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pAsyncClientSink
|
|
);
|
|
|
|
HRESULT CreateAsyncFinalizer(
|
|
IN IWbemContext *pContext,
|
|
IN IWbemObjectSink *pStartingSink,
|
|
IN _IWmiFinalizer **pFnz,
|
|
OUT IWbemObjectSinkEx **pResultSinkEx
|
|
);
|
|
|
|
HRESULT CreateSyncFinalizer(
|
|
IN IWbemContext *pContext,
|
|
IN _IWmiFinalizer **pFnz
|
|
);
|
|
|
|
HRESULT ExecSyncQuery(
|
|
IN LPWSTR pszQuery,
|
|
IN IWbemContext *pCtx,
|
|
IN LONG lFlags,
|
|
OUT CFlexArray &aDest
|
|
);
|
|
|
|
// Helper function to shell db queries out to different threads as appropriate
|
|
HRESULT Static_QueryRepository(
|
|
READONLY CWbemObject *pClassDef,
|
|
long lFlags,
|
|
IWbemContext* pCtx,
|
|
CBasicObjectSink* pSink ,
|
|
QL_LEVEL_1_RPN_EXPRESSION* pParsedQuery,
|
|
LPCWSTR pwszClassName,
|
|
CWmiMerger* pWmiMerger
|
|
);
|
|
|
|
// Two primary connect functions.
|
|
// ==============================
|
|
|
|
static HRESULT UniversalConnect(
|
|
IN CWbemNamespace *pParent,
|
|
IN IWbemContext *pCtx,
|
|
IN LPCWSTR pszNewScope,
|
|
IN LPCWSTR pszAssocSelector,
|
|
IN LPCWSTR pszUserName,
|
|
IN _IWmiCallSec *pCallSec,
|
|
IN _IWmiUserHandle *pUser,
|
|
IN DWORD dwUserFlags,
|
|
IN DWORD dwInternalFlags,
|
|
IN DWORD dwSecFlags,
|
|
IN DWORD dwPermission,
|
|
IN BOOL bForClient,
|
|
IN BOOL bRepositOnly,
|
|
IN LPCWSTR pszClientMachineName,
|
|
IN DWORD dwClientProcessID,
|
|
IN REFIID riid,
|
|
OUT LPVOID *pConnection
|
|
);
|
|
|
|
static HRESULT PathBasedConnect(
|
|
IN LPCWSTR pszPath,
|
|
IN LPCWSTR pszUser,
|
|
IN IWbemContext __RPC_FAR *pCtx,
|
|
IN ULONG uClientFlags,
|
|
IN DWORD dwSecFlags,
|
|
IN DWORD dwPermissions,
|
|
IN ULONG uInternalFlags,
|
|
IN LPCWSTR pszClientMachineName,
|
|
IN DWORD dwClientProcessID,
|
|
IN REFIID riid,
|
|
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *pServices
|
|
);
|
|
ULONG AddRefPrimary();
|
|
ULONG ReleasePrimary();
|
|
void StopClientCalls(){m_bShutDown = TRUE;};
|
|
HRESULT Dump(FILE *f); // Debug only
|
|
|
|
_IWmiCoreServices* GetCoreServices( void ) { return m_pCoreSvc; }
|
|
|
|
HRESULT GetDynamicReferenceClasses( long lFlags, IWbemContext* pCtx, IWbemObjectSink* pSink );
|
|
};
|
|
|
|
|
|
|
|
|
|
class COperationError
|
|
{
|
|
bool m_fOk;
|
|
COperationErrorSink* m_pSink;
|
|
public:
|
|
COperationError(CBasicObjectSink* pDest, LPCWSTR wszOperation,
|
|
LPCWSTR wszParam, BOOL bFinal = TRUE);
|
|
~COperationError();
|
|
HRESULT ErrorOccurred(HRESULT hres, IWbemClassObject* pErrorObj = NULL);
|
|
HRESULT ProviderReturned(LPCWSTR wszProviderName, HRESULT hres,
|
|
IWbemClassObject* pErrorObj = NULL);
|
|
void SetParameterInfo(LPCWSTR wszParam);
|
|
void SetProviderName(LPCWSTR wszName);
|
|
INTERNAL CBasicObjectSink* GetSink() {return m_pSink;}
|
|
|
|
bool IsOk( void ) { return m_fOk; }
|
|
};
|
|
|
|
|
|
|
|
class CFinalizingSink : public CForwardingSink
|
|
{
|
|
protected:
|
|
CWbemNamespace* m_pNamespace;
|
|
public:
|
|
CFinalizingSink(CWbemNamespace* pNamespace, CBasicObjectSink* pDest);
|
|
virtual ~CFinalizingSink();
|
|
|
|
STDMETHOD(Indicate)(long, IWbemClassObject**);
|
|
virtual IWbemObjectSink* GetIndicateSink() {return this;}
|
|
|
|
};
|
|
|
|
|
|
#endif
|
|
|
|
|