//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: B I N D O B J . H // // Contents: Declaration of base class for RAS binding objects. // // Notes: // // Author: shaunco 11 Jun 1997 // //---------------------------------------------------------------------------- #pragma once #include #include #include "resource.h" #include "rasaf.h" #include "rasdata.h" #include "ncutil.h" enum RAS_BINDING_ID { RBID_INVALID = 0, RBID_NDISATM, RBID_NDISCOWAN, RBID_NDISWAN, RBID_NDISWANASYNC, }; enum RAS_PROTOCOL_IDS { RPI_IP = 0x00000001, RPI_IPX = 0x00000002, RPI_NBF = 0x00000004, RPI_ATALK = 0x00000008, RPI_NETMON = 0x00000010, RPI_ALL = 0xFFFFFFFF, }; struct RAS_ENDPOINT_INFO { UINT cDialIn; UINT cDialOut; UINT cEndpoints; }; class CRasBindObject { public: // Make these members public for now. Since this object // is instantiated from the modem class installer. We // need to set the INetCfg member. // INetCfg* m_pnc; CRasBindObject (); ~CRasBindObject () { ReleaseObj (m_pnc); } // You must call ReleaseOtherComponents after calling this. HRESULT HrFindOtherComponents (); // You can only call this once per call to HrFindOtherComponents. NOTHROW VOID ReleaseOtherComponents (); HRESULT HrProcessEndpointChange (); NOTHROW INetCfgComponent* PnccNdisWan (); protected: // We keep an array of INetCfgComponent pointers. This enum // defines the indicies of the array. The static arrays of // class guids and component ids identify the respecitive components. // HrFindOtherComonents initializes the array of component pointers // and ReleaseOtherComponents releases them. Note, however, that this // action is refcounted. This is because we are re-entrant. // HrFindOtherComponents only finds the components if the refcount is // zero. After every call, it increments the refcount. // ReleaseOtherComponents always decrements the refcount and only // releases the components if the refcount is zero. // enum OTHER_COMPONENTS { c_ipnccRasCli = 0, c_ipnccRasSrv, c_ipnccIp, c_ipnccIpx, c_ipnccNbf, c_ipnccAtalk, c_ipnccNetMon, c_ipnccNdisWan, c_ipnccIpAdapter, c_cOtherComponents, }; static const GUID* c_apguidComponentClasses [c_cOtherComponents]; static const PCWSTR c_apszComponentIds [c_cOtherComponents]; INetCfgComponent* m_apnccOther [c_cOtherComponents]; ULONG m_ulOtherComponents; protected: BOOL FIsRasBindingInterface (INetCfgBindingInterface* pncbi, RAS_BINDING_ID* pRasBindId); HRESULT HrCountInstalledMiniports (UINT* pcIpOut, UINT* pcNbfIn, UINT* pcNbfOut); HRESULT HrCountWanAdapterEndpoints (INetCfgComponent* pncc, RAS_BINDING_ID RasBindId, UINT* pcEndpoints); HRESULT HrAddOrRemoveAtalkInOut (DWORD dwFlags); HRESULT HrAddOrRemoveIpAdapter (DWORD dwFlags); HRESULT HrAddOrRemoveIpOut (INT nInstances); HRESULT HrAddOrRemoveIpxInOut (DWORD dwFlags); HRESULT HrAddOrRemoveNbfIn (INT nInstances); HRESULT HrAddOrRemoveNbfOut (INT nInstances); HRESULT HrAddOrRemoveNetMonInOut(DWORD dwFlags); HRESULT HrAddOrRemovePti (DWORD dwFlags); NOTHROW INetCfgComponent* PnccRasCli (); NOTHROW INetCfgComponent* PnccRasSrv (); NOTHROW INetCfgComponent* PnccRasRtr (); NOTHROW INetCfgComponent* PnccIp (); NOTHROW INetCfgComponent* PnccIpx (); NOTHROW INetCfgComponent* PnccNbf (); NOTHROW INetCfgComponent* PnccAtalk (); NOTHROW INetCfgComponent* PnccNetMon (); NOTHROW INetCfgComponent* PnccIpAdapter (); }; extern const WCHAR c_szInfId_MS_NdisWanAtalk[]; extern const WCHAR c_szInfId_MS_NdisWanIp[]; extern const WCHAR c_szInfId_MS_NdisWanIpx[]; extern const WCHAR c_szInfId_MS_NdisWanNbfIn[]; extern const WCHAR c_szInfId_MS_NdisWanNbfOut[]; extern const WCHAR c_szInfId_MS_NdisWanBh[]; extern const WCHAR c_szInfId_MS_PtiMiniport[]; inline HRESULT CRasBindObject::HrAddOrRemoveAtalkInOut ( DWORD dwFlags) { return HrEnsureZeroOrOneAdapter (m_pnc, c_szInfId_MS_NdisWanAtalk, dwFlags); } inline HRESULT CRasBindObject::HrAddOrRemoveIpAdapter ( DWORD dwFlags) { return HrEnsureZeroOrOneAdapter (m_pnc, c_szInfId_MS_NdisWanIp, dwFlags); } inline HRESULT CRasBindObject::HrAddOrRemoveIpxInOut ( DWORD dwFlags) { return HrEnsureZeroOrOneAdapter (m_pnc, c_szInfId_MS_NdisWanIpx, dwFlags); } inline HRESULT CRasBindObject::HrAddOrRemoveNbfIn ( INT nInstances) { DWORD dwFlags = (nInstances > 0) ? ARA_ADD : ARA_REMOVE; UINT cInstances = (nInstances > 0) ? nInstances : 0 - nInstances; TraceTag (ttidRasCfg, "%s %d %S adapters", (nInstances > 0) ? "Adding" : "Removing", cInstances, c_szInfId_MS_NdisWanNbfIn); return HrAddOrRemoveAdapter (m_pnc, c_szInfId_MS_NdisWanNbfIn, dwFlags, NULL, cInstances, NULL); } inline HRESULT CRasBindObject::HrAddOrRemoveNbfOut ( INT nInstances) { DWORD dwFlags = (nInstances > 0) ? ARA_ADD : ARA_REMOVE; UINT cInstances = (nInstances > 0) ? nInstances : 0 - nInstances; TraceTag (ttidRasCfg, "%s %d %S adapters", (nInstances > 0) ? "Adding" : "Removing", cInstances, c_szInfId_MS_NdisWanNbfOut); return HrAddOrRemoveAdapter (m_pnc, c_szInfId_MS_NdisWanNbfOut, dwFlags, NULL, cInstances, NULL); } inline HRESULT CRasBindObject::HrAddOrRemoveNetMonInOut ( DWORD dwFlags) { return HrEnsureZeroOrOneAdapter (m_pnc, c_szInfId_MS_NdisWanBh, dwFlags); } inline HRESULT CRasBindObject::HrAddOrRemovePti ( DWORD dwFlags) { return HrEnsureZeroOrOneAdapter (m_pnc, c_szInfId_MS_PtiMiniport, dwFlags); } inline NOTHROW INetCfgComponent* CRasBindObject::PnccRasCli () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccRasCli]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccRasSrv () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccRasSrv]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccIp () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccIp]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccIpx () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccIpx]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccNbf () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccNbf]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccAtalk () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccAtalk]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccNetMon () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccNetMon]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccIpAdapter () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); return m_apnccOther [c_ipnccIpAdapter]; } inline NOTHROW INetCfgComponent* CRasBindObject::PnccNdisWan () { AssertSzH (m_ulOtherComponents, "You have not called HrFindOtherComponents yet."); //AssertSzH (m_apnccOther [c_ipnccNdisWan], "The NdisWan component was not found, but we installed it!"); return m_apnccOther [c_ipnccNdisWan]; }