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