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

140 lines
3.5 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1999.
//
// File: G U I S E T U P . C P P
//
// Contents: Routines that are only executed during GUI setup.
//
// Notes:
//
// Author: shaunco 19 Feb 1999
//
//----------------------------------------------------------------------------
#include <pch.h>
#pragma hdrstop
#include "guisetup.h"
#include "nceh.h"
#include "ncreg.h"
#include "ncsetup.h"
#include "netcomm.h"
#include "netsetup.h"
VOID
ExcludeMarkedServicesForSetup (
IN const CComponent* pComponent,
IN OUT CPszArray* pServiceNames)
{
HRESULT hr;
HKEY hkeyInstance;
HKEY hkeyNdi;
PWSTR pmszExclude;
CPszArray::iterator iter;
PCWSTR pszServiceName;
hr = pComponent->HrOpenInstanceKey (KEY_READ, &hkeyInstance, NULL, NULL);
if (S_OK == hr)
{
hr = HrRegOpenKeyEx (hkeyInstance, L"Ndi", KEY_READ, &hkeyNdi);
if (S_OK == hr)
{
hr = HrRegQueryMultiSzWithAlloc (
hkeyNdi,
L"ExcludeSetupStartServices",
&pmszExclude);
if (S_OK == hr)
{
iter = pServiceNames->begin();
while (iter != pServiceNames->end())
{
pszServiceName = *iter;
Assert (pszServiceName);
if (FIsSzInMultiSzSafe (pszServiceName, pmszExclude))
{
pServiceNames->erase (iter);
}
else
{
iter++;
}
}
MemFree (pmszExclude);
}
RegCloseKey (hkeyNdi);
}
RegCloseKey (hkeyInstance);
}
}
VOID
ProcessAdapterAnswerFileIfExists (
IN const CComponent* pComponent)
{
HDEVINFO hdi;
SP_DEVINFO_DATA deid;
HRESULT hr;
Assert (pComponent);
hr = pComponent->HrOpenDeviceInfo (&hdi, &deid);
if (S_OK == hr)
{
PWSTR pszAnswerFile = NULL;
PWSTR pszAnswerSections = NULL;
TraceTag (ttidNetcfgBase, "Calling Netsetup for Install parameters");
NC_TRY
{
// Get the Network install params for the adapter
//
hr = HrGetAnswerFileParametersForNetCard (hdi, &deid,
pComponent->Ext.PszBindName(),
&pComponent->m_InstanceGuid,
&pszAnswerFile, &pszAnswerSections);
}
NC_CATCH_ALL
{
hr = E_UNEXPECTED;
}
if (S_OK == hr)
{
#ifdef ENABLETRACE
if (pszAnswerFile)
{
TraceTag (ttidNetcfgBase, "Answerfile %S given for adapter",
pszAnswerFile);
}
if (pszAnswerSections)
{
TraceTag (ttidNetcfgBase, "Section %S given for adapter",
pszAnswerSections);
}
#endif // ENABLETRACE
if (ProcessAnswerFile (pszAnswerFile, pszAnswerSections, hdi,
&deid))
{
hr = HrSetupDiSendPropertyChangeNotification (hdi, &deid,
DICS_PROPCHANGE, DICS_FLAG_GLOBAL, 0);
}
}
// Cleanup up if necessary
CoTaskMemFree (pszAnswerFile);
CoTaskMemFree (pszAnswerSections);
SetupDiDestroyDeviceInfoList (hdi);
}
}