303 lines
8.1 KiB
C
303 lines
8.1 KiB
C
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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 <ncxbase.h>
|
||
|
#include <notifval.h>
|
||
|
#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];
|
||
|
}
|