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.
206 lines
5.3 KiB
206 lines
5.3 KiB
/////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CopyRight ( c ) 1999 Microsoft Corporation
|
|
//
|
|
// Module Name: DnsDomainResourceRecordContainment.cpp
|
|
//
|
|
// Description:
|
|
// Implementation of CDnsDomainResourceRecordContainment class
|
|
//
|
|
// Author:
|
|
// Henry Wang ( henrywa ) March 8, 2000
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
#include "DnsWmi.h"
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
// Construction/Destruction
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
CDnsBase*
|
|
CDnsDomainResourceRecordContainment::CreateThis(
|
|
const WCHAR * wszName, //class name
|
|
CWbemServices * pNamespace, //namespace
|
|
const char * szType //str type id
|
|
)
|
|
{
|
|
return new CDnsDomainResourceRecordContainment(wszName, pNamespace);
|
|
}
|
|
CDnsDomainResourceRecordContainment::CDnsDomainResourceRecordContainment()
|
|
{
|
|
|
|
}
|
|
CDnsDomainResourceRecordContainment::CDnsDomainResourceRecordContainment(
|
|
const WCHAR* wszName,
|
|
CWbemServices *pNamespace)
|
|
:CDnsBase(wszName, pNamespace)
|
|
{
|
|
|
|
}
|
|
|
|
CDnsDomainResourceRecordContainment::~CDnsDomainResourceRecordContainment()
|
|
{
|
|
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
//
|
|
// Description:
|
|
// enum instances of domain and record association
|
|
//
|
|
// Arguments:
|
|
// lFlags [IN] WMI flag
|
|
// pCtx [IN] WMI context
|
|
// pHandler [IN] WMI sink pointer
|
|
//
|
|
// Return Value:
|
|
// WBEM_S_NO_ERROR
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
SCODE
|
|
CDnsDomainResourceRecordContainment::EnumInstance(
|
|
long lFlags,
|
|
IWbemContext * pCtx,
|
|
IWbemObjectSink * pHandler)
|
|
{
|
|
list<CDomainNode> objList;
|
|
CDnsWrap& dns = CDnsWrap::DnsObject();
|
|
SCODE sc = dns.dnsEnumDomainForServer(&objList);
|
|
list<CDomainNode>::iterator i;
|
|
CWbemInstanceMgr InstMgr(
|
|
pHandler);
|
|
for(i=objList.begin(); i!=objList.end(); ++i)
|
|
{
|
|
sc = dns.dnsEnumRecordsForDomainEx(
|
|
*i,
|
|
NULL,
|
|
InstanceFilter,
|
|
TRUE,
|
|
DNS_TYPE_ALL,
|
|
DNS_RPC_VIEW_ALL_DATA,
|
|
m_pClass,
|
|
InstMgr);
|
|
}
|
|
return sc;
|
|
}
|
|
|
|
SCODE
|
|
CDnsDomainResourceRecordContainment::GetObject(
|
|
CObjPath & ObjectPath,
|
|
long lFlags,
|
|
IWbemContext * pCtx,
|
|
IWbemObjectSink * pHandler
|
|
)
|
|
{
|
|
return WBEM_E_NOT_SUPPORTED;
|
|
}
|
|
|
|
SCODE CDnsDomainResourceRecordContainment::ExecuteMethod(
|
|
CObjPath & objPath,
|
|
WCHAR * wzMethodName,
|
|
long lFlag,
|
|
IWbemClassObject * pInArgs,
|
|
IWbemObjectSink * pHandler
|
|
)
|
|
{
|
|
return WBEM_E_NOT_SUPPORTED;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//++
|
|
//
|
|
// Description:
|
|
// call back function to enum domain and record association instance.
|
|
// if pNode represents a domain node, create a wmi domain instance
|
|
//
|
|
// Arguments:
|
|
// ParentDomain [IN] Parent domain
|
|
// pFilter [IN] pointer to object that contains the criteria to filter
|
|
// which instance should be send to wmi
|
|
// not used here
|
|
// pNode [IN] pointer to Dns Rpc Node object
|
|
// pClass [IN] wmi class used to create instance
|
|
// InstMgr [IN] a ref to Instance manager obj that is
|
|
// responsible to send mutiple instance
|
|
// back to wmi at once
|
|
//
|
|
// Return Value:
|
|
// WBEM_S_NO_ERROR
|
|
//
|
|
//--
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
SCODE CDnsDomainResourceRecordContainment::InstanceFilter(
|
|
CDomainNode & ParentDomain,
|
|
PVOID pFilter,
|
|
CDnsRpcNode * pNode,
|
|
IWbemClassObject * pClass,
|
|
CWbemInstanceMgr & InstMgr
|
|
)
|
|
{
|
|
if (pNode->IsDomainNode())
|
|
return 0;
|
|
|
|
// CObjPath* pFilterObj = (CObjPath*) pFilter;
|
|
CDnsWrap& dns = CDnsWrap::DnsObject();
|
|
CObjPath objPathParent;
|
|
objPathParent.SetClass(PVD_CLASS_DOMAIN);
|
|
objPathParent.AddProperty(
|
|
PVD_DOMAIN_SERVER_NAME,
|
|
dns.GetServerName().data()
|
|
);
|
|
objPathParent.AddProperty(
|
|
PVD_DOMAIN_CONTAINER_NAME,
|
|
ParentDomain.wstrZoneName.data()
|
|
);
|
|
objPathParent.AddProperty(
|
|
PVD_DOMAIN_FQDN,
|
|
ParentDomain.wstrNodeName.data()
|
|
);
|
|
|
|
wstring wstrOwner = pNode->GetNodeName();
|
|
if(!wstrOwner.empty())
|
|
wstrOwner += PVD_DNS_LOCAL_SERVER + ParentDomain.wstrNodeName;
|
|
else
|
|
wstrOwner = ParentDomain.wstrNodeName;
|
|
|
|
CDnsRpcRecord* p;
|
|
while( (p = pNode->GetNextRecord()) != NULL )
|
|
{
|
|
auto_ptr<CDnsRpcRecord> pRec(p);
|
|
|
|
CObjPath objPathChild;
|
|
|
|
// populate rdata section
|
|
pRec->GetObjectPath(
|
|
dns.GetServerName(),
|
|
ParentDomain.wstrZoneName,
|
|
ParentDomain.wstrNodeName,
|
|
wstrOwner,
|
|
objPathChild);
|
|
|
|
CWbemClassObject NewInst;
|
|
pClass->SpawnInstance(0, &NewInst);
|
|
// set domain ref
|
|
NewInst.SetProperty(
|
|
objPathParent.GetObjectPathString(),
|
|
PVD_ASSOC_PARENT
|
|
);
|
|
// set record ref
|
|
NewInst.SetProperty(
|
|
objPathChild.GetObjectPathString(),
|
|
PVD_ASSOC_CHILD
|
|
);
|
|
InstMgr.Indicate(NewInst.data());
|
|
}
|
|
|
|
|
|
return WBEM_S_NO_ERROR;
|
|
}
|
|
|