|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: N O T I F Y . C P P
//
// Contents: Implementation of INetConnectionNotifySink
//
// Notes:
//
// Author: shaunco 21 Aug 1998
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "foldinc.h"
#include "webview.h"
#include "foldres.h" // Folder resource IDs
#include "nsres.h" // Netshell strings
#include "cfutils.h" // Connection folder utility functions
#include "wininet.h"
#include "cmdtable.h"
#include "droptarget.h"
// WVTI_ENTRY - Use for tasks that want to be displayed when something is selected, where the UI is
// independent of the selection
// WVTI_ENTRY_NOSELECTION - Use for tasks that want to be displayed when nothing is selected
// WVTI_ENTRY_FILE - Use for tasks that want to be displayed when a file is selected
// WVTI_ENTRY_TITLE - Use for tasks that want to be displayed when something is selected,
// and you want different UI depending on the selection or if you want to control the title,
// but the tooltip is constant
// WVTI_ENTRY_ALL - Use this one if you want the same text everywhere
// WVTI_ENTRY_ALL_TITLE - Use this one if you want to control everything
// WVTI_HEADER - Use this one for a header
// WVTI_HEADER_ENTRY - Use this one for a header that changes with the selection
const WVTASKITEM c_ConnFolderGlobalTaskHeader = WVTI_HEADER(L"netshell.dll", // module where the resources are
IDS_WV_TITLE_NETCONFOLDERTASKS, // static header for all cases
IDS_WV_TITLE_NETCONFOLDERTASKS_TT // tooltip
);
const WVTASKITEM c_ConnFolderItemTaskHeader = WVTI_HEADER(L"netshell.dll", // module where the resources are
IDS_WV_TITLE_NETCONITEMTASKS, // static header for all cases
IDS_WV_TITLE_NETCONITEMTASKS_TT // tooltip
);
const WVTASKITEM c_ConnFolderIntro = WVTI_HEADER(L"netshell.dll", // module where the resources are
IDS_WV_NETCON_INTRO, // static header for all cases
IDS_WV_NETCON_INTRO // tooltip
);
// Use for tasks that want to be displayed when a file is selected
//#define WVTI_ENTRY_FILE(g, d, t, p, i, s, k) {&(g), (d), (0), (t), (0), (0), (p), (i), (s), (k)}
#define NCWVIEW_ENTRY_FILE(t, mt, i, cmd) \
{&GUID_NULL, L"netshell.dll", (0), (t), (0), (mt), (IDS_##cmd), (i), (CNCWebView::CanShow##cmd), (CNCWebView::On##cmd) }
const WVTASKITEM c_ConnFolderGlobalTaskList[] = { WVTI_ENTRY_ALL( GUID_NULL, // command GUID
// Future thinking - something like this is the way Context Menus are done.
// Be a way to get access to DefView implementation of functions - IUICmdTarget.
L"netshell.dll", // module
IDS_WV_MNCWIZARD, // text
IDS_CMIDM_NEW_CONNECTION, // tooltip
IDI_WV_MNCWIZARD, // icon
CANSHOW_HANDLER_OF(CMIDM_NEW_CONNECTION), INVOKE_HANDLER_OF(CMIDM_NEW_CONNECTION)), WVTI_ENTRY_ALL( GUID_NULL, // command GUID
L"netshell.dll", // module
IDS_WV_HOMENET, // text
IDS_CMIDM_HOMENET_WIZARD, // tooltip
IDI_WV_HOMENET, // icon
CANSHOW_HANDLER_OF(CMIDM_HOMENET_WIZARD), INVOKE_HANDLER_OF(CMIDM_HOMENET_WIZARD)), // Single-select Name ,Multi-select name ,Icon , Verb
NCWVIEW_ENTRY_FILE(IDS_WV_CONNECT ,IDS_WM_CONNECT ,IDI_WV_CONNECT , CMIDM_CONNECT), NCWVIEW_ENTRY_FILE(IDS_WV_DISCONNECT ,IDS_WM_DISCONNECT ,IDI_WV_DISCONNECT , CMIDM_DISCONNECT), NCWVIEW_ENTRY_FILE(IDS_WV_ENABLE ,IDS_WM_ENABLE ,IDI_WV_ENABLE , CMIDM_ENABLE), NCWVIEW_ENTRY_FILE(IDS_WV_DISABLE ,IDS_WM_DISABLE ,IDI_WV_DISABLE , CMIDM_DISABLE), NCWVIEW_ENTRY_FILE(IDS_WV_REPAIR ,IDS_WM_REPAIR ,IDI_WV_REPAIR , CMIDM_FIX), NCWVIEW_ENTRY_FILE(IDS_WV_RENAME ,IDS_WM_RENAME ,IDI_WV_RENAME , CMIDM_RENAME), NCWVIEW_ENTRY_FILE(IDS_WV_STATUS ,IDS_WM_STATUS ,IDI_WV_STATUS , CMIDM_STATUS), NCWVIEW_ENTRY_FILE(IDS_WV_DELETE ,IDS_WM_DELETE ,IDI_WV_DELETE , CMIDM_DELETE), NCWVIEW_ENTRY_FILE(IDS_WV_PROPERTIES ,IDS_WM_PROPERTIES ,IDI_WV_PROPERTIES , CMIDM_PROPERTIES) };
DWORD c_aOtherPlaces[] = { CSIDL_CONTROLS, CSIDL_NETWORK, CSIDL_PERSONAL, CSIDL_DRIVES };
extern const DWORD c_dwCountOtherPlaces = celems(c_aOtherPlaces);
const WVTASKITEM c_ConnFolderItemTaskList[] = { WVTI_ENTRY_ALL( GUID_NULL, // command GUID
L"netshell.dll", // module
IDS_WV_TROUBLESHOOT, // text
IDS_CMIDM_NET_TROUBLESHOOT, // tooltip
IDI_WV_TROUBLESHOOT, // icon
CANSHOW_HANDLER_OF(CMIDM_NET_TROUBLESHOOT), INVOKE_HANDLER_OF(CMIDM_NET_TROUBLESHOOT)) };
CNCWebView::CNCWebView(CConnectionFolder* pConnectionFolder) { Assert(pConnectionFolder); Assert(c_dwCountOtherPlaces <= MAXOTHERPLACES); m_pConnectionFolder = pConnectionFolder; // zero the PIDLs array to other places section in the webview
ZeroMemory(m_apidlOtherPlaces, sizeof(m_apidlOtherPlaces));
}
CNCWebView::~CNCWebView() { // check to destroy the other places PIDLs
DestroyOtherPlaces(); }
IMPLEMENT_WEBVIEW_HANDLERS(TOPLEVEL, CNCWebView, CMIDM_NEW_CONNECTION); IMPLEMENT_WEBVIEW_HANDLERS(TOPLEVEL, CNCWebView, CMIDM_HOMENET_WIZARD); IMPLEMENT_WEBVIEW_HANDLERS(TOPLEVEL, CNCWebView, CMIDM_NET_TROUBLESHOOT); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_FIX); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_CONNECT); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_DISCONNECT); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_ENABLE); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_DISABLE); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_RENAME); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_DELETE); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_STATUS); IMPLEMENT_WEBVIEW_HANDLERS(TASKLEVEL, CNCWebView, CMIDM_PROPERTIES);
HRESULT CNCWebView::OnNull(IUnknown* pv, IShellItemArray *psiItemArray, IBindCtx *pbc) { return S_OK; }
STDMETHODIMP CNCWebView::RealMessage(UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { HANDLE_MSG(0, SFVM_GETWEBVIEWLAYOUT, OnGetWebViewLayout); HANDLE_MSG(0, SFVM_GETWEBVIEWCONTENT, OnGetWebViewContent); HANDLE_MSG(0, SFVM_GETWEBVIEWTASKS, OnGetWebViewTasks); default: return E_FAIL; } }
STDMETHODIMP CNCWebView::CreateOtherPlaces(LPDWORD pdwCount) { TraceFileFunc(ttidMenus); // first verify if created already
HRESULT hr = S_OK; Assert(pdwCount); if (!pdwCount) { return E_INVALIDARG; }
if( NULL == m_apidlOtherPlaces[0] ) { *pdwCount = 0;
// create the PIDLs to other places section in the webview
ZeroMemory(m_apidlOtherPlaces, sizeof(m_apidlOtherPlaces));
for (int dwPlaces = 0; dwPlaces < c_dwCountOtherPlaces; dwPlaces++) { if (SUCCEEDED(hr = SHGetSpecialFolderLocation(NULL, c_aOtherPlaces[dwPlaces], &(m_apidlOtherPlaces[*pdwCount])))) { (*pdwCount)++; } else { m_apidlOtherPlaces[*pdwCount] = NULL; TraceHr(ttidError, FAL, hr, FALSE, "CNCWebView::CreateOtherPlaces : 0x%04x", c_aOtherPlaces[dwPlaces]); } }
if (FAILED(hr) && (*pdwCount)) { hr = S_FALSE; // not a big deal if at least one worked.
} }
TraceHr(ttidError, FAL, hr, FALSE, "CNCWebView::CreateOtherPlaces - all places failed"); return hr; }
STDMETHODIMP CNCWebView::DestroyOtherPlaces() { for (ULONG i = 0; i < c_dwCountOtherPlaces; i++) { if (m_apidlOtherPlaces[i]) { LPMALLOC pMalloc; if (SUCCEEDED(SHGetMalloc(&pMalloc))) { pMalloc->Free(m_apidlOtherPlaces[i]); } } } ZeroMemory(m_apidlOtherPlaces, sizeof(m_apidlOtherPlaces)); return S_OK; }
STDMETHODIMP CNCWebView::OnGetWebViewLayout(DWORD pv, UINT uViewMode, SFVM_WEBVIEW_LAYOUT_DATA* pData) { ZeroMemory(pData, sizeof(*pData)); pData->dwLayout = SFVMWVL_NORMAL | SFVMWVL_DETAILS; return S_OK; }
STDMETHODIMP CNCWebView::OnGetWebViewTasks(DWORD pv, SFVM_WEBVIEW_TASKSECTION_DATA* pTasks) { TraceFileFunc(ttidShellViewMsgs);
HRESULT hr = S_OK;
ZeroMemory(pTasks, sizeof(*pTasks));
CComPtr<IUnknown> pUnk; hr = reinterpret_cast<LPSHELLFOLDER>(m_pConnectionFolder)->QueryInterface(IID_IUnknown, reinterpret_cast<LPVOID *>(&pUnk));
if (SUCCEEDED(hr)) { if (FAILED(hr = Create_IEnumUICommand(pUnk, c_ConnFolderItemTaskList, celems(c_ConnFolderItemTaskList), &pTasks->penumFolderTasks)) || FAILED(hr = Create_IEnumUICommand(pUnk, c_ConnFolderGlobalTaskList, celems(c_ConnFolderGlobalTaskList), &pTasks->penumSpecialTasks)) ) { // something has failed - cleanup
IUnknown_SafeReleaseAndNullPtr(pTasks->penumFolderTasks); IUnknown_SafeReleaseAndNullPtr(pTasks->penumSpecialTasks); } } Assert(S_OK == hr);
TraceHr(ttidError, FAL, hr, FALSE, "HrOnGetWebViewTasks");
return hr; }
STDMETHODIMP CNCWebView::OnGetWebViewContent(DWORD pv, SFVM_WEBVIEW_CONTENT_DATA* pData) { TraceFileFunc(ttidShellViewMsgs);
HRESULT hr = S_OK;
ZeroMemory(pData, sizeof(*pData));
DWORD dwCountOtherPlaces; hr = CreateOtherPlaces(&dwCountOtherPlaces);
if (SUCCEEDED(hr)) { hr = E_OUTOFMEMORY; LPCITEMIDLIST *papidl = reinterpret_cast<LPCITEMIDLIST*>(LocalAlloc(LPTR, sizeof(m_apidlOtherPlaces))); if (papidl) { // CEnumArray::CreateInstance is taking the ownership of the array of PIDLs passed
// this function requires 2 things:
//
// 1. the caller should allocate the passed array with LocalAlloc
// 2. the lifetime of the PIDLs passed should span the folder's lifetime
//
CopyMemory(papidl, &m_apidlOtherPlaces, sizeof(m_apidlOtherPlaces));
hr = CEnumArray::CreateInstance(&pData->penumOtherPlaces, papidl, dwCountOtherPlaces); if (FAILED(hr)) { LocalFree(papidl); } }
if (FAILED(hr) || FAILED(hr = Create_IUIElement(&c_ConnFolderGlobalTaskHeader, &pData->pSpecialTaskHeader)) || FAILED(hr = Create_IUIElement(&c_ConnFolderItemTaskHeader, &pData->pFolderTaskHeader)) || FAILED(hr = Create_IUIElement(&c_ConnFolderIntro, &pData->pIntroText)) ) { // something has failed - cleanup
DestroyOtherPlaces(); IUnknown_SafeReleaseAndNullPtr(pData->pIntroText); IUnknown_SafeReleaseAndNullPtr(pData->pSpecialTaskHeader); IUnknown_SafeReleaseAndNullPtr(pData->pFolderTaskHeader); IUnknown_SafeReleaseAndNullPtr(pData->penumOtherPlaces); } }
Assert(S_OK == hr);
TraceHr(ttidError, FAL, hr, FALSE, "HrOnGetWebViewContent"); return hr; }
HRESULT CNCWebView::WebviewVerbInvoke(DWORD dwVerbID, IUnknown* pv, IShellItemArray *psiItemArray) { HRESULT hr = E_NOINTERFACE;
CComPtr<IShellFolderViewCB> pShellFolderViewCB; hr = pv->QueryInterface(IID_IShellFolderViewCB, reinterpret_cast<LPVOID *>(&pShellFolderViewCB)); if (SUCCEEDED(hr)) { hr = pShellFolderViewCB->MessageSFVCB(DVM_INVOKECOMMAND, dwVerbID, NULL); }
Assert(S_OK == hr); return hr; }
HRESULT CNCWebView::WebviewVerbCanInvoke(DWORD dwVerbID, IUnknown* pv, IShellItemArray *psiItemArray, BOOL fOkToBeSlow, UISTATE* puisState, BOOL bLevel) { HRESULT hr = E_NOINTERFACE;
CComPtr<IShellFolderViewCB> pShellFolderViewCB; hr = pv->QueryInterface(IID_IShellFolderViewCB, reinterpret_cast<LPVOID *>(&pShellFolderViewCB)); if (SUCCEEDED(hr)) { NCCS_STATE nccsState; hr = pShellFolderViewCB->MessageSFVCB(bLevel ? MYWM_QUERYINVOKECOMMAND_TOPLEVEL : MYWM_QUERYINVOKECOMMAND_ITEMLEVEL, dwVerbID, reinterpret_cast<LPARAM>(&nccsState) ); if (S_OK != hr) { *puisState = UIS_HIDDEN; } else { switch (nccsState) { case NCCS_DISABLED: *puisState = UIS_DISABLED; break;
case NCCS_ENABLED: *puisState = UIS_ENABLED; break;
case NCCS_NOTSHOWN: *puisState = UIS_HIDDEN; break;
default: AssertSz(FALSE, "Invalid value for NCCS_STATE"); } } }
Assert(S_OK == hr); return hr; }
HRESULT CEnumArray::CreateInstance( IEnumIDList** ppv, LPCITEMIDLIST *ppidl, UINT cItems) { TraceFileFunc(ttidShellViewMsgs);
HRESULT hr = E_OUTOFMEMORY; CEnumArray * pObj = NULL;
pObj = new CComObject<CEnumArray>; if (pObj) { // Do the standard CComCreator::CreateInstance stuff.
//
pObj->SetVoid (NULL); pObj->InternalFinalConstructAddRef (); hr = pObj->FinalConstruct (); pObj->InternalFinalConstructRelease ();
if (SUCCEEDED(hr)) { pObj->_cRef = 1; pObj->_ppidl = ppidl; // takes ownership of ppidl!
pObj->_cItems = cItems; pObj->Reset();
hr = pObj->QueryInterface (IID_IEnumIDList, reinterpret_cast<LPVOID *>(ppv)); }
if (FAILED(hr)) { delete pObj; } }
TraceHr(ttidError, FAL, hr, FALSE, "CEnumArray::CreateInstance"); return hr; }
CEnumArray::CEnumArray() { _ppidl = NULL; }
CEnumArray::~CEnumArray() { if (_ppidl) { LocalFree(_ppidl); } }
STDMETHODIMP CEnumArray::Next(ULONG celt, LPITEMIDLIST *ppidl, ULONG *pceltFetched) { HRESULT hr = S_FALSE;
if (_ppidl && (_ulIndex < _cItems)) { *ppidl = ILClone(_ppidl[_ulIndex++]); if (ppidl) { hr = S_OK; } else { hr = E_OUTOFMEMORY; } } if (pceltFetched) { *pceltFetched = (hr == S_OK) ? 1 : 0; }
return hr; }
STDMETHODIMP CEnumArray::Skip(ULONG celt) { _ulIndex = min(_cItems, _ulIndex+celt); return S_OK; }
STDMETHODIMP CEnumArray::Reset() { _ulIndex = 0; return S_OK; }
STDMETHODIMP CEnumArray::Clone(IEnumIDList **ppenum) { // We can not clone this array, since we don't own references to the pidls
*ppenum = NULL; return E_NOTIMPL; }
HRESULT HrIsWebViewEnabled() { SHELLSTATE ss={0};
// SSF_HIDDENFILEEXTS and SSF_SORTCOLUMNS don't work with
// the SHELLFLAGSTATE struct, make sure they are off
// (because the corresponding SHELLSTATE fields don't
// exist in SHELLFLAGSTATE.)
//
DWORD dwMask = SSF_WEBVIEW;
SHGetSetSettings(&ss, dwMask, FALSE);
if (ss.fWebView) { return S_OK; } else { return S_FALSE; } }
/*
HRESULT GetCurrentCommandState(int iCommandId, UISTATE* puisState) { for (DWORD dwLoop = 0; dwLoop < g_nFolderCommandCount; dwLoop++) { if (iCommandId = g_cteFolderCommands[dwLoop].iCommandId) { if (g_cteFolderCommands[dwLoop].fCurrentlyValid) { *puisState = UIS_ENABLED; } else { *puisState = UIS_DISABLED; } return S_OK; } }
Assert(FALSE); return E_FILE_NOT_FOUND; }
HRESULT CNCWebView::CanShowConnect(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { HRESULT hr = GetCurrentCommandState(CMIDM_CONNECT, puisState); return hr; }
HRESULT CNCWebView::CanShowDisconnect(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe; *puisState = UIS_DISABLED; HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if (((cfe.GetNetConMediaType() == NCM_PHONE) || (cfe.GetNetConMediaType() == NCM_TUNNEL) || (cfe.GetNetConMediaType() == NCM_PPPOE) || (cfe.GetNetConMediaType() == NCM_ISDN) || (cfe.GetNetConMediaType() == NCM_DIRECT) || (cfe.GetNetConMediaType() == NCM_SHAREDACCESSHOST_RAS) || (cfe.GetNetConMediaType() == NCM_NONE ) ) && (!cfe.GetWizard())) { if ( (cfe.GetNetConStatus() == NCS_CONNECTED) ) { *puisState = UIS_ENABLED; } } }
Assert(SUCCEEDED(hr)); return hr; }
HRESULT CNCWebView::CanShowEnable(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe;
*puisState = UIS_DISABLED;
HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if ((cfe.GetNetConMediaType() == NCM_LAN) || (cfe.GetNetConMediaType() == NCM_BRIDGE) || (cfe.GetNetConMediaType() == NCM_SHAREDACCESSHOST_LAN)) { if ( (cfe.GetNetConStatus() == NCS_DISCONNECTED) ) { *puisState = UIS_ENABLED; } } }
Assert(SUCCEEDED(hr)); return hr; }
HRESULT CNCWebView::CanShowDisable(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe;
*puisState = UIS_DISABLED;
HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if ((cfe.GetNetConMediaType() == NCM_LAN) || (cfe.GetNetConMediaType() == NCM_BRIDGE) || (cfe.GetNetConMediaType() == NCM_SHAREDACCESSHOST_LAN)) { if ( (cfe.GetNetConStatus() == NCS_CONNECTED || NCS_INVALID_ADDRESS || NCS_MEDIA_DISCONNECTED) ) { *puisState = UIS_ENABLED; } } }
Assert(SUCCEEDED(hr)); return hr; }
HRESULT CNCWebView::CanShowRepair(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe;
*puisState = UIS_DISABLED;
HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if ((cfe.GetNetConMediaType() == NCM_LAN) || (cfe.GetNetConMediaType() == NCM_BRIDGE) || (cfe.GetNetConMediaType() == NCM_SHAREDACCESSHOST_LAN)) { if ( (cfe.GetNetConStatus() == NCS_CONNECTED || NCS_INVALID_ADDRESS || NCS_MEDIA_DISCONNECTED) ) { *puisState = UIS_ENABLED; } } }
Assert(SUCCEEDED(hr)); return S_OK; }
HRESULT CNCWebView::CanShowRename(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe;
*puisState = UIS_DISABLED;
HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if ((!cfe.GetWizard()) && !(cfe.GetCharacteristics() && NCCF_INCOMING_ONLY)) { *puisState = UIS_ENABLED; } }
Assert(SUCCEEDED(hr)) return S_OK; }
HRESULT CNCWebView::CanShowStatus(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe;
*puisState = UIS_DISABLED;
HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if ((!cfe.GetWizard()) && (cfe.GetNetConStatus() == NCS_CONNECTED || NCS_INVALID_ADDRESS || NCS_MEDIA_DISCONNECTED) ) { *puisState = UIS_ENABLED; } }
Assert(SUCCEEDED(hr)); return S_OK; }
HRESULT CNCWebView::CanShowDelete(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { CONFOLDENTRY cfe; *puisState = UIS_DISABLED; HRESULT hr = WVGetConFoldPidlFromIDataObject(pv, pdo, cfe); if (SUCCEEDED(hr)) { if (((cfe.GetNetConMediaType() == NCM_PHONE) || (cfe.GetNetConMediaType() == NCM_TUNNEL) || (cfe.GetNetConMediaType() == NCM_PPPOE) || (cfe.GetNetConMediaType() == NCM_ISDN) || (cfe.GetNetConMediaType() == NCM_DIRECT) || (cfe.GetNetConMediaType() == NCM_SHAREDACCESSHOST_RAS) || (cfe.GetNetConMediaType() == NCM_NONE ) ) && (!cfe.GetWizard()))
{ *puisState = UIS_ENABLED; } }
Assert(SUCCEEDED(hr));
return S_OK; }
HRESULT CNCWebView::CanShowHomenet(IUnknown* pv, IDataObject* pdo, BOOL fOkToBeSlow, UISTATE* puisState) { *puisState = UIS_ENABLED; return S_OK; } */
|