189 lines
4.8 KiB
C++
189 lines
4.8 KiB
C++
//***************************************************************************
|
|
//
|
|
// Copyright (c) 1998-1999 Microsoft Corporation
|
|
//
|
|
// locator.h
|
|
//
|
|
// alanbos 27-Mar-00 Created.
|
|
//
|
|
// CSWbemLocator definition.
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef _LOCATOR_H_
|
|
#define _LOCATOR_H_
|
|
|
|
//***************************************************************************
|
|
//
|
|
// CLASS NAME:
|
|
//
|
|
// CSWbemLocator
|
|
//
|
|
// DESCRIPTION:
|
|
//
|
|
// Implements the IWbemSLocator interface. This class is what the client gets
|
|
// when it initially hooks up to the Wbemprox.dll. The ConnectServer function
|
|
// is what get the communication between client and server started.
|
|
//
|
|
//***************************************************************************
|
|
|
|
|
|
class CSWbemLocator : public ISWbemLocator,
|
|
public IDispatchEx,
|
|
public IObjectSafety,
|
|
public ISupportErrorInfo,
|
|
public IProvideClassInfo
|
|
{
|
|
private:
|
|
|
|
CWbemLocatorSecurity *m_SecurityInfo;
|
|
CComPtr<IWbemLocator> m_pIWbemLocator;
|
|
CDispatchHelp m_Dispatch;
|
|
IServiceProvider *m_pIServiceProvider;
|
|
IUnsecuredApartment *m_pUnsecuredApartment;
|
|
|
|
static wchar_t *s_pDefaultNamespace;
|
|
|
|
static BSTR BuildPath (BSTR Server, BSTR Namespace);
|
|
static const wchar_t *GetDefaultNamespace ();
|
|
|
|
protected:
|
|
|
|
long m_cRef; //Object reference count
|
|
|
|
public:
|
|
|
|
CSWbemLocator(CSWbemPrivilegeSet *pPrivilegeSet = NULL);
|
|
CSWbemLocator(CSWbemLocator &csWbemLocator);
|
|
~CSWbemLocator(void);
|
|
|
|
//Non-delegating object IUnknown
|
|
|
|
STDMETHODIMP QueryInterface(REFIID, LPVOID*);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
// IDispatch methods should be inline
|
|
|
|
STDMETHODIMP GetTypeInfoCount(UINT* pctinfo);
|
|
STDMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo** pptinfo);
|
|
STDMETHODIMP GetIDsOfNames(REFIID riid, OLECHAR** rgszNames,
|
|
UINT cNames, LCID lcid, DISPID* rgdispid);
|
|
STDMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid,
|
|
WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
|
|
EXCEPINFO* pexcepinfo, UINT* puArgErr);
|
|
|
|
// IDispatchEx methods should be inline
|
|
HRESULT STDMETHODCALLTYPE GetDispID(
|
|
/* [in] */ BSTR bstrName,
|
|
/* [in] */ DWORD grfdex,
|
|
/* [out] */ DISPID __RPC_FAR *pid);
|
|
|
|
/* [local] */ HRESULT STDMETHODCALLTYPE InvokeEx(
|
|
/* [in] */ DISPID id,
|
|
/* [in] */ LCID lcid,
|
|
/* [in] */ WORD wFlags,
|
|
/* [in] */ DISPPARAMS __RPC_FAR *pdp,
|
|
/* [out] */ VARIANT __RPC_FAR *pvarRes,
|
|
/* [out] */ EXCEPINFO __RPC_FAR *pei,
|
|
/* [unique][in] */ IServiceProvider __RPC_FAR *pspCaller);
|
|
|
|
HRESULT STDMETHODCALLTYPE DeleteMemberByName(
|
|
/* [in] */ BSTR bstr,
|
|
/* [in] */ DWORD grfdex);
|
|
|
|
HRESULT STDMETHODCALLTYPE DeleteMemberByDispID(
|
|
/* [in] */ DISPID id);
|
|
|
|
HRESULT STDMETHODCALLTYPE GetMemberProperties(
|
|
/* [in] */ DISPID id,
|
|
/* [in] */ DWORD grfdexFetch,
|
|
/* [out] */ DWORD __RPC_FAR *pgrfdex);
|
|
|
|
HRESULT STDMETHODCALLTYPE GetMemberName(
|
|
/* [in] */ DISPID id,
|
|
/* [out] */ BSTR __RPC_FAR *pbstrName);
|
|
|
|
HRESULT STDMETHODCALLTYPE GetNextDispID(
|
|
/* [in] */ DWORD grfdex,
|
|
/* [in] */ DISPID id,
|
|
/* [out] */ DISPID __RPC_FAR *pid);
|
|
|
|
HRESULT STDMETHODCALLTYPE GetNameSpaceParent(
|
|
/* [out] */ IUnknown __RPC_FAR *__RPC_FAR *ppunk);
|
|
|
|
|
|
// ISWbemLocator methods
|
|
|
|
HRESULT STDMETHODCALLTYPE ConnectServer
|
|
(
|
|
/*[in]*/ BSTR Server,
|
|
/*[in]*/ BSTR Namespace,
|
|
/*[in]*/ BSTR User,
|
|
/*[in]*/ BSTR Password,
|
|
/*[in]*/ BSTR Locale,
|
|
/*[in]*/ BSTR Authority,
|
|
/*[in]*/ long lSecurityFlags,
|
|
/*[in]*/ /*ISWbemNamedValueSet*/ IDispatch *pContext,
|
|
/*[out]*/ ISWbemServices **ppNamespace
|
|
);
|
|
|
|
HRESULT STDMETHODCALLTYPE get_Security_
|
|
(
|
|
/* [in] */ ISWbemSecurity **ppSecurity
|
|
);
|
|
|
|
// IObjectSafety methods
|
|
HRESULT STDMETHODCALLTYPE SetInterfaceSafetyOptions
|
|
(
|
|
/* [in] */ REFIID riid,
|
|
/* [in] */ DWORD dwOptionSetMask,
|
|
/* [in] */ DWORD dwEnabledOptions
|
|
)
|
|
{
|
|
return (dwOptionSetMask & dwEnabledOptions) ? E_FAIL : S_OK;
|
|
}
|
|
|
|
HRESULT STDMETHODCALLTYPE GetInterfaceSafetyOptions(
|
|
/* [in] */ REFIID riid,
|
|
/* [out] */ DWORD __RPC_FAR *pdwSupportedOptions,
|
|
/* [out] */ DWORD __RPC_FAR *pdwEnabledOptions
|
|
)
|
|
{
|
|
if (pdwSupportedOptions) *pdwSupportedOptions = 0;
|
|
if (pdwEnabledOptions) *pdwEnabledOptions = 0;
|
|
return S_OK;
|
|
}
|
|
|
|
// ISupportErrorInfo methods
|
|
HRESULT STDMETHODCALLTYPE InterfaceSupportsErrorInfo
|
|
(
|
|
/* [in] */ REFIID riid
|
|
);
|
|
|
|
// IProvideClassInfo methods
|
|
HRESULT STDMETHODCALLTYPE GetClassInfo
|
|
(
|
|
/* [in,out] */ ITypeInfo **ppTI
|
|
)
|
|
{
|
|
return m_Dispatch.GetClassInfo (ppTI);
|
|
};
|
|
|
|
static void Shutdown ()
|
|
{
|
|
if (s_pDefaultNamespace)
|
|
{
|
|
delete [] s_pDefaultNamespace;
|
|
s_pDefaultNamespace = NULL;
|
|
}
|
|
}
|
|
|
|
CWbemLocatorSecurity *GetSecurityInfo ()
|
|
{
|
|
return m_SecurityInfo;
|
|
}
|
|
};
|
|
|
|
#endif
|