5 DWORD EnableSecurityFilters
;
6 LPWSTR szTCPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\TCPAllowedPorts
7 LPWSTR szUDPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\UDPAllowedPorts
8 LPWSTR szRawIPAllowedProtocols
; // KEY: Tcpip\Parameter\{InstanceGuid}\RawIPAllowedProtocols
14 // KEY: Tcpip\Parameter\{InstanceGuid}\IpAddress | DhcpIpAddress
15 // KEY: Tcpip\Parameter\{InstanceGuid}\SubnetMask | DhcpSubnetMask
16 // KEY: Tcpip\Parameter\{InstanceGuid}\DefaultGateway | DhcpDefaultGateway
17 // KEY: Tcpip\Parameter\{InstanceGuid}\NameServer | DhcpNameServer
18 // KEY: Services\NetBT\Parameters\Interfaces\Tcpip_{INSTANCE_GUID}
22 DWORD RegisterAdapterName
;
23 DWORD RegistrationEnabled
;
24 DWORD UseDomainNameDevolution
;
27 }TcpipAdvancedDNSDlgSettings
;
29 typedef struct tagIP_ADDR
38 struct tagIP_ADDR
* Next
;
55 UINT AutoconfigActive
;
57 TcpFilterSettings
* pFilter
;
58 TcpipAdvancedDNSDlgSettings
* pDNS
;
63 const INetCfgComponentPropertyUi
* lpVtbl
;
64 const INetCfgComponentControl
* lpVtblCompControl
;
68 INetCfgComponent
* pNComp
;
69 TcpipSettings
*pCurrentConfig
;
70 CLSID NetCfgInstanceId
;
71 }TcpipConfNotifyImpl
, *LPTcpipConfNotifyImpl
;
101 }TcpipSuffixSettings
;
110 static __inline LPTcpipConfNotifyImpl
impl_from_INetCfgComponentControl(INetCfgComponentControl
*iface
)
112 return (TcpipConfNotifyImpl
*)((char *)iface
- FIELD_OFFSET(TcpipConfNotifyImpl
, lpVtblCompControl
));
115 INT
GetSelectedItem(HWND hDlgCtrl
);
116 HRESULT
InitializeTcpipBasicDlgCtrls(HWND hwndDlg
, TcpipSettings
* pCurSettings
);
117 VOID
InsertColumnToListView(HWND hDlgCtrl
, UINT ResId
, UINT SubItem
, UINT Size
);
118 INT_PTR
StoreTcpipBasicSettings(HWND hwndDlg
, TcpipConfNotifyImpl
* This
, BOOL bApply
);
119 HRESULT
Initialize(TcpipConfNotifyImpl
* This
);
122 DisplayError(UINT ResTxt
, UINT ResTitle
, UINT Type
)
127 if (LoadStringW(netcfgx_hInstance
, ResTxt
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
128 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
132 if (LoadStringW(netcfgx_hInstance
, ResTitle
, szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
133 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = L
'\0';
137 MessageBoxW(NULL
, szBuffer
, szTitle
, Type
);
141 /***************************************************************
142 * TCP/IP Filter Dialog
155 TcpipPortSettings
* pPort
;
164 pPort
= (TcpipPortSettings
*)lParam
;
165 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pPort
);
166 if (LoadStringW(netcfgx_hInstance
, pPort
->ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
168 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
169 SendDlgItemMessageW(hwndDlg
, IDC_PORT_DESC
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
172 if (pPort
->MaxNum
== 65536)
173 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 5, 0);
175 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 3, 0);
179 if (LOWORD(wParam
) == IDCANCEL
)
181 EndDialog(hwndDlg
, FALSE
);
184 else if (LOWORD(wParam
) == IDC_OK
)
186 pPort
= (TcpipPortSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
187 Num
= GetDlgItemInt(hwndDlg
, IDC_PORT_VAL
, NULL
, TRUE
);
188 if (Num
> pPort
->MaxNum
|| Num
== 0)
190 if (pPort
->MaxNum
== 65536)
191 DisplayError(IDS_PORT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
193 DisplayError(IDS_PROT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
195 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
198 if (GetWindowTextW(GetDlgItem(hwndDlg
, IDC_PORT_VAL
), szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
200 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
201 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
202 find
.flags
= LVFI_STRING
;
204 if (SendMessageW(pPort
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
206 ZeroMemory(&li
, sizeof(LVITEMW
));
208 li
.iItem
= ListView_GetItemCount(pPort
->hDlgCtrl
);
209 li
.pszText
= szBuffer
;
210 SendMessageW(pPort
->hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
211 EndDialog(hwndDlg
, TRUE
);
214 DisplayError(IDS_DUP_NUMBER
, IDS_PROT_RANGE
, MB_ICONWARNING
);
215 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
224 InitFilterListBox(LPWSTR pData
, HWND hwndDlg
, HWND hDlgCtrl
, UINT AllowButton
, UINT RestrictButton
, UINT AddButton
, UINT DelButton
)
230 if (!pData
|| !_wtoi(pData
))
232 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
233 EnableWindow(GetDlgItem(hwndDlg
, AddButton
), FALSE
);
234 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
239 memset(&li
, 0x0, sizeof(LVITEMW
));
247 SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
249 pCur
+= wcslen(pCur
) + 1;
253 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
255 SendDlgItemMessageW(hwndDlg
, RestrictButton
, BM_SETCHECK
, BST_CHECKED
, 0);
269 iCount
= ListView_GetItemCount(hDlgCtrl
);
272 pData
= (LPWSTR
)CoTaskMemAlloc(3 * sizeof(WCHAR
));
278 *Size
= 3 * sizeof(WCHAR
);
282 pData
= CoTaskMemAlloc((6 * iCount
+ 1) * sizeof(WCHAR
));
288 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
290 ZeroMemory(&li
, sizeof(LVITEMW
));
293 li
.pszText
= szBuffer
;
294 li
.cchTextMax
= sizeof(szBuffer
) /sizeof(WCHAR
);
295 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
297 wcscpy(pCur
, szBuffer
);
298 dwSize
+= wcslen(szBuffer
) + 1;
299 pCur
+= wcslen(szBuffer
) + 1;
303 *Size
= (dwSize
+1) * sizeof(WCHAR
);
308 StoreTcpipFilterSettings(
311 TcpFilterSettings
* pFilter
;
313 pFilter
= CoTaskMemAlloc(sizeof(TcpFilterSettings
));
317 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
318 pFilter
->EnableSecurityFilters
= TRUE
;
320 pFilter
->EnableSecurityFilters
= FALSE
;
322 pFilter
->szTCPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), &pFilter
->TCPSize
);
323 pFilter
->szUDPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), &pFilter
->UDPSize
);
324 pFilter
->szRawIPAllowedProtocols
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_IP_LIST
), &pFilter
->IPSize
);
337 TcpipPortSettings Port
;
339 Port
.MaxNum
= MaxItem
;
340 Port
.hDlgCtrl
= hDlgCtrl
;
343 DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIP_PORT_DLG
), hwndDlg
, TcpipFilterPortDlg
, (LPARAM
)&Port
);
351 INT iIndex
= GetSelectedItem(hDlgCtrl
);
355 (void)ListView_DeleteItem(hDlgCtrl
, iIndex
);
358 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONWARNING
);
363 TcpipFilterSettingsDlg(
370 TcpipConfNotifyImpl
*pContext
;
371 TcpFilterSettings
*pFilter
;
376 pContext
= (TcpipConfNotifyImpl
*)lParam
;
377 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDS_TCP_PORTS
, 0, 100);
378 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDS_UDP_PORTS
, 0, 100);
379 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDS_IP_PROTO
, 0, 100);
380 if (pContext
->pCurrentConfig
->pFilter
)
382 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDC_TCP_ALLOW_ALL
, IDC_TCP_RESTRICT
, IDC_TCP_ADD
, IDC_TCP_DEL
);
383 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDC_UDP_ALLOW_ALL
, IDC_UDP_RESTRICT
, IDC_UDP_ADD
, IDC_UDP_DEL
);
384 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDC_IP_ALLOW_ALL
, IDC_IP_RESTRICT
, IDC_IP_ADD
, IDC_IP_DEL
);
385 if (pContext
->pCurrentConfig
->pFilter
->EnableSecurityFilters
)
386 SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_SETCHECK
, BST_CHECKED
, 0);
388 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
391 if (HIWORD(wParam
) == BN_CLICKED
)
393 switch (LOWORD(wParam
))
395 case IDC_TCP_ALLOW_ALL
:
396 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
398 SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
399 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), FALSE
);
400 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), FALSE
);
401 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), FALSE
);
404 case IDC_TCP_RESTRICT
:
405 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
407 SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
408 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), TRUE
);
409 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), TRUE
);
410 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), TRUE
);
413 case IDC_UDP_ALLOW_ALL
:
414 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
416 SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
417 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), FALSE
);
418 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), FALSE
);
419 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), FALSE
);
422 case IDC_UDP_RESTRICT
:
423 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
425 SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
426 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), TRUE
);
427 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), TRUE
);
428 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), TRUE
);
431 case IDC_IP_ALLOW_ALL
:
432 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
434 SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
435 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), FALSE
);
436 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), FALSE
);
437 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), FALSE
);
440 case IDC_IP_RESTRICT
:
441 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
443 SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
444 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), TRUE
);
445 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), TRUE
);
446 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), TRUE
);
450 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
451 DisplayError(IDS_DISABLE_FILTER
, IDS_TCPIP
, MB_OK
);
456 switch(LOWORD(wParam
))
459 pContext
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
460 pFilter
= StoreTcpipFilterSettings(hwndDlg
);
463 if (pContext
->pCurrentConfig
->pFilter
)
465 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
);
466 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
);
467 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
);
468 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
);
470 pContext
->pCurrentConfig
->pFilter
= pFilter
;
472 EndDialog(hwndDlg
, (INT_PTR
)TRUE
);
475 EndDialog(hwndDlg
, FALSE
);
478 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), 65536, IDS_TCP_PORTS
);
481 DelItem(GetDlgItem(hwndDlg
, IDC_TCP_LIST
));
484 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), 65536, IDS_UDP_PORTS
);
487 DelItem(GetDlgItem(hwndDlg
, IDC_UDP_LIST
));
490 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), 256, IDS_IP_PROTO
);
493 DelItem(GetDlgItem(hwndDlg
, IDC_IP_LIST
));
507 InitializePropertySheetPage(LPWSTR resname
, DLGPROC dlgproc
, LPARAM lParam
, LPWSTR szTitle
)
509 PROPSHEETPAGEW ppage
;
511 memset(&ppage
, 0x0, sizeof(PROPSHEETPAGEW
));
512 ppage
.dwSize
= sizeof(PROPSHEETPAGEW
);
513 ppage
.dwFlags
= PSP_DEFAULT
;
514 ppage
.u
.pszTemplate
= resname
;
515 ppage
.pfnDlgProc
= dlgproc
;
516 ppage
.lParam
= lParam
;
517 ppage
.hInstance
= netcfgx_hInstance
;
520 ppage
.dwFlags
|= PSP_USETITLE
;
521 ppage
.pszTitle
= szTitle
;
523 return CreatePropertySheetPageW(&ppage
);
526 /***************************************************************
527 * TCP/IP Advanced Option Dialog
532 InitializeTcpipAdvancedOptDlg(
534 TcpipConfNotifyImpl
* This
)
538 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
540 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTER
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
542 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
543 if (SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_ADDSTRING
, 0, (LPARAM
)szText
) != LB_ERR
)
544 SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_SETCURSEL
, 0, 0);
547 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTERDESC
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
549 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
550 SendDlgItemMessageW(hwndDlg
, IDC_OPTDESC
, WM_SETTEXT
, 0, (LPARAM
)szText
);
565 TcpipConfNotifyImpl
* This
;
566 LPPROPSHEETPAGE page
;
571 page
= (LPPROPSHEETPAGE
)lParam
;
572 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
573 InitializeTcpipAdvancedOptDlg(hwndDlg
, This
);
576 if (LOWORD(wParam
) == IDC_OPTPROP
)
578 DialogBoxParamW(netcfgx_hInstance
,
579 MAKEINTRESOURCEW(IDD_TCPIP_FILTER_DLG
),
581 TcpipFilterSettingsDlg
,
582 (LPARAM
)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
590 InsertColumnToListView(
599 if (!LoadStringW(netcfgx_hInstance
, ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
602 memset(&lc
, 0, sizeof(LV_COLUMN
) );
603 lc
.mask
= LVCF_WIDTH
| LVCF_TEXT
| LVCF_SUBITEM
| LVCF_FMT
;
604 lc
.iSubItem
= SubItem
;
605 lc
.fmt
= LVCFMT_FIXED_WIDTH
;
607 lc
.cchTextMax
= wcslen(szBuffer
);
608 lc
.pszText
= szBuffer
;
610 (void)SendMessageW(hDlgCtrl
, LVM_INSERTCOLUMNW
, SubItem
, (LPARAM
)&lc
);
614 InsertIpAddressToListView(
626 ZeroMemory(&li
, sizeof(li
));
628 li
.iItem
= itemCount
;
630 dwIpAddr
= pAddr
->IpAddress
;
631 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
632 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
634 li
.pszText
= szBuffer
;
635 li
.iItem
= SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
640 dwIpAddr
= pAddr
->u
.Subnetmask
;
641 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
642 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
647 swprintf(szBuffer
, L
"%u", pAddr
->u
.Metric
);
649 LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
));
654 li
.pszText
= szBuffer
;
655 SendMessageW(hDlgCtrl
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
664 InitializeTcpipAdvancedIpDlg(
666 TcpipConfNotifyImpl
* This
)
673 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_IPADDR
, 0, 100);
674 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
675 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_SUBMASK
, 1, (rect
.right
- rect
.left
- 100));
677 if (This
->pCurrentConfig
->DhcpEnabled
)
679 if (LoadStringW(netcfgx_hInstance
, IDS_DHCPACTIVE
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
681 ZeroMemory(&li
, sizeof(LVITEMW
));
683 li
.pszText
= szBuffer
;
684 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
686 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADD
), FALSE
);
687 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), FALSE
);
688 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), FALSE
);
692 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
->pCurrentConfig
->Ip
, TRUE
);
695 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_GATEWAY
, 0, 100);
696 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
697 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_METRIC
, 1, (rect
.right
- rect
.left
- 100));
699 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
->pCurrentConfig
->Gw
, FALSE
);
700 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, EM_LIMITTEXT
, 4, 0);
714 TcpipGwSettings
*pGwSettings
;
716 LPNMIPADDRESS lpnmipa
;
722 pGwSettings
= (TcpipGwSettings
*)lParam
;
723 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
724 if (pGwSettings
->bAdd
)
726 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
728 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
729 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
731 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
732 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
736 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
738 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
739 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
741 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pGwSettings
->szIP
);
742 if (pGwSettings
->Metric
)
744 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
745 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
746 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
750 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
751 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
752 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
755 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
756 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
757 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
758 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
761 if (LOWORD(wParam
) == IDC_USEMETRIC
)
763 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
765 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
766 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
767 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
771 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
772 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
776 else if (LOWORD(wParam
) == IDCANCEL
)
778 EndDialog(hwndDlg
, FALSE
);
781 else if (LOWORD(wParam
) == IDC_OK
)
783 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
785 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
786 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
788 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
789 find
.flags
= LVFI_STRING
;
790 find
.psz
= pGwSettings
->szIP
;
792 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
793 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
795 pGwSettings
->Metric
= 0;
798 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
800 EndDialog(hwndDlg
, TRUE
);
803 if (!pGwSettings
->bAdd
)
805 EndDialog(hwndDlg
, FALSE
);
808 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
814 lpnmipa
= (LPNMIPADDRESS
) lParam
;
815 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
817 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
819 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
820 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
829 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
835 ZeroMemory(&li
, sizeof(LVITEMW
));
838 li
.pszText
= pGwSettings
->szIP
;
841 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
843 li
.pszText
= szBuffer
;
847 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
850 pGwSettings
->Metric
= _wtoi(szBuffer
);
865 LPNMIPADDRESS lpnmipa
;
867 TcpipIpSettings
*pIpSettings
;
875 pIpSettings
= (TcpipIpSettings
*)lParam
;
876 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
878 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
879 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
880 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
881 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
882 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
883 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
884 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
885 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
887 if (pIpSettings
->bAdd
)
889 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
891 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
892 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
894 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
898 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
900 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
901 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
903 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szIP
);
904 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szMask
);
908 lpnmipa
= (LPNMIPADDRESS
) lParam
;
909 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
911 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
913 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
915 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
916 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
917 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
918 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
919 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
920 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
921 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
927 if (LOWORD(wParam
) == IDC_OK
)
929 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
930 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
931 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
933 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
934 find
.flags
= LVFI_STRING
;
935 find
.psz
= pIpSettings
->szIP
;
936 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
940 EndDialog(hwndDlg
, TRUE
);
943 else if (!pIpSettings
->bAdd
)
945 EndDialog(hwndDlg
, FALSE
);
948 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
951 else if (LOWORD(wParam
) == IDCANCEL
)
953 EndDialog(hwndDlg
, FALSE
);
965 UINT Length
= wcslen(szName
);
967 for(Index
= 0; Index
< Length
; Index
++)
968 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
984 TcpipSuffixSettings
* pSettings
;
990 pSettings
= (TcpipSuffixSettings
*)lParam
;
991 if (!pSettings
->bAdd
)
993 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
994 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
996 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
997 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
999 CoTaskMemFree(pSettings
->Suffix
);
1000 pSettings
->Suffix
= NULL
;
1004 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1006 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1007 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1010 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1013 if (LOWORD(wParam
) == IDCANCEL
)
1015 EndDialog(hwndDlg
, FALSE
);
1018 else if (LOWORD(wParam
) == IDC_OK
)
1020 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1023 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1024 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1025 if (pSettings
->Suffix
)
1027 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1028 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1030 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1031 CoTaskMemFree(pSettings
->Suffix
);
1035 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1037 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1038 CoTaskMemFree(pSettings
->Suffix
);
1041 EndDialog(hwndDlg
, TRUE
);
1053 GetSelectedItem(HWND hDlgCtrl
)
1056 UINT iItemCount
, iIndex
;
1058 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1062 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1064 ZeroMemory(&li
, sizeof(LVITEMW
));
1065 li
.mask
= LVIF_STATE
;
1066 li
.stateMask
= (UINT
)-1;
1068 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1070 if (li
.state
& LVIS_SELECTED
)
1079 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1083 ZeroMemory(&li
, sizeof(LVITEMW
));
1084 li
.mask
= LVIF_TEXT
;
1086 li
.pszText
= pIpSettings
->szIP
;
1089 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1092 ZeroMemory(&li
, sizeof(LVITEMW
));
1093 li
.mask
= LVIF_TEXT
;
1095 li
.pszText
= pIpSettings
->szMask
;
1099 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1103 DeleteItemFromList(HWND hDlgCtrl
)
1107 memset(&li
, 0x0, sizeof(LVITEMW
));
1108 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1111 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1116 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1121 GetIpAddressFromStringW(
1127 LPWSTR pLast
= szBuffer
;
1128 LPWSTR pNext
= szBuffer
;
1131 while((pNext
= wcschr(pNext
, L
'.')))
1135 dwIpAddr
|= (Val
<< Index
* 8);
1140 dwIpAddr
|= _wtoi(pLast
);
1146 GetIpAddressFromStringA(
1151 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1154 return GetIpAddressFromStringW(szIp
);
1161 FreeIPAddr(IP_ADDR
*pAddr
)
1170 pNext
= pAddr
->Next
;
1171 CoTaskMemFree(pAddr
);
1177 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1181 ZeroMemory(&li
, sizeof(LVITEMW
));
1182 li
.mask
= LVIF_TEXT
;
1183 li
.pszText
= szBuffer
;
1185 li
.iSubItem
= SubIndex
;
1186 li
.cchTextMax
= BufferSize
;
1187 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1193 TcpipConfNotifyImpl
* This
,
1199 IP_ADDR
*pCur
, *pLast
;
1201 iCount
= ListView_GetItemCount(hDlgCtrl
);
1208 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1210 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1212 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1215 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1217 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1218 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1220 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1222 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1224 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1226 pCur
->u
.Metric
= _wtoi(szBuffer
);
1232 This
->pCurrentConfig
->Ip
= pCur
;
1234 This
->pCurrentConfig
->Gw
= pCur
;
1256 TcpipConfNotifyImpl
* This
;
1257 LPPROPSHEETPAGE page
;
1259 WCHAR szBuffer
[200];
1269 page
= (LPPROPSHEETPAGE
)lParam
;
1270 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1271 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1272 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1275 lppsn
= (LPPSHNOTIFY
) lParam
;
1276 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1278 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1279 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1281 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1282 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1286 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1288 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1289 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1290 This
->pCurrentConfig
->Gw
= NULL
;
1291 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1292 This
->pCurrentConfig
->Ip
= NULL
;
1293 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1294 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1295 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
1300 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1302 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1303 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1305 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1307 else if (LOWORD(wParam
) == IDC_IPADD
)
1310 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1311 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1314 memset(&li
, 0x0, sizeof(LVITEMW
));
1315 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1316 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1317 li
.pszText
= Ip
.szIP
;
1318 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1321 li
.mask
= LVIF_TEXT
;
1323 li
.pszText
= Ip
.szMask
;
1324 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1328 else if (LOWORD(wParam
) == IDC_IPMOD
)
1330 memset(&li
, 0x0, sizeof(LVITEMW
));
1331 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1334 /* no item selected */
1335 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1336 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1340 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1341 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1343 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1346 li
.mask
= LVIF_TEXT
;
1347 li
.pszText
= Ip
.szIP
;
1348 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1349 li
.pszText
= Ip
.szMask
;
1351 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1355 else if (LOWORD(wParam
) == IDC_IPDEL
)
1357 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1360 else if (LOWORD(wParam
) == IDC_GWADD
)
1363 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1364 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1367 memset(&li
, 0x0, sizeof(LVITEMW
));
1368 li
.mask
= LVIF_TEXT
;
1369 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1370 li
.pszText
= Gw
.szIP
;
1371 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1376 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1378 li
.pszText
= szBuffer
;
1379 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1383 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1385 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1387 li
.pszText
= szBuffer
;
1388 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1395 else if (LOWORD(wParam
) == IDC_GWMOD
)
1397 memset(&li
, 0x0, sizeof(LVITEMW
));
1398 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1401 /* no item selected */
1402 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1403 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1406 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1409 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1410 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1413 li
.mask
= LVIF_TEXT
;
1414 li
.pszText
= Gw
.szIP
;
1415 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1418 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1420 li
.pszText
= szBuffer
;
1421 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1425 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1427 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1429 li
.pszText
= szBuffer
;
1430 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1437 else if (LOWORD(wParam
) == IDC_GWDEL
)
1439 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1455 TcpipDnsSettings
* pSettings
;
1456 WCHAR szBuffer
[100];
1458 LPNMIPADDRESS lpnmipa
;
1463 pSettings
= (TcpipDnsSettings
*)lParam
;
1464 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1465 if (!pSettings
->bAdd
)
1467 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1469 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1470 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1472 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1473 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1477 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1479 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1480 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1482 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1486 if (LOWORD(wParam
) == IDCANCEL
)
1488 EndDialog(hwndDlg
, FALSE
);
1491 else if (LOWORD(wParam
) == IDC_OK
)
1493 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1494 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1495 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1497 if (pSettings
->bAdd
)
1498 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1499 EndDialog(hwndDlg
, TRUE
);
1502 if (!pSettings
->bAdd
)
1504 EndDialog(hwndDlg
, FALSE
);
1507 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1512 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1513 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1515 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1517 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1518 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1529 InitializeTcpipAdvancedDNSDlg(
1531 TcpipConfNotifyImpl
* This
)
1533 WCHAR szBuffer
[200];
1534 LPWSTR pFirst
, pSep
, pList
;
1538 /* insert DNS addresses */
1539 pAddr
= This
->pCurrentConfig
->Ns
;
1542 dwIpAddr
= pAddr
->IpAddress
;
1543 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1544 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1546 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1547 pAddr
= pAddr
->Next
;
1549 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1551 if (!This
->pCurrentConfig
->pDNS
)
1554 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1555 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1557 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1559 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1560 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1562 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1563 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1565 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1566 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1568 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1570 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1571 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1576 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1582 pSep
= wcschr(pFirst
, L
',');
1586 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1592 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1597 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1598 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1599 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1604 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1606 LRESULT lResult
, lCount
;
1608 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1609 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1610 if (lResult
!= LB_ERR
)
1613 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1615 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1617 if (lResult
< lCount
-1)
1618 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1620 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1625 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1626 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1630 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1631 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1632 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1633 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1642 WCHAR szBuffer
[100];
1645 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1646 if (lResult
!= LB_ERR
)
1648 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1650 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1652 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1653 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1654 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1663 LRESULT lResult
, lCount
;
1665 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1666 if (lResult
!= LB_ERR
)
1668 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1669 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1670 if (lResult
+ 1 < lCount
)
1671 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1673 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1684 LPWSTR pszSearchList
, pItem
;
1686 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1687 if (!iCount
|| iCount
== LB_ERR
)
1688 return NULL
; //BUGBUG
1692 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1694 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1695 if (lResult
== LB_ERR
)
1698 dwSize
+= lResult
+ 1;
1701 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1705 pItem
= pszSearchList
;
1706 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1708 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1709 if (lResult
== LB_ERR
)
1711 CoTaskMemFree(pszSearchList
);
1714 dwSize
-= lResult
+ 1;
1715 pItem
+= wcslen(pItem
);
1716 if (iIndex
!= iCount
-1)
1723 return pszSearchList
;
1729 TcpipConfNotifyImpl
*This
)
1733 IP_ADDR
*pCur
, *pLast
;
1735 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1736 This
->pCurrentConfig
->Ns
= NULL
;
1738 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1739 if (!iCount
|| iCount
== LB_ERR
)
1745 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1747 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1750 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1753 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1754 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1757 This
->pCurrentConfig
->Ns
= pCur
;
1764 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
1769 TcpipAdvancedDnsDlg(
1776 TcpipConfNotifyImpl
* This
;
1777 LPPROPSHEETPAGE page
;
1778 TcpipDnsSettings Dns
;
1779 LRESULT lIndex
, lLength
;
1780 TcpipSuffixSettings Suffix
;
1782 WCHAR szSuffix
[100];
1783 WCHAR szFormat
[200];
1784 WCHAR szBuffer
[300];
1790 page
= (LPPROPSHEETPAGE
)lParam
;
1791 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1792 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1793 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1794 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1795 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1798 lppsn
= (LPPSHNOTIFY
) lParam
;
1799 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1801 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1802 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1804 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1805 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1808 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1810 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1811 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1813 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1815 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1816 swprintf(szBuffer
, szFormat
, szSuffix
);
1817 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1818 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1820 szFormat
[0] = L
'\0';
1822 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1823 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1824 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1830 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1832 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1833 if (!This
->pCurrentConfig
->pDNS
)
1836 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1837 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1839 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1840 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1841 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1842 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1844 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1848 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1849 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1850 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1851 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1854 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1856 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1857 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1858 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1860 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1864 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1865 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1870 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1872 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1873 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1876 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1878 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1879 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1882 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1884 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1886 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1887 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1888 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1889 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1890 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1891 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1892 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1893 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1896 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1898 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1900 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1901 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1902 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1903 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1907 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1909 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1910 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1912 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1913 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1915 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1917 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1918 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1919 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1920 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1923 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1925 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1926 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1927 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1928 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1931 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1933 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1934 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1935 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1936 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1939 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1941 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1942 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1943 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1944 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1947 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1949 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1950 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1951 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1952 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1955 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1957 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1958 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1959 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1960 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1963 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
1966 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1967 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1969 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1970 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1974 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
1976 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
1977 if (lIndex
!= LB_ERR
)
1980 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1981 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
1982 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1984 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
1985 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
1986 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
1987 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1988 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1993 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
1996 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
1997 Suffix
.Suffix
= NULL
;
1998 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2000 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2001 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2002 if (lIndex
!= LB_ERR
)
2003 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2004 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2005 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2006 CoTaskMemFree(Suffix
.Suffix
);
2010 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2012 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2013 if (lIndex
!= LB_ERR
)
2015 Suffix
.bAdd
= FALSE
;
2016 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2017 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2018 if (lLength
!= LB_ERR
)
2020 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2023 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2024 Suffix
.Suffix
[lLength
] = L
'\0';
2025 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2029 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2030 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2031 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2032 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2033 CoTaskMemFree(Suffix
.Suffix
);
2035 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2036 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2048 LaunchAdvancedTcpipSettings(
2050 TcpipConfNotifyImpl
* This
)
2052 PROPSHEETHEADERW pinfo
;
2053 HPROPSHEETPAGE hppages
[3];
2054 WCHAR szBuffer
[100];
2056 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2057 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2058 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2061 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2062 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2064 szBuffer
[0] = L
'\0';
2066 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2067 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2068 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
;
2069 pinfo
.u3
.phpage
= hppages
;
2071 pinfo
.hwndParent
= hwndDlg
;
2072 pinfo
.pszCaption
= szBuffer
;
2074 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2075 PropertySheetW(&pinfo
);
2077 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2078 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2098 AddAlternativeDialog(
2100 TcpipConfNotifyImpl
* This
)
2102 HPROPSHEETPAGE hpage
;
2104 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2108 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2112 StoreTcpipBasicSettings(
2114 TcpipConfNotifyImpl
* This
,
2119 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2121 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2122 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2126 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2127 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2131 if (!This
->pCurrentConfig
->Ip
)
2133 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2134 if (!This
->pCurrentConfig
->Ip
)
2135 return E_OUTOFMEMORY
;
2136 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2138 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2140 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2143 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2144 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2146 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2147 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2148 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2149 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2150 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2151 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2153 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2157 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2161 /* store subnetmask */
2162 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2164 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2166 if (!This
->pCurrentConfig
->Gw
)
2168 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2169 if (!This
->pCurrentConfig
->Gw
)
2170 return E_OUTOFMEMORY
;
2171 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2173 /* store default gateway */
2174 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2178 if (This
->pCurrentConfig
->Gw
)
2180 IP_ADDR
* pNextGw
= This
->pCurrentConfig
->Gw
->Next
;
2181 CoTaskMemFree(This
->pCurrentConfig
->Gw
);
2182 This
->pCurrentConfig
->Gw
= pNextGw
;
2188 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2190 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2193 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2194 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2196 if (!This
->pCurrentConfig
->Ns
)
2198 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2199 if (!This
->pCurrentConfig
->Ns
)
2200 return E_OUTOFMEMORY
;
2201 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2203 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2205 else if (This
->pCurrentConfig
->Ns
)
2207 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2209 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2210 This
->pCurrentConfig
->Ns
= pTemp
;
2215 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2217 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2219 if (!This
->pCurrentConfig
->Ns
)
2221 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2222 if (!This
->pCurrentConfig
->Ns
)
2223 return E_OUTOFMEMORY
;
2224 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2226 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2228 else if (!This
->pCurrentConfig
->Ns
->Next
)
2230 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2231 if (!This
->pCurrentConfig
->Ns
->Next
)
2232 return E_OUTOFMEMORY
;
2233 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2234 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2238 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2243 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2245 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2247 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2248 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2249 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2253 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2254 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2261 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2267 InitializeTcpipBasicDlgCtrls(
2269 TcpipSettings
* pCurSettings
)
2271 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2272 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2273 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2274 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2276 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2277 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2278 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2279 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2281 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2282 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2283 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2284 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2286 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2287 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2288 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2289 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2291 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2292 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2293 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2294 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2296 if (pCurSettings
->DhcpEnabled
)
2298 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2299 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2300 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2301 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2302 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2306 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2308 if (pCurSettings
->Ip
)
2310 /* set current ip address */
2311 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2312 /* set current hostmask */
2313 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2315 if (pCurSettings
->Gw
&& pCurSettings
->Gw
->IpAddress
)
2317 /* set current gateway */
2318 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2321 if (pCurSettings
->AutoconfigActive
)
2323 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2324 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2325 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2329 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2330 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2331 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2332 if (pCurSettings
->Ns
)
2334 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2335 if (pCurSettings
->Ns
->Next
)
2337 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2341 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2346 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2347 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2356 IP_ADDR_STRING
* pSrc
,
2361 IP_ADDR_STRING
* pCurrent
;
2362 IP_ADDR
*pNew
, *pLast
;
2369 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2374 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2375 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2376 if (!pNew
->IpAddress
)
2378 CoTaskMemFree(pNew
);
2382 if (Type
== SUBMASK
)
2384 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2385 pNew
->NTEContext
= pCurrent
->Context
;
2387 else if (Type
== METRIC
)
2389 if (szMetric
&& szMetric
[0] != L
'\0')
2391 pNew
->u
.Metric
= _wtoi(szMetric
);
2392 szMetric
+= wcslen(szMetric
) + 1;
2402 pCurrent
= pCurrent
->Next
;
2420 TcpipConfNotifyImpl
* This
;
2421 LPPROPSHEETPAGE page
;
2422 LPNMIPADDRESS lpnmipa
;
2430 page
= (LPPROPSHEETPAGE
)lParam
;
2431 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2432 if (This
->pCurrentConfig
)
2433 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2434 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2437 lppsn
= (LPPSHNOTIFY
) lParam
;
2438 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2439 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2441 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2442 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2444 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2446 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2447 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2448 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2449 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2450 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2451 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2455 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2457 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2458 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2459 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
2461 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID
);
2467 if (HIWORD(wParam
) == BN_CLICKED
)
2469 switch (LOWORD(wParam
))
2472 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2474 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2475 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2476 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2477 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2478 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2479 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2480 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2481 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2482 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2486 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2488 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2489 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2490 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2491 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2492 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2494 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2496 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2497 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2498 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2499 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2500 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2504 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2506 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2507 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2508 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2509 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2510 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2514 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2516 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2517 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2518 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2522 LaunchAdvancedTcpipSettings(hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2534 /***************************************************************
2535 * INetCfgComponentPropertyUi interface
2540 INetCfgComponentPropertyUi_fnQueryInterface(
2541 INetCfgComponentPropertyUi
* iface
,
2546 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2551 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2552 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2555 INetCfgComponentPropertyUi_AddRef(iface
);
2558 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2560 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2561 INetCfgComponentPropertyUi_AddRef(iface
);
2565 //StringFromCLSID(iid, &pStr);
2566 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2567 //CoTaskMemFree(pStr);
2569 return E_NOINTERFACE
;
2575 INetCfgComponentPropertyUi_fnAddRef(
2576 INetCfgComponentPropertyUi
* iface
)
2578 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2579 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2586 INetCfgComponentPropertyUi_fnRelease(
2587 INetCfgComponentPropertyUi
* iface
)
2589 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2590 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2594 CoTaskMemFree(This
);
2601 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2602 INetCfgComponentPropertyUi
* iface
,
2603 IUnknown
*pUnkReserved
)
2605 INetLanConnectionUiInfo
* pLanInfo
;
2607 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2609 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2613 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2616 // check if tcpip is enabled on that binding */
2617 IUnknown_Release(pUnkReserved
);
2623 INetCfgComponentPropertyUi_fnSetContext(
2624 INetCfgComponentPropertyUi
* iface
,
2625 IUnknown
*pUnkReserved
)
2627 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2629 if (!iface
|| !pUnkReserved
)
2632 This
->pUnknown
= pUnkReserved
;
2638 TcpipConfNotifyImpl
* This
)
2641 WCHAR szBuffer
[200];
2646 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2647 if (!This
->pCurrentConfig
->pDNS
)
2650 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2652 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2655 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2656 CoTaskMemFree(pStr
);
2657 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2659 dwSize
= sizeof(DWORD
);
2660 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2661 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2663 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
) / sizeof(WCHAR
);
2664 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
2669 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2671 dwSize
= sizeof(DWORD
);
2672 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2675 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2677 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2678 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2680 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2682 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2683 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2693 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2698 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2701 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2705 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2707 CoTaskMemFree(pData
);
2716 TcpipConfNotifyImpl
* This
)
2719 TcpFilterSettings
*pFilter
;
2720 WCHAR szBuffer
[200];
2722 DWORD dwVal
, dwSize
;
2724 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2728 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2729 This
->pCurrentConfig
->pFilter
= pFilter
;
2732 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2734 dwSize
= sizeof(DWORD
);
2735 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2736 pFilter
->EnableSecurityFilters
= dwVal
;
2741 pFilter
->EnableSecurityFilters
= FALSE
;
2744 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2747 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2748 CoTaskMemFree(pStr
);
2749 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2753 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2754 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2755 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2762 Initialize(TcpipConfNotifyImpl
* This
)
2764 DWORD dwSize
, Status
;
2766 IP_ADAPTER_INFO
* pCurrentAdapter
;
2767 IP_ADAPTER_INFO
* pInfo
;
2768 PIP_PER_ADAPTER_INFO pPerInfo
;
2769 IP_PER_ADAPTER_INFO Info
;
2773 TcpipSettings
* pCurSettings
;
2776 if (This
->pCurrentConfig
)
2779 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2785 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2787 CoTaskMemFree(pStr
);
2791 pInfo
= CoTaskMemAlloc(dwSize
);
2794 CoTaskMemFree(pStr
);
2798 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2800 CoTaskMemFree(pStr
);
2801 CoTaskMemFree(pInfo
);
2805 pCurrentAdapter
= pInfo
;
2807 while(pCurrentAdapter
)
2809 szBuffer
[0] = L
'\0';
2810 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2812 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2814 if (!_wcsicmp(szBuffer
, pStr
))
2819 pCurrentAdapter
= pCurrentAdapter
->Next
;
2821 CoTaskMemFree(pStr
);
2825 CoTaskMemFree(pInfo
);
2829 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2832 CoTaskMemFree(pInfo
);
2836 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2837 This
->pCurrentConfig
= pCurSettings
;
2838 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2839 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2841 if (!pCurrentAdapter
->DhcpEnabled
)
2843 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2844 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2847 uLength
= sizeof(IP_PER_ADAPTER_INFO
);
2848 ZeroMemory(&Info
, sizeof(IP_PER_ADAPTER_INFO
));
2850 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, &Info
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2852 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2855 Status
= GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
);
2856 if (Status
== NOERROR
)
2858 if (!pPerInfo
->AutoconfigActive
)
2860 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2862 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2864 CoTaskMemFree(pPerInfo
);
2869 if (!Info
.AutoconfigActive
)
2871 CopyIpAddrString(&Info
.DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2873 pCurSettings
->AutoconfigActive
= Info
.AutoconfigActive
;
2876 if (FAILED(LoadFilterSettings(This
)))
2879 if (FAILED(LoadDNSSettings(This
)))
2882 CoTaskMemFree(pInfo
);
2889 INetCfgComponentPropertyUi_fnMergePropPages(
2890 INetCfgComponentPropertyUi
* iface
,
2892 BYTE
**pahpspPrivate
,
2895 LPCWSTR
*pszStartPage
)
2897 HPROPSHEETPAGE
* hppages
;
2900 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2902 hr
= Initialize(This
);
2906 if (This
->pCurrentConfig
->DhcpEnabled
)
2911 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2915 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2918 CoTaskMemFree(hppages
);
2923 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2926 DestroyPropertySheetPage(hppages
[0]);
2927 CoTaskMemFree(hppages
);
2932 *pahpspPrivate
= (BYTE
*)hppages
;
2933 *pcPages
= NumPages
;
2940 INetCfgComponentPropertyUi_fnValidateProperties(
2941 INetCfgComponentPropertyUi
* iface
,
2944 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
2950 INetCfgComponentPropertyUi_fnApplyProperties(
2951 INetCfgComponentPropertyUi
* iface
)
2953 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
2960 INetCfgComponentPropertyUi_fnCancelProperties(
2961 INetCfgComponentPropertyUi
* iface
)
2963 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
2967 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
2969 INetCfgComponentPropertyUi_fnQueryInterface
,
2970 INetCfgComponentPropertyUi_fnAddRef
,
2971 INetCfgComponentPropertyUi_fnRelease
,
2972 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
2973 INetCfgComponentPropertyUi_fnSetContext
,
2974 INetCfgComponentPropertyUi_fnMergePropPages
,
2975 INetCfgComponentPropertyUi_fnValidateProperties
,
2976 INetCfgComponentPropertyUi_fnApplyProperties
,
2977 INetCfgComponentPropertyUi_fnCancelProperties
2980 /***************************************************************
2981 * INetCfgComponentControl interface
2986 INetCfgComponentControl_fnQueryInterface(
2987 INetCfgComponentControl
* iface
,
2991 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2992 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
2997 INetCfgComponentControl_fnAddRef(
2998 INetCfgComponentControl
* iface
)
3000 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3001 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
3006 INetCfgComponentControl_fnRelease(
3007 INetCfgComponentControl
* iface
)
3009 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3010 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3015 INetCfgComponentControl_fnInitialize(
3016 INetCfgComponentControl
* iface
,
3017 INetCfgComponent
*pIComp
,
3021 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3023 This
->pNCfg
= pINetCfg
;
3024 This
->pNComp
= pIComp
;
3031 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3034 DWORD dwSize
, dwIpAddr
;
3036 IP_ADDR
*pTemp
= pAddr
;
3044 dwIpAddr
= pTemp
->IpAddress
;
3045 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3046 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3047 }else if (Type
== SUBMASK
)
3049 dwIpAddr
= pTemp
->u
.Subnetmask
;
3050 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3051 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3053 else if (Type
== METRIC
)
3055 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3058 dwSize
+= wcslen(szBuffer
) + 1;
3059 pTemp
= pTemp
->Next
;
3065 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3074 dwIpAddr
= pTemp
->IpAddress
;
3075 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3076 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3077 }else if (Type
== SUBMASK
)
3079 dwIpAddr
= pTemp
->u
.Subnetmask
;
3080 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3081 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3083 else if (Type
== METRIC
)
3085 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3090 pStr
+= wcslen(pStr
);
3099 pStr
+= wcslen(pStr
) + 1;
3101 pTemp
= pTemp
->Next
;
3104 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3111 INetCfgComponentControl_fnApplyRegistryChanges(
3112 INetCfgComponentControl
* iface
)
3117 WCHAR szBuffer
[200];
3118 TcpipSettings
* pCurrentConfig
, *pOldConfig
;
3120 DWORD DhcpApiVersion
;
3122 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3124 pCurrentConfig
= This
->pCurrentConfig
;
3125 This
->pCurrentConfig
= NULL
;
3127 if (FAILED(Initialize(This
)))
3129 This
->pCurrentConfig
= pCurrentConfig
;
3132 pOldConfig
= This
->pCurrentConfig
;
3133 This
->pCurrentConfig
= pCurrentConfig
;
3135 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3138 if (RegCreateKeyExW(hKey
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3140 if (pCurrentConfig
->pDNS
)
3142 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3143 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)pCurrentConfig
->pDNS
->szSearchList
,
3144 (wcslen(pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3146 if (pCurrentConfig
->pFilter
)
3148 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3149 (LPBYTE
)&pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3154 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3157 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3158 CoTaskMemFree(pStr
);
3160 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3162 if (pCurrentConfig
->pDNS
)
3164 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3165 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3166 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3167 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3170 if (pCurrentConfig
->pFilter
)
3172 if (pCurrentConfig
->pFilter
->szTCPAllowedPorts
)
3174 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3175 (LPBYTE
)pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3176 pCurrentConfig
->pFilter
->TCPSize
);
3178 if (pCurrentConfig
->pFilter
->szUDPAllowedPorts
)
3180 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3181 (LPBYTE
)pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3182 pCurrentConfig
->pFilter
->UDPSize
);
3184 if (pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
)
3186 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3187 (LPBYTE
)pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3188 pCurrentConfig
->pFilter
->IPSize
);
3192 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3193 if (pCurrentConfig
->DhcpEnabled
)
3195 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3196 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3197 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3198 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3199 if (!pOldConfig
->DhcpEnabled
)
3201 /* Delete this adapter's current IP address */
3202 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3204 /* Delete all default routes for this adapter */
3206 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3209 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3210 if (pIpForwardTable
)
3212 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3214 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3216 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3217 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3219 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3223 CoTaskMemFree(pIpForwardTable
);
3230 /* Open the DHCP API if DHCP is enabled */
3231 if (pOldConfig
->DhcpEnabled
&& DhcpCApiInitialize(&DhcpApiVersion
) == NO_ERROR
)
3233 /* We have to tell DHCP about this */
3234 DhcpStaticRefreshParams(pCurrentConfig
->Index
,
3235 htonl(pCurrentConfig
->Ip
->IpAddress
),
3236 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
));
3243 /* Delete this adapter's current static IP address */
3244 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3246 /* Add the static IP address via the standard IPHLPAPI function */
3247 AddIPAddress(htonl(pCurrentConfig
->Ip
->IpAddress
),
3248 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
),
3249 pCurrentConfig
->Index
,
3250 &pCurrentConfig
->Ip
->NTEContext
,
3254 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3257 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3258 CoTaskMemFree(pStr
);
3261 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3264 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3265 CoTaskMemFree(pStr
);
3268 /* Delete all default routes for this adapter */
3270 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3273 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3274 if (pIpForwardTable
)
3276 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3278 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3280 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3281 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3283 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3287 CoTaskMemFree(pIpForwardTable
);
3291 if (pCurrentConfig
->Gw
)
3293 MIB_IPFORWARDROW RouterMib
;
3294 ZeroMemory(&RouterMib
, sizeof(MIB_IPFORWARDROW
));
3296 RouterMib
.dwForwardMetric1
= 1;
3297 RouterMib
.dwForwardIfIndex
= pOldConfig
->Index
;
3298 RouterMib
.dwForwardNextHop
= htonl(pCurrentConfig
->Gw
->IpAddress
);
3301 // add multiple gw addresses when required
3303 if (CreateIpForwardEntry(&RouterMib
) == NO_ERROR
)
3305 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3308 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3309 CoTaskMemFree(pStr
);
3312 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3315 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3316 CoTaskMemFree(pStr
);
3322 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3323 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", sizeof(WCHAR
) * 2);
3327 if (!pCurrentConfig
->Ns
|| pCurrentConfig
->AutoconfigActive
)
3329 RegDeleteValueW(hKey
, L
"NameServer");
3333 pStr
= CreateMultiSzString(pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3336 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3337 //RegDeleteValueW(hKey, L"DhcpNameServer");
3338 CoTaskMemFree(pStr
);
3349 INetCfgComponentControl_fnApplyPnpChanges(
3350 INetCfgComponentControl
* iface
,
3351 INetCfgPnpReconfigCallback
*pICallback
)
3353 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3359 INetCfgComponentControl_fnCancelChanges(
3360 INetCfgComponentControl
* iface
)
3362 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3366 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3368 INetCfgComponentControl_fnQueryInterface
,
3369 INetCfgComponentControl_fnAddRef
,
3370 INetCfgComponentControl_fnRelease
,
3371 INetCfgComponentControl_fnInitialize
,
3372 INetCfgComponentControl_fnApplyRegistryChanges
,
3373 INetCfgComponentControl_fnApplyPnpChanges
,
3374 INetCfgComponentControl_fnCancelChanges
3379 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3381 TcpipConfNotifyImpl
*This
;
3386 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3388 return E_OUTOFMEMORY
;
3391 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3392 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3394 This
->pUnknown
= NULL
;
3395 This
->pNComp
= NULL
;
3396 This
->pCurrentConfig
= NULL
;
3398 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3400 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3401 return E_NOINTERFACE
;
3404 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);