Leaked source code of windows server 2003
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

//****************************************************************************
//
// 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 );
}