windows-nt/Source/XPSP1/NT/net/config/netcfg/rascfg/ncutil.cpp
2020-09-26 16:20:57 +08:00

218 lines
5.1 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997-2000.
//
// File: N C U T I L . C P P
//
// Contents: INetCfg utilities. This is all a candidate to be moved into
// nccommon\src\ncnetcfg.cpp.
//
// Notes:
//
// Author: shaunco 28 Mar 1997
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "ncnetcfg.h"
#include "ncutil.h"
extern const WCHAR c_szInfId_MS_NdisWanIp[];
//+---------------------------------------------------------------------------
//
// Function: HrEnsureZeroOrOneAdapter
//
// Purpose:
//
// Arguments:
// pnc []
// pszComponentId []
// dwFlags []
//
// Returns:
//
// Author: shaunco 5 Dec 1997
//
// Notes:
//
HRESULT
HrEnsureZeroOrOneAdapter (
INetCfg* pnc,
PCWSTR pszComponentId,
DWORD dwFlags)
{
HRESULT hr = S_OK;
if (dwFlags & ARA_ADD)
{
// Make sure we have one present.
//
if (!FIsAdapterInstalled (pnc, pszComponentId))
{
TraceTag (ttidRasCfg, "Adding %S", pszComponentId);
hr = HrAddOrRemoveAdapter (pnc, pszComponentId,
ARA_ADD, NULL, 1, NULL);
}
}
else
{
// Make sure we have none present.
//
TraceTag (ttidRasCfg, "Removing %S", pszComponentId);
hr = HrFindAndRemoveAllInstancesOfAdapter (pnc, pszComponentId);
}
TraceHr (ttidError, FAL, hr, FALSE, "HrEnsureZeroOrOneAdapter");
return hr;
}
//+---------------------------------------------------------------------------
//
// Function: HrGetInstanceGuidAsString
//
// Purpose:
//
// Arguments:
// pncc []
// pszGuid []
// cchGuid []
//
// Returns:
//
// Author: shaunco 14 Jun 1997
//
// Notes:
//
HRESULT
HrGetInstanceGuidAsString (
INetCfgComponent* pncc,
PWSTR pszGuid,
INT cchGuid)
{
GUID guid;
HRESULT hr = pncc->GetInstanceGuid (&guid);
if(SUCCEEDED(hr))
{
if (0 == StringFromGUID2(guid, pszGuid, cchGuid))
{
hr = E_INVALIDARG;
}
}
TraceHr (ttidError, FAL, hr, FALSE, "HrGetInstanceGuidAsString");
return hr;
}
//+---------------------------------------------------------------------------
//
// Function: HrMapComponentIdToDword
//
// Purpose: Maps a component's id to a DWORD value. The mapping is
// specified by the caller through an array of pointers to
// string values and their associated DWORD values.
//
// Arguments:
// pncc [in] pointer to component.
// aMapSzDword [in] array of elements mapping a string to a DWORD.
// cMapSzDword [in] count of elements in the array.
// pdwValue [out] the returned value.
//
// Returns: S_OK if a match was found. If a match wasn't found,
// S_FALSE is returned.
// Other Win32 error codes.
//
// Author: shaunco 17 May 1997
//
// Notes:
//
HRESULT
HrMapComponentIdToDword (
INetCfgComponent* pncc,
const MAP_SZ_DWORD* aMapSzDword,
UINT cMapSzDword,
DWORD* pdwValue)
{
Assert (pncc);
Assert (aMapSzDword);
Assert (cMapSzDword);
Assert (pdwValue);
// Initialize output parameter.
*pdwValue = 0;
PWSTR pszwId;
HRESULT hr = pncc->GetId (&pszwId);
if (SUCCEEDED(hr))
{
hr = S_FALSE;
while (cMapSzDword--)
{
if (FEqualComponentId (pszwId, aMapSzDword->pszValue))
{
*pdwValue = aMapSzDword->dwValue;
hr = S_OK;
break;
}
aMapSzDword++;
}
CoTaskMemFree (pszwId);
}
TraceHr (ttidError, FAL, hr, S_FALSE == hr,
"HrMapComponentIdToDword");
return hr;
}
//+---------------------------------------------------------------------------
//
// Function: HrOpenComponentParamKey
//
// Purpose: Find a component and open its parameter key.
//
// Arguments:
// pnc [in]
// rguidClass [in]
// pszComponentId [in]
// phkey [out]
//
// Returns: S_OK if the component was found the key was opened.
// S_FALSE if the compoennt was not found.
// error code.
//
// Author: shaunco 13 Apr 1997
//
// Notes:
//
HRESULT
HrOpenComponentParamKey (
INetCfg* pnc,
const GUID& rguidClass,
PCWSTR pszComponentId,
HKEY* phkey)
{
Assert (pnc);
Assert (pszComponentId);
Assert (phkey);
// Initialize the output parameter.
*phkey = NULL;
// Find the component.
INetCfgComponent* pncc;
HRESULT hr = pnc->FindComponent ( pszComponentId, &pncc);
if (S_OK == hr)
{
// Open its param key.
hr = pncc->OpenParamKey (phkey);
ReleaseObj (pncc);
}
TraceHr (ttidError, FAL, hr, S_FALSE == hr,
"HrOpenComponentParamKey");
return hr;
}