187 lines
4.7 KiB
C++
187 lines
4.7 KiB
C++
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
// Copyright (C) Microsoft Corporation, 1997.
|
||
|
//
|
||
|
// File: L A N W I Z F N. C P P
|
||
|
//
|
||
|
// Contents: Help member functions of the LAN ConnectionUI object
|
||
|
// used to implement the Lan Connection Wizard
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
// Created: tongl 24 Oct 1997
|
||
|
//
|
||
|
//----------------------------------------------------------------------------
|
||
|
|
||
|
#include "pch.h"
|
||
|
#pragma hdrstop
|
||
|
#include "nsbase.h"
|
||
|
#include "lanuiobj.h"
|
||
|
#include "lancmn.h"
|
||
|
#include "lanwiz.h"
|
||
|
#include "ncnetcon.h"
|
||
|
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CLanConnectionUi::HrSetupWizPages
|
||
|
//
|
||
|
// Purpose: Setup the needed wizard pages based on the context
|
||
|
//
|
||
|
// Arguments:
|
||
|
// pContext [in]
|
||
|
// pahpsp [out]
|
||
|
// pcPages [out]
|
||
|
//
|
||
|
// Returns: HRESULT, Error code.
|
||
|
//
|
||
|
// Author: tongl 9 Oct 1997
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
HRESULT CLanConnectionUi::HrSetupWizPages(INetConnectionWizardUiContext* pContext,
|
||
|
HPROPSHEETPAGE ** pahpsp, INT * pcPages)
|
||
|
{
|
||
|
HRESULT hr = S_OK;
|
||
|
|
||
|
int cPages = 0;
|
||
|
HPROPSHEETPAGE *ahpsp = NULL;
|
||
|
|
||
|
// We now have only 1 page no matter what
|
||
|
cPages = 1;
|
||
|
|
||
|
// Lan wizard page
|
||
|
if (!m_pWizPage)
|
||
|
m_pWizPage = new CLanWizPage(static_cast<INetConnectionPropertyUi *>(this));
|
||
|
|
||
|
// Allocate a buffer large enough to hold the handles to all of our
|
||
|
// wizard pages.
|
||
|
ahpsp = (HPROPSHEETPAGE *)CoTaskMemAlloc(sizeof(HPROPSHEETPAGE)
|
||
|
* cPages);
|
||
|
|
||
|
if (!ahpsp)
|
||
|
{
|
||
|
hr = E_OUTOFMEMORY;
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
// Check for read-only mode
|
||
|
if (UM_READONLY == pContext->GetUnattendedModeFlags())
|
||
|
{
|
||
|
// If read-only, remember this
|
||
|
m_pWizPage->SetReadOnlyMode(TRUE);
|
||
|
}
|
||
|
|
||
|
cPages =0;
|
||
|
|
||
|
DWORD dwFlags = PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE;
|
||
|
PCWSTR pszTitle = SzLoadIds(IDS_LANWIZ_TITLE);
|
||
|
PCWSTR pszSubTitle = SzLoadIds(IDS_LANWIZ_SUBTITLE);
|
||
|
|
||
|
ahpsp[cPages++] = m_pWizPage->CreatePage(IDD_LANWIZ_DLG, dwFlags,
|
||
|
pszTitle,
|
||
|
pszSubTitle);
|
||
|
|
||
|
*pahpsp = ahpsp;
|
||
|
*pcPages = cPages;
|
||
|
|
||
|
return hr;
|
||
|
}
|
||
|
|
||
|
//+---------------------------------------------------------------------------
|
||
|
//
|
||
|
// Member: CLanConnectionUi::HrGetLanConnection
|
||
|
//
|
||
|
// Purpose: Return an existing connection or create a new one if none
|
||
|
// exists
|
||
|
//
|
||
|
// Arguments:
|
||
|
//
|
||
|
// Returns: HRESULT, Error code.
|
||
|
//
|
||
|
// Author: tongl 30 Oct 1997
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
HRESULT CLanConnectionUi::HrGetLanConnection(INetLanConnection ** ppLanCon)
|
||
|
{
|
||
|
Assert(ppLanCon);
|
||
|
|
||
|
// Initialize output parameter.
|
||
|
//
|
||
|
*ppLanCon = NULL;
|
||
|
|
||
|
INetLanConnection* pLanCon = NULL;
|
||
|
BOOL fFoundConnection = FALSE;
|
||
|
|
||
|
INetConnectionManager* pConMan;
|
||
|
HRESULT hr = HrCreateInstance(
|
||
|
CLSID_LanConnectionManager,
|
||
|
CLSCTX_SERVER | CLSCTX_NO_CODE_DOWNLOAD,
|
||
|
&pConMan);
|
||
|
|
||
|
TraceHr(ttidError, FAL, hr, FALSE, "HrCreateInstance");
|
||
|
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
GUID guidAdapter;
|
||
|
hr = m_pnccAdapter->GetInstanceGuid(&guidAdapter);
|
||
|
|
||
|
CIterNetCon ncIter(pConMan, NCME_DEFAULT);
|
||
|
INetConnection* pCon;
|
||
|
while (SUCCEEDED(hr) && !fFoundConnection &&
|
||
|
(S_OK == ncIter.HrNext(&pCon)))
|
||
|
{
|
||
|
if (FPconnEqualGuid (pCon, guidAdapter))
|
||
|
{
|
||
|
hr = HrQIAndSetProxyBlanket(pCon, &pLanCon);
|
||
|
if (SUCCEEDED(hr))
|
||
|
{
|
||
|
fFoundConnection = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ReleaseObj(pCon);
|
||
|
}
|
||
|
|
||
|
#if DBG
|
||
|
if (SUCCEEDED(hr) && !fFoundConnection)
|
||
|
{
|
||
|
// If it's not caused by a non-functioning device, we need to assert
|
||
|
|
||
|
ULONG ulProblem;
|
||
|
HRESULT hrTmp = m_pnccAdapter->GetDeviceStatus(&ulProblem);
|
||
|
|
||
|
if (SUCCEEDED(hrTmp))
|
||
|
{
|
||
|
if (FIsDeviceFunctioning(ulProblem))
|
||
|
{
|
||
|
TraceTag(ttidLanUi, "m_pnccAdapter->GetDeviceStatus: ulProblem "
|
||
|
"= 0x%08X.", ulProblem);
|
||
|
|
||
|
AssertSz(FALSE, "How come the LAN connection does not exist after enumeration?");
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
ReleaseObj (pConMan);
|
||
|
}
|
||
|
|
||
|
if ((S_OK == hr) && fFoundConnection)
|
||
|
{
|
||
|
Assert(pLanCon);
|
||
|
*ppLanCon = pLanCon;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
TraceTag(ttidError, "Error! CLanConnectionUi::HrGetLanConnection is called on non-existing adapter.");
|
||
|
hr = E_FAIL;
|
||
|
}
|
||
|
|
||
|
TraceError("CLanConnectionUi::HrGetLanConnection", hr);
|
||
|
return hr;
|
||
|
}
|
||
|
|