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.
230 lines
6.2 KiB
230 lines
6.2 KiB
//****************************************************************************
|
|
//
|
|
// Microsoft NT Remote Access Service
|
|
//
|
|
// Copyright 1992-93
|
|
//
|
|
//
|
|
// Revision History
|
|
//
|
|
//
|
|
// 05/29/97 Rao Salapaka Created
|
|
//
|
|
//
|
|
// Description: All Initialization code for rasman component lives here.
|
|
//
|
|
//****************************************************************************
|
|
|
|
#ifndef UNICODE
|
|
#define UNICODE
|
|
#endif
|
|
|
|
#ifdef _UNICODE
|
|
#define _UNICODE
|
|
#endif
|
|
|
|
extern "C"
|
|
{
|
|
#include <nt.h>
|
|
}
|
|
#include <ntrtl.h>
|
|
#include <nturtl.h>
|
|
#include <tchar.h>
|
|
//#include <comdef.h>
|
|
#include <ncnetcfg.h>
|
|
#include <rtutils.h>
|
|
#include <initguid.h>
|
|
#include <devguid.h>
|
|
#include <netcfg_i.c>
|
|
|
|
|
|
/* Bits returned by GetInstalledProtocols.
|
|
*/
|
|
#define NP_Nbf 0x1
|
|
#define NP_Ipx 0x2
|
|
#define NP_Ip 0x4
|
|
|
|
extern "C"
|
|
{
|
|
DWORD dwGetInstalledProtocols(DWORD *pdwInstalledProtocols,
|
|
BOOL fRouter,
|
|
BOOL fRasCli,
|
|
BOOL fRasSrv);
|
|
}
|
|
|
|
DWORD
|
|
dwGetInstalledProtocols(DWORD *pdwInstalledProtocols,
|
|
BOOL fRouter,
|
|
BOOL fRasCli,
|
|
BOOL fRasSrv )
|
|
{
|
|
HRESULT hr = S_OK;
|
|
INetCfg *pINetCfg = NULL;
|
|
INetCfgComponent *pINetCfgComp = NULL;
|
|
INetCfgComponent *pINetCfgRasCli = NULL;
|
|
INetCfgComponent *pINetCfgRasSrv = NULL;
|
|
INetCfgComponent *pINetCfgRasRtr = NULL;
|
|
DWORD dwCountTries = 0;
|
|
|
|
|
|
*pdwInstalledProtocols = 0;
|
|
|
|
do
|
|
{
|
|
|
|
hr = HrCreateAndInitializeINetCfg( TRUE, &pINetCfg );
|
|
|
|
|
|
if ( S_OK == hr )
|
|
break;
|
|
|
|
if ( NETCFG_E_IN_USE != hr )
|
|
goto done;
|
|
|
|
Sleep ( 5000 );
|
|
|
|
dwCountTries ++;
|
|
|
|
} while ( NETCFG_E_IN_USE == hr
|
|
&& dwCountTries < 6);
|
|
|
|
if ( hr )
|
|
goto done;
|
|
|
|
//
|
|
// Get RasClient component
|
|
//
|
|
if ( FAILED( hr = HrFindComponent(pINetCfg,
|
|
GUID_DEVCLASS_NETSERVICE,
|
|
c_szInfId_MS_RasCli,
|
|
&pINetCfgRasCli) ) )
|
|
goto done;
|
|
|
|
|
|
//
|
|
// Get RasSrv component
|
|
//
|
|
if ( FAILED( hr = HrFindComponent(pINetCfg,
|
|
GUID_DEVCLASS_NETSERVICE,
|
|
c_szInfId_MS_RasSrv,
|
|
&pINetCfgRasSrv ) ) )
|
|
goto done;
|
|
|
|
//
|
|
// Get RasRtr component
|
|
//
|
|
if ( FAILED ( hr = HrFindComponent ( pINetCfg,
|
|
GUID_DEVCLASS_NETSERVICE,
|
|
c_szInfId_MS_RasRtr,
|
|
&pINetCfgRasRtr ) ) )
|
|
goto done;
|
|
|
|
//
|
|
// Bail if neither DUN Client nor Dial Up Server is installed
|
|
//
|
|
if ( !pINetCfgRasCli
|
|
&& !pINetCfgRasSrv
|
|
&& !pINetCfgRasRtr)
|
|
{
|
|
hr = E_FAIL;
|
|
goto done;
|
|
}
|
|
|
|
//
|
|
// Get Nbf component
|
|
//
|
|
if (FAILED (hr = HrFindComponent(pINetCfg,
|
|
GUID_DEVCLASS_NETTRANS,
|
|
c_szInfId_MS_NetBEUI,
|
|
&pINetCfgComp)))
|
|
goto done;
|
|
|
|
if (pINetCfgComp)
|
|
{
|
|
if ( ( fRasCli
|
|
&& pINetCfgRasCli
|
|
&& ( hr = pINetCfgRasCli->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRasSrv
|
|
&& pINetCfgRasSrv
|
|
&& ( hr = pINetCfgRasSrv->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRouter
|
|
&& pINetCfgRasRtr
|
|
&& ( hr = pINetCfgRasRtr->IsBoundTo( pINetCfgComp ) ) == S_OK ) )
|
|
|
|
*pdwInstalledProtocols |= NP_Nbf;
|
|
|
|
ReleaseObj(pINetCfgComp);
|
|
pINetCfgComp = NULL;
|
|
}
|
|
|
|
//
|
|
// Get TcpIp component
|
|
//
|
|
if (FAILED (hr = HrFindComponent(pINetCfg,
|
|
GUID_DEVCLASS_NETTRANS,
|
|
c_szInfId_MS_TCPIP,
|
|
&pINetCfgComp)))
|
|
goto done;
|
|
|
|
if (pINetCfgComp)
|
|
{
|
|
if ( ( fRasCli
|
|
&& pINetCfgRasCli
|
|
&& ( hr = pINetCfgRasCli->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRasSrv
|
|
&& pINetCfgRasSrv
|
|
&& ( hr = pINetCfgRasSrv->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRouter
|
|
&& pINetCfgRasRtr
|
|
&& ( hr = pINetCfgRasRtr->IsBoundTo( pINetCfgComp ) ) == S_OK ) )
|
|
|
|
*pdwInstalledProtocols |= NP_Ip;
|
|
|
|
ReleaseObj (pINetCfgComp);
|
|
pINetCfgComp = NULL;
|
|
}
|
|
|
|
|
|
//
|
|
// Get NWIpx component
|
|
//
|
|
if (FAILED( hr = HrFindComponent(pINetCfg,
|
|
GUID_DEVCLASS_NETTRANS,
|
|
c_szInfId_MS_NWIPX,
|
|
&pINetCfgComp)))
|
|
goto done;
|
|
|
|
if (pINetCfgComp)
|
|
{
|
|
if ( ( fRasCli
|
|
&& pINetCfgRasCli
|
|
&& ( hr = pINetCfgRasCli->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRasSrv
|
|
&& pINetCfgRasSrv
|
|
&& ( hr = pINetCfgRasSrv->IsBoundTo( pINetCfgComp ) ) == S_OK )
|
|
|| ( fRouter
|
|
&& pINetCfgRasRtr
|
|
&& ( hr = pINetCfgRasSrv->IsBoundTo( pINetCfgComp ) ) == S_OK ) )
|
|
|
|
*pdwInstalledProtocols |= NP_Ipx;
|
|
|
|
ReleaseObj (pINetCfgComp);
|
|
pINetCfgComp = NULL;
|
|
}
|
|
|
|
done:
|
|
ReleaseObj (pINetCfgRasSrv);
|
|
ReleaseObj (pINetCfgRasCli);
|
|
ReleaseObj (pINetCfgRasRtr);
|
|
|
|
if (pINetCfg)
|
|
{
|
|
HrUninitializeAndReleaseINetCfg( TRUE, pINetCfg);
|
|
}
|
|
|
|
if (SUCCEEDED (hr))
|
|
hr = S_OK;
|
|
|
|
return HRESULT_CODE( hr );
|
|
|
|
}
|