247 lines
6.4 KiB
C++
247 lines
6.4 KiB
C++
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "advanced.h"
|
|
#include "hwres.h"
|
|
#include "ncreg.h"
|
|
#include "ncsetup.h"
|
|
#include "netcomm.h"
|
|
#include "netsetup.h"
|
|
|
|
|
|
HRESULT
|
|
HrDoOemUpgradeProcessing(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid,
|
|
PCWSTR pszAnswerFile, PCWSTR pszAnswerSections)
|
|
{
|
|
// Open the driver key
|
|
//
|
|
HKEY hkey;
|
|
HRESULT hr = HrSetupDiOpenDevRegKey(hdi, pdeid,
|
|
DICS_FLAG_GLOBAL, 0, DIREG_DRV, KEY_ALL_ACCESS,
|
|
&hkey);
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
TraceTag(ttidNetComm, "Calling OEM Upgrade Code");
|
|
hr = HrOemUpgrade (hkey, pszAnswerFile, pszAnswerSections);
|
|
RegCloseKey(hkey);
|
|
}
|
|
|
|
TraceError("HrDoOemUpgradeProcessing", hr);
|
|
return hr;
|
|
}
|
|
|
|
VOID
|
|
UpdateAdvancedParametersIfNeeded(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid)
|
|
{
|
|
Assert(IsValidHandle(hdi));
|
|
Assert(pdeid);
|
|
|
|
CAdvancedParams Advanced;
|
|
|
|
// initialize advanced params class. This will load parameters and check
|
|
// if current values exist. For each parameter with no current value,
|
|
// a modifed flag is set which will cause the default to be written
|
|
// as the current value on FSave.
|
|
//
|
|
if (SUCCEEDED(Advanced.HrInit(hdi, pdeid)))
|
|
{
|
|
// Save any modified values.
|
|
(void) Advanced.FSave();
|
|
}
|
|
}
|
|
|
|
BOOL
|
|
ProcessAnswerFile(
|
|
PCWSTR pszAnswerFile,
|
|
PCWSTR pszAnswerSections,
|
|
HDEVINFO hdi,
|
|
PSP_DEVINFO_DATA pdeid)
|
|
{
|
|
Assert(IsValidHandle(hdi));
|
|
Assert(pdeid);
|
|
|
|
CAdvancedParams Advanced;
|
|
BOOL fAdvanced = FALSE;
|
|
BOOL fResources = FALSE;
|
|
BOOL fModified = FALSE;
|
|
|
|
if (pszAnswerFile && pszAnswerSections)
|
|
{
|
|
CHwRes Resources;
|
|
|
|
HRESULT hr = Resources.HrInit(pdeid->DevInst);
|
|
|
|
// Only continue to use the HwRes class if S_OK is returned.
|
|
//
|
|
if (S_OK == hr)
|
|
{
|
|
Resources.UseAnswerFile(pszAnswerFile, pszAnswerSections);
|
|
fResources = TRUE;
|
|
}
|
|
else
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
|
|
// initialize
|
|
if (SUCCEEDED(Advanced.HrInit(hdi, pdeid)))
|
|
{
|
|
// We need the advanced params class.
|
|
fAdvanced = TRUE;
|
|
}
|
|
|
|
|
|
// If the device has advanced paramters, have the advanced class
|
|
// read the parameters from the answerfile.
|
|
if (fAdvanced)
|
|
{
|
|
Advanced.UseAnswerFile(pszAnswerFile, pszAnswerSections);
|
|
}
|
|
|
|
hr = HrDoOemUpgradeProcessing(hdi, pdeid, pszAnswerFile,
|
|
pszAnswerSections);
|
|
|
|
if (S_OK == hr)
|
|
{
|
|
fModified = TRUE;
|
|
}
|
|
|
|
if (fResources)
|
|
{
|
|
// Validate answerfile params for pResources (hardware resources)
|
|
// and apply if validated.
|
|
hr = Resources.HrValidateAnswerfileSettings(FALSE);
|
|
if (S_OK == hr)
|
|
{
|
|
Resources.FCommitAnswerfileSettings();
|
|
fModified = TRUE;
|
|
}
|
|
#ifdef ENABLETRACE
|
|
else
|
|
{
|
|
TraceTag(ttidNetComm, "Error in answerfile concerning "
|
|
"hardware resources. Base section %S",
|
|
pszAnswerSections);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// Validate the advanced parameters from the answerfile
|
|
// This will attempt to correct bad params. Even though an
|
|
// error status is returned, it shouldn't stop us and we should
|
|
// still apply changes.
|
|
//
|
|
if (fAdvanced)
|
|
{
|
|
(void) Advanced.FValidateAllParams(FALSE, NULL);
|
|
// Save any advanced params
|
|
fModified = Advanced.FSave();
|
|
}
|
|
|
|
TraceError("Netcomm::HrUpdateAdapterParameters",
|
|
(S_FALSE == hr) ? S_OK : hr);
|
|
}
|
|
|
|
return fModified;
|
|
}
|
|
|
|
BOOL
|
|
FUpdateAdapterParameters(PCWSTR pszAnswerFile,
|
|
PCWSTR pszAnswerSection,
|
|
HDEVINFO hdi,
|
|
PSP_DEVINFO_DATA pdeid)
|
|
{
|
|
Assert(IsValidHandle(hdi));
|
|
Assert(pdeid);
|
|
|
|
CAdvancedParams Advanced;
|
|
BOOL fAdvanced = FALSE;
|
|
BOOL fResources = FALSE;
|
|
|
|
// initialize
|
|
if (SUCCEEDED(Advanced.HrInit(hdi, pdeid)))
|
|
{
|
|
// We need the advanced params class
|
|
fAdvanced = TRUE;
|
|
}
|
|
|
|
if (pszAnswerFile && pszAnswerSection)
|
|
{
|
|
CHwRes Resources;
|
|
|
|
HRESULT hr = Resources.HrInit(pdeid->DevInst);
|
|
|
|
// Only continue to use the HwRes class if S_OK is returned,
|
|
// otherwise set a flag to ignore the class (Note: ignore the
|
|
// class on S_FALSE as well)
|
|
if (S_OK == hr)
|
|
{
|
|
Resources.UseAnswerFile(pszAnswerFile, pszAnswerSection);
|
|
fResources = TRUE;
|
|
}
|
|
else
|
|
{
|
|
hr = S_OK;
|
|
}
|
|
|
|
// If the device has advanced paramters, have the advanced class
|
|
// read the parameters from the answerfile
|
|
if (fAdvanced)
|
|
{
|
|
Advanced.UseAnswerFile(pszAnswerFile, pszAnswerSection);
|
|
}
|
|
|
|
hr = HrDoOemUpgradeProcessing(hdi, pdeid, pszAnswerFile,
|
|
pszAnswerSection);
|
|
|
|
if (fResources)
|
|
{
|
|
// Validate answerfile params for pResources (hardware resources)
|
|
// and apply if validated
|
|
hr = Resources.HrValidateAnswerfileSettings(FALSE);
|
|
if (S_OK == hr)
|
|
{
|
|
Resources.FCommitAnswerfileSettings();
|
|
}
|
|
#ifdef ENABLETRACE
|
|
else
|
|
{
|
|
TraceTag(ttidNetComm, "Error in answerfile concerning "
|
|
"hardware resources. Base section %S",
|
|
pszAnswerSection);
|
|
}
|
|
#endif
|
|
}
|
|
|
|
// Validate the advanced parameters from the answerfile
|
|
// This will attempt to correct bad params. Even though an
|
|
// error status is returned, it shouldn't stop us and we should
|
|
// still apply changes
|
|
//
|
|
if (fAdvanced)
|
|
{
|
|
(void) Advanced.FValidateAllParams(FALSE, NULL);
|
|
}
|
|
|
|
TraceError("Netcomm::HrUpdateAdapterParameters",
|
|
(S_FALSE == hr) ? S_OK : hr);
|
|
}
|
|
|
|
// Save any advanced params
|
|
// Note: we have to do this even if there was no answerfile
|
|
// Since the parameters might have defaults
|
|
if (fAdvanced)
|
|
{
|
|
Advanced.FSave();
|
|
}
|
|
|
|
// return TRUE if we had advanced parameters or resources updated
|
|
return (fAdvanced || fResources);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|