Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

169 lines
4.3 KiB

//+---------------------------------------------------------------------------
//
// 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;
}