///////////////////////////////////////////////////////////////////// // // CopyRight ( c ) 1999 Microsoft Corporation // // Module Name: DnsDomainDomainContainment.cpp // // Description: // Implementation of CDnsDomainDomainContainment class // // Author: // Henry Wang ( henrywa ) March 8, 2000 // // ////////////////////////////////////////////////////////////////////// #include "DnsWmi.h" ///////////////////////////////////////////////////////////////////////////// //++ // // Description: // create an instance of CDnsDomainDomainContainment // // Arguments: // wszName [IN] class name // pNamespace [IN] wmi namespace // szType [IN] child class name of resource record class // // Return Value: // WBEM_S_NO_ERROR // //-- ///////////////////////////////////////////////////////////////////////////// CDnsBase* CDnsDomainDomainContainment::CreateThis( const WCHAR * wszName, CWbemServices * pNamespace, const char * szType ) { return new CDnsDomainDomainContainment(wszName, pNamespace); } CDnsDomainDomainContainment::CDnsDomainDomainContainment() { } CDnsDomainDomainContainment::CDnsDomainDomainContainment( const WCHAR* wszName, CWbemServices *pNamespace) :CDnsBase(wszName, pNamespace) { } CDnsDomainDomainContainment::~CDnsDomainDomainContainment() { } ///////////////////////////////////////////////////////////////////////////// //++ // // // Description: // enum instances of domain and domain association // // Arguments: // lFlags [IN] WMI flag // pCtx [IN] WMI context // pHandler [IN] WMI sink pointer // // Return Value: // WBEM_S_NO_ERROR // //-- ///////////////////////////////////////////////////////////////////////////// SCODE CDnsDomainDomainContainment::EnumInstance( long lFlags, IWbemContext * pCtx, IWbemObjectSink * pHandler) { // get top level zones list objList; CDnsWrap& dns = CDnsWrap::DnsObject(); SCODE sc = dns.dnsEnumDomainForServer(&objList); list::iterator i; CWbemInstanceMgr InstMgr( pHandler); // enumerate all domaindomain for all zones 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 CDnsDomainDomainContainment::GetObject( CObjPath & ObjectPath, long lFlags, IWbemContext * pCtx, IWbemObjectSink * pHandler ) { return WBEM_S_NO_ERROR; } SCODE CDnsDomainDomainContainment::ExecuteMethod( CObjPath & objPath, WCHAR * wzMethodName, long lFlag, IWbemClassObject * pInArgs, IWbemObjectSink * pHandler ) { return WBEM_S_NO_ERROR; } ///////////////////////////////////////////////////////////////////////////// //++ // // Description: // call back function to enum domain instance. // if pNode represents a domain node, create a wmi domain instance // // Arguments: // CDomainNode [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 CDnsDomainDomainContainment::InstanceFilter( CDomainNode & ParentDomain, PVOID pFilter, CDnsRpcNode * pNode, IWbemClassObject * pClass, CWbemInstanceMgr & InstMgr ) { CWbemClassObject NewInst; if(!pNode->IsDomainNode()) return WBEM_S_NO_ERROR; // CObjPath* pFilterObj = (CObjPath*) pFilter; CDnsWrap& dns = CDnsWrap::DnsObject(); pClass->SpawnInstance(0, &NewInst); // setting object path for parent in association 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() ); NewInst.SetProperty( objPathParent.GetObjectPathString(), PVD_ASSOC_PARENT); //setting object path for child in association wstring wzFQDN = pNode->GetNodeName(); wzFQDN += PVD_DNS_LOCAL_SERVER + ParentDomain.wstrNodeName; CObjPath opChild = objPathParent; opChild.SetProperty( PVD_DOMAIN_FQDN, wzFQDN.data() ); NewInst.SetProperty( opChild.GetObjectPathString(), PVD_ASSOC_CHILD ); InstMgr.Indicate(NewInst.data()); return WBEM_S_NO_ERROR; }