11 DWORD EnableSecurityFilters
;
12 LPWSTR szTCPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\TCPAllowedPorts
13 LPWSTR szUDPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\UDPAllowedPorts
14 LPWSTR szRawIPAllowedProtocols
; // KEY: Tcpip\Parameter\{InstanceGuid}\RawIPAllowedProtocols
20 // KEY: Tcpip\Parameter\{InstanceGuid}\IpAddress | DhcpIpAddress
21 // KEY: Tcpip\Parameter\{InstanceGuid}\SubnetMask | DhcpSubnetMask
22 // KEY: Tcpip\Parameter\{InstanceGuid}\DefaultGateway | DhcpDefaultGateway
23 // KEY: Tcpip\Parameter\{InstanceGuid}\NameServer | DhcpNameServer
24 // KEY: Services\NetBT\Parameters\Interfaces\Tcpip_{INSTANCE_GUID}
28 DWORD RegisterAdapterName
;
29 DWORD RegistrationEnabled
;
30 DWORD UseDomainNameDevolution
;
33 }TcpipAdvancedDNSDlgSettings
;
35 typedef struct tagIP_ADDR
44 struct tagIP_ADDR
* Next
;
61 UINT AutoconfigActive
;
63 TcpFilterSettings
* pFilter
;
64 TcpipAdvancedDNSDlgSettings
* pDNS
;
69 const INetCfgComponentPropertyUi
* lpVtbl
;
70 const INetCfgComponentControl
* lpVtblCompControl
;
74 INetCfgComponent
* pNComp
;
75 TcpipSettings
*pCurrentConfig
;
76 CLSID NetCfgInstanceId
;
77 }TcpipConfNotifyImpl
, *LPTcpipConfNotifyImpl
;
107 }TcpipSuffixSettings
;
116 static __inline LPTcpipConfNotifyImpl
impl_from_INetCfgComponentControl(INetCfgComponentControl
*iface
)
118 return (TcpipConfNotifyImpl
*)((char *)iface
- FIELD_OFFSET(TcpipConfNotifyImpl
, lpVtblCompControl
));
121 INT
GetSelectedItem(HWND hDlgCtrl
);
122 HRESULT
InitializeTcpipBasicDlgCtrls(HWND hwndDlg
, TcpipSettings
* pCurSettings
);
123 VOID
InsertColumnToListView(HWND hDlgCtrl
, UINT ResId
, UINT SubItem
, UINT Size
);
124 INT_PTR
StoreTcpipBasicSettings(HWND hwndDlg
, TcpipConfNotifyImpl
* This
, BOOL bApply
);
125 HRESULT
Initialize(TcpipConfNotifyImpl
* This
);
128 DisplayError(UINT ResTxt
, UINT ResTitle
, UINT Type
)
133 if (LoadStringW(netcfgx_hInstance
, ResTxt
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
134 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
138 if (LoadStringW(netcfgx_hInstance
, ResTitle
, szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
139 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = L
'\0';
143 MessageBoxW(NULL
, szBuffer
, szTitle
, Type
);
147 /***************************************************************
148 * TCP/IP Filter Dialog
161 TcpipPortSettings
* pPort
;
170 pPort
= (TcpipPortSettings
*)lParam
;
171 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pPort
);
172 if (LoadStringW(netcfgx_hInstance
, pPort
->ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
174 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
175 SendDlgItemMessageW(hwndDlg
, IDC_PORT_DESC
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
178 if (pPort
->MaxNum
== 65536)
179 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 5, 0);
181 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 3, 0);
185 if (LOWORD(wParam
) == IDCANCEL
)
187 EndDialog(hwndDlg
, FALSE
);
190 else if (LOWORD(wParam
) == IDC_OK
)
192 pPort
= (TcpipPortSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
193 Num
= GetDlgItemInt(hwndDlg
, IDC_PORT_VAL
, NULL
, TRUE
);
194 if (Num
> pPort
->MaxNum
|| Num
== 0)
196 if (pPort
->MaxNum
== 65536)
197 DisplayError(IDS_PORT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
199 DisplayError(IDS_PROT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
201 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
204 if (GetWindowTextW(GetDlgItem(hwndDlg
, IDC_PORT_VAL
), szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
206 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
207 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
208 find
.flags
= LVFI_STRING
;
210 if (SendMessageW(pPort
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
212 ZeroMemory(&li
, sizeof(LVITEMW
));
214 li
.iItem
= ListView_GetItemCount(pPort
->hDlgCtrl
);
215 li
.pszText
= szBuffer
;
216 SendMessageW(pPort
->hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
217 EndDialog(hwndDlg
, TRUE
);
220 DisplayError(IDS_DUP_NUMBER
, IDS_PROT_RANGE
, MB_ICONWARNING
);
221 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
230 InitFilterListBox(LPWSTR pData
, HWND hwndDlg
, HWND hDlgCtrl
, UINT AllowButton
, UINT RestrictButton
, UINT AddButton
, UINT DelButton
)
236 if (!pData
|| !_wtoi(pData
))
238 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
239 EnableWindow(GetDlgItem(hwndDlg
, AddButton
), FALSE
);
240 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
245 memset(&li
, 0x0, sizeof(LVITEMW
));
253 SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
255 pCur
+= wcslen(pCur
) + 1;
259 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
261 SendDlgItemMessageW(hwndDlg
, RestrictButton
, BM_SETCHECK
, BST_CHECKED
, 0);
275 iCount
= ListView_GetItemCount(hDlgCtrl
);
278 pData
= (LPWSTR
)CoTaskMemAlloc(3 * sizeof(WCHAR
));
284 *Size
= 3 * sizeof(WCHAR
);
288 pData
= CoTaskMemAlloc((6 * iCount
+ 1) * sizeof(WCHAR
));
294 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
296 ZeroMemory(&li
, sizeof(LVITEMW
));
299 li
.pszText
= szBuffer
;
300 li
.cchTextMax
= sizeof(szBuffer
) /sizeof(WCHAR
);
301 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
303 wcscpy(pCur
, szBuffer
);
304 dwSize
+= wcslen(szBuffer
) + 1;
305 pCur
+= wcslen(szBuffer
) + 1;
309 *Size
= (dwSize
+1) * sizeof(WCHAR
);
314 StoreTcpipFilterSettings(
317 TcpFilterSettings
* pFilter
;
319 pFilter
= CoTaskMemAlloc(sizeof(TcpFilterSettings
));
323 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
324 pFilter
->EnableSecurityFilters
= TRUE
;
326 pFilter
->EnableSecurityFilters
= FALSE
;
328 pFilter
->szTCPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), &pFilter
->TCPSize
);
329 pFilter
->szUDPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), &pFilter
->UDPSize
);
330 pFilter
->szRawIPAllowedProtocols
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_IP_LIST
), &pFilter
->IPSize
);
343 TcpipPortSettings Port
;
345 Port
.MaxNum
= MaxItem
;
346 Port
.hDlgCtrl
= hDlgCtrl
;
349 DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIP_PORT_DLG
), hwndDlg
, TcpipFilterPortDlg
, (LPARAM
)&Port
);
357 INT iIndex
= GetSelectedItem(hDlgCtrl
);
361 (void)ListView_DeleteItem(hDlgCtrl
, iIndex
);
364 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONWARNING
);
369 TcpipFilterSettingsDlg(
376 TcpipConfNotifyImpl
*pContext
;
377 TcpFilterSettings
*pFilter
;
382 pContext
= (TcpipConfNotifyImpl
*)lParam
;
383 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDS_TCP_PORTS
, 0, 100);
384 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDS_UDP_PORTS
, 0, 100);
385 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDS_IP_PROTO
, 0, 100);
386 if (pContext
->pCurrentConfig
->pFilter
)
388 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDC_TCP_ALLOW_ALL
, IDC_TCP_RESTRICT
, IDC_TCP_ADD
, IDC_TCP_DEL
);
389 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDC_UDP_ALLOW_ALL
, IDC_UDP_RESTRICT
, IDC_UDP_ADD
, IDC_UDP_DEL
);
390 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDC_IP_ALLOW_ALL
, IDC_IP_RESTRICT
, IDC_IP_ADD
, IDC_IP_DEL
);
391 if (pContext
->pCurrentConfig
->pFilter
->EnableSecurityFilters
)
392 SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_SETCHECK
, BST_CHECKED
, 0);
394 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
397 if (HIWORD(wParam
) == BN_CLICKED
)
399 switch (LOWORD(wParam
))
401 case IDC_TCP_ALLOW_ALL
:
402 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
404 SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
405 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), FALSE
);
406 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), FALSE
);
407 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), FALSE
);
410 case IDC_TCP_RESTRICT
:
411 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
413 SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
414 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), TRUE
);
415 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), TRUE
);
416 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), TRUE
);
419 case IDC_UDP_ALLOW_ALL
:
420 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
422 SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
423 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), FALSE
);
424 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), FALSE
);
425 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), FALSE
);
428 case IDC_UDP_RESTRICT
:
429 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
431 SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
432 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), TRUE
);
433 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), TRUE
);
434 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), TRUE
);
437 case IDC_IP_ALLOW_ALL
:
438 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
440 SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
441 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), FALSE
);
442 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), FALSE
);
443 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), FALSE
);
446 case IDC_IP_RESTRICT
:
447 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
449 SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
450 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), TRUE
);
451 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), TRUE
);
452 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), TRUE
);
456 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
457 DisplayError(IDS_DISABLE_FILTER
, IDS_TCPIP
, MB_OK
);
462 switch(LOWORD(wParam
))
465 pContext
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
466 pFilter
= StoreTcpipFilterSettings(hwndDlg
);
469 if (pContext
->pCurrentConfig
->pFilter
)
471 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
);
472 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
);
473 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
);
474 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
);
476 pContext
->pCurrentConfig
->pFilter
= pFilter
;
478 EndDialog(hwndDlg
, (INT_PTR
)TRUE
);
481 EndDialog(hwndDlg
, FALSE
);
484 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), 65536, IDS_TCP_PORTS
);
487 DelItem(GetDlgItem(hwndDlg
, IDC_TCP_LIST
));
490 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), 65536, IDS_UDP_PORTS
);
493 DelItem(GetDlgItem(hwndDlg
, IDC_UDP_LIST
));
496 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), 256, IDS_IP_PROTO
);
499 DelItem(GetDlgItem(hwndDlg
, IDC_IP_LIST
));
513 InitializePropertySheetPage(LPWSTR resname
, DLGPROC dlgproc
, LPARAM lParam
, LPWSTR szTitle
)
515 PROPSHEETPAGEW ppage
;
517 memset(&ppage
, 0x0, sizeof(PROPSHEETPAGEW
));
518 ppage
.dwSize
= sizeof(PROPSHEETPAGEW
);
519 ppage
.dwFlags
= PSP_DEFAULT
;
520 ppage
.u
.pszTemplate
= resname
;
521 ppage
.pfnDlgProc
= dlgproc
;
522 ppage
.lParam
= lParam
;
523 ppage
.hInstance
= netcfgx_hInstance
;
526 ppage
.dwFlags
|= PSP_USETITLE
;
527 ppage
.pszTitle
= szTitle
;
529 return CreatePropertySheetPageW(&ppage
);
532 /***************************************************************
533 * TCP/IP Advanced Option Dialog
538 InitializeTcpipAdvancedOptDlg(
540 TcpipConfNotifyImpl
* This
)
544 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
546 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTER
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
548 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
549 if (SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_ADDSTRING
, 0, (LPARAM
)szText
) != LB_ERR
)
550 SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_SETCURSEL
, 0, 0);
553 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTERDESC
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
555 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
556 SendDlgItemMessageW(hwndDlg
, IDC_OPTDESC
, WM_SETTEXT
, 0, (LPARAM
)szText
);
571 TcpipConfNotifyImpl
* This
;
572 LPPROPSHEETPAGE page
;
577 page
= (LPPROPSHEETPAGE
)lParam
;
578 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
579 InitializeTcpipAdvancedOptDlg(hwndDlg
, This
);
582 if (LOWORD(wParam
) == IDC_OPTPROP
)
584 DialogBoxParamW(netcfgx_hInstance
,
585 MAKEINTRESOURCEW(IDD_TCPIP_FILTER_DLG
),
587 TcpipFilterSettingsDlg
,
588 (LPARAM
)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
596 InsertColumnToListView(
605 if (!LoadStringW(netcfgx_hInstance
, ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
608 memset(&lc
, 0, sizeof(LV_COLUMN
) );
609 lc
.mask
= LVCF_WIDTH
| LVCF_TEXT
| LVCF_SUBITEM
| LVCF_FMT
;
610 lc
.iSubItem
= SubItem
;
611 lc
.fmt
= LVCFMT_FIXED_WIDTH
;
613 lc
.cchTextMax
= wcslen(szBuffer
);
614 lc
.pszText
= szBuffer
;
616 (void)SendMessageW(hDlgCtrl
, LVM_INSERTCOLUMNW
, SubItem
, (LPARAM
)&lc
);
620 InsertIpAddressToListView(
632 ZeroMemory(&li
, sizeof(li
));
634 li
.iItem
= itemCount
;
636 dwIpAddr
= pAddr
->IpAddress
;
637 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
638 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
640 li
.pszText
= szBuffer
;
641 li
.iItem
= SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
646 dwIpAddr
= pAddr
->u
.Subnetmask
;
647 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
648 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
653 swprintf(szBuffer
, L
"%u", pAddr
->u
.Metric
);
655 LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
));
660 li
.pszText
= szBuffer
;
661 SendMessageW(hDlgCtrl
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
670 InitializeTcpipAdvancedIpDlg(
672 TcpipConfNotifyImpl
* This
)
679 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_IPADDR
, 0, 100);
680 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
681 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_SUBMASK
, 1, (rect
.right
- rect
.left
- 100));
683 if (This
->pCurrentConfig
->DhcpEnabled
)
685 if (LoadStringW(netcfgx_hInstance
, IDS_DHCPACTIVE
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
687 ZeroMemory(&li
, sizeof(LVITEMW
));
689 li
.pszText
= szBuffer
;
690 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
692 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADD
), FALSE
);
693 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), FALSE
);
694 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), FALSE
);
698 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
->pCurrentConfig
->Ip
, TRUE
);
701 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_GATEWAY
, 0, 100);
702 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
703 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_METRIC
, 1, (rect
.right
- rect
.left
- 100));
705 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
->pCurrentConfig
->Gw
, FALSE
);
706 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, EM_LIMITTEXT
, 4, 0);
720 TcpipGwSettings
*pGwSettings
;
722 LPNMIPADDRESS lpnmipa
;
728 pGwSettings
= (TcpipGwSettings
*)lParam
;
729 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
730 if (pGwSettings
->bAdd
)
732 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
734 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
735 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
737 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
738 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
742 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
744 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
745 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
747 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pGwSettings
->szIP
);
748 if (pGwSettings
->Metric
)
750 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
751 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
752 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
756 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
757 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
758 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
761 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
762 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
763 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
764 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
767 if (LOWORD(wParam
) == IDC_USEMETRIC
)
769 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
771 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
772 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
773 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
777 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
778 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
782 else if (LOWORD(wParam
) == IDCANCEL
)
784 EndDialog(hwndDlg
, FALSE
);
787 else if (LOWORD(wParam
) == IDC_OK
)
789 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
791 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
792 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
794 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
795 find
.flags
= LVFI_STRING
;
796 find
.psz
= pGwSettings
->szIP
;
798 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
799 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
801 pGwSettings
->Metric
= 0;
804 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
806 EndDialog(hwndDlg
, TRUE
);
809 if (!pGwSettings
->bAdd
)
811 EndDialog(hwndDlg
, FALSE
);
814 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
820 lpnmipa
= (LPNMIPADDRESS
) lParam
;
821 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
823 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
825 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
826 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
835 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
841 ZeroMemory(&li
, sizeof(LVITEMW
));
844 li
.pszText
= pGwSettings
->szIP
;
847 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
849 li
.pszText
= szBuffer
;
853 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
856 pGwSettings
->Metric
= _wtoi(szBuffer
);
871 LPNMIPADDRESS lpnmipa
;
873 TcpipIpSettings
*pIpSettings
;
881 pIpSettings
= (TcpipIpSettings
*)lParam
;
882 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
884 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
885 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
886 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
887 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
888 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
889 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
890 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
891 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
893 if (pIpSettings
->bAdd
)
895 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
897 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
898 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
900 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
904 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
906 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
907 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
909 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szIP
);
910 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szMask
);
914 lpnmipa
= (LPNMIPADDRESS
) lParam
;
915 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
917 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
919 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
921 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
922 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
923 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
924 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
925 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
926 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
927 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
933 if (LOWORD(wParam
) == IDC_OK
)
935 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
936 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
937 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
939 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
940 find
.flags
= LVFI_STRING
;
941 find
.psz
= pIpSettings
->szIP
;
942 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
946 EndDialog(hwndDlg
, TRUE
);
949 else if (!pIpSettings
->bAdd
)
951 EndDialog(hwndDlg
, FALSE
);
954 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
957 else if (LOWORD(wParam
) == IDCANCEL
)
959 EndDialog(hwndDlg
, FALSE
);
971 UINT Length
= wcslen(szName
);
973 for(Index
= 0; Index
< Length
; Index
++)
974 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
990 TcpipSuffixSettings
* pSettings
;
996 pSettings
= (TcpipSuffixSettings
*)lParam
;
997 if (!pSettings
->bAdd
)
999 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
1000 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1002 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1003 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1005 CoTaskMemFree(pSettings
->Suffix
);
1006 pSettings
->Suffix
= NULL
;
1010 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1012 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1013 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1016 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1019 if (LOWORD(wParam
) == IDCANCEL
)
1021 EndDialog(hwndDlg
, FALSE
);
1024 else if (LOWORD(wParam
) == IDC_OK
)
1026 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1029 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1030 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1031 if (pSettings
->Suffix
)
1033 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1034 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1036 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1037 CoTaskMemFree(pSettings
->Suffix
);
1041 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1043 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1044 CoTaskMemFree(pSettings
->Suffix
);
1047 EndDialog(hwndDlg
, TRUE
);
1059 GetSelectedItem(HWND hDlgCtrl
)
1062 UINT iItemCount
, iIndex
;
1064 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1068 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1070 ZeroMemory(&li
, sizeof(LVITEMW
));
1071 li
.mask
= LVIF_STATE
;
1072 li
.stateMask
= (UINT
)-1;
1074 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1076 if (li
.state
& LVIS_SELECTED
)
1085 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1089 ZeroMemory(&li
, sizeof(LVITEMW
));
1090 li
.mask
= LVIF_TEXT
;
1092 li
.pszText
= pIpSettings
->szIP
;
1095 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1098 ZeroMemory(&li
, sizeof(LVITEMW
));
1099 li
.mask
= LVIF_TEXT
;
1101 li
.pszText
= pIpSettings
->szMask
;
1105 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1109 DeleteItemFromList(HWND hDlgCtrl
)
1113 memset(&li
, 0x0, sizeof(LVITEMW
));
1114 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1117 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1122 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1127 GetIpAddressFromStringW(
1133 LPWSTR pLast
= szBuffer
;
1134 LPWSTR pNext
= szBuffer
;
1137 while((pNext
= wcschr(pNext
, L
'.')))
1141 dwIpAddr
|= (Val
<< Index
* 8);
1146 dwIpAddr
|= _wtoi(pLast
);
1152 GetIpAddressFromStringA(
1157 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1160 return GetIpAddressFromStringW(szIp
);
1167 FreeIPAddr(IP_ADDR
*pAddr
)
1176 pNext
= pAddr
->Next
;
1177 CoTaskMemFree(pAddr
);
1183 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1187 ZeroMemory(&li
, sizeof(LVITEMW
));
1188 li
.mask
= LVIF_TEXT
;
1189 li
.pszText
= szBuffer
;
1191 li
.iSubItem
= SubIndex
;
1192 li
.cchTextMax
= BufferSize
;
1193 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1199 TcpipConfNotifyImpl
* This
,
1205 IP_ADDR
*pCur
, *pLast
;
1207 iCount
= ListView_GetItemCount(hDlgCtrl
);
1214 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1216 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1218 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1221 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1223 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1224 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1226 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1228 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1230 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1232 pCur
->u
.Metric
= _wtoi(szBuffer
);
1238 This
->pCurrentConfig
->Ip
= pCur
;
1240 This
->pCurrentConfig
->Gw
= pCur
;
1262 TcpipConfNotifyImpl
* This
;
1263 LPPROPSHEETPAGE page
;
1265 WCHAR szBuffer
[200];
1275 page
= (LPPROPSHEETPAGE
)lParam
;
1276 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1277 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1278 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1281 lppsn
= (LPPSHNOTIFY
) lParam
;
1282 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1284 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1285 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1287 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1288 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1292 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1294 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1295 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1296 This
->pCurrentConfig
->Gw
= NULL
;
1297 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1298 This
->pCurrentConfig
->Ip
= NULL
;
1299 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1300 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1301 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
1306 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1308 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1309 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1311 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1313 else if (LOWORD(wParam
) == IDC_IPADD
)
1316 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1317 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1320 memset(&li
, 0x0, sizeof(LVITEMW
));
1321 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1322 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1323 li
.pszText
= Ip
.szIP
;
1324 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1327 li
.mask
= LVIF_TEXT
;
1329 li
.pszText
= Ip
.szMask
;
1330 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1334 else if (LOWORD(wParam
) == IDC_IPMOD
)
1336 memset(&li
, 0x0, sizeof(LVITEMW
));
1337 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1340 /* no item selected */
1341 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1342 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1346 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1347 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1349 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1352 li
.mask
= LVIF_TEXT
;
1353 li
.pszText
= Ip
.szIP
;
1354 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1355 li
.pszText
= Ip
.szMask
;
1357 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1361 else if (LOWORD(wParam
) == IDC_IPDEL
)
1363 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1366 else if (LOWORD(wParam
) == IDC_GWADD
)
1369 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1370 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1373 memset(&li
, 0x0, sizeof(LVITEMW
));
1374 li
.mask
= LVIF_TEXT
;
1375 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1376 li
.pszText
= Gw
.szIP
;
1377 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1382 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1384 li
.pszText
= szBuffer
;
1385 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1389 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1391 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1393 li
.pszText
= szBuffer
;
1394 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1401 else if (LOWORD(wParam
) == IDC_GWMOD
)
1403 memset(&li
, 0x0, sizeof(LVITEMW
));
1404 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1407 /* no item selected */
1408 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1409 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1412 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1415 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1416 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1419 li
.mask
= LVIF_TEXT
;
1420 li
.pszText
= Gw
.szIP
;
1421 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1424 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1426 li
.pszText
= szBuffer
;
1427 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1431 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1433 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1435 li
.pszText
= szBuffer
;
1436 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1443 else if (LOWORD(wParam
) == IDC_GWDEL
)
1445 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1461 TcpipDnsSettings
* pSettings
;
1462 WCHAR szBuffer
[100];
1464 LPNMIPADDRESS lpnmipa
;
1469 pSettings
= (TcpipDnsSettings
*)lParam
;
1470 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1471 if (!pSettings
->bAdd
)
1473 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1475 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1476 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1478 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1479 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1483 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1485 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1486 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1488 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1492 if (LOWORD(wParam
) == IDCANCEL
)
1494 EndDialog(hwndDlg
, FALSE
);
1497 else if (LOWORD(wParam
) == IDC_OK
)
1499 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1500 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1501 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1503 if (pSettings
->bAdd
)
1504 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1505 EndDialog(hwndDlg
, TRUE
);
1508 if (!pSettings
->bAdd
)
1510 EndDialog(hwndDlg
, FALSE
);
1513 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1518 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1519 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1521 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1523 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1524 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1535 InitializeTcpipAdvancedDNSDlg(
1537 TcpipConfNotifyImpl
* This
)
1539 WCHAR szBuffer
[200];
1540 LPWSTR pFirst
, pSep
, pList
;
1544 /* insert DNS addresses */
1545 pAddr
= This
->pCurrentConfig
->Ns
;
1548 dwIpAddr
= pAddr
->IpAddress
;
1549 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1550 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1552 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1553 pAddr
= pAddr
->Next
;
1555 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1557 if (!This
->pCurrentConfig
->pDNS
)
1560 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1561 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1563 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1565 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1566 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1568 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1569 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1571 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1572 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1574 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1576 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1577 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1582 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1588 pSep
= wcschr(pFirst
, L
',');
1592 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1598 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1603 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1604 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1605 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1610 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1612 LRESULT lResult
, lCount
;
1614 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1615 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1616 if (lResult
!= LB_ERR
)
1619 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1621 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1623 if (lResult
< lCount
-1)
1624 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1626 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1631 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1632 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1636 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1637 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1638 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1639 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1648 WCHAR szBuffer
[100];
1651 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1652 if (lResult
!= LB_ERR
)
1654 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1656 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1658 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1659 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1660 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1669 LRESULT lResult
, lCount
;
1671 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1672 if (lResult
!= LB_ERR
)
1674 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1675 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1676 if (lResult
+ 1 < lCount
)
1677 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1679 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1690 LPWSTR pszSearchList
, pItem
;
1692 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1693 if (!iCount
|| iCount
== LB_ERR
)
1694 return NULL
; //BUGBUG
1698 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1700 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1701 if (lResult
== LB_ERR
)
1704 dwSize
+= lResult
+ 1;
1707 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1711 pItem
= pszSearchList
;
1712 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1714 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1715 if (lResult
== LB_ERR
)
1717 CoTaskMemFree(pszSearchList
);
1720 dwSize
-= lResult
+ 1;
1721 pItem
+= wcslen(pItem
);
1722 if (iIndex
!= iCount
-1)
1729 return pszSearchList
;
1735 TcpipConfNotifyImpl
*This
)
1739 IP_ADDR
*pCur
, *pLast
;
1741 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1742 This
->pCurrentConfig
->Ns
= NULL
;
1744 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1745 if (!iCount
|| iCount
== LB_ERR
)
1751 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1753 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1756 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1759 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1760 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1763 This
->pCurrentConfig
->Ns
= pCur
;
1770 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
1775 TcpipAdvancedDnsDlg(
1782 TcpipConfNotifyImpl
* This
;
1783 LPPROPSHEETPAGE page
;
1784 TcpipDnsSettings Dns
;
1785 LRESULT lIndex
, lLength
;
1786 TcpipSuffixSettings Suffix
;
1788 WCHAR szSuffix
[100];
1789 WCHAR szFormat
[200];
1790 WCHAR szBuffer
[300];
1796 page
= (LPPROPSHEETPAGE
)lParam
;
1797 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1798 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1799 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1800 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1801 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1804 lppsn
= (LPPSHNOTIFY
) lParam
;
1805 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1807 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1808 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1810 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1811 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1814 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1816 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1817 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1819 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1821 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1822 swprintf(szBuffer
, szFormat
, szSuffix
);
1823 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1824 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1826 szFormat
[0] = L
'\0';
1828 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1829 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1830 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1836 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1838 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1839 if (!This
->pCurrentConfig
->pDNS
)
1842 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1843 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1845 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1846 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1847 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1848 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1850 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1854 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1855 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1856 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1857 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1860 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1862 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1863 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1864 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1866 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1870 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1871 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1876 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1878 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1879 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1882 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1884 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1885 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1888 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1890 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1892 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1893 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1894 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1895 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1896 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1897 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1898 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1899 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1902 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1904 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1906 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1907 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1908 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1909 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1913 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1915 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1916 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1918 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1919 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1921 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1923 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1924 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1925 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1926 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1929 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1931 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1932 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1933 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1934 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1937 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1939 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1940 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1941 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1942 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1945 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1947 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1948 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1949 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1950 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1953 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1955 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1956 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1957 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1958 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1961 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1963 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1964 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1965 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1966 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1969 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
1972 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1973 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1975 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1976 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1980 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
1982 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
1983 if (lIndex
!= LB_ERR
)
1986 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1987 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
1988 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1990 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
1991 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
1992 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
1993 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1994 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1999 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
2002 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2003 Suffix
.Suffix
= NULL
;
2004 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2006 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2007 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2008 if (lIndex
!= LB_ERR
)
2009 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2010 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2011 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2012 CoTaskMemFree(Suffix
.Suffix
);
2016 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2018 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2019 if (lIndex
!= LB_ERR
)
2021 Suffix
.bAdd
= FALSE
;
2022 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2023 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2024 if (lLength
!= LB_ERR
)
2026 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2029 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2030 Suffix
.Suffix
[lLength
] = L
'\0';
2031 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2035 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2036 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2037 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2038 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2039 CoTaskMemFree(Suffix
.Suffix
);
2041 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2042 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2054 LaunchAdvancedTcpipSettings(
2056 TcpipConfNotifyImpl
* This
)
2058 PROPSHEETHEADERW pinfo
;
2059 HPROPSHEETPAGE hppages
[3];
2060 WCHAR szBuffer
[100];
2062 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2063 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2064 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2067 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2068 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2070 szBuffer
[0] = L
'\0';
2072 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2073 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2074 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
;
2075 pinfo
.u3
.phpage
= hppages
;
2077 pinfo
.hwndParent
= hwndDlg
;
2078 pinfo
.pszCaption
= szBuffer
;
2080 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2081 PropertySheetW(&pinfo
);
2083 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2084 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2104 AddAlternativeDialog(
2106 TcpipConfNotifyImpl
* This
)
2108 HPROPSHEETPAGE hpage
;
2110 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2114 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2118 StoreTcpipBasicSettings(
2120 TcpipConfNotifyImpl
* This
,
2125 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2127 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2128 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2132 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2133 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2137 if (!This
->pCurrentConfig
->Ip
)
2139 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2140 if (!This
->pCurrentConfig
->Ip
)
2141 return E_OUTOFMEMORY
;
2142 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2144 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2146 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2149 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2150 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2152 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2153 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2154 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2155 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2156 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2157 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2159 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2163 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2167 /* store subnetmask */
2168 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2170 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2172 if (!This
->pCurrentConfig
->Gw
)
2174 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2175 if (!This
->pCurrentConfig
->Gw
)
2176 return E_OUTOFMEMORY
;
2177 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2179 /* store default gateway */
2180 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2184 if (This
->pCurrentConfig
->Gw
)
2186 IP_ADDR
* pNextGw
= This
->pCurrentConfig
->Gw
->Next
;
2187 CoTaskMemFree(This
->pCurrentConfig
->Gw
);
2188 This
->pCurrentConfig
->Gw
= pNextGw
;
2194 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2196 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2199 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2200 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2202 if (!This
->pCurrentConfig
->Ns
)
2204 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2205 if (!This
->pCurrentConfig
->Ns
)
2206 return E_OUTOFMEMORY
;
2207 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2209 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2211 else if (This
->pCurrentConfig
->Ns
)
2213 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2215 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2216 This
->pCurrentConfig
->Ns
= pTemp
;
2221 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2223 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2225 if (!This
->pCurrentConfig
->Ns
)
2227 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2228 if (!This
->pCurrentConfig
->Ns
)
2229 return E_OUTOFMEMORY
;
2230 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2232 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2234 else if (!This
->pCurrentConfig
->Ns
->Next
)
2236 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2237 if (!This
->pCurrentConfig
->Ns
->Next
)
2238 return E_OUTOFMEMORY
;
2239 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2240 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2244 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2249 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2251 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2253 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2254 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2255 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2259 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2260 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2267 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2273 InitializeTcpipBasicDlgCtrls(
2275 TcpipSettings
* pCurSettings
)
2277 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2278 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2279 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2280 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2282 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2283 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2284 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2285 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2287 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2288 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2289 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2290 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2292 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2293 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2294 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2295 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2297 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2298 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2299 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2300 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2302 if (pCurSettings
->DhcpEnabled
)
2304 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2305 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2306 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2307 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2308 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2312 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2314 if (pCurSettings
->Ip
)
2316 /* set current ip address */
2317 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2318 /* set current hostmask */
2319 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2321 if (pCurSettings
->Gw
&& pCurSettings
->Gw
->IpAddress
)
2323 /* set current gateway */
2324 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2327 if (pCurSettings
->AutoconfigActive
)
2329 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2330 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2331 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2335 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2336 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2337 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2338 if (pCurSettings
->Ns
)
2340 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2341 if (pCurSettings
->Ns
->Next
)
2343 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2347 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2352 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2353 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2362 IP_ADDR_STRING
* pSrc
,
2367 IP_ADDR_STRING
* pCurrent
;
2368 IP_ADDR
*pNew
, *pLast
;
2375 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2380 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2381 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2382 if (!pNew
->IpAddress
)
2384 CoTaskMemFree(pNew
);
2388 if (Type
== SUBMASK
)
2390 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2391 pNew
->NTEContext
= pCurrent
->Context
;
2393 else if (Type
== METRIC
)
2395 if (szMetric
&& szMetric
[0] != L
'\0')
2397 pNew
->u
.Metric
= _wtoi(szMetric
);
2398 szMetric
+= wcslen(szMetric
) + 1;
2408 pCurrent
= pCurrent
->Next
;
2426 TcpipConfNotifyImpl
* This
;
2427 LPPROPSHEETPAGE page
;
2428 LPNMIPADDRESS lpnmipa
;
2436 page
= (LPPROPSHEETPAGE
)lParam
;
2437 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2438 if (This
->pCurrentConfig
)
2439 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2440 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2443 lppsn
= (LPPSHNOTIFY
) lParam
;
2444 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2445 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2447 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2448 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2450 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2452 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2453 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2454 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2455 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2456 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2457 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2461 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2463 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2464 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2465 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
2467 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID
);
2473 if (HIWORD(wParam
) == BN_CLICKED
)
2475 switch (LOWORD(wParam
))
2478 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2480 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2481 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2482 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2483 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2484 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2485 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2486 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2487 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2488 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2492 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2494 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2495 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2496 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2497 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2498 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2500 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2502 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2503 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2504 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2505 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2506 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2510 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2512 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2513 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2514 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2515 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2516 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2520 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2522 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2523 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2524 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2528 LaunchAdvancedTcpipSettings(hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2540 /***************************************************************
2541 * INetCfgComponentPropertyUi interface
2546 INetCfgComponentPropertyUi_fnQueryInterface(
2547 INetCfgComponentPropertyUi
* iface
,
2552 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2557 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2558 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2561 INetCfgComponentPropertyUi_AddRef(iface
);
2564 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2566 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2567 INetCfgComponentPropertyUi_AddRef(iface
);
2571 //StringFromCLSID(iid, &pStr);
2572 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2573 //CoTaskMemFree(pStr);
2575 return E_NOINTERFACE
;
2581 INetCfgComponentPropertyUi_fnAddRef(
2582 INetCfgComponentPropertyUi
* iface
)
2584 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2585 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2592 INetCfgComponentPropertyUi_fnRelease(
2593 INetCfgComponentPropertyUi
* iface
)
2595 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2596 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2600 CoTaskMemFree(This
);
2607 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2608 INetCfgComponentPropertyUi
* iface
,
2609 IUnknown
*pUnkReserved
)
2611 INetLanConnectionUiInfo
* pLanInfo
;
2613 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2615 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2619 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2622 // check if tcpip is enabled on that binding */
2623 IUnknown_Release(pUnkReserved
);
2629 INetCfgComponentPropertyUi_fnSetContext(
2630 INetCfgComponentPropertyUi
* iface
,
2631 IUnknown
*pUnkReserved
)
2633 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2635 if (!iface
|| !pUnkReserved
)
2638 This
->pUnknown
= pUnkReserved
;
2644 TcpipConfNotifyImpl
* This
)
2647 WCHAR szBuffer
[200];
2652 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2653 if (!This
->pCurrentConfig
->pDNS
)
2656 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2658 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2661 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2662 CoTaskMemFree(pStr
);
2663 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2665 dwSize
= sizeof(DWORD
);
2666 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2667 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2669 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
) / sizeof(WCHAR
);
2670 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
2675 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2677 dwSize
= sizeof(DWORD
);
2678 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2681 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2683 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2684 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2686 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2688 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2689 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2699 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2704 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2707 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2711 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2713 CoTaskMemFree(pData
);
2722 TcpipConfNotifyImpl
* This
)
2725 TcpFilterSettings
*pFilter
;
2726 WCHAR szBuffer
[200];
2728 DWORD dwVal
, dwSize
;
2730 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2734 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2735 This
->pCurrentConfig
->pFilter
= pFilter
;
2738 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2740 dwSize
= sizeof(DWORD
);
2741 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2742 pFilter
->EnableSecurityFilters
= dwVal
;
2747 pFilter
->EnableSecurityFilters
= FALSE
;
2750 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2753 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2754 CoTaskMemFree(pStr
);
2755 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2759 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2760 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2761 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2768 Initialize(TcpipConfNotifyImpl
* This
)
2770 DWORD dwSize
, Status
;
2772 IP_ADAPTER_INFO
* pCurrentAdapter
;
2773 IP_ADAPTER_INFO
* pInfo
;
2774 PIP_PER_ADAPTER_INFO pPerInfo
;
2775 IP_PER_ADAPTER_INFO Info
;
2779 TcpipSettings
* pCurSettings
;
2782 if (This
->pCurrentConfig
)
2785 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2791 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2793 CoTaskMemFree(pStr
);
2797 pInfo
= CoTaskMemAlloc(dwSize
);
2800 CoTaskMemFree(pStr
);
2804 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2806 CoTaskMemFree(pStr
);
2807 CoTaskMemFree(pInfo
);
2811 pCurrentAdapter
= pInfo
;
2813 while(pCurrentAdapter
)
2815 szBuffer
[0] = L
'\0';
2816 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2818 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2820 if (!_wcsicmp(szBuffer
, pStr
))
2825 pCurrentAdapter
= pCurrentAdapter
->Next
;
2827 CoTaskMemFree(pStr
);
2831 CoTaskMemFree(pInfo
);
2835 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2838 CoTaskMemFree(pInfo
);
2842 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2843 This
->pCurrentConfig
= pCurSettings
;
2844 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2845 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2847 if (!pCurrentAdapter
->DhcpEnabled
)
2849 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2850 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2853 uLength
= sizeof(IP_PER_ADAPTER_INFO
);
2854 ZeroMemory(&Info
, sizeof(IP_PER_ADAPTER_INFO
));
2856 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, &Info
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2858 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2861 Status
= GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
);
2862 if (Status
== NOERROR
)
2864 if (!pPerInfo
->AutoconfigActive
)
2866 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2868 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2870 CoTaskMemFree(pPerInfo
);
2875 if (!Info
.AutoconfigActive
)
2877 CopyIpAddrString(&Info
.DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2879 pCurSettings
->AutoconfigActive
= Info
.AutoconfigActive
;
2882 if (FAILED(LoadFilterSettings(This
)))
2885 if (FAILED(LoadDNSSettings(This
)))
2888 CoTaskMemFree(pInfo
);
2895 INetCfgComponentPropertyUi_fnMergePropPages(
2896 INetCfgComponentPropertyUi
* iface
,
2898 BYTE
**pahpspPrivate
,
2901 LPCWSTR
*pszStartPage
)
2903 HPROPSHEETPAGE
* hppages
;
2906 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2908 hr
= Initialize(This
);
2912 if (This
->pCurrentConfig
->DhcpEnabled
)
2917 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2921 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2924 CoTaskMemFree(hppages
);
2929 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2932 DestroyPropertySheetPage(hppages
[0]);
2933 CoTaskMemFree(hppages
);
2938 *pahpspPrivate
= (BYTE
*)hppages
;
2939 *pcPages
= NumPages
;
2946 INetCfgComponentPropertyUi_fnValidateProperties(
2947 INetCfgComponentPropertyUi
* iface
,
2950 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
2956 INetCfgComponentPropertyUi_fnApplyProperties(
2957 INetCfgComponentPropertyUi
* iface
)
2959 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
2966 INetCfgComponentPropertyUi_fnCancelProperties(
2967 INetCfgComponentPropertyUi
* iface
)
2969 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
2973 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
2975 INetCfgComponentPropertyUi_fnQueryInterface
,
2976 INetCfgComponentPropertyUi_fnAddRef
,
2977 INetCfgComponentPropertyUi_fnRelease
,
2978 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
2979 INetCfgComponentPropertyUi_fnSetContext
,
2980 INetCfgComponentPropertyUi_fnMergePropPages
,
2981 INetCfgComponentPropertyUi_fnValidateProperties
,
2982 INetCfgComponentPropertyUi_fnApplyProperties
,
2983 INetCfgComponentPropertyUi_fnCancelProperties
2986 /***************************************************************
2987 * INetCfgComponentControl interface
2992 INetCfgComponentControl_fnQueryInterface(
2993 INetCfgComponentControl
* iface
,
2997 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2998 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
3003 INetCfgComponentControl_fnAddRef(
3004 INetCfgComponentControl
* iface
)
3006 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3007 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
3012 INetCfgComponentControl_fnRelease(
3013 INetCfgComponentControl
* iface
)
3015 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3016 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3021 INetCfgComponentControl_fnInitialize(
3022 INetCfgComponentControl
* iface
,
3023 INetCfgComponent
*pIComp
,
3027 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3029 This
->pNCfg
= pINetCfg
;
3030 This
->pNComp
= pIComp
;
3037 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3040 DWORD dwSize
, dwIpAddr
;
3042 IP_ADDR
*pTemp
= pAddr
;
3050 dwIpAddr
= pTemp
->IpAddress
;
3051 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3052 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3053 }else if (Type
== SUBMASK
)
3055 dwIpAddr
= pTemp
->u
.Subnetmask
;
3056 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3057 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3059 else if (Type
== METRIC
)
3061 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3064 dwSize
+= wcslen(szBuffer
) + 1;
3065 pTemp
= pTemp
->Next
;
3071 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3080 dwIpAddr
= pTemp
->IpAddress
;
3081 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3082 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3083 }else if (Type
== SUBMASK
)
3085 dwIpAddr
= pTemp
->u
.Subnetmask
;
3086 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3087 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3089 else if (Type
== METRIC
)
3091 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3096 pStr
+= wcslen(pStr
);
3105 pStr
+= wcslen(pStr
) + 1;
3107 pTemp
= pTemp
->Next
;
3110 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3117 INetCfgComponentControl_fnApplyRegistryChanges(
3118 INetCfgComponentControl
* iface
)
3123 WCHAR szBuffer
[200];
3124 TcpipSettings
* pCurrentConfig
, *pOldConfig
;
3126 DWORD DhcpApiVersion
;
3128 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3130 pCurrentConfig
= This
->pCurrentConfig
;
3131 This
->pCurrentConfig
= NULL
;
3133 if (FAILED(Initialize(This
)))
3135 This
->pCurrentConfig
= pCurrentConfig
;
3138 pOldConfig
= This
->pCurrentConfig
;
3139 This
->pCurrentConfig
= pCurrentConfig
;
3141 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3144 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3146 if (pCurrentConfig
->pDNS
)
3148 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3149 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)pCurrentConfig
->pDNS
->szSearchList
,
3150 (wcslen(pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3152 if (pCurrentConfig
->pFilter
)
3154 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3155 (LPBYTE
)&pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3160 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3163 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3164 CoTaskMemFree(pStr
);
3166 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3168 if (pCurrentConfig
->pDNS
)
3170 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3171 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3172 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3173 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3176 if (pCurrentConfig
->pFilter
)
3178 if (pCurrentConfig
->pFilter
->szTCPAllowedPorts
)
3180 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3181 (LPBYTE
)pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3182 pCurrentConfig
->pFilter
->TCPSize
);
3184 if (pCurrentConfig
->pFilter
->szUDPAllowedPorts
)
3186 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3187 (LPBYTE
)pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3188 pCurrentConfig
->pFilter
->UDPSize
);
3190 if (pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
)
3192 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3193 (LPBYTE
)pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3194 pCurrentConfig
->pFilter
->IPSize
);
3198 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3199 if (pCurrentConfig
->DhcpEnabled
)
3201 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3202 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3203 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3204 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3205 if (!pOldConfig
->DhcpEnabled
)
3207 /* Delete this adapter's current IP address */
3208 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3210 /* Delete all default routes for this adapter */
3212 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3215 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3216 if (pIpForwardTable
)
3218 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3220 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3222 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3223 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3225 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3229 CoTaskMemFree(pIpForwardTable
);
3236 /* Open the DHCP API if DHCP is enabled */
3237 if (pOldConfig
->DhcpEnabled
&& DhcpCApiInitialize(&DhcpApiVersion
) == NO_ERROR
)
3239 /* We have to tell DHCP about this */
3240 DhcpStaticRefreshParams(pCurrentConfig
->Index
,
3241 htonl(pCurrentConfig
->Ip
->IpAddress
),
3242 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
));
3249 /* Delete this adapter's current static IP address */
3250 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3252 /* Add the static IP address via the standard IPHLPAPI function */
3253 AddIPAddress(htonl(pCurrentConfig
->Ip
->IpAddress
),
3254 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
),
3255 pCurrentConfig
->Index
,
3256 &pCurrentConfig
->Ip
->NTEContext
,
3260 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3263 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3264 CoTaskMemFree(pStr
);
3267 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3270 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3271 CoTaskMemFree(pStr
);
3274 /* Delete all default routes for this adapter */
3276 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3279 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3280 if (pIpForwardTable
)
3282 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3284 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3286 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3287 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3289 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3293 CoTaskMemFree(pIpForwardTable
);
3297 if (pCurrentConfig
->Gw
)
3299 MIB_IPFORWARDROW RouterMib
;
3300 ZeroMemory(&RouterMib
, sizeof(MIB_IPFORWARDROW
));
3302 RouterMib
.dwForwardMetric1
= 1;
3303 RouterMib
.dwForwardIfIndex
= pOldConfig
->Index
;
3304 RouterMib
.dwForwardNextHop
= htonl(pCurrentConfig
->Gw
->IpAddress
);
3307 // add multiple gw addresses when required
3309 if (CreateIpForwardEntry(&RouterMib
) == NO_ERROR
)
3311 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3314 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3315 CoTaskMemFree(pStr
);
3318 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3321 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3322 CoTaskMemFree(pStr
);
3328 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3329 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", sizeof(WCHAR
) * 2);
3333 if (!pCurrentConfig
->Ns
|| pCurrentConfig
->AutoconfigActive
)
3335 RegDeleteValueW(hKey
, L
"NameServer");
3339 pStr
= CreateMultiSzString(pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3342 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3343 //RegDeleteValueW(hKey, L"DhcpNameServer");
3344 CoTaskMemFree(pStr
);
3355 INetCfgComponentControl_fnApplyPnpChanges(
3356 INetCfgComponentControl
* iface
,
3357 INetCfgPnpReconfigCallback
*pICallback
)
3359 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3365 INetCfgComponentControl_fnCancelChanges(
3366 INetCfgComponentControl
* iface
)
3368 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3372 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3374 INetCfgComponentControl_fnQueryInterface
,
3375 INetCfgComponentControl_fnAddRef
,
3376 INetCfgComponentControl_fnRelease
,
3377 INetCfgComponentControl_fnInitialize
,
3378 INetCfgComponentControl_fnApplyRegistryChanges
,
3379 INetCfgComponentControl_fnApplyPnpChanges
,
3380 INetCfgComponentControl_fnCancelChanges
3385 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3387 TcpipConfNotifyImpl
*This
;
3392 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3394 return E_OUTOFMEMORY
;
3397 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3398 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3400 This
->pUnknown
= NULL
;
3401 This
->pNComp
= NULL
;
3402 This
->pCurrentConfig
= NULL
;
3404 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3406 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3407 return E_NOINTERFACE
;
3410 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);