170 lines
4.3 KiB
C++
170 lines
4.3 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// 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<void**>(&pnc));
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
hr = pnc->QueryInterface(IID_INetCfgLock,
|
||
|
reinterpret_cast<LPVOID *>(&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;
|
||
|
}
|