//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1998. // // File: // // Contents: A C S H E E T . C P P // // Notes: Advanced Configuration property sheet code // // Author: danielwe 14 Jul 1998 // //---------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop #include "acsheet.h" #include "acbind.h" #include "netcfgx.h" #include "order.h" const INT c_cmaxPages = 3; //+--------------------------------------------------------------------------- // // Member: HrGetINetCfg // // Purpose: Obtains the INetCfg with lock // // Arguments: // (none) // // Returns: S_OK if success, OLE or Win32 error otherwise // // Author: danielwe 3 Dec 1997 // // Notes: // HRESULT HrGetINetCfg(HWND hwndParent, INetCfg **ppnc, INetCfgLock **ppnclock) { HRESULT hr = S_OK; INetCfg * pnc = NULL; INetCfgLock * pnclock = NULL; Assert(ppnc); Assert(ppnclock); *ppnc = NULL; *ppnclock = NULL; hr = CoCreateInstance(CLSID_CNetCfg, NULL, CLSCTX_INPROC_SERVER | CLSCTX_NO_CODE_DOWNLOAD, IID_INetCfg, reinterpret_cast(&pnc)); if (SUCCEEDED(hr)) { hr = pnc->QueryInterface(IID_INetCfgLock, reinterpret_cast(&pnclock)); if (SUCCEEDED(hr)) { PWSTR pszwLockHolder; hr = pnclock->AcquireWriteLock(0, SzLoadIds(IDS_ADVCFG_LOCK_DESC), &pszwLockHolder); if (S_OK == hr) { Assert(!pszwLockHolder); hr = pnc->Initialize(NULL); } else if (S_FALSE == hr) { // Couldn't lock INetCfg NcMsgBox(hwndParent, IDS_ADVCFG_CAPTION, IDS_ADVCFG_CANT_LOCK, MB_ICONSTOP | MB_OK, (pszwLockHolder) ? pszwLockHolder : SzLoadIds(IDS_ADVCFG_GENERIC_COMP)); CoTaskMemFree(pszwLockHolder); // Don't need this anymore ReleaseObj(pnclock); pnclock = NULL; hr = E_FAIL; } else if (NETCFG_E_NEED_REBOOT == hr) { // Can't make any changes because we are pending a reboot. NcMsgBox(hwndParent, IDS_ADVCFG_CAPTION, IDS_ADVCFG_NEED_REBOOT, MB_ICONSTOP | MB_OK); // Don't need this anymore ReleaseObj(pnclock); pnclock = NULL; } } } if (SUCCEEDED(hr)) { *ppnc = pnc; *ppnclock = pnclock; } TraceError("HrGetINetCfg", hr); return hr; } HRESULT HrDoAdvCfgDlg(HWND hwndParent) { PROPSHEETHEADER psh = {0}; HPROPSHEETPAGE ahpsp[c_cmaxPages]; INetCfg * pnc = NULL; INetCfgLock * pnclock = NULL; HRESULT hr; hr = HrGetINetCfg(hwndParent, &pnc, &pnclock); if (SUCCEEDED(hr)) { CBindingsDlg dlgBindings(pnc); CProviderOrderDlg dlgProviderOrder; DWORD cPages = 0; if (dlgBindings.FShowPage()) { ahpsp[cPages++] = dlgBindings.CreatePage(IDD_ADVCFG_Bindings, 0); } if (dlgProviderOrder.FShowPage()) { ahpsp[cPages++] = dlgProviderOrder.CreatePage(IDD_ADVCFG_Provider, 0); } psh.dwSize = sizeof(PROPSHEETHEADER); psh.dwFlags = PSH_NOAPPLYNOW; psh.hwndParent = hwndParent; psh.hInstance = _Module.GetResourceInstance(); psh.pszCaption = SzLoadIds(IDS_ADVCFG_PROPSHEET_TITLE); psh.nPages = cPages; psh.phpage = ahpsp; int nRet = PropertySheet(&psh); hr = pnc->Uninitialize(); if (SUCCEEDED(hr)) { if (pnclock) { // Don't unlock unless we previously successfully acquired the // write lock hr = pnclock->ReleaseWriteLock(); ReleaseObj(pnclock); } } if (SUCCEEDED(hr)) { ReleaseObj(pnc); } } TraceError("HrDoAdvCfgDlg", hr); return hr; }