HRESULT ShowNetConnectionProperties( INetConnection *pNetConnect, HWND hwnd) { HRESULT hr; CLSID ClassID; PROPSHEETHEADERW pinfo; HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; INetConnectionPropertyUi * pNCP; NETCON_PROPERTIES * pProperties; if (pNetConnect->GetProperties(&pProperties) != S_OK) return E_FAIL; hr = pNetConnect->GetUiObjectClassId(&ClassID); if (FAILED(hr)) { NcFreeNetconProperties(pProperties); return hr; } hr = CoCreateInstance(ClassID, NULL, CLSCTX_INPROC_SERVER, IID_INetConnectionPropertyUi, (LPVOID*)&pNCP); if (FAILED(hr)) { NcFreeNetconProperties(pProperties); return hr; } hr = pNCP->SetConnection(pNetConnect); if (SUCCEEDED(hr)) { ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW)); ZeroMemory(hppages, sizeof(hppages)); pinfo.dwSize = sizeof(PROPSHEETHEADERW); pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW; pinfo.phpage = hppages; pinfo.hwndParent = hwnd; pinfo.pszCaption = pProperties->pszwName; hr = pNCP->AddPages(hwnd, PropSheetExCallback, (LPARAM)&pinfo); if (SUCCEEDED(hr)) { if (PropertySheetW(&pinfo) < 0) hr = E_FAIL; } } pNCP->Release(); NcFreeNetconProperties(pProperties); return hr; }
VOID InitializeLANStatusUiDlg(HWND hwndDlg, LANSTATUSUI_CONTEXT * pContext) { WCHAR szBuffer[MAX_PATH] = {0}; NETCON_PROPERTIES * pProperties; if (pContext->pNet->GetProperties(&pProperties) != S_OK) return; if (pProperties->Status == NCS_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_UNREACHABLE, szBuffer, MAX_PATH); else if (pProperties->Status == NCS_MEDIA_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_DISCONNECTED, szBuffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTING) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTING, szBuffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTED, szBuffer, MAX_PATH); SendDlgItemMessageW(hwndDlg, IDC_STATUS, WM_SETTEXT, 0, (LPARAM)szBuffer); pContext->dwInOctets = 0; pContext->dwOutOctets = 0; /* update adapter info */ pContext->Status = -1; UpdateLanStatus(hwndDlg, pContext); NcFreeNetconProperties(pProperties); }
static ULONG WINAPI INetConnectionPropertyUi2_fnRelease( INetConnectionPropertyUi2 * iface) { INetConnectionPropertyUiImpl * This = (INetConnectionPropertyUiImpl*)iface; ULONG refCount = InterlockedDecrement(&This->ref); if (!refCount) { if (This->pNCfg) { INetCfg_Uninitialize(This->pNCfg); INetCfg_Release(This->pNCfg); } if (This->NCfgLock) { INetCfgLock_Release(This->NCfgLock); } if (This->pProperties) { NcFreeNetconProperties(This->pProperties); } CoTaskMemFree (This); } return refCount; }
ULONG WINAPI CNetConnectionPropertyUi::Release() { ULONG refCount = InterlockedDecrement(&ref); if (!refCount) { if (pNCfg) { pNCfg->Uninitialize(); pNCfg->Release(); } if (NCfgLock) { NCfgLock->Release(); } if (pProperties) { NcFreeNetconProperties(pProperties); } delete this; } return refCount; }
/************************************************************************** * ISF_NetConnect_IContextMenu_QueryContextMenu() */ HRESULT WINAPI CNetConUiObject::QueryContextMenu( HMENU hMenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags) { const VALUEStruct * val; NETCON_PROPERTIES * pProperties; val = _ILGetValueStruct(m_pidl); if (!val) return E_FAIL; if (val->pItem->GetProperties(&pProperties) != S_OK) return E_FAIL; if (pProperties->Status == NCS_HARDWARE_DISABLED) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_ACTIVATE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_ACTIVATE), MFS_DEFAULT); else _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DEACTIVATE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DEACTIVATE), MFS_ENABLED); if (pProperties->Status == NCS_HARDWARE_DISABLED || pProperties->Status == NCS_MEDIA_DISCONNECTED || pProperties->Status == NCS_DISCONNECTED) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_GRAYED); else if (pProperties->Status == NCS_CONNECTED) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_DEFAULT); else _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_STATUS, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_STATUS), MFS_ENABLED); if (pProperties->Status == NCS_HARDWARE_DISABLED || pProperties->Status == NCS_MEDIA_DISCONNECTED) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_REPAIR, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_REPAIR), MFS_GRAYED); else _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_REPAIR, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_REPAIR), MFS_ENABLED); _InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED); _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_CREATELINK, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_CREATELINK), MFS_ENABLED); if (pProperties->dwCharacter & NCCF_ALLOW_REMOVAL) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DELETE), MFS_ENABLED); else _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_DELETE, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_DELETE), MFS_GRAYED); if (pProperties->dwCharacter & NCCF_ALLOW_RENAME) _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_RENAME), MFS_ENABLED); else _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_RENAME, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_RENAME), MFS_GRAYED); _InsertMenuItemW(hMenu, indexMenu++, TRUE, -1, MFT_SEPARATOR, NULL, MFS_ENABLED); _InsertMenuItemW(hMenu, indexMenu++, TRUE, IDS_NET_PROPERTIES, MFT_STRING, MAKEINTRESOURCEW(IDS_NET_PROPERTIES), MFS_ENABLED); NcFreeNetconProperties(pProperties); return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 9); }
/************************************************************************** * ISF_NetConnect_fnGetDisplayNameOf * */ HRESULT WINAPI CNetworkConnections::GetDisplayNameOf(PCUITEMID_CHILD pidl, DWORD dwFlags, LPSTRRET strRet) { LPWSTR pszName; HRESULT hr = E_FAIL; NETCON_PROPERTIES * pProperties; const VALUEStruct * val; if (!strRet) return E_INVALIDARG; pszName = static_cast<LPWSTR>(CoTaskMemAlloc(MAX_PATH * sizeof(WCHAR))); if (!pszName) return E_OUTOFMEMORY; if (_ILIsNetConnect(pidl)) { if (LoadStringW(netshell_hInstance, IDS_NETWORKCONNECTION, pszName, MAX_PATH)) { pszName[MAX_PATH-1] = L'\0'; hr = S_OK; } } else { val = _ILGetValueStruct(pidl); if (val) { if (val->pItem->GetProperties(&pProperties) == S_OK) { if (pProperties->pszwName) { wcscpy(pszName, pProperties->pszwName); hr = S_OK; } NcFreeNetconProperties(pProperties); } } } if (SUCCEEDED(hr)) { strRet->uType = STRRET_WSTR; strRet->pOleStr = pszName; } else { CoTaskMemFree(pszName); } return hr; }
/************************************************************************ * ISF_NetConnect_ShellExecuteHookW_Execute */ HRESULT WINAPI CNetworkConnections::Execute(LPSHELLEXECUTEINFOW pei) { const VALUEStruct *val; NETCON_PROPERTIES * pProperties; val = _ILGetValueStruct(ILFindLastID((ITEMIDLIST*)pei->lpIDList)); if (!val) return E_FAIL; if (val->pItem->GetProperties(&pProperties) != NOERROR) return E_FAIL; if (pProperties->Status == NCS_CONNECTED) { NcFreeNetconProperties(pProperties); return ShowNetConnectionStatus(m_lpOleCmd, val->pItem, pei->hwnd); } NcFreeNetconProperties(pProperties); return S_OK; }
VOID ShowStatusPropertyDialog( LANSTATUSUI_CONTEXT *pContext, HWND hwndDlg) { HPROPSHEETPAGE hppages[2]; PROPSHEETHEADERW pinfo; NETCON_PROPERTIES * pProperties = NULL; ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW)); ZeroMemory(hppages, sizeof(hppages)); pinfo.dwSize = sizeof(PROPSHEETHEADERW); pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW; pinfo.phpage = hppages; pinfo.hwndParent = hwndDlg; if (pContext->pNet->GetProperties(&pProperties) == S_OK) { if (pProperties->pszwName) { pinfo.pszCaption = pProperties->pszwName; pinfo.dwFlags |= PSH_PROPTITLE; } InitializePropertyDialog(pContext, pProperties); if (pProperties->MediaType == NCM_LAN && pProperties->Status == NCS_CONNECTED) { hppages[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_LAN_NETSTATUS), LANStatusUiDlg, (LPARAM)pContext, NULL); if (hppages[0]) pinfo.nPages++; hppages[pinfo.nPages] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_LAN_NETSTATUSADVANCED), LANStatusUiAdvancedDlg, (LPARAM)pContext, NULL); if (hppages[pinfo.nPages]) pinfo.nPages++; if (pinfo.nPages) { PropertySheetW(&pinfo); } } else if (pProperties->Status == NCS_MEDIA_DISCONNECTED || pProperties->Status == NCS_DISCONNECTED || pProperties->Status == NCS_HARDWARE_DISABLED) { ShowNetConnectionProperties(pContext->pNet, pContext->hwndDlg); } NcFreeNetconProperties(pProperties); } }
HRESULT ShowNetConnectionStatus( IOleCommandTarget *lpOleCmd, INetConnection *pNetConnect, HWND hwnd) { NETCON_PROPERTIES *pProperties; HRESULT hr; if (!lpOleCmd) return E_FAIL; if (pNetConnect->GetProperties(&pProperties) != S_OK) return E_FAIL; hr = lpOleCmd->Exec(&pProperties->guidId, OLECMDID_NEW, OLECMDEXECOPT_DODEFAULT, NULL, NULL); NcFreeNetconProperties(pProperties); return hr; }
/************************************************************************ * ISF_NetConnect_IExtractIcon_GetIconLocation */ HRESULT WINAPI CNetConUiObject::GetIconLocation( UINT uFlags, LPWSTR szIconFile, UINT cchMax, int *piIndex, UINT *pwFlags) { const VALUEStruct *val; NETCON_PROPERTIES *pProperties; *pwFlags = 0; if (!GetModuleFileNameW(netshell_hInstance, szIconFile, cchMax)) { ERR("GetModuleFileNameW failed\n"); return E_FAIL; } val = _ILGetValueStruct(m_pidl); if (!val) { ERR("_ILGetValueStruct failed\n"); return E_FAIL; } if (val->pItem->GetProperties(&pProperties) != NOERROR) { ERR("INetConnection_GetProperties failed\n"); return E_FAIL; } if (pProperties->Status == NCS_CONNECTED || pProperties->Status == NCS_CONNECTING) *piIndex = -IDI_NET_IDLE; else *piIndex = -IDI_NET_OFF; NcFreeNetconProperties(pProperties); return NOERROR; }
HRESULT CLanStatus::InitializeNetTaskbarNotifications() { NOTIFYICONDATAW nid; HWND hwndDlg; INetConnectionManager *pNetConMan; IEnumNetConnection *pEnumCon; INetConnection *pNetCon; NETCON_PROPERTIES* pProps; HRESULT hr; ULONG Count; ULONG Index; NOTIFICATION_ITEM * pItem, *pLast = NULL; LANSTATUSUI_CONTEXT * pContext; TRACE("InitializeNetTaskbarNotifications\n"); if (m_pHead) { pItem = m_pHead; while (pItem) { hr = pItem->pNet->GetProperties(&pProps); if (SUCCEEDED(hr)) { ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = pItem->uID; nid.hWnd = pItem->hwndDlg; nid.uFlags = NIF_STATE; if (pProps->dwCharacter & NCCF_SHOW_ICON) nid.dwState = 0; else nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; Shell_NotifyIconW(NIM_MODIFY, &nid); NcFreeNetconProperties(pProps); } pItem = pItem->pNext; } return S_OK; } /* get an instance to of IConnectionManager */ //hr = CoCreateInstance(&CLSID_ConnectionManager, NULL, CLSCTX_INPROC_SERVER, &IID_INetConnectionManager, (LPVOID*)&pNetConMan); hr = INetConnectionManager_Constructor(NULL, IID_INetConnectionManager, (LPVOID*)&pNetConMan); if (FAILED(hr)) { ERR("INetConnectionManager_Constructor failed\n"); return hr; } hr = pNetConMan->EnumConnections(NCME_DEFAULT, &pEnumCon); if (FAILED(hr)) { ERR("EnumConnections failed\n"); pNetConMan->Release(); return hr; } Index = 1; do { hr = pEnumCon->Next(1, &pNetCon, &Count); if (hr == S_OK) { TRACE("new connection\n"); pItem = static_cast<NOTIFICATION_ITEM*>(CoTaskMemAlloc(sizeof(NOTIFICATION_ITEM))); if (!pItem) break; pContext = static_cast<LANSTATUSUI_CONTEXT*>(CoTaskMemAlloc(sizeof(LANSTATUSUI_CONTEXT))); if (!pContext) { CoTaskMemFree(pItem); break; } ZeroMemory(pContext, sizeof(LANSTATUSUI_CONTEXT)); pContext->uID = Index; pContext->pNet = pNetCon; pItem->uID = Index; pItem->pNext = NULL; pItem->pNet = pNetCon; hwndDlg = CreateDialogParamW(netshell_hInstance, MAKEINTRESOURCEW(IDD_STATUS), NULL, LANStatusDlg, (LPARAM)pContext); if (hwndDlg) { ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = Index++; nid.uFlags = NIF_MESSAGE; nid.uVersion = 3; nid.uCallbackMessage = WM_SHOWSTATUSDLG; nid.hWnd = hwndDlg; hr = pNetCon->GetProperties(&pProps); if (SUCCEEDED(hr)) { CopyMemory(&pItem->guidItem, &pProps->guidId, sizeof(GUID)); if (!(pProps->dwCharacter & NCCF_SHOW_ICON)) { nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; nid.uFlags |= NIF_STATE; } if (pProps->Status == NCS_MEDIA_DISCONNECTED || pProps->Status == NCS_DISCONNECTED || pProps->Status == NCS_HARDWARE_DISABLED) nid.hIcon = LoadIcon(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_OFF)); else if (pProps->Status == NCS_CONNECTED) nid.hIcon = LoadIcon(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_IDLE)); if (nid.hIcon) nid.uFlags |= NIF_ICON; wcscpy(nid.szTip, pProps->pszwName); nid.uFlags |= NIF_TIP; } pContext->hwndStatusDlg = hwndDlg; pItem->hwndDlg = hwndDlg; if (Shell_NotifyIconW(NIM_ADD, &nid)) { if (pLast) pLast->pNext = pItem; else m_pHead = pItem; pLast = pItem; Index++; } else { ERR("Shell_NotifyIconW failed\n"); CoTaskMemFree(pItem); } if (nid.uFlags & NIF_ICON) DestroyIcon(nid.hIcon); } else ERR("CreateDialogParamW failed\n"); } } while (hr == S_OK); m_lpNetMan = pNetConMan; pEnumCon->Release(); return S_OK; }
VOID DisableNetworkAdapter(INetConnection * pNet, LANSTATUSUI_CONTEXT * pContext, HWND hwndDlg) { HKEY hKey; NETCON_PROPERTIES * pProperties; LPOLESTR pDisplayName; WCHAR szPath[200]; DWORD dwSize, dwType; LPWSTR pPnp; HDEVINFO hInfo; SP_DEVINFO_DATA DevInfo; SP_PROPCHANGE_PARAMS PropChangeParams; BOOL bClose = FALSE; NOTIFYICONDATAW nid; if (FAILED(pNet->GetProperties(&pProperties))) return; hInfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_NET, NULL, NULL, DIGCF_PRESENT ); if (!hInfo) { NcFreeNetconProperties(pProperties); return; } if (FAILED(StringFromCLSID((CLSID)pProperties->guidId, &pDisplayName))) { NcFreeNetconProperties(pProperties); SetupDiDestroyDeviceInfoList(hInfo); return; } NcFreeNetconProperties(pProperties); if (FindNetworkAdapter(hInfo, &DevInfo, pDisplayName)) { PropChangeParams.ClassInstallHeader.cbSize = sizeof(SP_CLASSINSTALL_HEADER); PropChangeParams.ClassInstallHeader.InstallFunction = DIF_PROPERTYCHANGE; //; PropChangeParams.StateChange = DICS_DISABLE; PropChangeParams.Scope = DICS_FLAG_CONFIGSPECIFIC; PropChangeParams.HwProfile = 0; if (SetupDiSetClassInstallParams(hInfo, &DevInfo, &PropChangeParams.ClassInstallHeader, sizeof(SP_PROPCHANGE_PARAMS))) { if (SetupDiCallClassInstaller(DIF_PROPERTYCHANGE, hInfo, &DevInfo)) bClose = TRUE; } } SetupDiDestroyDeviceInfoList(hInfo); swprintf(szPath, L"SYSTEM\\CurrentControlSet\\Control\\Network\\{4D36E972-E325-11CE-BFC1-08002BE10318}\\%s\\Connection", pDisplayName); CoTaskMemFree(pDisplayName); if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, KEY_READ, &hKey) != ERROR_SUCCESS) return; dwSize = 0; if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, NULL, &dwSize) != ERROR_SUCCESS || dwType != REG_SZ) { RegCloseKey(hKey); return; } pPnp = static_cast<PWSTR>(CoTaskMemAlloc(dwSize)); if (!pPnp) { RegCloseKey(hKey); return; } if (RegQueryValueExW(hKey, L"PnpInstanceID", NULL, &dwType, (LPBYTE)pPnp, &dwSize) != ERROR_SUCCESS) { CoTaskMemFree(pPnp); RegCloseKey(hKey); return; } RegCloseKey(hKey); swprintf(szPath, L"System\\CurrentControlSet\\Hardware Profiles\\Current\\System\\CurrentControlSet\\Enum\\%s", pPnp); CoTaskMemFree(pPnp); if (RegCreateKeyExW(HKEY_LOCAL_MACHINE, szPath, 0, NULL, 0, KEY_WRITE, NULL, &hKey, NULL) != ERROR_SUCCESS) return; dwSize = 1; /* enable = 0, disable = 1 */ RegSetValueExW(hKey, L"CSConfigFlags", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); RegCloseKey(hKey); if (!bClose) return; PropSheet_PressButton(GetParent(hwndDlg), PSBTN_CANCEL); ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = pContext->uID; nid.hWnd = pContext->hwndDlg; nid.uFlags = NIF_STATE; nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; Shell_NotifyIconW(NIM_MODIFY, &nid); }
VOID UpdateLanStatus(HWND hwndDlg, LANSTATUSUI_CONTEXT * pContext) { MIB_IFROW IfEntry; HICON hIcon, hOldIcon = NULL; NOTIFYICONDATAW nid; NETCON_PROPERTIES * pProperties = NULL; ZeroMemory(&IfEntry, sizeof(IfEntry)); IfEntry.dwIndex = pContext->dwAdapterIndex; if (GetIfEntry(&IfEntry) != NO_ERROR) { return; } hIcon = NULL; if (IfEntry.dwOperStatus == MIB_IF_OPER_STATUS_CONNECTED || IfEntry.dwOperStatus == MIB_IF_OPER_STATUS_OPERATIONAL) { if (pContext->dwInOctets == IfEntry.dwInOctets && pContext->dwOutOctets == IfEntry.dwOutOctets && pContext->Status != 0) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_IDLE), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 0; } else if (pContext->dwInOctets != IfEntry.dwInOctets && pContext->dwOutOctets != IfEntry.dwOutOctets && pContext->Status != 1) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_TRANSREC), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 1; } else if (pContext->dwInOctets != IfEntry.dwInOctets && pContext->Status != 2) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_REC), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 2; } else if (pContext->dwOutOctets != IfEntry.dwOutOctets && pContext->Status != 3) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_TRANS), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 3; } } else if (IfEntry.dwOperStatus == MIB_IF_OPER_STATUS_UNREACHABLE || IfEntry.dwOperStatus == MIB_IF_OPER_STATUS_DISCONNECTED) { if (pContext->Status != 4) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_OFF), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 4; } } else if (IfEntry.dwOperStatus == MIB_IF_OPER_STATUS_NON_OPERATIONAL) { if (pContext->Status != 5) { hIcon = (HICON)LoadImage(netshell_hInstance, MAKEINTRESOURCE(IDI_NET_OFF), IMAGE_ICON, 32, 32, LR_SHARED); pContext->Status = 5; } } if (hwndDlg && hIcon) { hOldIcon = (HICON)SendDlgItemMessageW(hwndDlg, IDC_NETSTAT, STM_SETICON, (WPARAM)hIcon, 0); if (hOldIcon) DestroyIcon(hOldIcon); } ZeroMemory(&nid, sizeof(nid)); nid.cbSize = sizeof(nid); nid.uID = pContext->uID; nid.hWnd = pContext->hwndStatusDlg; nid.uVersion = 3; if (pContext->pNet->GetProperties(&pProperties) == S_OK) { if (pProperties->dwCharacter & NCCF_SHOW_ICON) { if (hwndDlg) nid.hIcon = (HICON)CopyImage(hIcon, IMAGE_ICON, 16, 16, LR_COPYFROMRESOURCE); else nid.hIcon = hIcon; if (nid.hIcon) nid.uFlags |= NIF_ICON; nid.uFlags |= NIF_STATE; nid.dwState = 0; nid.dwStateMask = NIS_HIDDEN; if (pProperties->pszwName) { if (wcslen(pProperties->pszwName) * sizeof(WCHAR) < sizeof(nid.szTip)) { nid.uFlags |= NIF_TIP; wcscpy(nid.szTip, pProperties->pszwName); } else { CopyMemory(nid.szTip, pProperties->pszwName, sizeof(nid.szTip) - sizeof(WCHAR)); nid.szTip[(sizeof(nid.szTip)/sizeof(WCHAR))-1] = L'\0'; nid.uFlags |= NIF_TIP; } } } else { nid.uFlags |= NIF_STATE; nid.dwState = NIS_HIDDEN; nid.dwStateMask = NIS_HIDDEN; } NcFreeNetconProperties(pProperties); } Shell_NotifyIconW(NIM_MODIFY, &nid); if (nid.uFlags & NIF_ICON) DestroyIcon(nid.hIcon); pContext->dwInOctets = IfEntry.dwInOctets; pContext->dwOutOctets = IfEntry.dwOutOctets; if (hwndDlg) UpdateLanStatusUiDlg(hwndDlg, &IfEntry, pContext); }
HRESULT WINAPI CNetworkConnections::GetDetailsOf( PCUITEMID_CHILD pidl, UINT iColumn, SHELLDETAILS * psd) { WCHAR buffer[MAX_PATH] = {0}; HRESULT hr = E_FAIL; const VALUEStruct * val; NETCON_PROPERTIES * pProperties; if (iColumn >= NETCONNECTSHELLVIEWCOLUMNS) return E_FAIL; psd->fmt = NetConnectSFHeader[iColumn].fmt; psd->cxChar = NetConnectSFHeader[iColumn].cxChar; if (pidl == NULL) { psd->str.uType = STRRET_WSTR; if (LoadStringW(netshell_hInstance, NetConnectSFHeader[iColumn].colnameid, buffer, MAX_PATH)) hr = SHStrDupW(buffer, &psd->str.pOleStr); return hr; } if (iColumn == COLUMN_NAME) { psd->str.uType = STRRET_WSTR; return GetDisplayNameOf(pidl, SHGDN_NORMAL, &psd->str); } val = _ILGetValueStruct(pidl); if (!val) return E_FAIL; if (!val->pItem) return E_FAIL; if (val->pItem->GetProperties(&pProperties) != S_OK) return E_FAIL; switch (iColumn) { case COLUMN_TYPE: if (pProperties->MediaType == NCM_LAN || pProperties->MediaType == NCM_SHAREDACCESSHOST_RAS) { if (LoadStringW(netshell_hInstance, IDS_TYPE_ETHERNET, buffer, MAX_PATH)) { psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } } break; case COLUMN_STATUS: buffer[0] = L'\0'; if (pProperties->Status == NCS_HARDWARE_DISABLED) LoadStringW(netshell_hInstance, IDS_STATUS_NON_OPERATIONAL, buffer, MAX_PATH); else if (pProperties->Status == NCS_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_UNREACHABLE, buffer, MAX_PATH); else if (pProperties->Status == NCS_MEDIA_DISCONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_DISCONNECTED, buffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTING) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTING, buffer, MAX_PATH); else if (pProperties->Status == NCS_CONNECTED) LoadStringW(netshell_hInstance, IDS_STATUS_CONNECTED, buffer, MAX_PATH); if (buffer[0]) { buffer[MAX_PATH-1] = L'\0'; psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } break; case COLUMN_DEVNAME: if (pProperties->pszwDeviceName) { wcscpy(buffer, pProperties->pszwDeviceName); buffer[MAX_PATH-1] = L'\0'; psd->str.uType = STRRET_WSTR; hr = SHStrDupW(buffer, &psd->str.pOleStr); } else { psd->str.cStr[0] = '\0'; psd->str.uType = STRRET_CSTR; } break; case COLUMN_PHONE: case COLUMN_OWNER: psd->str.cStr[0] = '\0'; psd->str.uType = STRRET_CSTR; break; } NcFreeNetconProperties(pProperties); return hr; }