#include "pch.h" #pragma hdrstop #include "commconn.h" // Standard shell\commconn includes #include "commconp.h" // Private shell\commconn includes #include "conprops.h" #include "nceh.h" #include "resource.h" #include "wizentry.h" CConnectionCommonUi::CConnectionCommonUi() : m_pconMan(NULL), m_hIL(NULL) { } CConnectionCommonUi::~CConnectionCommonUi() { ReleaseObj(m_pconMan); if (NULL != m_hIL) ImageList_Destroy(m_hIL); } HRESULT CConnectionCommonUi::HrInitialize() { HRESULT hr = NOERROR; // Get the connection manager if we haven't already if (NULL == m_pconMan) { INITCOMMONCONTROLSEX iccex = {0}; iccex.dwSize = sizeof(INITCOMMONCONTROLSEX); iccex.dwICC = ICC_USEREX_CLASSES; hr = HrCreateInstance( CLSID_ConnectionManager, CLSCTX_LOCAL_SERVER | CLSCTX_NO_CODE_DOWNLOAD, &m_pconMan); TraceHr(ttidError, FAL, hr, FALSE, "HrCreateInstance"); if (FAILED(hr)) goto Error; // Init the new common controls if (FALSE == InitCommonControlsEx(&iccex)) { hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); goto Error; } hr = CChooseConnectionDlg::HrLoadImageList(&m_hIL); } Error: TraceError("CConnectionCommonUi::HrInitialize",hr); return hr; } HRESULT CConnectionCommonUi::ChooseConnection( NETCON_CHOOSECONN * pChooseConn, INetConnection** ppConn) { HRESULT hr = E_POINTER; COM_PROTECT_TRY { INT_PTR nRet; CChooseConnectionDlg * pdlg = NULL; // Parameter Validation if ((NULL == pChooseConn) || IsBadReadPtr(pChooseConn, sizeof(NETCON_CHOOSECONN)) || ((NULL != ppConn) && IsBadWritePtr(ppConn, sizeof(INetConnection*)))) { goto Error; } if ((sizeof(NETCON_CHOOSECONN) != pChooseConn->lStructSize) || ((~NCCHT_ALL) & pChooseConn->dwTypeMask) || ((NULL != pChooseConn->hwndParent) && !IsWindow(pChooseConn->hwndParent)) || (~(NCCHF_CONNECT | NCCHF_CAPTION | NCCHF_AUTOSELECT | NCCHF_OKBTTNTEXT | NCCHF_DISABLENEW) & pChooseConn->dwFlags)) { hr = E_INVALIDARG; goto Error; } if ((pChooseConn->dwFlags & NCCHF_CAPTION) && ((NULL == pChooseConn->lpstrCaption) || IsBadStringPtr(pChooseConn->lpstrCaption, 1024))) { goto Error; } if ((pChooseConn->dwFlags & NCCHF_OKBTTNTEXT) && ((NULL == pChooseConn->lpstrOkBttnText) || IsBadStringPtr(pChooseConn->lpstrOkBttnText, 1024))) { goto Error; } // Initialize hr = HrInitialize(); if (FAILED(hr)) { goto Error; } // Render the dialog Assert(PConMan()); pdlg = new CChooseConnectionDlg(pChooseConn, this, ppConn); if (NULL == pdlg) { hr = E_OUTOFMEMORY; goto Error; } hr = S_OK; nRet = DialogBoxParam(_Module.GetResourceInstance(), MAKEINTRESOURCE(IDD_ConnChooser), pChooseConn->hwndParent, CChooseConnectionDlg::dlgprocConnChooser, (LPARAM)pdlg); if (IDOK != nRet) { hr = S_FALSE; } delete pdlg; Error: ; } COM_PROTECT_CATCH TraceErrorOptional("CConnectionCommonUi::ChooseConnection", hr, (S_FALSE==hr)); return hr; } HRESULT CConnectionCommonUi::ShowConnectionProperties ( HWND hwndParent, INetConnection* pCon) { HRESULT hr = E_INVALIDARG; INetConnection * pConnTmp = NULL; COM_PROTECT_TRY { // Parameter Validation if (((NULL != hwndParent) && !IsWindow(hwndParent))) { goto Error; } if ((NULL == pCon) || IsBadReadPtr(pCon, sizeof(INetConnection*))) { hr = E_POINTER; goto Error; } if (FAILED(HrQIAndSetProxyBlanket(pCon, &pConnTmp))) { hr = E_NOINTERFACE; goto Error; } Assert(NULL != pConnTmp); pConnTmp->Release(); // Initialize hr = HrInitialize(); if (FAILED(hr)) { goto Error; } hr = HrRaiseConnectionProperties(hwndParent, pCon); Error: ; } COM_PROTECT_CATCH TraceErrorOptional("CConnectionCommonUi::ShowConnectionProperties", hr, (S_FALSE==hr)); return hr; } HRESULT CConnectionCommonUi::StartNewConnectionWizard ( HWND hwndParent, INetConnection** ppCon) { HRESULT hr = E_INVALIDARG; COM_PROTECT_TRY { // Parameter Validation if ((NULL != hwndParent) && !IsWindow(hwndParent)) { goto Error; } if ((NULL == ppCon) || IsBadWritePtr(ppCon, sizeof(INetConnection*))) { hr = E_POINTER; goto Error; } // Initialize hr = HrInitialize(); if (FAILED(hr)) { goto Error; } *ppCon = NULL; hr = NetSetupAddRasConnection(hwndParent, ppCon); Error: ; } COM_PROTECT_CATCH TraceErrorOptional("CConnectionCommonUi::StartNewConnectionWizard", hr, (S_FALSE==hr)); return hr; }