2025-04-27 07:49:33 -04:00

322 lines
12 KiB
C++

/*++
Copyright (C) 2000-2001 Microsoft Corporation
Module Name:
DSSVEXWRAP.H
Abstract:
Hides the ADSI interface behind a IWbemServices pointer
History:
davj 14-Mar-00 Created.
--*/
#ifndef __DSSVEXWRAP_H__
#define __DSSVEXWRAP_H__
#include <unk.h>
#include <wbemidl.h>
#include <wbemint.h>
#include <wbemcomn.h>
#include <sync.h>
//***************************************************************************
//
// class CWbemSvcExWrapper
//
// DESCRIPTION:
//
// This class wraps an IWbemServicesEx interface.
//
//***************************************************************************
class CDSSvcExWrapper : public IWbemServicesEx, public _IUmiSvcExWrapper
{
protected:
CCritSec m_cs;
IUmiContainer *m_pUmiContainer;
IUnknown* m_pWbemComBinding;
long m_cRef;
public:
CDSSvcExWrapper();
virtual ~CDSSvcExWrapper();
// Helper functions
HRESULT ConnectToDS(LPCWSTR User, LPCWSTR Password, IUmiURL * pPath, CLSID &clsid, IWbemContext *pCtx);
HRESULT GetObjectPreCall(const BSTR ObjectPath, long lFlags, IWbemContext* pContext,
IWbemClassObject** ppObject ,CDSCallResult * pCallRes,
IWbemObjectSink* pResponseHandler);
HRESULT RefreshObjectPreCall(IWbemClassObject** ppObject, long lFlags,
CDSCallResult * pCallRes, IWbemObjectSink* pResponseHandler);
HRESULT CreateEnumPreCall(const BSTR Class, long lFlags, IWbemContext* pContext,
IEnumWbemClassObject** ppEnum ,
IWbemObjectSink* pSink, bool bClass);
HRESULT EnumerateCursor(IUmiCursor * pCursor, long lFlags,
IEnumWbemClassObject** ppEnum ,
IWbemObjectSink* pSink, long lSecurityFlags);
HRESULT PutObjectPreCall(IWbemClassObject * pClass, long lFlags, IWbemContext* pContext,
CDSCallResult * pCallRes,
IWbemObjectSink* pResponseHandler);
HRESULT DeleteObjectPreCall(const BSTR ObjectPath, long lFlags, IWbemContext* pContext,
CDSCallResult * pCallRes,
IWbemObjectSink* pResponseHandler, bool bClass);
HRESULT RenameObjectPreCall(const BSTR OldPath, const BSTR NewPath, long lFlags, IWbemContext* pContext,
CDSCallResult * pCallRes,
IWbemObjectSink* pResponseHandler);
HRESULT OpenPreCall(const BSTR Path, long lFlags, IWbemContext* pContext,
IWbemServices** ppNewNamespace, IWbemServicesEx **ppScope,
CDSCallResult * pCallRes,
IWbemObjectSinkEx* pResponseHandler);
HRESULT ExecQueryPreCall(const BSTR QueryFormat, const BSTR Query, long lFlags,
IWbemContext* pContext, IEnumWbemClassObject** ppEnum ,
IWbemObjectSink* pSink);
HRESULT CheckSecuritySettings( long lFlags, IWbemContext* pContext, long* plSecFlags, BOOL fPut = FALSE );
void SetContainer(IUmiContainer * pCont){m_pUmiContainer = pCont; pCont->AddRef();};
//Non-delegating object IUnknown
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void)
{
InterlockedIncrement(&m_cRef);
return m_cRef;
}
STDMETHODIMP_(ULONG) Release(void)
{
long lTemp = InterlockedDecrement(&m_cRef);
if (0!= lTemp)
return lTemp;
delete this;
return 0;
}
// IWbemServicesEx
STDMETHOD(OpenNamespace)(
const BSTR Namespace,
LONG lFlags,
IWbemContext* pContext,
IWbemServices** ppNewNamespace,
IWbemCallResult** ppResult
);
STDMETHOD(CancelAsyncCall)(IWbemObjectSink* pSink);
STDMETHOD(QueryObjectSink)(long lFlags, IWbemObjectSink** ppResponseHandler);
STDMETHOD(GetObject)(const BSTR ObjectPath, long lFlags, IWbemContext* pContext,
IWbemClassObject** ppObject, IWbemCallResult** ppResult);
STDMETHOD(GetObjectAsync)(const BSTR ObjectPath, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(PutClass)(IWbemClassObject* pObject, long lFlags,
IWbemContext* pContext, IWbemCallResult** ppResult);
STDMETHOD(PutClassAsync)(IWbemClassObject* pObject, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(DeleteClass)(const BSTR Class, long lFlags, IWbemContext* pContext,
IWbemCallResult** ppResult);
STDMETHOD(DeleteClassAsync)(const BSTR Class, long lFlags, IWbemContext* pContext,
IWbemObjectSink* pResponseHandler);
STDMETHOD(CreateClassEnum)(const BSTR Superclass, long lFlags,
IWbemContext* pContext, IEnumWbemClassObject** ppEnum);
STDMETHOD(CreateClassEnumAsync)(const BSTR Superclass, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(PutInstance)(IWbemClassObject* pInst, long lFlags,
IWbemContext* pContext, IWbemCallResult** ppResult);
STDMETHOD(PutInstanceAsync)(IWbemClassObject* pInst, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(DeleteInstance)(const BSTR ObjectPath, long lFlags,
IWbemContext* pContext, IWbemCallResult** ppResult);
STDMETHOD(DeleteInstanceAsync)(const BSTR ObjectPath, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(CreateInstanceEnum)(const BSTR Class, long lFlags,
IWbemContext* pContext, IEnumWbemClassObject** ppEnum);
STDMETHOD(CreateInstanceEnumAsync)(const BSTR Class, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(ExecQuery)(const BSTR QueryLanguage, const BSTR Query, long lFlags,
IWbemContext* pContext, IEnumWbemClassObject** ppEnum);
STDMETHOD(ExecQueryAsync)(const BSTR QueryFormat, const BSTR Query, long lFlags,
IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(ExecNotificationQuery)(const BSTR QueryLanguage, const BSTR Query,
long lFlags, IWbemContext* pContext, IEnumWbemClassObject** ppEnum);
STDMETHOD(ExecNotificationQueryAsync)(const BSTR QueryFormat, const BSTR Query,
long lFlags, IWbemContext* pContext, IWbemObjectSink* pResponseHandler);
STDMETHOD(ExecMethod)(const BSTR ObjectPath, const BSTR MethodName, long lFlags,
IWbemContext *pCtx, IWbemClassObject *pInParams,
IWbemClassObject **ppOutParams, IWbemCallResult **ppCallResult);
STDMETHOD(ExecMethodAsync)(const BSTR ObjectPath, const BSTR MethodName, long lFlags,
IWbemContext *pCtx, IWbemClassObject *pInParams,
IWbemObjectSink* pResponseHandler);
STDMETHOD(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);
STDMETHOD(OpenAsync)(
/* [in] */ const BSTR strScope,
/* [in] */ const BSTR strParam,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
STDMETHOD(Add)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
STDMETHOD(AddAsync)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
STDMETHOD(Remove)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
STDMETHOD(RemoveAsync)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
STDMETHOD(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);
STDMETHOD(RefreshObjectAsync)(
/* [out][in] */ IWbemClassObject __RPC_FAR *__RPC_FAR *pTarget,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
STDMETHOD(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);
STDMETHOD(RenameObjectAsync)(
/* [in] */ const BSTR strOldObjectPath,
/* [in] */ const BSTR strNewObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSink __RPC_FAR *pResponseHandler);
STDMETHOD(GetObjectSecurity)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ REFIID TargetIID,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvResult,
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
STDMETHOD(GetObjectSecurityAsync)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ REFIID RequestedIID,
/* [in] */ IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
STDMETHOD(PutObjectSecurity)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ REFIID riid,
/* [iid_is][in] */ void __RPC_FAR *pSecurityObject,
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
STDMETHOD(PutObjectSecurityAsync)(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ REFIID riid,
/* [iid_is][in] */ void __RPC_FAR *pSecurityObject,
/* [in] */ IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
virtual HRESULT STDMETHODCALLTYPE Copy(
/* [in] */ const BSTR strSourceObjectPath,
/* [in] */ const BSTR strDestObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [unique][in][out] */ IWbemClassObject __RPC_FAR *__RPC_FAR *ppObject,
/* [unique][in][out] */ IWbemCallResultEx __RPC_FAR *__RPC_FAR *ppCallResult);
virtual HRESULT STDMETHODCALLTYPE CopyAsync(
/* [in] */ const BSTR strSourceObjectPath,
/* [in] */ const BSTR strDestObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext __RPC_FAR *pCtx,
/* [in] */ IWbemObjectSinkEx __RPC_FAR *pResponseHandler);
virtual HRESULT STDMETHODCALLTYPE DeleteObject(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext* pCtx,
/* [out, OPTIONAL] */ IWbemCallResult** ppCallResult
);
virtual HRESULT STDMETHODCALLTYPE DeleteObjectAsync(
/* [in] */ const BSTR strObjectPath,
/* [in] */ long lFlags,
/* [in] */ IWbemContext* pCtx,
/* [in] */ IWbemObjectSink* pResponseHandler
);
virtual HRESULT STDMETHODCALLTYPE PutObject(
/* [in] */ IWbemClassObject* pObj,
/* [in] */ long lFlags,
/* [in] */ IWbemContext* pCtx,
/* [out, OPTIONAL] */ IWbemCallResult** ppCallResult
);
virtual HRESULT STDMETHODCALLTYPE PutObjectAsync(
/* [in] */ IWbemClassObject* pObj,
/* [in] */ long lFlags,
/* [in] */ IWbemContext* pCtx,
/* [in] */ IWbemObjectSink* pResponseHandler
);
// Initialization function for connections
STDMETHOD(ConnectToProvider)( LPCWSTR User, LPCWSTR Password, IUnknown * pUnkPath, REFCLSID clsid, IWbemContext *pCtx,
IUnknown** pUnk );
// Hands the connection to the wrapper
STDMETHOD(SetContainer)( long lFlags, IUnknown* pContainer );
};
#endif