ReactOS 0.4.16-dev-1278-gd809cd0
lanstatusui.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Shell
3 * LICENSE: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later)
4 * PURPOSE: CLanStatus: Lan connection status dialog
5 * COPYRIGHT: Copyright 2008 Johannes Anderwald (johannes.anderwald@reactos.org)
6 */
7
8#include "precomp.h"
9
10#include <winsock.h>
11
12#define NETTIMERID 0xFABC
13
15 m_lpNetMan(NULL),
16 m_pHead(NULL)
17{
18}
19
20VOID
22 HWND hwndDlg,
23 MIB_IFROW *IfEntry,
24 LANSTATUSUI_CONTEXT *pContext)
25{
26 WCHAR szFormat[MAX_PATH] = {0};
27 WCHAR szBuffer[MAX_PATH] = {0};
28 SYSTEMTIME TimeConnected;
29 DWORD DurationSeconds;
30 WCHAR Buffer[100];
31 WCHAR DayBuffer[30];
32 WCHAR LocBuffer[50];
33
34#if 0
35 ULONGLONG Ticks;
36#else
37 DWORD Ticks;
38#endif
39
40 if (IfEntry->dwSpeed < 1000)
41 {
42 if (LoadStringW(netshell_hInstance, IDS_FORMAT_BIT, szFormat, sizeof(szFormat)/sizeof(WCHAR)))
43 {
44 swprintf(szBuffer, szFormat, IfEntry->dwSpeed);
45 SendDlgItemMessageW(hwndDlg, IDC_SPEED, WM_SETTEXT, 0, (LPARAM)szBuffer);
46 }
47 }
48 else if (IfEntry->dwSpeed < 1000000)
49 {
50 if (LoadStringW(netshell_hInstance, IDS_FORMAT_KBIT, szFormat, sizeof(szFormat)/sizeof(WCHAR)))
51 {
52 swprintf(szBuffer, szFormat, IfEntry->dwSpeed/1000);
53 SendDlgItemMessageW(hwndDlg, IDC_SPEED, WM_SETTEXT, 0, (LPARAM)szBuffer);
54 }
55 }
56 else if (IfEntry->dwSpeed < 1000000000)
57 {
58 if (LoadStringW(netshell_hInstance, IDS_FORMAT_MBIT, szFormat, sizeof(szFormat)/sizeof(WCHAR)))
59 {
60 swprintf(szBuffer, szFormat, IfEntry->dwSpeed/1000000);
61 SendDlgItemMessageW(hwndDlg, IDC_SPEED, WM_SETTEXT, 0, (LPARAM)szBuffer);
62 }
63 }
64 else
65 {
66 if (LoadStringW(netshell_hInstance, IDS_FORMAT_GBIT, szFormat, sizeof(szFormat)/sizeof(WCHAR)))
67 {
68 swprintf(szBuffer, szFormat, IfEntry->dwSpeed/1000000000);
69 SendDlgItemMessageW(hwndDlg, IDC_SPEED, WM_SETTEXT, 0, (LPARAM)szBuffer);
70 }
71 }
72
73 if (StrFormatByteSizeW(IfEntry->dwInOctets, szBuffer, sizeof(szFormat)/sizeof(WCHAR)))
74 {
75 SendDlgItemMessageW(hwndDlg, IDC_RECEIVED, WM_SETTEXT, 0, (LPARAM)szBuffer);
76 }
77
78 if (StrFormatByteSizeW(IfEntry->dwOutOctets, szBuffer, sizeof(szFormat)/sizeof(WCHAR)))
79 {
80 SendDlgItemMessageW(hwndDlg, IDC_SEND, WM_SETTEXT, 0, (LPARAM)szBuffer);
81 }
82
83#if 0
84 Ticks = GetTickCount64();
85#else
86 Ticks = GetTickCount();
87#endif
88
89 DurationSeconds = Ticks / 1000;
90 TimeConnected.wSecond = (DurationSeconds % 60);
91 TimeConnected.wMinute = (DurationSeconds / 60) % 60;
92 TimeConnected.wHour = (DurationSeconds / (60 * 60)) % 24;
93 TimeConnected.wDay = DurationSeconds / (60 * 60 * 24);
94
95 if (!GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &TimeConnected, L"HH':'mm':'ss", LocBuffer, sizeof(LocBuffer) / sizeof(LocBuffer[0])))
96 return;
97
98 if (!TimeConnected.wDay)
99 {
100 SendDlgItemMessageW(hwndDlg, IDC_DURATION, WM_SETTEXT, 0, (LPARAM)LocBuffer);
101 }
102 else
103 {
104 if (TimeConnected.wDay == 1)
105 {
106 if (!LoadStringW(netshell_hInstance, IDS_DURATION_DAY, DayBuffer, sizeof(DayBuffer) / sizeof(DayBuffer[0])))
107 DayBuffer[0] = L'\0';
108 }
109 else
110 {
111 if (!LoadStringW(netshell_hInstance, IDS_DURATION_DAYS, DayBuffer, sizeof(DayBuffer) / sizeof(DayBuffer[0])))
112 DayBuffer[0] = L'\0';
113 }
114 swprintf(Buffer, DayBuffer, TimeConnected.wDay, LocBuffer);
116 }
117
118}
119
120VOID
122{
123 MIB_IFROW IfEntry;
124 HICON hIcon, hOldIcon = NULL;
126 NETCON_PROPERTIES * pProperties = NULL;
127
128 ZeroMemory(&IfEntry, sizeof(IfEntry));
129 IfEntry.dwIndex = pContext->dwAdapterIndex;
130 if (GetIfEntry(&IfEntry) != NO_ERROR)
131 {
132 return;
133 }
134
135 if (pContext->Status == (UINT)-1)
136 {
137 /*
138 * On first execution, pContext->dw[In|Out]Octets will be zero while
139 * the interface info is already refreshed with non-null data, so a
140 * gap is normal and does not correspond to an effective TX or RX packet.
141 */
142 pContext->dwInOctets = IfEntry.dwInOctets;
143 pContext->dwOutOctets = IfEntry.dwOutOctets;
144 }
145
146 hIcon = NULL;
148 {
149 if (pContext->dwInOctets == IfEntry.dwInOctets && pContext->dwOutOctets == IfEntry.dwOutOctets && pContext->Status != 0)
150 {
152 pContext->Status = 0;
153 }
154 else if (pContext->dwInOctets != IfEntry.dwInOctets && pContext->dwOutOctets != IfEntry.dwOutOctets && pContext->Status != 1)
155 {
157 pContext->Status = 1;
158 }
159 else if (pContext->dwInOctets != IfEntry.dwInOctets && pContext->Status != 2)
160 {
162 pContext->Status = 2;
163 }
164 else if (pContext->dwOutOctets != IfEntry.dwOutOctets && pContext->Status != 3)
165 {
167 pContext->Status = 3;
168 }
169 }
171 {
172 if (pContext->Status != 4)
173 {
175 pContext->Status = 4;
176 }
177 }
179 {
180 if (pContext->Status != 5)
181 {
183 pContext->Status = 5;
184 }
185 }
186
187 if (hwndDlg && hIcon)
188 {
189 hOldIcon = (HICON)SendDlgItemMessageW(hwndDlg, IDC_NETSTAT, STM_SETICON, (WPARAM)hIcon, 0);
190 if (hOldIcon)
191 DestroyIcon(hOldIcon);
192 }
193
194 ZeroMemory(&nid, sizeof(nid));
195 nid.cbSize = sizeof(nid);
196 nid.uID = pContext->uID;
197 nid.hWnd = pContext->hwndStatusDlg;
198 nid.uVersion = NOTIFYICON_VERSION;
199
200 if (pContext->pNet->GetProperties(&pProperties) == S_OK)
201 {
202 if (pProperties->dwCharacter & NCCF_SHOW_ICON)
203 {
204 if (hwndDlg)
206 else
207 nid.hIcon = hIcon;
208
209 if (nid.hIcon)
211
212 nid.uFlags |= NIF_STATE;
213 nid.dwState = 0;
214 nid.dwStateMask = NIS_HIDDEN;
215
216 if (pProperties->pszwName)
217 {
218 if (wcslen(pProperties->pszwName) * sizeof(WCHAR) < sizeof(nid.szTip))
219 {
220 nid.uFlags |= NIF_TIP;
221 wcscpy(nid.szTip, pProperties->pszwName);
222 }
223 else
224 {
225 CopyMemory(nid.szTip, pProperties->pszwName, sizeof(nid.szTip) - sizeof(WCHAR));
226 nid.szTip[(sizeof(nid.szTip)/sizeof(WCHAR))-1] = L'\0';
227 nid.uFlags |= NIF_TIP;
228 }
229 }
230 }
231 else
232 {
233 nid.uFlags |= NIF_STATE;
234 nid.dwState = NIS_HIDDEN;
235 nid.dwStateMask = NIS_HIDDEN;
236
237 }
238 NcFreeNetconProperties(pProperties);
239 }
240
242
243 if (nid.uFlags & NIF_ICON)
245
246 pContext->dwInOctets = IfEntry.dwInOctets;
247 pContext->dwOutOctets = IfEntry.dwOutOctets;
248
249 if (hwndDlg)
250 UpdateLanStatusUiDlg(hwndDlg, &IfEntry, pContext);
251}
252
253
254VOID
256{
257 WCHAR szBuffer[MAX_PATH] = {0};
258 NETCON_PROPERTIES * pProperties;
259
260 if (pContext->pNet->GetProperties(&pProperties) != S_OK)
261 return;
262
263 if (pProperties->Status == NCS_DISCONNECTED)
265 else if (pProperties->Status == NCS_MEDIA_DISCONNECTED)
267 else if (pProperties->Status == NCS_CONNECTING)
269 else if (pProperties->Status == NCS_CONNECTED)
271
272 SendDlgItemMessageW(hwndDlg, IDC_STATUS, WM_SETTEXT, 0, (LPARAM)szBuffer);
273
274 pContext->dwInOctets = 0;
275 pContext->dwOutOctets = 0;
276
277 /* update adapter info */
278 pContext->Status = -1;
279 UpdateLanStatus(hwndDlg, pContext);
280 NcFreeNetconProperties(pProperties);
281}
282
283static
284VOID
286 HWND hDlgCtrl,
287 UINT ResId,
288 UINT SubItem,
289 UINT Size)
290{
291 WCHAR szBuffer[200];
292 LVCOLUMNW lc;
293
294 if (!LoadStringW(netshell_hInstance, ResId, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
295 return;
296
297 memset(&lc, 0, sizeof(LV_COLUMN) );
299 lc.iSubItem = SubItem;
300 lc.fmt = LVCFMT_FIXED_WIDTH;
301 lc.cx = Size;
302 lc.cchTextMax = wcslen(szBuffer);
303 lc.pszText = szBuffer;
304
305 (void)SendMessageW(hDlgCtrl, LVM_INSERTCOLUMNW, SubItem, (LPARAM)&lc);
306}
307
308static
309VOID
311 HWND hDlgCtrl,
313 INT Index)
314{
315 LVITEMW li;
317 WCHAR szBuffer[100];
318 UINT SubIndex;
319
320 ZeroMemory(&li, sizeof(LVITEMW));
321 li.mask = LVIF_TEXT;
322 li.iItem = Index;
323 pCur = pAddr;
324 SubIndex = 0;
325
326 do
327 {
328 if (SubIndex)
329 {
330 ZeroMemory(&li, sizeof(LVITEMW));
331 li.mask = LVIF_TEXT;
332 li.iItem = Index;
333 li.iSubItem = 0;
334 li.pszText = (LPWSTR)L"";
335 li.iItem = SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
336 }
337
338 if (MultiByteToWideChar(CP_ACP, 0, pCur->IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
339 {
340 li.pszText = szBuffer;
341 li.iSubItem = 1;
342 li.iItem = Index++;
343 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
344 }
345 SubIndex++;
346 pCur = pCur->Next;
347 } while (pCur && pCur->IpAddress.String[0]);
348}
349
350static
351INT
353 HWND hDlgCtrl,
354 UINT ResId)
355{
356 LVITEMW li;
357 WCHAR szBuffer[100];
358
359 ZeroMemory(&li, sizeof(LVITEMW));
360 li.mask = LVIF_TEXT;
361 li.iItem = ListView_GetItemCount(hDlgCtrl);
362 if (LoadStringW(netshell_hInstance, ResId, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
363 {
364 li.pszText = szBuffer;
365 return (INT)SendMessageW(hDlgCtrl, LVM_INSERTITEMW, 0, (LPARAM)&li);
366 }
367 return -1;
368}
369
370static
371BOOL
373 IN struct tm *pTM,
374 OUT LPWSTR szBuffer,
375 IN UINT nBufferSize)
376{
377 SYSTEMTIME st;
378 CString strBufferDate;
379 CString strBufferTime;
380 UINT nCharDate, nCharTime;
381 BOOL bResult = FALSE;
382
383 st.wYear = pTM->tm_year + 1900;
384 st.wMonth = pTM->tm_mon + 1;
385 st.wDay = pTM->tm_mday;
386 st.wHour = pTM->tm_hour;
387 st.wMinute = pTM->tm_min;
388 st.wSecond = pTM->tm_sec;
389
390 /* Check required size before cpy/cat */
391 nCharDate = GetDateFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, NULL, 0) + 1;
392 nCharTime = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, NULL, 0) + 1;
393
394 if (GetDateFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, strBufferDate.GetBuffer(nCharDate), nCharDate) &&
395 GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &st, NULL, strBufferTime.GetBuffer(nCharTime), nCharTime))
396 {
397 StringCbCopy(szBuffer, nBufferSize, strBufferDate);
398 StringCbCat(szBuffer, nBufferSize, L" ");
399 StringCbCat(szBuffer, nBufferSize, strBufferTime);
400 bResult = TRUE;
401 }
402 strBufferDate.ReleaseBuffer();
403 strBufferTime.ReleaseBuffer();
404
405 return bResult;
406}
407
411 HWND hwndDlg,
412 UINT uMsg,
415)
416{
417 LANSTATUSUI_CONTEXT * pContext;
418 LVITEMW li;
419 WCHAR szBuffer[100];
420 PIP_ADAPTER_INFO pAdapterInfo, pCurAdapter;
421 PIP_PER_ADAPTER_INFO pPerAdapter;
423 HWND hDlgCtrl;
424 RECT rect;
425
426 switch (uMsg)
427 {
428 case WM_INITDIALOG:
429 pContext = (LANSTATUSUI_CONTEXT*)lParam;
430
431 hDlgCtrl = GetDlgItem(hwndDlg, IDC_DETAILS);
432
433 /* get client rect */
434 GetClientRect(hDlgCtrl, &rect);
435
436 /* calculate column width */
437 dwSize = rect.right / 2;
438
441
442 dwSize = 0;
443 pCurAdapter = NULL;
444 pAdapterInfo = NULL;
446 {
447 pAdapterInfo = static_cast<PIP_ADAPTER_INFO>(CoTaskMemAlloc(dwSize));
448 if (pAdapterInfo)
449 {
450 if (GetAdaptersInfo(pAdapterInfo, &dwSize) == NO_ERROR)
451 {
452 pCurAdapter = pAdapterInfo;
453 while (pCurAdapter && pCurAdapter->Index != pContext->dwAdapterIndex)
454 pCurAdapter = pCurAdapter->Next;
455
456 if (pCurAdapter->Index != pContext->dwAdapterIndex)
457 pCurAdapter = NULL;
458 }
459 }
460 }
461
462 ZeroMemory(&li, sizeof(LVITEMW));
463 li.mask = LVIF_TEXT;
464 li.iSubItem = 1;
465 li.pszText = szBuffer;
466
467 if (pCurAdapter)
468 {
470 if (li.iItem >= 0)
471 {
472 swprintf(szBuffer, L"%02x-%02x-%02x-%02x-%02x-%02x",pCurAdapter->Address[0], pCurAdapter->Address[1],
473 pCurAdapter->Address[2], pCurAdapter->Address[3], pCurAdapter->Address[4], pCurAdapter->Address[5]);
474 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
475 }
476 li.iItem = InsertItemToListView(hDlgCtrl, IDS_IP_ADDRESS);
477 if (li.iItem >= 0)
478 if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->IpAddressList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
479 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
480
481 li.iItem = InsertItemToListView(hDlgCtrl, IDS_SUBNET_MASK);
482 if (li.iItem >= 0)
483 if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->IpAddressList.IpMask.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
484 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
485
486 li.iItem = InsertItemToListView(hDlgCtrl, IDS_DEF_GATEWAY);
487 if (li.iItem >= 0 && pCurAdapter->GatewayList.IpAddress.String[0] != '0')
488 {
489 if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->GatewayList.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
490 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
491 }
492
493 li.iItem = InsertItemToListView(hDlgCtrl, IDS_DHCP_SERVER);
494 if (li.iItem >= 0 && pCurAdapter->DhcpServer.IpAddress.String[0] != '0')
495 {
496 if (MultiByteToWideChar(CP_ACP, 0, pCurAdapter->DhcpServer.IpAddress.String, -1, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)))
497 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
498 }
499
500 li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_OBTAINED);
501 if (li.iItem >= 0 && pCurAdapter->LeaseObtained != NULL)
502 {
503 struct tm *leaseOptained;
504
505 leaseOptained = localtime(&pCurAdapter->LeaseObtained);
506
507 if (tmToStr(leaseOptained, szBuffer, _countof(szBuffer)))
508 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
509 }
510
511 li.iItem = InsertItemToListView(hDlgCtrl, IDS_LEASE_EXPIRES);
512 if (li.iItem >= 0 && pCurAdapter->LeaseExpires != NULL)
513 {
514 struct tm *leaseExpire;
515
516 leaseExpire = localtime(&pCurAdapter->LeaseExpires);
517
518 if (tmToStr(leaseExpire, szBuffer, _countof(szBuffer)))
519 SendMessageW(hDlgCtrl, LVM_SETITEMW, 0, (LPARAM)&li);
520 }
521 }
522
523 dwSize = 0;
524 li.iItem = InsertItemToListView(hDlgCtrl, IDS_DNS_SERVERS);
526 {
527 pPerAdapter = static_cast<PIP_PER_ADAPTER_INFO>(CoTaskMemAlloc(dwSize));
528 if (pPerAdapter)
529 {
530 if (GetPerAdapterInfo(pContext->dwAdapterIndex, pPerAdapter, &dwSize) == ERROR_SUCCESS)
531 {
532 if (li.iItem >= 0)
533 AddIPAddressToListView(hDlgCtrl, &pPerAdapter->DnsServerList, li.iItem);
534 }
535 CoTaskMemFree(pPerAdapter);
536 }
537 }
538
539 if (pCurAdapter)
540 {
541 li.iItem = InsertItemToListView(hDlgCtrl, IDS_WINS_SERVERS);
542 if (pCurAdapter->HaveWins)
543 {
544 AddIPAddressToListView(hDlgCtrl, &pCurAdapter->PrimaryWinsServer, li.iItem);
545 AddIPAddressToListView(hDlgCtrl, &pCurAdapter->SecondaryWinsServer, li.iItem+1);
546 }
547 }
548
549 CoTaskMemFree(pAdapterInfo);
550 break;
551
552 case WM_COMMAND:
553 if (LOWORD(wParam) == IDC_CLOSE)
554 {
555 EndDialog(hwndDlg, FALSE);
556 break;
557 }
558 }
559
560 return FALSE;
561}
562
566 HWND hwndDlg,
567 UINT uMsg,
570{
571 WCHAR szBuffer[100] = {0};
573 LANSTATUSUI_CONTEXT * pContext;
574 DWORD dwIpAddr;
575
576
577 switch (uMsg)
578 {
579 case WM_INITDIALOG:
581 pContext = (LANSTATUSUI_CONTEXT*)page->lParam;
582 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pContext);
583 if (pContext->DHCPEnabled)
584 LoadStringW(netshell_hInstance, IDS_ASSIGNED_DHCP, szBuffer, sizeof(szBuffer)/sizeof(WCHAR));
585 else
586 LoadStringW(netshell_hInstance, IDS_ASSIGNED_MANUAL, szBuffer, sizeof(szBuffer)/sizeof(WCHAR));
587
588 szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0';
589 SendDlgItemMessageW(hwndDlg, IDC_DETAILSTYPE, WM_SETTEXT, 0, (LPARAM)szBuffer);
590
591
592 dwIpAddr = ntohl(pContext->IpAddress);
593 swprintf(szBuffer, L"%u.%u.%u.%u", FIRST_IPADDRESS(dwIpAddr), SECOND_IPADDRESS(dwIpAddr),
594 THIRD_IPADDRESS(dwIpAddr), FOURTH_IPADDRESS(dwIpAddr));
595 SendDlgItemMessageW(hwndDlg, IDC_DETAILSIP, WM_SETTEXT, 0, (LPARAM)szBuffer);
596
597 dwIpAddr = ntohl(pContext->SubnetMask);
598 swprintf(szBuffer, L"%u.%u.%u.%u", FIRST_IPADDRESS(dwIpAddr), SECOND_IPADDRESS(dwIpAddr),
599 THIRD_IPADDRESS(dwIpAddr), FOURTH_IPADDRESS(dwIpAddr));
601
602 dwIpAddr = ntohl(pContext->Gateway);
603 if (dwIpAddr)
604 {
605 swprintf(szBuffer, L"%u.%u.%u.%u", FIRST_IPADDRESS(dwIpAddr), SECOND_IPADDRESS(dwIpAddr),
606 THIRD_IPADDRESS(dwIpAddr), FOURTH_IPADDRESS(dwIpAddr));
608 }
609 return TRUE;
610 case WM_COMMAND:
611 if (LOWORD(wParam) == IDC_DETAILS)
612 {
613 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
614 if (pContext)
615 {
617 LANStatusUiDetailsDlg, (LPARAM)pContext);
618 }
619 }
620 break;
621 default:
622 break;
623 }
624 return FALSE;
625}
626
627VOID
629{
630 HRESULT hr = pNet->Disconnect();
632 return;
633
635
637 ZeroMemory(&nid, sizeof(nid));
638 nid.cbSize = sizeof(nid);
639 nid.uID = pContext->uID;
640 nid.hWnd = pContext->hwndDlg;
641 nid.uFlags = NIF_STATE;
642 nid.dwState = NIS_HIDDEN;
643 nid.dwStateMask = NIS_HIDDEN;
644
646}
647
648
652 HWND hwndDlg,
653 UINT uMsg,
656{
658 LANSTATUSUI_CONTEXT * pContext;
659 LPPSHNOTIFY lppsn;
660
661 switch (uMsg)
662 {
663 case WM_INITDIALOG:
665 pContext = (LANSTATUSUI_CONTEXT*)page->lParam;
666 pContext->hwndDlg = hwndDlg;
667 InitializeLANStatusUiDlg(hwndDlg, pContext);
668 SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)pContext);
669 return TRUE;
670 case WM_COMMAND:
671 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
673 {
674 if (pContext)
675 {
676 ShowNetConnectionProperties(pContext->pNet, GetParent(pContext->hwndDlg));
677 BringWindowToTop(GetParent(pContext->hwndDlg));
678 }
679 break;
680 }
681 else if (LOWORD(wParam) == IDC_ENDISABLE)
682 {
683 DisableNetworkAdapter(pContext->pNet, pContext, hwndDlg);
684 break;
685 }
686 case WM_NOTIFY:
687 lppsn = (LPPSHNOTIFY) lParam;
688 if (lppsn->hdr.code == PSN_APPLY || lppsn->hdr.code == PSN_RESET)
689 {
690 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
692 pContext->hwndDlg = NULL;
693 return TRUE;
694 }
695 break;
696 }
697 return FALSE;
698}
699
700VOID
702 LANSTATUSUI_CONTEXT * pContext,
703 NETCON_PROPERTIES * pProperties)
704{
705 DWORD dwSize, dwAdapterIndex, dwResult;
706 LPOLESTR pStr;
707 IP_ADAPTER_INFO *pAdapterInfo, *pCurAdapter;
708
709 if (FAILED(StringFromCLSID((CLSID)pProperties->guidId, &pStr)))
710 {
711 return;
712 }
713
714 /* get the IfTable */
715 dwSize = 0;
716 dwResult = GetAdaptersInfo(NULL, &dwSize);
717 if (dwResult!= ERROR_BUFFER_OVERFLOW)
718 {
719 CoTaskMemFree(pStr);
720 return;
721 }
722
723 pAdapterInfo = static_cast<PIP_ADAPTER_INFO>(CoTaskMemAlloc(dwSize));
724 if (!pAdapterInfo)
725 {
726 CoTaskMemFree(pAdapterInfo);
727 CoTaskMemFree(pStr);
728 return;
729 }
730
731 if (GetAdaptersInfo(pAdapterInfo, &dwSize) != NO_ERROR)
732 {
733 CoTaskMemFree(pAdapterInfo);
734 CoTaskMemFree(pStr);
735 return;
736 }
737
738 if (!GetAdapterIndexFromNetCfgInstanceId(pAdapterInfo, pStr, &dwAdapterIndex))
739 {
740 CoTaskMemFree(pAdapterInfo);
741 CoTaskMemFree(pStr);
742 return;
743 }
744
745 pCurAdapter = pAdapterInfo;
746 while (pCurAdapter->Index != dwAdapterIndex)
747 pCurAdapter = pCurAdapter->Next;
748
749
750 pContext->IpAddress = inet_addr(pCurAdapter->IpAddressList.IpAddress.String);
751 pContext->SubnetMask = inet_addr(pCurAdapter->IpAddressList.IpMask.String);
752 pContext->Gateway = inet_addr(pCurAdapter->GatewayList.IpAddress.String);
753 pContext->DHCPEnabled = pCurAdapter->DhcpEnabled;
754 CoTaskMemFree(pStr);
755 CoTaskMemFree(pAdapterInfo);
756 pContext->dwAdapterIndex = dwAdapterIndex;
757}
758
759static int CALLBACK
761{
762 // NOTE: This callback is needed to set large icon correctly.
763 HICON hIcon;
764 switch (uMsg)
765 {
766 case PSCB_INITIALIZED:
767 {
769 SendMessageW(hwndDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
770 break;
771 }
772 }
773 return 0;
774}
775
776VOID
778 LANSTATUSUI_CONTEXT *pContext,
779 HWND hwndDlg)
780{
781 HPROPSHEETPAGE hppages[2];
782 PROPSHEETHEADERW pinfo;
783 NETCON_PROPERTIES * pProperties = NULL;
784
785 ZeroMemory(&pinfo, sizeof(PROPSHEETHEADERW));
786 ZeroMemory(hppages, sizeof(hppages));
787 pinfo.dwSize = sizeof(PROPSHEETHEADERW);
788 pinfo.dwFlags = PSH_NOCONTEXTHELP | PSH_PROPTITLE | PSH_NOAPPLYNOW |
790 pinfo.phpage = hppages;
791 pinfo.hwndParent = hwndDlg;
795
796 if (pContext->pNet->GetProperties(&pProperties) == S_OK)
797 {
798 if (pProperties->pszwName)
799 {
800 pinfo.pszCaption = pProperties->pszwName;
801 pinfo.dwFlags |= PSH_PROPTITLE;
802 }
803 InitializePropertyDialog(pContext, pProperties);
804 if (pProperties->MediaType == NCM_LAN && pProperties->Status == NCS_CONNECTED)
805 {
807 if (hppages[0])
808 pinfo.nPages++;
809
811 if (hppages[pinfo.nPages])
812 pinfo.nPages++;
813
814 if (pinfo.nPages)
815 {
816 PropertySheetW(&pinfo);
817 }
818 }
819 else if (pProperties->Status == NCS_MEDIA_DISCONNECTED || pProperties->Status == NCS_DISCONNECTED ||
820 pProperties->Status == NCS_HARDWARE_DISABLED)
821 {
822 ShowNetConnectionProperties(pContext->pNet, pContext->hwndDlg);
823 }
824
825 NcFreeNetconProperties(pProperties);
826 }
827}
828
830 _In_ HWND hwndOwner,
831 _In_ LANSTATUSUI_CONTEXT *pContext)
832{
833 if (!pContext || !pContext->pNet)
834 return;
835
836 HMENU hMenu = CreatePopupMenu();
837 if (!hMenu)
838 return;
839
840 POINT pt;
842
843 SetForegroundWindow(hwndOwner);
844
845 // The context menu items, set to their default values.
846 struct
847 {
848 UINT uID;
849 UINT uFlags;
850 UINT_PTR uIDNewItem;
851 } MenuItems[] =
852 {
856 {UINT_MAX, 0, 0}, // Separator
859 };
860
861 NETCON_PROPERTIES *pProps = NULL;
862 HRESULT hr = pContext->pNet->GetProperties(&pProps);
863 if (SUCCEEDED(hr) && pProps)
864 {
865 if (pProps->Status == NCS_HARDWARE_DISABLED ||
866 pProps->Status == NCS_MEDIA_DISCONNECTED ||
867 pProps->Status == NCS_DISCONNECTED)
868 {
869 MenuItems[0].uID = IDS_NET_ACTIVATE;
870 MenuItems[0].uFlags = MF_ENABLED | MFS_DEFAULT;
871 MenuItems[0].uIDNewItem = IDM_NETICON_ENABLE;
872 MenuItems[5].uFlags = MF_ENABLED;
873 }
874 else
875 {
876 MenuItems[0].uID = IDS_NET_DEACTIVATE;
877 MenuItems[0].uFlags = MF_ENABLED;
878 MenuItems[0].uIDNewItem = IDM_NETICON_DISABLE;
879 }
880
881 if (pProps->Status == NCS_CONNECTED)
882 {
883 MenuItems[1].uFlags = MF_ENABLED;
884 MenuItems[2].uFlags = MF_ENABLED;
885 }
886 else if (pProps->Status == NCS_CONNECTING)
887 {
888 MenuItems[1].uFlags = MF_ENABLED;
889 MenuItems[2].uFlags = MF_GRAYED;
890 }
891 else
892 {
893 MenuItems[1].uFlags = MF_GRAYED;
894 MenuItems[2].uFlags = MF_GRAYED;
895 }
896
898 pProps = NULL;
899 }
900 else
901 {
902 MenuItems[0].uFlags = MF_GRAYED;
903 MenuItems[1].uFlags = MF_GRAYED;
904 MenuItems[2].uFlags = MF_GRAYED;
905 MenuItems[5].uFlags = MF_GRAYED;
906 }
907
908 // Set the "Properties" item as default, if the Network "Enable/Disable" item isn't.
909 if (!(MenuItems[0].uFlags & MFS_DEFAULT))
910 MenuItems[5].uFlags |= MFS_DEFAULT;
911
912 WCHAR szMenuItem[128];
913
914 for (USHORT i = 0; i < _countof(MenuItems); ++i)
915 {
916 if (MenuItems[i].uID != UINT_MAX)
917 {
918 if (LoadStringW(netshell_hInstance, MenuItems[i].uID, szMenuItem, _countof(szMenuItem)))
919 AppendMenuW(hMenu, MF_STRING | MenuItems[i].uFlags, MenuItems[i].uIDNewItem, szMenuItem);
920 }
921 else
922 {
923 AppendMenuW(hMenu, MF_SEPARATOR, 0, NULL);
924 }
925 }
926
928
929 PostMessage(hwndOwner, WM_NULL, 0, 0);
930
931 DestroyMenu(hMenu);
932}
933
935{
937
938 return E_NOTIMPL;
939}
940
944 HWND hwndDlg,
945 UINT uMsg,
948{
949 LANSTATUSUI_CONTEXT * pContext;
950
951 switch (uMsg)
952 {
953 case WM_INITDIALOG:
954 pContext = (LANSTATUSUI_CONTEXT *)lParam;
956 pContext->hwndStatusDlg = hwndDlg;
957 pContext->nIDEvent = SetTimer(hwndDlg, NETTIMERID, 1000, NULL);
958 return TRUE;
959
960 case WM_DESTROY:
961 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
962 if (pContext && pContext->nIDEvent)
963 {
964 KillTimer(hwndDlg, pContext->nIDEvent);
965 pContext->nIDEvent = 0;
966 }
968 break;
969
970 case WM_TIMER:
971 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
972 if (wParam == (WPARAM)pContext->nIDEvent)
973 {
974 UpdateLanStatus(pContext->hwndDlg, pContext);
975 }
976 break;
977
978 case WM_SHOWSTATUSDLG:
979 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
980 if (!pContext)
981 break;
982
983 switch (LOWORD(lParam))
984 {
985 case WM_LBUTTONUP:
986 if (pContext->hwndDlg)
987 {
988 HWND hwndSheet = GetParent(pContext->hwndDlg);
989 if (hwndSheet)
990 {
991 ShowWindow(hwndSheet, SW_RESTORE);
992 SetForegroundWindow(hwndSheet);
993 BringWindowToTop(hwndSheet);
994 }
995 }
996 else
997 {
998 ShowStatusPropertyDialog(pContext, hwndDlg);
999 }
1000 break;
1001
1002 if (pContext->hwndDlg)
1003 {
1004 ShowWindow(GetParent(pContext->hwndDlg), SW_SHOW);
1006 }
1007 else
1008 {
1009 ShowStatusPropertyDialog(pContext, hwndDlg);
1010 }
1011 break;
1012
1013 case WM_RBUTTONUP:
1014 case WM_CONTEXTMENU:
1015 ShowNetworkIconContextMenu(hwndDlg, pContext);
1016 break;
1017 }
1018 break;
1019
1020 case WM_COMMAND:
1021 {
1022 pContext = (LANSTATUSUI_CONTEXT*)GetWindowLongPtr(hwndDlg, DWLP_USER);
1023 if (!pContext || !pContext->pNet)
1024 break;
1025
1026 switch (LOWORD(wParam))
1027 {
1028 case IDM_NETICON_ENABLE:
1029 pContext->pNet->Connect();
1030 UpdateLanStatus(NULL, pContext);
1031 break;
1032
1034 pContext->pNet->Disconnect();
1035 UpdateLanStatus(NULL, pContext);
1036 break;
1037
1038 case IDM_NETICON_STATUS:
1039 if (pContext->hwndDlg)
1040 {
1041 HWND hwndSheet = GetParent(pContext->hwndDlg);
1042 if (hwndSheet)
1043 {
1044 ShowWindow(hwndSheet, SW_RESTORE);
1045 SetForegroundWindow(hwndSheet);
1046 BringWindowToTop(hwndSheet);
1047 }
1048 }
1049 else
1050 {
1051 ShowStatusPropertyDialog(pContext, hwndDlg);
1052 }
1053 break;
1054
1055 case IDM_NETICON_REPAIR:
1056 RepairConnection(pContext->pNet, hwndDlg);
1057 break;
1058
1060 ShowNetConnectionProperties(pContext->pNet, hwndDlg);
1061 break;
1062
1064 ShellExecuteW(hwndDlg, NULL, L"control", L"netconnections", NULL, SW_SHOWNORMAL);
1065 break;
1066 }
1067 break;
1068 }
1069 }
1070 return FALSE;
1071}
1072
1073HRESULT
1075{
1077 HWND hwndDlg;
1081 NETCON_PROPERTIES* pProps;
1082 HRESULT hr;
1083 ULONG Count;
1084 ULONG Index;
1085 NOTIFICATION_ITEM * pItem, *pLast = NULL;
1086 LANSTATUSUI_CONTEXT * pContext;
1087
1088 TRACE("InitializeNetTaskbarNotifications\n");
1089
1090 if (m_pHead)
1091 {
1092 pItem = m_pHead;
1093 while (pItem)
1094 {
1095 hr = pItem->pNet->GetProperties(&pProps);
1096 if (SUCCEEDED(hr))
1097 {
1098 ZeroMemory(&nid, sizeof(nid));
1099 nid.cbSize = sizeof(nid);
1100 nid.uID = pItem->uID;
1101 nid.hWnd = pItem->hwndDlg;
1102 nid.uFlags = NIF_STATE;
1103 if (pProps->dwCharacter & NCCF_SHOW_ICON)
1104 nid.dwState = 0;
1105 else
1106 nid.dwState = NIS_HIDDEN;
1107
1108 nid.dwStateMask = NIS_HIDDEN;
1110 NcFreeNetconProperties(pProps);
1111 }
1112 pItem = pItem->pNext;
1113 }
1114 return S_OK;
1115 }
1116 /* get an instance to of IConnectionManager */
1117 hr = CNetConnectionManager_CreateInstance(IID_PPV_ARG(INetConnectionManager, &pNetConMan));
1119 return hr;
1120
1121 hr = pNetConMan->EnumConnections(NCME_DEFAULT, &pEnumCon);
1123 return hr;
1124
1125 Index = 1;
1126 while (TRUE)
1127 {
1128 pNetCon.Release();
1129 hr = pEnumCon->Next(1, &pNetCon, &Count);
1130 if (hr != S_OK)
1131 break;
1132
1133 TRACE("new connection\n");
1134 pItem = static_cast<NOTIFICATION_ITEM*>(CoTaskMemAlloc(sizeof(NOTIFICATION_ITEM)));
1135 if (!pItem)
1136 break;
1137
1138 pContext = static_cast<LANSTATUSUI_CONTEXT*>(CoTaskMemAlloc(sizeof(LANSTATUSUI_CONTEXT)));
1139 if (!pContext)
1140 {
1141 CoTaskMemFree(pItem);
1142 break;
1143 }
1144
1145 ZeroMemory(pContext, sizeof(LANSTATUSUI_CONTEXT));
1146 pContext->uID = Index;
1147 pContext->pNet = pNetCon;
1148 pContext->Status = -1;
1149 pContext->dwAdapterIndex = Index;
1150 pItem->uID = Index;
1151 pItem->pNext = NULL;
1152 pItem->pNet = pNetCon;
1153 pItem->pNet->AddRef();
1155 if (!hwndDlg)
1156 {
1157 ERR("CreateDialogParamW failed\n");
1158 continue;
1159 }
1160
1161 ZeroMemory(&nid, sizeof(nid));
1162 nid.cbSize = sizeof(nid);
1163 nid.uID = Index++;
1165 nid.uVersion = NOTIFYICON_VERSION;
1167 nid.hWnd = hwndDlg;
1168
1169 hr = pNetCon->GetProperties(&pProps);
1170 if (SUCCEEDED(hr))
1171 {
1172 CopyMemory(&pItem->guidItem, &pProps->guidId, sizeof(GUID));
1173 if (!(pProps->dwCharacter & NCCF_SHOW_ICON))
1174 {
1175 nid.dwState = NIS_HIDDEN;
1176 nid.dwStateMask = NIS_HIDDEN;
1177 nid.uFlags |= NIF_STATE;
1178 }
1179 if (pProps->Status == NCS_MEDIA_DISCONNECTED || pProps->Status == NCS_DISCONNECTED || pProps->Status == NCS_HARDWARE_DISABLED)
1181 else if (pProps->Status == NCS_CONNECTED)
1183
1184 if (nid.hIcon)
1185 nid.uFlags |= NIF_ICON;
1186
1187 wcscpy(nid.szTip, pProps->pszwName);
1188 nid.uFlags |= NIF_TIP;
1189 }
1190 pContext->hwndStatusDlg = hwndDlg;
1191 pItem->hwndDlg = hwndDlg;
1192
1194 {
1195 if (pLast)
1196 pLast->pNext = pItem;
1197 else
1198 m_pHead = pItem;
1199
1200 pLast = pItem;
1201 Index++;
1202 }
1203 else
1204 {
1205 ERR("Shell_NotifyIconW failed\n");
1206 CoTaskMemFree(pItem);
1207 }
1208
1209 if (nid.uFlags & NIF_ICON)
1211 }
1212
1213 m_lpNetMan = pNetConMan;
1214 return S_OK;
1215}
1216
1217HRESULT
1219{
1220 NOTIFICATION_ITEM *pItem;
1221
1222 pItem = m_pHead;
1223 while (pItem)
1224 {
1225 if (IsEqualGUID(pItem->guidItem, *pguidCmdGroup))
1226 {
1228 return S_OK;
1229 }
1230 pItem = pItem->pNext;
1231 }
1232
1233 ERR("not found\n");
1234 return E_FAIL;
1235}
1236
1237HRESULT
1238WINAPI
1240 const GUID *pguidCmdGroup,
1241 ULONG cCmds,
1242 OLECMD *prgCmds,
1243 OLECMDTEXT *pCmdText)
1244{
1245 MessageBoxW(NULL, pCmdText->rgwz, L"IOleCommandTarget_fnQueryStatus", MB_OK);
1246 return E_NOTIMPL;
1247}
1248
1249HRESULT
1250WINAPI
1252 const GUID *pguidCmdGroup,
1253 DWORD nCmdID,
1254 DWORD nCmdexecopt,
1255 VARIANT *pvaIn,
1256 VARIANT *pvaOut)
1257{
1258 if (pguidCmdGroup)
1259 {
1260 if (IsEqualGUID(*pguidCmdGroup, CGID_ShellServiceObject))
1261 {
1263 }
1264 else
1265 {
1266 /* invoke status dialog */
1267 return ShowStatusDialogByCLSID(pguidCmdGroup);
1268 }
1269 }
1270 return S_OK;
1271}
ULONG WSAAPI inet_addr(IN CONST CHAR FAR *cp)
Definition: addrconv.c:71
#define IDC_DETAILS
Definition: resource.h:18
#define ERR(fmt,...)
Definition: precomp.h:57
void Release()
Definition: atlcomcli.h:170
void ReleaseBuffer(_In_ int nNewLength=-1)
Definition: atlsimpstr.h:387
Definition: bufpool.h:45
HRESULT InitializeNetTaskbarNotifications()
CComPtr< INetConnectionManager > m_lpNetMan
Definition: lanstatusui.h:50
NOTIFICATION_ITEM * m_pHead
Definition: lanstatusui.h:51
STDMETHOD() Exec(const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut) override
HRESULT ShowStatusDialogByCLSID(const GUID *pguidCmdGroup)
STDMETHOD() QueryStatus(const GUID *pguidCmdGroup, ULONG cCmds, OLECMD *prgCmds, OLECMDTEXT *pCmdText) override
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
BOOL GetAdapterIndexFromNetCfgInstanceId(PIP_ADAPTER_INFO pAdapterInfo, LPWSTR szNetCfg, PDWORD pIndex)
HRESULT WINAPI CNetConnectionManager_CreateInstance(REFIID riid, LPVOID *ppv)
wcscpy
#define NO_ERROR
Definition: dderror.h:5
#define E_NOTIMPL
Definition: ddrawi.h:99
#define E_FAIL
Definition: ddrawi.h:102
#define ERROR_SUCCESS
Definition: deptool.c:10
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define IDS_VALUE
Definition: resource.h:26
#define IDD_LAN_NETSTATUSDETAILS
Definition: resource.h:24
#define IDD_STATUS
Definition: resource.h:22
#define IDS_DNS_SERVERS
Definition: resource.h:127
#define IDC_SPEED
Definition: resource.h:43
#define IDI_NET_TRANSREC
Definition: resource.h:14
#define IDS_NET_STATUS
Definition: resource.h:104
#define IDS_NET_PROPERTIES
Definition: resource.h:109
#define IDC_CLOSE
Definition: resource.h:52
#define IDC_DURATION
Definition: resource.h:42
#define IDD_LAN_NETSTATUS
Definition: resource.h:21
#define IDS_FORMAT_BIT
Definition: resource.h:111
#define IDM_NETICON_ENABLE
Definition: resource.h:56
#define IDC_DETAILSTYPE
Definition: resource.h:46
#define IDS_NET_DEACTIVATE
Definition: resource.h:103
#define IDM_NETICON_DISABLE
Definition: resource.h:57
#define IDC_STATUS_PROPERTIES
Definition: resource.h:39
#define IDI_NET_TRANS
Definition: resource.h:13
#define IDS_STATUS_CONNECTED
Definition: resource.h:99
#define IDC_DETAILSGATEWAY
Definition: resource.h:49
#define IDC_STATUS
Definition: resource.h:41
#define IDS_ASSIGNED_MANUAL
Definition: resource.h:118
#define IDS_DEF_GATEWAY
Definition: resource.h:123
#define IDM_NETICON_PROPERTIES
Definition: resource.h:61
#define IDS_DURATION_DAY
Definition: resource.h:115
#define IDS_NET_OPEN_CONNECTIONS
Definition: resource.h:63
#define IDI_NET_OFF
Definition: resource.h:11
#define IDC_DETAILSIP
Definition: resource.h:47
#define IDI_NET_REC
Definition: resource.h:12
#define IDS_DURATION_DAYS
Definition: resource.h:116
#define IDD_LAN_NETSTATUSADVANCED
Definition: resource.h:23
#define IDC_NETSTAT
Definition: resource.h:44
#define IDS_ASSIGNED_DHCP
Definition: resource.h:117
#define IDS_NET_REPAIR
Definition: resource.h:105
#define IDC_DETAILSSUBNET
Definition: resource.h:48
#define IDS_IP_ADDRESS
Definition: resource.h:121
#define IDS_LEASE_EXPIRES
Definition: resource.h:126
#define IDC_SEND
Definition: resource.h:37
#define IDS_DHCP_SERVER
Definition: resource.h:124
#define IDM_NETICON_STATUS
Definition: resource.h:58
#define IDS_PHYSICAL_ADDRESS
Definition: resource.h:120
#define IDS_FORMAT_KBIT
Definition: resource.h:113
#define IDM_NETICON_REPAIR
Definition: resource.h:59
#define IDS_NET_ACTIVATE
Definition: resource.h:102
#define IDS_LEASE_OBTAINED
Definition: resource.h:125
#define IDS_SUBNET_MASK
Definition: resource.h:122
#define IDC_RECEIVED
Definition: resource.h:38
#define IDS_STATUS_DISCONNECTED
Definition: resource.h:97
#define IDS_PROPERTY
Definition: resource.h:129
#define IDI_NET_IDLE
Definition: resource.h:10
#define IDC_ENDISABLE
Definition: resource.h:40
#define IDM_NETICON_OPEN_CONNECTIONS
Definition: resource.h:60
#define IDS_FORMAT_MBIT
Definition: resource.h:112
#define IDS_WINS_SERVERS
Definition: resource.h:128
#define IDS_FORMAT_GBIT
Definition: resource.h:114
#define IDS_STATUS_UNREACHABLE
Definition: resource.h:96
#define IDS_STATUS_CONNECTING
Definition: resource.h:98
UINT uFlags
Definition: api.c:59
INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
Definition: propsheet.c:2916
#define CP_ACP
Definition: compat.h:109
#define ERROR_NOT_SUPPORTED
Definition: compat.h:100
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
#define MultiByteToWideChar
Definition: compat.h:110
INT WINAPI DECLSPEC_HOTPATCH LoadStringW(HINSTANCE instance, UINT resource_id, LPWSTR buffer, INT buflen)
Definition: string.c:1220
ULONGLONG WINAPI DECLSPEC_HOTPATCH GetTickCount64(void)
Definition: sync.c:192
ULONG WINAPI DECLSPEC_HOTPATCH GetTickCount(void)
Definition: sync.c:182
HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR *idstr)
Definition: compobj.c:2412
LPWSTR WINAPI StrFormatByteSizeW(LONGLONG llBytes, LPWSTR lpszDest, UINT cchMax)
Definition: string.c:2394
#define FAILED_UNEXPECTEDLY
Definition: utils.cpp:30
#define swprintf
Definition: precomp.h:40
#define pt(x, y)
Definition: drawing.c:79
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
PWDF_CHILD_ADDRESS_DESCRIPTION_HEADER pAddr
SINGLE_LIST_ENTRY * pCur
LARGE_INTEGER li
Definition: fxtimerapi.cpp:235
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
Definition: ifs.c:426
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
HRESULT Connect()
HRESULT Disconnect()
HRESULT GetProperties([out] NETCON_PROPERTIES **ppProps)
ULONG AddRef()
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define UINT_MAX
Definition: intsafe.h:152
DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow)
DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
DWORD WINAPI GetPerAdapterInfo(ULONG IfIndex, PIP_PER_ADAPTER_INFO pPerAdapterInfo, PULONG pOutBufLen)
#define MIB_IF_OPER_STATUS_DISCONNECTED
Definition: ipifcons.h:248
#define MIB_IF_OPER_STATUS_CONNECTED
Definition: ipifcons.h:250
#define MIB_IF_OPER_STATUS_NON_OPERATIONAL
Definition: ipifcons.h:246
#define MIB_IF_OPER_STATUS_UNREACHABLE
Definition: ipifcons.h:247
#define MIB_IF_OPER_STATUS_OPERATIONAL
Definition: ipifcons.h:251
static BOOL tmToStr(IN struct tm *pTM, OUT LPWSTR szBuffer, IN UINT nBufferSize)
VOID ShowStatusPropertyDialog(LANSTATUSUI_CONTEXT *pContext, HWND hwndDlg)
VOID InitializeLANStatusUiDlg(HWND hwndDlg, LANSTATUSUI_CONTEXT *pContext)
INT_PTR CALLBACK LANStatusUiDetailsDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
#define NETTIMERID
Definition: lanstatusui.cpp:12
VOID UpdateLanStatusUiDlg(HWND hwndDlg, MIB_IFROW *IfEntry, LANSTATUSUI_CONTEXT *pContext)
Definition: lanstatusui.cpp:21
static INT InsertItemToListView(HWND hDlgCtrl, UINT ResId)
static int CALLBACK PropSheetProc(HWND hwndDlg, UINT uMsg, LPARAM lParam)
INT_PTR CALLBACK LANStatusUiAdvancedDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static VOID AddIPAddressToListView(HWND hDlgCtrl, PIP_ADDR_STRING pAddr, INT Index)
INT_PTR CALLBACK LANStatusUiDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
static VOID InsertColumnToListView(HWND hDlgCtrl, UINT ResId, UINT SubItem, UINT Size)
INT_PTR CALLBACK LANStatusDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
VOID DisableNetworkAdapter(INetConnection *pNet, LANSTATUSUI_CONTEXT *pContext, HWND hwndDlg)
VOID InitializePropertyDialog(LANSTATUSUI_CONTEXT *pContext, NETCON_PROPERTIES *pProperties)
VOID UpdateLanStatus(HWND hwndDlg, LANSTATUSUI_CONTEXT *pContext)
VOID ShowNetworkIconContextMenu(_In_ HWND hwndOwner, _In_ LANSTATUSUI_CONTEXT *pContext)
HRESULT RepairConnection(INetConnection *pNet, HWND hwndOwner)
#define WM_SHOWSTATUSDLG
Definition: lanstatusui.h:6
INT WINAPI GetTimeFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpTimeStr, INT cchOut)
Definition: lcformat.c:1089
INT WINAPI GetDateFormatW(LCID lcid, DWORD dwFlags, const SYSTEMTIME *lpTime, LPCWSTR lpFormat, LPWSTR lpDateStr, INT cchOut)
Definition: lcformat.c:989
NOTIFYICONDATA nid
Definition: magnifier.c:44
#define ntohl(x)
Definition: module.h:205
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
static HICON
Definition: imagelist.c:80
static LPOLESTR
Definition: stg_prop.c:27
static const CLSID *static CLSID *static const GUID VARIANT VARIANT *static IServiceProvider DWORD *static HMENU
Definition: ordinal.c:63
HICON hIcon
Definition: msconfig.c:44
struct _PSP * HPROPSHEETPAGE
Definition: mstask.idl:90
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
unsigned __int3264 UINT_PTR
Definition: mstsclib_h.h:274
unsigned int UINT
Definition: ndis.h:50
@ NCCF_SHOW_ICON
Definition: netcon.h:20
@ NCS_CONNECTING
Definition: netcon.h:40
@ NCS_MEDIA_DISCONNECTED
Definition: netcon.h:46
@ NCS_CONNECTED
Definition: netcon.h:41
@ NCS_DISCONNECTED
Definition: netcon.h:39
@ NCS_HARDWARE_DISABLED
Definition: netcon.h:44
@ NCM_LAN
Definition: netcon.h:71
@ NCME_DEFAULT
Definition: netcon.h:10
HPROPSHEETPAGE InitializePropertySheetPage(LPWSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle)
Definition: netshell.cpp:29
HINSTANCE netshell_hInstance
Definition: netshell.cpp:12
VOID WINAPI NcFreeNetconProperties(NETCON_PROPERTIES *pProps)
Definition: netshell.cpp:119
#define _In_
Definition: no_sal2.h:158
int Count
Definition: noreturn.cpp:7
#define LOCALE_USER_DEFAULT
#define L(x)
Definition: ntvdm.h:50
#define MAKEINTRESOURCE(i)
Definition: ntverrsrc.c:25
#define LOWORD(l)
Definition: pedump.c:82
unsigned short USHORT
Definition: pedump.c:61
#define PSBTN_CANCEL
Definition: prsht.h:151
#define PSH_PROPTITLE
Definition: prsht.h:40
#define PropSheet_PressButton(d, i)
Definition: prsht.h:348
#define PSH_USECALLBACK
Definition: prsht.h:48
#define PSN_APPLY
Definition: prsht.h:117
#define PSNRET_NOERROR
Definition: prsht.h:129
#define PSH_USEICONID
Definition: prsht.h:42
#define PSCB_INITIALIZED
Definition: prsht.h:75
struct _PROPSHEETHEADERW PROPSHEETHEADERW
#define PSN_RESET
Definition: prsht.h:118
struct _PSHNOTIFY * LPPSHNOTIFY
#define PSH_NOAPPLYNOW
Definition: prsht.h:47
#define PROPSHEETPAGE
Definition: prsht.h:389
#define FOURTH_IPADDRESS(x)
Definition: commctrl.h:4496
#define FIRST_IPADDRESS(x)
Definition: commctrl.h:4493
#define LVCF_WIDTH
Definition: commctrl.h:2592
#define LVM_SETITEMW
Definition: commctrl.h:2402
#define ListView_GetItemCount(hwnd)
Definition: commctrl.h:2312
#define SECOND_IPADDRESS(x)
Definition: commctrl.h:4494
#define LVM_INSERTCOLUMNW
Definition: commctrl.h:2637
#define LVIF_TEXT
Definition: commctrl.h:2314
#define LVCF_FMT
Definition: commctrl.h:2591
#define THIRD_IPADDRESS(x)
Definition: commctrl.h:4495
#define LVCF_SUBITEM
Definition: commctrl.h:2594
#define LVM_INSERTITEMW
Definition: commctrl.h:2409
#define LVCF_TEXT
Definition: commctrl.h:2593
#define LV_COLUMN
Definition: commctrl.h:2552
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
#define WM_CONTEXTMENU
Definition: richedit.h:64
#define WM_NOTIFY
Definition: richedit.h:61
_CRTIMP struct tm *__cdecl localtime(const time_t *_Time)
Definition: time.h:416
#define memset(x, y, z)
Definition: compat.h:39
#define NIM_MODIFY
Definition: shellapi.h:95
#define NIF_ICON
Definition: shellapi.h:106
#define NIF_MESSAGE
Definition: shellapi.h:105
#define NIM_ADD
Definition: shellapi.h:94
#define NIF_TIP
Definition: shellapi.h:107
#define SHELL_ErrorBox
Definition: shellutils.h:126
HRESULT ShowNetConnectionProperties(INetConnection *pNetConnect, HWND hwnd)
HINSTANCE WINAPI ShellExecuteW(HWND hwnd, LPCWSTR lpVerb, LPCWSTR lpFile, LPCWSTR lpParameters, LPCWSTR lpDirectory, INT nShowCmd)
Definition: shlexec.cpp:2516
HRESULT hr
Definition: shlfolder.c:183
#define _countof(array)
Definition: sndvol32.h:70
#define TRACE(s)
Definition: solgame.cpp:4
& rect
Definition: startmenu.cpp:1413
#define StringCbCat
Definition: strsafe.h:334
#define StringCbCopy
Definition: strsafe.h:155
char String[4 *4]
Definition: iptypes.h:42
INetConnection * pNet
Definition: lanstatusui.h:19
IP_ADDR_STRING SecondaryWinsServer
Definition: iptypes.h:68
IP_ADDR_STRING IpAddressList
Definition: iptypes.h:63
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH]
Definition: iptypes.h:58
IP_ADDR_STRING DhcpServer
Definition: iptypes.h:65
time_t LeaseObtained
Definition: iptypes.h:69
IP_ADDR_STRING GatewayList
Definition: iptypes.h:64
time_t LeaseExpires
Definition: iptypes.h:70
struct _IP_ADAPTER_INFO * Next
Definition: iptypes.h:53
IP_ADDR_STRING PrimaryWinsServer
Definition: iptypes.h:67
UINT DhcpEnabled
Definition: iptypes.h:61
IP_ADDRESS_STRING IpAddress
Definition: iptypes.h:47
IP_MASK_STRING IpMask
Definition: iptypes.h:48
IP_ADDR_STRING DnsServerList
Definition: iptypes.h:77
DWORD dwSpeed
Definition: ifmib.h:41
DWORD dwInOctets
Definition: ifmib.h:47
INTERNAL_IF_OPER_STATUS dwOperStatus
Definition: ifmib.h:45
DWORD dwOutOctets
Definition: ifmib.h:53
DWORD dwIndex
Definition: ifmib.h:38
UINT uCallbackMessage
Definition: shellapi.h:231
DWORD dwStateMask
Definition: shellapi.h:239
CHAR szTip[128]
Definition: shellapi.h:237
HINSTANCE hInstance
Definition: prsht.h:296
DWORD dwSize
Definition: prsht.h:293
DWORD dwFlags
Definition: prsht.h:294
LPCWSTR pszIcon
Definition: prsht.h:299
HWND hwndParent
Definition: prsht.h:295
PFNPROPSHEETCALLBACK pfnCallback
Definition: prsht.h:311
HPROPSHEETPAGE * phpage
Definition: prsht.h:309
LPCWSTR pszCaption
Definition: prsht.h:301
NMHDR hdr
Definition: prsht.h:330
struct _SINGLE_LIST_ENTRY * Next
Definition: ntbasedef.h:641
WORD wYear
Definition: winbase.h:946
WORD wMonth
Definition: winbase.h:947
WORD wHour
Definition: winbase.h:950
WORD wSecond
Definition: winbase.h:952
WORD wMinute
Definition: winbase.h:951
WORD wDay
Definition: winbase.h:949
Definition: module.h:576
int cchTextMax
Definition: commctrl.h:2573
LPWSTR pszText
Definition: commctrl.h:2572
NETCON_STATUS Status
Definition: netcon.h:86
NETCON_MEDIATYPE MediaType
Definition: netcon.h:87
UINT code
Definition: winuser.h:3235
struct tagNotificationItem * pNext
Definition: lanstatusui.h:10
INetConnection * pNet
Definition: lanstatusui.h:14
Definition: time.h:68
BOOL WINAPI Shell_NotifyIconW(DWORD dwMessage, PNOTIFYICONDATAW pnid)
Definition: systray.cpp:128
#define ICON_BIG
Definition: tnclass.cpp:51
#define GetWindowLongPtr
Definition: treelist.c:73
#define SetWindowLongPtr
Definition: treelist.c:70
int32_t INT_PTR
Definition: typedefs.h:64
int32_t INT
Definition: typedefs.h:58
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
uint64_t ULONGLONG
Definition: typedefs.h:67
#define OUT
Definition: typedefs.h:40
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
#define ZeroMemory
Definition: winbase.h:1753
#define CopyMemory
Definition: winbase.h:1751
LONG_PTR LPARAM
Definition: windef.h:208
UINT_PTR WPARAM
Definition: windef.h:207
#define WINAPI
Definition: msvc.h:6
#define ERROR_BUFFER_OVERFLOW
Definition: winerror.h:185
#define HRESULT_FROM_WIN32(x)
Definition: winerror.h:92
#define SW_SHOWNORMAL
Definition: winuser.h:781
HWND WINAPI CreateDialogParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
HMENU WINAPI CreatePopupMenu(void)
Definition: menu.c:838
#define DWLP_USER
Definition: winuser.h:883
BOOL WINAPI ShowWindow(_In_ HWND, _In_ int)
#define STM_SETICON
Definition: winuser.h:2111
#define IMAGE_ICON
Definition: winuser.h:212
#define TPM_RIGHTBUTTON
Definition: winuser.h:2399
#define LR_COPYFROMRESOURCE
Definition: winuser.h:1110
#define WM_COMMAND
Definition: winuser.h:1759
#define TPM_BOTTOMALIGN
Definition: winuser.h:2404
#define MF_STRING
Definition: winuser.h:138
BOOL WINAPI SetForegroundWindow(_In_ HWND)
BOOL WINAPI GetCursorPos(_Out_ LPPOINT)
Definition: cursoricon.c:3032
#define WM_RBUTTONUP
Definition: winuser.h:1799
#define WM_INITDIALOG
Definition: winuser.h:1758
BOOL WINAPI TrackPopupMenuEx(_In_ HMENU, _In_ UINT, _In_ int, _In_ int, _In_ HWND, _In_opt_ LPTPMPARAMS)
HANDLE WINAPI CopyImage(_In_ HANDLE, _In_ UINT, _In_ int, _In_ int, _In_ UINT)
Definition: cursoricon.c:2275
int WINAPI MessageBoxW(_In_opt_ HWND hWnd, _In_opt_ LPCWSTR lpText, _In_opt_ LPCWSTR lpCaption, _In_ UINT uType)
HWND WINAPI GetDlgItem(_In_opt_ HWND, _In_ int)
UINT_PTR WINAPI SetTimer(_In_opt_ HWND, _In_ UINT_PTR, _In_ UINT, _In_opt_ TIMERPROC)
LRESULT WINAPI SendDlgItemMessageW(_In_ HWND, _In_ int, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
#define MFS_DEFAULT
Definition: winuser.h:759
#define WM_SETTEXT
Definition: winuser.h:1636
BOOL WINAPI GetClientRect(_In_ HWND, _Out_ LPRECT)
#define MF_ENABLED
Definition: winuser.h:128
#define MF_SEPARATOR
Definition: winuser.h:137
#define WM_TIMER
Definition: winuser.h:1761
#define TPM_LEFTALIGN
Definition: winuser.h:2396
#define LoadIcon
Definition: winuser.h:5898
#define WM_NULL
Definition: winuser.h:1626
#define LR_SHARED
Definition: winuser.h:1111
#define MB_OK
Definition: winuser.h:801
#define WM_LBUTTONUP
Definition: winuser.h:1796
#define PostMessage
Definition: winuser.h:5917
HWND WINAPI GetParent(_In_ HWND)
#define LoadImage
Definition: winuser.h:5900
BOOL WINAPI DestroyMenu(_In_ HMENU)
#define DWLP_MSGRESULT
Definition: winuser.h:881
#define SW_RESTORE
Definition: winuser.h:790
#define SW_SHOW
Definition: winuser.h:786
#define WM_DESTROY
Definition: winuser.h:1628
#define MAKEINTRESOURCEW(i)
Definition: winuser.h:582
BOOL WINAPI KillTimer(_In_opt_ HWND, _In_ UINT_PTR)
HICON WINAPI LoadIconW(_In_opt_ HINSTANCE hInstance, _In_ LPCWSTR lpIconName)
Definition: cursoricon.c:2412
BOOL WINAPI BringWindowToTop(_In_ HWND)
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)
INT_PTR WINAPI DialogBoxParamW(_In_opt_ HINSTANCE, _In_ LPCWSTR, _In_opt_ HWND, _In_opt_ DLGPROC, _In_ LPARAM)
BOOL WINAPI AppendMenuW(_In_ HMENU, _In_ UINT, _In_ UINT_PTR, _In_opt_ LPCWSTR)
BOOL WINAPI EndDialog(_In_ HWND, _In_ INT_PTR)
BOOL WINAPI DestroyIcon(_In_ HICON)
Definition: cursoricon.c:2390
#define MF_GRAYED
Definition: winuser.h:129
#define IID_PPV_ARG(Itype, ppType)
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184