//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997 - 1999 // // File: B I N D O B J . C P P // // Contents: Implementation of base class for RAS binding objects. // // Notes: // // Author: shaunco 11 Jun 1997 // //---------------------------------------------------------------------------- #include "stdafx.h" #pragma hdrstop #include "bindobj.h" #include "ncnetcfg.h" #include "assert.h" #include "ncutil.h" //nclude "ncreg.h" //nclude "ncsvc.h" extern const TCHAR c_szBiNdisCoWan[]; extern const TCHAR c_szBiNdisWan[]; extern const TCHAR c_szBiNdisWanAsync[]; extern const TCHAR c_szBiNdisWanAtalk[]; extern const TCHAR c_szBiNdisWanBh[]; extern const TCHAR c_szBiNdisWanIp[]; extern const TCHAR c_szBiNdisWanIpx[]; extern const TCHAR c_szBiNdisWanNbf[]; extern const TCHAR c_szInfId_MS_AppleTalk[]; extern const TCHAR c_szInfId_MS_NWIPX[]; extern const TCHAR c_szInfId_MS_NdisWanIpArp[]; extern const TCHAR c_szInfId_MS_NdisWan[]; extern const TCHAR c_szInfId_MS_NetBEUI[]; extern const TCHAR c_szInfId_MS_NetMon[]; extern const TCHAR c_szInfId_MS_RasCli[]; extern const TCHAR c_szInfId_MS_RasRtr[]; extern const TCHAR c_szInfId_MS_RasSrv[]; extern const TCHAR c_szInfId_MS_TCPIP[]; extern const TCHAR c_szInfId_MS_Wanarp[]; extern const TCHAR c_szRegValWanEndpoints[] = TEXT("WanEndpoints"); const GUID GUID_DEVCLASS_NETSERVICE ={0x4D36E974,0xE325,0x11CE,{0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}}; const GUID GUID_DEVCLASS_NETTRANS ={0x4D36E975,0xE325,0x11CE,{0xbf,0xc1,0x08,0x00,0x2b,0xe1,0x03,0x18}}; //---------------------------------------------------------------------------- // Data used for finding the other components we have to deal with. // const GUID* CRasBindObject::c_apguidComponentClasses [c_cOtherComponents] = { &GUID_DEVCLASS_NETSERVICE, // RasCli &GUID_DEVCLASS_NETSERVICE, // RasSrv &GUID_DEVCLASS_NETSERVICE, // RasRtr &GUID_DEVCLASS_NETTRANS, // Ip &GUID_DEVCLASS_NETTRANS, // Ipx &GUID_DEVCLASS_NETTRANS, // Nbf &GUID_DEVCLASS_NETTRANS, // Atalk &GUID_DEVCLASS_NETTRANS, // NetMon &GUID_DEVCLASS_NETTRANS, // NdisWan }; const LPCTSTR CRasBindObject::c_apszComponentIds [c_cOtherComponents] = { c_szInfId_MS_RasCli, c_szInfId_MS_RasSrv, c_szInfId_MS_RasRtr, c_szInfId_MS_TCPIP, c_szInfId_MS_NWIPX, c_szInfId_MS_NetBEUI, c_szInfId_MS_AppleTalk, c_szInfId_MS_NetMon, c_szInfId_MS_NdisWan, }; //+--------------------------------------------------------------------------- // // Function: ReleaseAll // // Purpose: Releases an array of IUnknown pointers. // // Arguments: // cpunk [in] count of pointers to release // apunk [in] array of pointers to release // // Returns: Nothing // // Author: shaunco 23 Mar 1997 // // Notes: Any of the pointers in the array can be NULL. // VOID ReleaseAll ( ULONG cpunk, IUnknown** apunk) NOTHROW { Assert (cpunk); Assert (apunk); while (cpunk--) { ReleaseObj (*apunk); *apunk = NULL; apunk++; } } //+--------------------------------------------------------------------------- // // Member: CRasBindObject::CRasBindObject // // Purpose: Constructor // // Arguments: // (none) // // Returns: Nothing. // // Author: shaunco 28 Jul 1997 // // Notes: // CRasBindObject::CRasBindObject () { m_ulOtherComponents = 0; m_pnc = NULL; } //+--------------------------------------------------------------------------- // // Member: CRasBindObject::HrFindOtherComponents // // Purpose: Find the components listed in our OTHER_COMPONENTS enum. // // Arguments: // (none) // // Returns: S_OK or an error code. // // Author: shaunco 28 Jul 1997 // // Notes: We ref-count this action. If called again (before // ReleaseOtherComponents) we increment a refcount. // // HRESULT CRasBindObject::HrFindOtherComponents () { AssertSz (c_cOtherComponents == celems(c_apguidComponentClasses), "Uhh...you broke something."); AssertSz (c_cOtherComponents == celems(c_apszComponentIds), "Uhh...you broke something."); AssertSz (c_cOtherComponents == celems(m_apnccOther), "Uhh...you broke something."); HRESULT hr = S_OK; if (!m_ulOtherComponents) { hr = HrFindComponents ( m_pnc, c_cOtherComponents, c_apguidComponentClasses, c_apszComponentIds, m_apnccOther); } if (SUCCEEDED(hr)) { m_ulOtherComponents++; } TraceResult ("CRasBindObject::HrFindOtherComponents", hr); return hr; } //+--------------------------------------------------------------------------- // // Member: CRasBindObject::ReleaseOtherComponents // // Purpose: Releases the components found by a previous call to // HrFindOtherComponents. (But only if the refcount is zero.) // // Arguments: // (none) // // Returns: Nothing. // // Author: shaunco 28 Jul 1997 // // Notes: // void CRasBindObject::ReleaseOtherComponents () NOTHROW { AssertSz (m_ulOtherComponents, "You have not called HrFindOtherComponents yet or you have " "called ReleaseOtherComponents too many times."); if (0 == --m_ulOtherComponents) { ReleaseAll (c_cOtherComponents, (IUnknown**)m_apnccOther); } }