mirror of https://github.com/tongzx/nt5src
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
304 lines
8.9 KiB
304 lines
8.9 KiB
// WbemProv.h: Definition of the CProvider class
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#if !defined(AFX_WBEMPROV_H__95A79B93_CFC8_4DB1_8256_5BEFC3FE2A26__INCLUDED_)
|
|
#define AFX_WBEMPROV_H__95A79B93_CFC8_4DB1_8256_5BEFC3FE2A26__INCLUDED_
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
#include "resource.h" // main symbols
|
|
|
|
typedef enum _ProviderClass
|
|
{
|
|
CLASS_STATUS,
|
|
CLASS_DC
|
|
} ProviderClass;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CProvider
|
|
|
|
class CProvider :
|
|
public IWbemProviderInit,
|
|
public IWbemServices,
|
|
public CComObjectRoot,
|
|
public CComCoClass<CProvider,&CLSID_ADReplProvider>
|
|
{
|
|
public:
|
|
CProvider();
|
|
~CProvider();
|
|
BEGIN_COM_MAP(CProvider)
|
|
COM_INTERFACE_ENTRY(IWbemProviderInit)
|
|
COM_INTERFACE_ENTRY(IWbemServices)
|
|
END_COM_MAP()
|
|
//DECLARE_NOT_AGGREGATABLE(CProvider)
|
|
// Remove the comment from the line above if you don't want your object to
|
|
// support aggregation.
|
|
|
|
DECLARE_REGISTRY_RESOURCEID(IDR_ADReplProvider)
|
|
|
|
|
|
// IWbemProviderInit
|
|
|
|
STDMETHOD(Initialize)(
|
|
IN LPWSTR pszUser,
|
|
IN LONG lFlags,
|
|
IN LPWSTR pszNamespace,
|
|
IN LPWSTR pszLocale,
|
|
IN IWbemServices *pNamespace,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemProviderInitSink *pInitSink
|
|
);
|
|
|
|
|
|
// IWbemServices
|
|
|
|
//
|
|
// +++ Implemented +++
|
|
//
|
|
|
|
STDMETHOD(GetObjectAsync)(
|
|
IN const BSTR bstrObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler);
|
|
|
|
STDMETHOD(CreateInstanceEnumAsync)(
|
|
IN const BSTR bstrClass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler);
|
|
|
|
//
|
|
// --- NOT Implemented ---
|
|
//
|
|
|
|
STDMETHOD(OpenNamespace)(
|
|
IN const BSTR strNamespace,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemServices **ppWorkingNamespace,
|
|
IN OUT IWbemCallResult **ppResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(CancelAsyncCall)(
|
|
IN IWbemObjectSink *pSink)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(QueryObjectSink)(
|
|
IN long lFlags,
|
|
OUT IWbemObjectSink **ppResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(GetObject)(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemClassObject **ppObject,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(PutClass)(
|
|
IN IWbemClassObject *pObject,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(PutClassAsync)(
|
|
IN IWbemClassObject *pObject,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(DeleteClass)(
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(DeleteClassAsync)(
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(CreateClassEnum)(
|
|
IN const BSTR strSuperclass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
OUT IEnumWbemClassObject **ppEnum)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(CreateClassEnumAsync)(
|
|
IN const BSTR strSuperclass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(PutInstance)(
|
|
IN IWbemClassObject *pInst,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(PutInstanceAsync)(
|
|
IN IWbemClassObject *pInst,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(DeleteInstance)(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(DeleteInstanceAsync)(
|
|
IN const BSTR strObjectPath,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(CreateInstanceEnum)(
|
|
IN const BSTR strClass,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
OUT IEnumWbemClassObject **ppEnum)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecQuery)(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
OUT IEnumWbemClassObject **ppEnum)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecQueryAsync)(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecNotificationQuery)(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
OUT IEnumWbemClassObject **ppEnum)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecNotificationQueryAsync)(
|
|
IN const BSTR strQueryLanguage,
|
|
IN const BSTR strQuery,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecMethod)(
|
|
IN const BSTR strObjectPath,
|
|
IN const BSTR strMethodName,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemClassObject *pInParams,
|
|
IN OUT IWbemClassObject **ppOutParams,
|
|
IN OUT IWbemCallResult **ppCallResult)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
STDMETHOD(ExecMethodAsync)(
|
|
IN const BSTR strObjectPath,
|
|
IN const BSTR strMethodName,
|
|
IN long lFlags,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemClassObject *pInParams,
|
|
IN IWbemObjectSink *pResponseHandler)
|
|
{ return WBEM_E_NOT_SUPPORTED; };
|
|
|
|
protected:
|
|
|
|
HRESULT _EnumAndIndicateDC(
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler,
|
|
IN const BSTR bstrFilterValue = FALSE
|
|
);
|
|
HRESULT _EnumAndIndicateStatus(
|
|
IN ProviderClass provclass,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler,
|
|
IN const BSTR bstrFilterValue = NULL );
|
|
HRESULT _EnumAndIndicateWorker(
|
|
IN ProviderClass provclass,
|
|
IN HANDLE hDS,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler,
|
|
IN const BSTR bstrFilterValue = NULL,
|
|
IN const BSTR bstrDnsDomainName = NULL );
|
|
/*
|
|
HRESULT _EnumAndIndicateDCWorker(
|
|
IN HANDLE hDS,
|
|
IN IWbemContext *pCtx,
|
|
IN IWbemObjectSink *pResponseHandler,
|
|
IN const BSTR bstrFilterValue = NULL );
|
|
*/
|
|
|
|
HRESULT _BuildListStatus(
|
|
IN HANDLE hDS,
|
|
OUT DS_REPL_NEIGHBORS** ppneighborsstruct );
|
|
/*
|
|
HRESULT _BuildListDC(
|
|
IN HANDLE hDS,
|
|
IN const BSTR bstrDnsDomainName,
|
|
OUT DS_DOMAIN_CONTROLLER_INFO_1** ppDCs,
|
|
OUT ULONG* pcDCs );
|
|
*/
|
|
|
|
HRESULT _BuildIndicateArrayStatus(
|
|
IN DS_REPL_NEIGHBORS* pneighborstruct,
|
|
IN const BSTR bstrFilterValue,
|
|
OUT IWbemClassObject*** ppaIndicateItems,
|
|
OUT DWORD* pcIndicateItems);
|
|
/*
|
|
HRESULT _BuildIndicateArrayDC(
|
|
IN DS_DOMAIN_CONTROLLER_INFO_1* pDCs,
|
|
IN ULONG cDCs,
|
|
IN const BSTR bstrFilterValue,
|
|
OUT IWbemClassObject*** ppaIndicateItems,
|
|
OUT DWORD* pcIndicateItems);
|
|
*/
|
|
void _ReleaseIndicateArray(
|
|
IWbemClassObject** paIndicateItems,
|
|
DWORD cIndicateItems,
|
|
bool fReleaseArray = true);
|
|
|
|
HRESULT _PutAttributesStatus(
|
|
IWbemClassObject** pipNewInst,
|
|
const BSTR bstrFilterValue,
|
|
DS_REPL_NEIGHBOR* pneighbor);
|
|
HRESULT _PutAttributesDC(
|
|
IN IWbemClassObject* pIndicateItem,
|
|
IN IADsPathname* pPathCracker,
|
|
IN const BSTR bstrFilterValue,
|
|
IN IDirectorySearch* pIADsSearch,
|
|
IN ADS_SEARCH_HANDLE hSearch);
|
|
|
|
CComPtr<IWbemServices> m_sipNamespace;
|
|
CComPtr<IWbemClassObject> m_sipClassDefStatus;
|
|
CComPtr<IWbemClassObject> m_sipClassDefDC;
|
|
|
|
};
|
|
|
|
#endif // !defined(AFX_WBEMPROV_H__95A79B93_CFC8_4DB1_8256_5BEFC3FE2A26__INCLUDED_)
|