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