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