windows-nt/Source/XPSP1/NT/net/config/shell/wanui/inbui.cpp
2020-09-26 16:20:57 +08:00

396 lines
8.8 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: I N B U I . C P P
//
// Contents: Inbound Connection UI object.
//
// Notes:
//
// Author: shaunco 15 Nov 1997
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "inbui.h"
#include "nccom.h"
#include "rasui.h"
//+---------------------------------------------------------------------------
//
// Member: CInboundConnectionUi::CInboundConnectionUi
//
// Purpose: Constructor/Destructor
//
// Arguments:
// (none)
//
// Returns:
//
// Author: shaunco 20 Oct 1997
//
// Notes:
//
CInboundConnectionUi::CInboundConnectionUi ()
{
m_pCon = NULL;
m_hRasSrvConn = NULL;
m_pvContext = NULL;
m_dwRasWizType = RASWIZ_TYPE_INCOMING;
}
CInboundConnectionUi::~CInboundConnectionUi ()
{
ReleaseObj (m_pCon);
}
//+---------------------------------------------------------------------------
// INetConnectionPropertyUi2
//
STDMETHODIMP
CInboundConnectionUi::SetConnection (
INetConnection* pCon)
{
// Enter our critical section to protect the use of m_pCon.
//
CExceptionSafeComObjectLock EsLock (this);
HRESULT hr = S_OK;
HRASSRVCONN hRasSrvConn = NULL;
// If we were given a connection, verify it by QI'ing for
// INetInboundConnection and calling the GetServerConnectionHandle method.
// This also gives us m_hRasSrvConn which we need later anyway.
//
if (pCon)
{
INetInboundConnection* pInboundCon;
hr = HrQIAndSetProxyBlanket(pCon, &pInboundCon);
if (SUCCEEDED(hr))
{
hr = pInboundCon->GetServerConnectionHandle (
reinterpret_cast<ULONG_PTR*>(&hRasSrvConn));
ReleaseObj (pInboundCon);
}
else if (E_NOINTERFACE == hr)
{
// If the connection object, doesn't support the interface, it's
// not our object. The client has messed up and passed us a bogus
// argument.
//
hr = E_INVALIDARG;
}
}
// Only change our state if the above succeeded.
//
if (SUCCEEDED(hr))
{
ReleaseObj (m_pCon);
m_pCon = pCon;
AddRefObj (m_pCon);
m_hRasSrvConn = hRasSrvConn;
}
TraceError ("CInboundConnectionUi::SetConnection", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::AddPages (
HWND hwndParent,
LPFNADDPROPSHEETPAGE pfnAddPage,
LPARAM lParam)
{
HRESULT hr;
// Validate parameters.
//
if (!pfnAddPage)
{
hr = E_POINTER;
}
// Must have called SetConnection prior to this.
//
else if (!m_pCon)
{
hr = E_UNEXPECTED;
}
else
{
DWORD dwErr = RasSrvAddPropPages (
m_hRasSrvConn,
hwndParent,
pfnAddPage,
lParam,
&m_pvContext);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasSrvAddPropPages", hr);
}
TraceError ("CInboundConnectionUi::AddPages (INetConnectionPropertyUi)", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::GetIcon (
DWORD dwSize,
HICON *phIcon )
{
HRESULT hr;
Assert (phIcon);
hr = HrGetIconFromMediaType(dwSize, NCM_NONE, NCSM_NONE, 7, 0, phIcon);
TraceError ("CLanConnectionUi::GetIcon (INetConnectionPropertyUi2)", hr);
return hr;
}
//+---------------------------------------------------------------------------
// INetConnectionWizardUi
//
STDMETHODIMP
CInboundConnectionUi::QueryMaxPageCount (
INetConnectionWizardUiContext* pContext,
DWORD* pcMaxPages)
{
HRESULT hr = S_OK;
// Validate parameters.
//
if (!pcMaxPages)
{
hr = E_POINTER;
}
else
{
*pcMaxPages = RasWizQueryMaxPageCount (m_dwRasWizType);
}
TraceError ("CInboundConnectionUi::QueryMaxPageCount", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::AddPages (
INetConnectionWizardUiContext* pContext,
LPFNADDPROPSHEETPAGE pfnAddPage,
LPARAM lParam)
{
HRESULT hr;
// Validate parameters.
//
if (!pfnAddPage)
{
hr = E_POINTER;
}
else
{
DWORD dwErr = RasSrvAddWizPages (pfnAddPage, lParam, &(m_pvContext));
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasSrvAddWizPages", hr);
}
TraceError ("CInboundConnectionUi::AddPages (INetConnectionWizardUi)", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::GetSuggestedConnectionName (
PWSTR* ppszwSuggestedName)
{
HRESULT hr;
// Validate parameters.
//
if (!ppszwSuggestedName)
{
hr = E_POINTER;
}
else
{
*ppszwSuggestedName = NULL;
WCHAR pszName[MAX_PATH];
DWORD dwErr;
dwErr = RasWizGetSuggestedEntryName (
m_dwRasWizType, m_pvContext, pszName);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasWizGetSuggestedEntryName", hr);
if (SUCCEEDED(hr))
{
hr = HrCoTaskMemAllocAndDupSz (
pszName,
ppszwSuggestedName);
}
}
TraceError ("CInboundConnectionUi::GetSuggestedConnectionName", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::GetNewConnectionInfo (
DWORD* pdwFlags,
NETCON_MEDIATYPE* pMediaType)
{
HRESULT hr = S_OK;
*pMediaType = NCM_NONE;
if (!pdwFlags)
{
hr = E_POINTER;
}
else
{
*pdwFlags = 0;
Assert (m_pvContext);
DWORD dwRasFlags;
DWORD dwErr = RasWizGetNCCFlags (
m_dwRasWizType,
m_pvContext,
&dwRasFlags);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasWizGetNCCFlags", hr);
if (SUCCEEDED(hr))
{
if (dwRasFlags & NCC_FLAG_CREATE_INCOMING)
{
*pdwFlags |= NCWF_INCOMINGCONNECTION;
}
if (dwRasFlags & NCC_FLAG_FIREWALL)
{
*pdwFlags |= NCWF_FIREWALLED;
}
if (dwRasFlags & NCC_FLAG_SHARED)
{
*pdwFlags |= NCWF_SHARED;
}
if (dwRasFlags & NCC_FLAG_ALL_USERS)
{
*pdwFlags |= NCWF_ALLUSER_CONNECTION;
}
if (dwRasFlags & NCC_FLAG_GLOBALCREDS)
{
*pdwFlags |= NCWF_GLOBAL_CREDENTIALS;
}
if (dwRasFlags & NCC_FLAG_DEFAULT_INTERNET)
{
*pdwFlags |= NCWF_DEFAULT;
}
}
else if (E_INVALIDARG == hr)
{
hr = E_UNEXPECTED;
}
}
BOOL fAllowRename;
DWORD dwErr = RasWizIsEntryRenamable (
m_dwRasWizType,
m_pvContext,
&fAllowRename);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasWizIsEntryRenamable", hr);
if (SUCCEEDED(hr))
{
if (!fAllowRename)
{
*pdwFlags |= NCWF_RENAME_DISABLE;
}
}
TraceError ("CInboundConnectionUi::GetNewConnectionInfo", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::SetConnectionName (
PCWSTR pszwConnectionName)
{
HRESULT hr;
// Validate parameters.
//
if (!pszwConnectionName)
{
hr = E_POINTER;
}
else
{
DWORD dwErr = RasWizSetEntryName (
m_dwRasWizType,
m_pvContext,
pszwConnectionName);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasWizSetEntryName", hr);
}
TraceError ("CInboundConnectionUi::SetConnectionName", hr);
return hr;
}
STDMETHODIMP
CInboundConnectionUi::GetNewConnection (
INetConnection** ppCon)
{
HRESULT hr;
// Validate parameters.
//
if (!ppCon)
{
hr = E_POINTER;
}
/*
// Must have called SetConnectionName prior to this.
//
else if (m_strConnectionName.empty())
{
hr = E_UNEXPECTED;
}
*/
else
{
*ppCon = NULL;
// Commit the settings made in the wizard.
//
DWORD dwErr = RasWizCreateNewEntry (
m_dwRasWizType,
m_pvContext, NULL, NULL, NULL);
hr = HRESULT_FROM_WIN32 (dwErr);
TraceError ("RasWizCreateNewEntry", hr);
if (SUCCEEDED(hr))
{
hr = HrCreateInboundConfigConnection (ppCon);
}
}
TraceError ("CInboundConnectionUi::GetNewConnection", hr);
return hr;
}