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
);
126 UINT
GetIpAddressFromStringW(WCHAR
*szBuffer
);
129 DisplayError(UINT ResTxt
, UINT ResTitle
, UINT Type
)
134 if (LoadStringW(netcfgx_hInstance
, ResTxt
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
135 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
139 if (LoadStringW(netcfgx_hInstance
, ResTitle
, szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
140 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = L
'\0';
144 MessageBoxW(NULL
, szBuffer
, szTitle
, Type
);
148 /***************************************************************
149 * TCP/IP Filter Dialog
162 TcpipPortSettings
* pPort
;
171 pPort
= (TcpipPortSettings
*)lParam
;
172 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pPort
);
173 if (LoadStringW(netcfgx_hInstance
, pPort
->ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
175 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
176 SendDlgItemMessageW(hwndDlg
, IDC_PORT_DESC
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
179 if (pPort
->MaxNum
== 65536)
180 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 5, 0);
182 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 3, 0);
186 if (LOWORD(wParam
) == IDCANCEL
)
188 EndDialog(hwndDlg
, FALSE
);
191 else if (LOWORD(wParam
) == IDC_OK
)
193 pPort
= (TcpipPortSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
194 Num
= GetDlgItemInt(hwndDlg
, IDC_PORT_VAL
, NULL
, TRUE
);
195 if (Num
> pPort
->MaxNum
|| Num
== 0)
197 if (pPort
->MaxNum
== 65536)
198 DisplayError(IDS_PORT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
200 DisplayError(IDS_PROT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
202 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
205 if (GetWindowTextW(GetDlgItem(hwndDlg
, IDC_PORT_VAL
), szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
207 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
208 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
209 find
.flags
= LVFI_STRING
;
211 if (SendMessageW(pPort
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
213 ZeroMemory(&li
, sizeof(LVITEMW
));
215 li
.iItem
= ListView_GetItemCount(pPort
->hDlgCtrl
);
216 li
.pszText
= szBuffer
;
217 SendMessageW(pPort
->hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
218 EndDialog(hwndDlg
, TRUE
);
221 DisplayError(IDS_DUP_NUMBER
, IDS_PROT_RANGE
, MB_ICONWARNING
);
222 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
231 InitFilterListBox(LPWSTR pData
, HWND hwndDlg
, HWND hDlgCtrl
, UINT AllowButton
, UINT RestrictButton
, UINT AddButton
, UINT DelButton
)
237 if (!pData
|| !_wtoi(pData
))
239 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
240 EnableWindow(GetDlgItem(hwndDlg
, AddButton
), FALSE
);
241 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
246 memset(&li
, 0x0, sizeof(LVITEMW
));
254 SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
256 pCur
+= wcslen(pCur
) + 1;
260 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
262 SendDlgItemMessageW(hwndDlg
, RestrictButton
, BM_SETCHECK
, BST_CHECKED
, 0);
276 iCount
= ListView_GetItemCount(hDlgCtrl
);
279 pData
= (LPWSTR
)CoTaskMemAlloc(3 * sizeof(WCHAR
));
285 *Size
= 3 * sizeof(WCHAR
);
289 pData
= CoTaskMemAlloc((6 * iCount
+ 1) * sizeof(WCHAR
));
295 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
297 ZeroMemory(&li
, sizeof(LVITEMW
));
300 li
.pszText
= szBuffer
;
301 li
.cchTextMax
= sizeof(szBuffer
) /sizeof(WCHAR
);
302 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
304 wcscpy(pCur
, szBuffer
);
305 dwSize
+= wcslen(szBuffer
) + 1;
306 pCur
+= wcslen(szBuffer
) + 1;
310 *Size
= (dwSize
+1) * sizeof(WCHAR
);
315 StoreTcpipFilterSettings(
318 TcpFilterSettings
* pFilter
;
320 pFilter
= CoTaskMemAlloc(sizeof(TcpFilterSettings
));
324 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
325 pFilter
->EnableSecurityFilters
= TRUE
;
327 pFilter
->EnableSecurityFilters
= FALSE
;
329 pFilter
->szTCPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), &pFilter
->TCPSize
);
330 pFilter
->szUDPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), &pFilter
->UDPSize
);
331 pFilter
->szRawIPAllowedProtocols
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_IP_LIST
), &pFilter
->IPSize
);
344 TcpipPortSettings Port
;
346 Port
.MaxNum
= MaxItem
;
347 Port
.hDlgCtrl
= hDlgCtrl
;
350 DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIP_PORT_DLG
), hwndDlg
, TcpipFilterPortDlg
, (LPARAM
)&Port
);
358 INT iIndex
= GetSelectedItem(hDlgCtrl
);
362 (void)ListView_DeleteItem(hDlgCtrl
, iIndex
);
365 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONWARNING
);
370 TcpipFilterSettingsDlg(
377 TcpipConfNotifyImpl
*pContext
;
378 TcpFilterSettings
*pFilter
;
383 pContext
= (TcpipConfNotifyImpl
*)lParam
;
384 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDS_TCP_PORTS
, 0, 100);
385 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDS_UDP_PORTS
, 0, 100);
386 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDS_IP_PROTO
, 0, 100);
387 if (pContext
->pCurrentConfig
->pFilter
)
389 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDC_TCP_ALLOW_ALL
, IDC_TCP_RESTRICT
, IDC_TCP_ADD
, IDC_TCP_DEL
);
390 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDC_UDP_ALLOW_ALL
, IDC_UDP_RESTRICT
, IDC_UDP_ADD
, IDC_UDP_DEL
);
391 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDC_IP_ALLOW_ALL
, IDC_IP_RESTRICT
, IDC_IP_ADD
, IDC_IP_DEL
);
392 if (pContext
->pCurrentConfig
->pFilter
->EnableSecurityFilters
)
393 SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_SETCHECK
, BST_CHECKED
, 0);
395 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
398 if (HIWORD(wParam
) == BN_CLICKED
)
400 switch (LOWORD(wParam
))
402 case IDC_TCP_ALLOW_ALL
:
403 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
405 SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
406 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), FALSE
);
407 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), FALSE
);
408 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), FALSE
);
411 case IDC_TCP_RESTRICT
:
412 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
414 SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
415 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), TRUE
);
416 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), TRUE
);
417 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), TRUE
);
420 case IDC_UDP_ALLOW_ALL
:
421 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
423 SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
424 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), FALSE
);
425 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), FALSE
);
426 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), FALSE
);
429 case IDC_UDP_RESTRICT
:
430 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
432 SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
433 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), TRUE
);
434 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), TRUE
);
435 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), TRUE
);
438 case IDC_IP_ALLOW_ALL
:
439 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
441 SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
442 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), FALSE
);
443 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), FALSE
);
444 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), FALSE
);
447 case IDC_IP_RESTRICT
:
448 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
450 SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
451 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), TRUE
);
452 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), TRUE
);
453 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), TRUE
);
457 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
458 DisplayError(IDS_DISABLE_FILTER
, IDS_TCPIP
, MB_OK
);
463 switch(LOWORD(wParam
))
466 pContext
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
467 pFilter
= StoreTcpipFilterSettings(hwndDlg
);
470 if (pContext
->pCurrentConfig
->pFilter
)
472 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
);
473 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
);
474 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
);
475 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
);
477 pContext
->pCurrentConfig
->pFilter
= pFilter
;
479 EndDialog(hwndDlg
, (INT_PTR
)TRUE
);
482 EndDialog(hwndDlg
, FALSE
);
485 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), 65536, IDS_TCP_PORTS
);
488 DelItem(GetDlgItem(hwndDlg
, IDC_TCP_LIST
));
491 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), 65536, IDS_UDP_PORTS
);
494 DelItem(GetDlgItem(hwndDlg
, IDC_UDP_LIST
));
497 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), 256, IDS_IP_PROTO
);
500 DelItem(GetDlgItem(hwndDlg
, IDC_IP_LIST
));
514 InitializePropertySheetPage(LPWSTR resname
, DLGPROC dlgproc
, LPARAM lParam
, LPWSTR szTitle
)
516 PROPSHEETPAGEW ppage
;
518 memset(&ppage
, 0x0, sizeof(PROPSHEETPAGEW
));
519 ppage
.dwSize
= sizeof(PROPSHEETPAGEW
);
520 ppage
.dwFlags
= PSP_DEFAULT
;
521 ppage
.u
.pszTemplate
= resname
;
522 ppage
.pfnDlgProc
= dlgproc
;
523 ppage
.lParam
= lParam
;
524 ppage
.hInstance
= netcfgx_hInstance
;
527 ppage
.dwFlags
|= PSP_USETITLE
;
528 ppage
.pszTitle
= szTitle
;
530 return CreatePropertySheetPageW(&ppage
);
533 /***************************************************************
534 * TCP/IP Advanced Option Dialog
539 InitializeTcpipAdvancedOptDlg(
541 TcpipConfNotifyImpl
* This
)
545 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
547 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTER
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
549 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
550 if (SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_ADDSTRING
, 0, (LPARAM
)szText
) != LB_ERR
)
551 SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_SETCURSEL
, 0, 0);
554 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTERDESC
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
556 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
557 SendDlgItemMessageW(hwndDlg
, IDC_OPTDESC
, WM_SETTEXT
, 0, (LPARAM
)szText
);
572 TcpipConfNotifyImpl
* This
;
573 LPPROPSHEETPAGE page
;
578 page
= (LPPROPSHEETPAGE
)lParam
;
579 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
580 InitializeTcpipAdvancedOptDlg(hwndDlg
, This
);
583 if (LOWORD(wParam
) == IDC_OPTPROP
)
585 DialogBoxParamW(netcfgx_hInstance
,
586 MAKEINTRESOURCEW(IDD_TCPIP_FILTER_DLG
),
588 TcpipFilterSettingsDlg
,
589 (LPARAM
)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
597 InsertColumnToListView(
606 if (!LoadStringW(netcfgx_hInstance
, ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
609 memset(&lc
, 0, sizeof(LV_COLUMN
) );
610 lc
.mask
= LVCF_WIDTH
| LVCF_TEXT
| LVCF_SUBITEM
| LVCF_FMT
;
611 lc
.iSubItem
= SubItem
;
612 lc
.fmt
= LVCFMT_FIXED_WIDTH
;
614 lc
.cchTextMax
= wcslen(szBuffer
);
615 lc
.pszText
= szBuffer
;
617 (void)SendMessageW(hDlgCtrl
, LVM_INSERTCOLUMNW
, SubItem
, (LPARAM
)&lc
);
621 InsertIpAddressToListView(
633 ZeroMemory(&li
, sizeof(li
));
635 li
.iItem
= itemCount
;
637 dwIpAddr
= pAddr
->IpAddress
;
638 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
639 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
641 li
.pszText
= szBuffer
;
642 li
.iItem
= SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
647 dwIpAddr
= pAddr
->u
.Subnetmask
;
648 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
649 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
654 swprintf(szBuffer
, L
"%u", pAddr
->u
.Metric
);
656 LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
));
661 li
.pszText
= szBuffer
;
662 SendMessageW(hDlgCtrl
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
676 bEnable
= (ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) != 0);
678 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), bEnable
);
679 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), bEnable
);
689 bEnable
= (ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
)) != 0);
691 EnableWindow(GetDlgItem(hwndDlg
, IDC_GWMOD
), bEnable
);
692 EnableWindow(GetDlgItem(hwndDlg
, IDC_GWDEL
), bEnable
);
696 InitializeTcpipAdvancedIpDlg(
698 TcpipConfNotifyImpl
* This
)
705 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_IPADDR
, 0, 100);
706 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
707 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_SUBMASK
, 1, (rect
.right
- rect
.left
- 100));
709 if (This
->pCurrentConfig
->DhcpEnabled
)
711 if (LoadStringW(netcfgx_hInstance
, IDS_DHCPACTIVE
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
713 ZeroMemory(&li
, sizeof(LVITEMW
));
715 li
.pszText
= szBuffer
;
716 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
718 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADD
), FALSE
);
719 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), FALSE
);
720 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), FALSE
);
724 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
->pCurrentConfig
->Ip
, TRUE
);
725 EnableIpButtons(hwndDlg
);
728 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_GATEWAY
, 0, 100);
729 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
730 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_METRIC
, 1, (rect
.right
- rect
.left
- 100));
732 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
->pCurrentConfig
->Gw
, FALSE
);
733 EnableGwButtons(hwndDlg
);
735 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, EM_LIMITTEXT
, 4, 0);
749 TcpipGwSettings
*pGwSettings
;
751 LPNMIPADDRESS lpnmipa
;
757 pGwSettings
= (TcpipGwSettings
*)lParam
;
758 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
760 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
761 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
762 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
763 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
765 if (pGwSettings
->bAdd
)
767 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
769 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
770 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
772 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
773 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
777 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
779 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
780 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
783 if (pGwSettings
->szIP
)
784 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pGwSettings
->szIP
));
786 if (pGwSettings
->Metric
)
788 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
789 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
790 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
794 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
795 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
796 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
801 if (LOWORD(wParam
) == IDC_USEMETRIC
)
803 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
805 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
806 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
807 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
811 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
812 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
816 else if (LOWORD(wParam
) == IDCANCEL
)
818 EndDialog(hwndDlg
, FALSE
);
821 else if (LOWORD(wParam
) == IDC_OK
)
823 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
825 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
826 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
828 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
829 find
.flags
= LVFI_STRING
;
830 find
.psz
= pGwSettings
->szIP
;
832 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
833 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
835 pGwSettings
->Metric
= 0;
838 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
840 EndDialog(hwndDlg
, TRUE
);
843 if (!pGwSettings
->bAdd
)
845 EndDialog(hwndDlg
, FALSE
);
848 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
854 lpnmipa
= (LPNMIPADDRESS
) lParam
;
855 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
857 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
859 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
860 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
869 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
875 ZeroMemory(&li
, sizeof(LVITEMW
));
878 li
.pszText
= pGwSettings
->szIP
;
881 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
883 li
.pszText
= szBuffer
;
887 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
890 pGwSettings
->Metric
= _wtoi(szBuffer
);
905 LPNMIPADDRESS lpnmipa
;
907 TcpipIpSettings
*pIpSettings
;
915 pIpSettings
= (TcpipIpSettings
*)lParam
;
916 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
918 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
919 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
920 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
921 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
922 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
923 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
924 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
925 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
927 if (pIpSettings
->bAdd
)
929 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
931 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
932 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
934 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
938 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
940 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
941 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
944 if (pIpSettings
->szIP
)
945 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pIpSettings
->szIP
));
947 if (pIpSettings
->szMask
)
948 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pIpSettings
->szMask
));
952 lpnmipa
= (LPNMIPADDRESS
) lParam
;
953 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
955 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
957 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
959 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
960 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
961 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
962 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
963 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
964 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
965 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
971 if (LOWORD(wParam
) == IDC_OK
)
973 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
974 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
975 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
977 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
978 find
.flags
= LVFI_STRING
;
979 find
.psz
= pIpSettings
->szIP
;
980 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
984 EndDialog(hwndDlg
, TRUE
);
987 else if (!pIpSettings
->bAdd
)
989 EndDialog(hwndDlg
, FALSE
);
992 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
995 else if (LOWORD(wParam
) == IDCANCEL
)
997 EndDialog(hwndDlg
, FALSE
);
1009 UINT Length
= wcslen(szName
);
1011 for(Index
= 0; Index
< Length
; Index
++)
1012 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
1027 WCHAR szBuffer
[100];
1028 TcpipSuffixSettings
* pSettings
;
1034 pSettings
= (TcpipSuffixSettings
*)lParam
;
1035 if (!pSettings
->bAdd
)
1037 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
1038 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1040 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1041 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1043 CoTaskMemFree(pSettings
->Suffix
);
1044 pSettings
->Suffix
= NULL
;
1048 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1050 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1051 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1054 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1057 if (LOWORD(wParam
) == IDCANCEL
)
1059 EndDialog(hwndDlg
, FALSE
);
1062 else if (LOWORD(wParam
) == IDC_OK
)
1064 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1067 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1068 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1069 if (pSettings
->Suffix
)
1071 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1072 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1074 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1075 CoTaskMemFree(pSettings
->Suffix
);
1079 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1081 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1082 CoTaskMemFree(pSettings
->Suffix
);
1085 EndDialog(hwndDlg
, TRUE
);
1097 GetSelectedItem(HWND hDlgCtrl
)
1100 UINT iItemCount
, iIndex
;
1102 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1106 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1108 ZeroMemory(&li
, sizeof(LVITEMW
));
1109 li
.mask
= LVIF_STATE
;
1110 li
.stateMask
= (UINT
)-1;
1112 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1114 if (li
.state
& LVIS_SELECTED
)
1123 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1127 ZeroMemory(&li
, sizeof(LVITEMW
));
1128 li
.mask
= LVIF_TEXT
;
1130 li
.pszText
= pIpSettings
->szIP
;
1133 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1136 ZeroMemory(&li
, sizeof(LVITEMW
));
1137 li
.mask
= LVIF_TEXT
;
1139 li
.pszText
= pIpSettings
->szMask
;
1143 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1147 DeleteItemFromList(HWND hDlgCtrl
)
1151 memset(&li
, 0x0, sizeof(LVITEMW
));
1152 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1155 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1160 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1165 GetIpAddressFromStringW(
1171 LPWSTR pLast
= szBuffer
;
1172 LPWSTR pNext
= szBuffer
;
1175 while((pNext
= wcschr(pNext
, L
'.')))
1179 dwIpAddr
|= (Val
<< Index
* 8);
1184 dwIpAddr
|= _wtoi(pLast
);
1190 GetIpAddressFromStringA(
1195 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1198 return GetIpAddressFromStringW(szIp
);
1205 FreeIPAddr(IP_ADDR
*pAddr
)
1214 pNext
= pAddr
->Next
;
1215 CoTaskMemFree(pAddr
);
1221 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1225 ZeroMemory(&li
, sizeof(LVITEMW
));
1226 li
.mask
= LVIF_TEXT
;
1227 li
.pszText
= szBuffer
;
1229 li
.iSubItem
= SubIndex
;
1230 li
.cchTextMax
= BufferSize
;
1231 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1237 TcpipConfNotifyImpl
* This
,
1243 IP_ADDR
*pCur
, *pLast
;
1245 iCount
= ListView_GetItemCount(hDlgCtrl
);
1252 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1254 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1256 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1259 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1261 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1262 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1264 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1266 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1268 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1270 pCur
->u
.Metric
= _wtoi(szBuffer
);
1276 This
->pCurrentConfig
->Ip
= pCur
;
1278 This
->pCurrentConfig
->Gw
= pCur
;
1300 TcpipConfNotifyImpl
* This
;
1301 LPPROPSHEETPAGE page
;
1303 WCHAR szBuffer
[200];
1313 page
= (LPPROPSHEETPAGE
)lParam
;
1314 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1315 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1316 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1319 lppsn
= (LPPSHNOTIFY
) lParam
;
1320 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1322 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1323 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1325 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1326 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1330 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1332 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1333 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1334 This
->pCurrentConfig
->Gw
= NULL
;
1335 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1336 This
->pCurrentConfig
->Ip
= NULL
;
1337 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1338 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1339 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
1344 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1346 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1347 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1349 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1351 else if (LOWORD(wParam
) == IDC_IPADD
)
1354 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1355 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1358 memset(&li
, 0x0, sizeof(LVITEMW
));
1359 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1360 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1361 li
.pszText
= Ip
.szIP
;
1362 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1365 li
.mask
= LVIF_TEXT
;
1367 li
.pszText
= Ip
.szMask
;
1368 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1371 EnableIpButtons(hwndDlg
);
1374 else if (LOWORD(wParam
) == IDC_IPMOD
)
1376 memset(&li
, 0x0, sizeof(LVITEMW
));
1377 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1380 /* no item selected */
1381 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1382 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1386 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1387 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1389 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1392 li
.mask
= LVIF_TEXT
;
1393 li
.pszText
= Ip
.szIP
;
1394 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1395 li
.pszText
= Ip
.szMask
;
1397 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1401 else if (LOWORD(wParam
) == IDC_IPDEL
)
1403 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1404 EnableIpButtons(hwndDlg
);
1407 else if (LOWORD(wParam
) == IDC_GWADD
)
1410 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1411 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1414 memset(&li
, 0x0, sizeof(LVITEMW
));
1415 li
.mask
= LVIF_TEXT
;
1416 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1417 li
.pszText
= Gw
.szIP
;
1418 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1423 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1425 li
.pszText
= szBuffer
;
1426 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1430 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1432 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1434 li
.pszText
= szBuffer
;
1435 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1440 EnableGwButtons(hwndDlg
);
1444 else if (LOWORD(wParam
) == IDC_GWMOD
)
1446 memset(&li
, 0x0, sizeof(LVITEMW
));
1447 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1450 /* no item selected */
1451 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1452 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1455 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1458 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1459 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1462 li
.mask
= LVIF_TEXT
;
1463 li
.pszText
= Gw
.szIP
;
1464 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1467 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1469 li
.pszText
= szBuffer
;
1470 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1474 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1476 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1478 li
.pszText
= szBuffer
;
1479 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1486 else if (LOWORD(wParam
) == IDC_GWDEL
)
1488 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1489 EnableGwButtons(hwndDlg
);
1505 TcpipDnsSettings
* pSettings
;
1506 WCHAR szBuffer
[100];
1508 LPNMIPADDRESS lpnmipa
;
1513 pSettings
= (TcpipDnsSettings
*)lParam
;
1514 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1515 if (!pSettings
->bAdd
)
1517 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1519 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1520 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1522 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1523 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1527 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1529 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1530 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1532 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1536 if (LOWORD(wParam
) == IDCANCEL
)
1538 EndDialog(hwndDlg
, FALSE
);
1541 else if (LOWORD(wParam
) == IDC_OK
)
1543 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1544 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1545 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1547 if (pSettings
->bAdd
)
1548 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1549 EndDialog(hwndDlg
, TRUE
);
1552 if (!pSettings
->bAdd
)
1554 EndDialog(hwndDlg
, FALSE
);
1557 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1562 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1563 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1565 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1567 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1568 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1579 InitializeTcpipAdvancedDNSDlg(
1581 TcpipConfNotifyImpl
* This
)
1583 WCHAR szBuffer
[200];
1584 LPWSTR pFirst
, pSep
, pList
;
1588 /* insert DNS addresses */
1589 pAddr
= This
->pCurrentConfig
->Ns
;
1592 dwIpAddr
= pAddr
->IpAddress
;
1593 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1594 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1596 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1597 pAddr
= pAddr
->Next
;
1599 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1601 if (!This
->pCurrentConfig
->pDNS
)
1604 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1605 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1607 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1609 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1610 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1612 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1613 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1615 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1616 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1618 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1620 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1621 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1626 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1632 pSep
= wcschr(pFirst
, L
',');
1636 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1642 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1647 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1648 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1649 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1654 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1656 LRESULT lResult
, lCount
;
1658 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1659 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1660 if (lResult
!= LB_ERR
)
1663 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1665 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1667 if (lResult
< lCount
-1)
1668 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1670 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1675 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1676 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1680 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1681 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1682 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1683 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1692 WCHAR szBuffer
[100];
1695 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1696 if (lResult
!= LB_ERR
)
1698 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1700 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1702 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1703 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1704 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1713 LRESULT lResult
, lCount
;
1715 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1716 if (lResult
!= LB_ERR
)
1718 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1719 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1720 if (lResult
+ 1 < lCount
)
1721 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1723 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1734 LPWSTR pszSearchList
, pItem
;
1736 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1737 if (!iCount
|| iCount
== LB_ERR
)
1738 return NULL
; //BUGBUG
1742 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1744 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1745 if (lResult
== LB_ERR
)
1748 dwSize
+= lResult
+ 1;
1751 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1755 pItem
= pszSearchList
;
1756 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1758 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1759 if (lResult
== LB_ERR
)
1761 CoTaskMemFree(pszSearchList
);
1764 dwSize
-= lResult
+ 1;
1765 pItem
+= wcslen(pItem
);
1766 if (iIndex
!= iCount
-1)
1773 return pszSearchList
;
1779 TcpipConfNotifyImpl
*This
)
1783 IP_ADDR
*pCur
, *pLast
;
1785 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1786 This
->pCurrentConfig
->Ns
= NULL
;
1788 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1789 if (!iCount
|| iCount
== LB_ERR
)
1795 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1797 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1800 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1803 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1804 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1807 This
->pCurrentConfig
->Ns
= pCur
;
1814 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
1819 TcpipAdvancedDnsDlg(
1826 TcpipConfNotifyImpl
* This
;
1827 LPPROPSHEETPAGE page
;
1828 TcpipDnsSettings Dns
;
1829 LRESULT lIndex
, lLength
;
1830 TcpipSuffixSettings Suffix
;
1832 WCHAR szSuffix
[100];
1833 WCHAR szFormat
[200];
1834 WCHAR szBuffer
[300];
1840 page
= (LPPROPSHEETPAGE
)lParam
;
1841 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1842 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1843 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1844 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1845 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1848 lppsn
= (LPPSHNOTIFY
) lParam
;
1849 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1851 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1852 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1854 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1855 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1858 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1860 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1861 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1863 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1865 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1866 swprintf(szBuffer
, szFormat
, szSuffix
);
1867 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1868 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1870 szFormat
[0] = L
'\0';
1872 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1873 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1874 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1880 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1882 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1883 if (!This
->pCurrentConfig
->pDNS
)
1886 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1887 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1889 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1890 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1891 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1892 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1894 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1898 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1899 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1900 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1901 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1904 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1906 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1907 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1908 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1910 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1914 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1915 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1920 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1922 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1923 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1926 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1928 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1929 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1932 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1934 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1936 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1937 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1938 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1939 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1940 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1941 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1942 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1943 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1946 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1948 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1950 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1951 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1952 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1953 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1957 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1959 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1960 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1962 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1963 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1965 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1967 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1968 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1969 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1970 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1973 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1975 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1976 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1977 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1978 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1981 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1983 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1984 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1985 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1986 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1989 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1991 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1992 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1993 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1994 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1997 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1999 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
2000 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
2001 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
2002 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2005 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
2007 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2008 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2009 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2010 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2013 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
2016 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
2017 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
2019 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
2020 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2024 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2026 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
2027 if (lIndex
!= LB_ERR
)
2030 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
2031 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
2032 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
2034 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
2035 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
2036 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
2037 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
2038 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2043 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
2046 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2047 Suffix
.Suffix
= NULL
;
2048 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2050 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2051 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2052 if (lIndex
!= LB_ERR
)
2053 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2054 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2055 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2056 CoTaskMemFree(Suffix
.Suffix
);
2060 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2062 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2063 if (lIndex
!= LB_ERR
)
2065 Suffix
.bAdd
= FALSE
;
2066 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2067 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2068 if (lLength
!= LB_ERR
)
2070 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2073 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2074 Suffix
.Suffix
[lLength
] = L
'\0';
2075 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2079 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2080 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2081 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2082 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2083 CoTaskMemFree(Suffix
.Suffix
);
2085 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2086 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2098 LaunchAdvancedTcpipSettings(
2100 TcpipConfNotifyImpl
* This
)
2102 PROPSHEETHEADERW pinfo
;
2103 HPROPSHEETPAGE hppages
[3];
2104 WCHAR szBuffer
[100];
2106 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2107 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2108 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2111 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2112 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2114 szBuffer
[0] = L
'\0';
2116 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2117 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2118 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
;
2119 pinfo
.u3
.phpage
= hppages
;
2121 pinfo
.hwndParent
= hwndDlg
;
2122 pinfo
.pszCaption
= szBuffer
;
2124 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2125 PropertySheetW(&pinfo
);
2127 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2128 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2148 AddAlternativeDialog(
2150 TcpipConfNotifyImpl
* This
)
2152 HPROPSHEETPAGE hpage
;
2154 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2158 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2162 StoreTcpipBasicSettings(
2164 TcpipConfNotifyImpl
* This
,
2169 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2171 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2172 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2176 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2177 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2181 if (!This
->pCurrentConfig
->Ip
)
2183 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2184 if (!This
->pCurrentConfig
->Ip
)
2185 return E_OUTOFMEMORY
;
2186 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2188 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2190 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2193 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2194 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2196 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2197 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2198 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2199 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2200 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2201 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2203 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2207 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2211 /* store subnetmask */
2212 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2214 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2216 if (!This
->pCurrentConfig
->Gw
)
2218 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2219 if (!This
->pCurrentConfig
->Gw
)
2220 return E_OUTOFMEMORY
;
2221 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2223 /* store default gateway */
2224 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2228 if (This
->pCurrentConfig
->Gw
)
2230 IP_ADDR
* pNextGw
= This
->pCurrentConfig
->Gw
->Next
;
2231 CoTaskMemFree(This
->pCurrentConfig
->Gw
);
2232 This
->pCurrentConfig
->Gw
= pNextGw
;
2238 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2240 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2243 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2244 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2246 if (!This
->pCurrentConfig
->Ns
)
2248 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2249 if (!This
->pCurrentConfig
->Ns
)
2250 return E_OUTOFMEMORY
;
2251 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2253 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2255 else if (This
->pCurrentConfig
->Ns
)
2257 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2259 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2260 This
->pCurrentConfig
->Ns
= pTemp
;
2265 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2267 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2269 if (!This
->pCurrentConfig
->Ns
)
2271 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2272 if (!This
->pCurrentConfig
->Ns
)
2273 return E_OUTOFMEMORY
;
2274 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2276 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2278 else if (!This
->pCurrentConfig
->Ns
->Next
)
2280 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2281 if (!This
->pCurrentConfig
->Ns
->Next
)
2282 return E_OUTOFMEMORY
;
2283 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2284 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2288 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2293 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2295 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2297 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2298 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2299 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2303 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2304 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2311 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2317 InitializeTcpipBasicDlgCtrls(
2319 TcpipSettings
* pCurSettings
)
2321 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2322 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2323 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2324 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2326 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2327 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2328 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2329 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2331 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2332 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2333 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2334 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2336 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2337 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2338 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2339 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2341 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2342 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2343 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2344 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2346 if (pCurSettings
->DhcpEnabled
)
2348 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2349 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2350 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2351 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2352 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2356 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2358 if (pCurSettings
->Ip
)
2360 /* set current ip address */
2361 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2362 /* set current hostmask */
2363 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2365 if (pCurSettings
->Gw
&& pCurSettings
->Gw
->IpAddress
)
2367 /* set current gateway */
2368 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2371 if (pCurSettings
->AutoconfigActive
)
2373 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2374 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2375 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2379 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2380 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2381 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2382 if (pCurSettings
->Ns
)
2384 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2385 if (pCurSettings
->Ns
->Next
)
2387 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2391 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2396 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2397 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2406 IP_ADDR_STRING
* pSrc
,
2411 IP_ADDR_STRING
* pCurrent
;
2412 IP_ADDR
*pNew
, *pLast
;
2419 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2424 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2425 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2426 if (!pNew
->IpAddress
)
2428 CoTaskMemFree(pNew
);
2432 if (Type
== SUBMASK
)
2434 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2435 pNew
->NTEContext
= pCurrent
->Context
;
2437 else if (Type
== METRIC
)
2439 if (szMetric
&& szMetric
[0] != L
'\0')
2441 pNew
->u
.Metric
= _wtoi(szMetric
);
2442 szMetric
+= wcslen(szMetric
) + 1;
2452 pCurrent
= pCurrent
->Next
;
2470 TcpipConfNotifyImpl
* This
;
2471 LPPROPSHEETPAGE page
;
2472 LPNMIPADDRESS lpnmipa
;
2480 page
= (LPPROPSHEETPAGE
)lParam
;
2481 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2482 if (This
->pCurrentConfig
)
2483 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2484 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2487 lppsn
= (LPPSHNOTIFY
) lParam
;
2488 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2489 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2491 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2492 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2494 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2496 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2497 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2498 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2499 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2500 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2501 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2505 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2507 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2508 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2509 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
2511 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID
);
2517 if (HIWORD(wParam
) == BN_CLICKED
)
2519 switch (LOWORD(wParam
))
2522 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2524 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2525 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2526 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2527 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2528 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2529 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2530 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2531 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2532 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2536 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2538 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2539 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2540 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2541 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2542 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2544 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2546 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2547 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2548 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2549 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2550 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2554 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2556 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2557 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2558 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2559 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2560 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2564 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2566 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2567 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2568 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2572 LaunchAdvancedTcpipSettings(hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2584 /***************************************************************
2585 * INetCfgComponentPropertyUi interface
2590 INetCfgComponentPropertyUi_fnQueryInterface(
2591 INetCfgComponentPropertyUi
* iface
,
2596 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2601 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2602 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2605 INetCfgComponentPropertyUi_AddRef(iface
);
2608 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2610 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2611 INetCfgComponentPropertyUi_AddRef(iface
);
2615 //StringFromCLSID(iid, &pStr);
2616 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2617 //CoTaskMemFree(pStr);
2619 return E_NOINTERFACE
;
2625 INetCfgComponentPropertyUi_fnAddRef(
2626 INetCfgComponentPropertyUi
* iface
)
2628 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2629 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2636 INetCfgComponentPropertyUi_fnRelease(
2637 INetCfgComponentPropertyUi
* iface
)
2639 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2640 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2644 CoTaskMemFree(This
);
2651 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2652 INetCfgComponentPropertyUi
* iface
,
2653 IUnknown
*pUnkReserved
)
2655 INetLanConnectionUiInfo
* pLanInfo
;
2657 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2659 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2663 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2666 // check if tcpip is enabled on that binding */
2667 IUnknown_Release(pUnkReserved
);
2673 INetCfgComponentPropertyUi_fnSetContext(
2674 INetCfgComponentPropertyUi
* iface
,
2675 IUnknown
*pUnkReserved
)
2677 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2679 if (!iface
|| !pUnkReserved
)
2682 This
->pUnknown
= pUnkReserved
;
2688 TcpipConfNotifyImpl
* This
)
2691 WCHAR szBuffer
[200];
2696 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2697 if (!This
->pCurrentConfig
->pDNS
)
2700 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2702 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2705 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2706 CoTaskMemFree(pStr
);
2707 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2709 dwSize
= sizeof(DWORD
);
2710 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2711 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2713 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
);
2714 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
, &dwSize
);
2719 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2721 dwSize
= sizeof(DWORD
);
2722 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2725 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2727 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2728 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2730 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2732 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2733 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2743 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2748 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2751 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2755 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2757 CoTaskMemFree(pData
);
2766 TcpipConfNotifyImpl
* This
)
2769 TcpFilterSettings
*pFilter
;
2770 WCHAR szBuffer
[200];
2772 DWORD dwVal
, dwSize
;
2774 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2778 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2779 This
->pCurrentConfig
->pFilter
= pFilter
;
2782 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2784 dwSize
= sizeof(DWORD
);
2785 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2786 pFilter
->EnableSecurityFilters
= dwVal
;
2791 pFilter
->EnableSecurityFilters
= FALSE
;
2794 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2797 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2798 CoTaskMemFree(pStr
);
2799 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2803 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2804 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2805 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2812 Initialize(TcpipConfNotifyImpl
* This
)
2814 DWORD dwSize
, Status
;
2816 IP_ADAPTER_INFO
* pCurrentAdapter
;
2817 IP_ADAPTER_INFO
* pInfo
;
2818 PIP_PER_ADAPTER_INFO pPerInfo
;
2819 IP_PER_ADAPTER_INFO Info
;
2823 TcpipSettings
* pCurSettings
;
2826 if (This
->pCurrentConfig
)
2829 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2835 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2837 CoTaskMemFree(pStr
);
2841 pInfo
= CoTaskMemAlloc(dwSize
);
2844 CoTaskMemFree(pStr
);
2848 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2850 CoTaskMemFree(pStr
);
2851 CoTaskMemFree(pInfo
);
2855 pCurrentAdapter
= pInfo
;
2857 while(pCurrentAdapter
)
2859 szBuffer
[0] = L
'\0';
2860 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2862 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2864 if (!_wcsicmp(szBuffer
, pStr
))
2869 pCurrentAdapter
= pCurrentAdapter
->Next
;
2871 CoTaskMemFree(pStr
);
2875 CoTaskMemFree(pInfo
);
2879 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2882 CoTaskMemFree(pInfo
);
2886 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2887 This
->pCurrentConfig
= pCurSettings
;
2888 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2889 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2891 if (!pCurrentAdapter
->DhcpEnabled
)
2893 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2894 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2897 uLength
= sizeof(IP_PER_ADAPTER_INFO
);
2898 ZeroMemory(&Info
, sizeof(IP_PER_ADAPTER_INFO
));
2900 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, &Info
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2902 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2905 Status
= GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
);
2906 if (Status
== NOERROR
)
2908 if (!pPerInfo
->AutoconfigActive
)
2910 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2912 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2914 CoTaskMemFree(pPerInfo
);
2919 if (!Info
.AutoconfigActive
)
2921 CopyIpAddrString(&Info
.DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2923 pCurSettings
->AutoconfigActive
= Info
.AutoconfigActive
;
2926 if (FAILED(LoadFilterSettings(This
)))
2929 if (FAILED(LoadDNSSettings(This
)))
2932 CoTaskMemFree(pInfo
);
2939 INetCfgComponentPropertyUi_fnMergePropPages(
2940 INetCfgComponentPropertyUi
* iface
,
2942 BYTE
**pahpspPrivate
,
2945 LPCWSTR
*pszStartPage
)
2947 HPROPSHEETPAGE
* hppages
;
2950 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2952 hr
= Initialize(This
);
2956 if (This
->pCurrentConfig
->DhcpEnabled
)
2961 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2965 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2968 CoTaskMemFree(hppages
);
2973 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2976 DestroyPropertySheetPage(hppages
[0]);
2977 CoTaskMemFree(hppages
);
2982 *pahpspPrivate
= (BYTE
*)hppages
;
2983 *pcPages
= NumPages
;
2990 INetCfgComponentPropertyUi_fnValidateProperties(
2991 INetCfgComponentPropertyUi
* iface
,
2994 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
3000 INetCfgComponentPropertyUi_fnApplyProperties(
3001 INetCfgComponentPropertyUi
* iface
)
3003 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
3010 INetCfgComponentPropertyUi_fnCancelProperties(
3011 INetCfgComponentPropertyUi
* iface
)
3013 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
3017 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
3019 INetCfgComponentPropertyUi_fnQueryInterface
,
3020 INetCfgComponentPropertyUi_fnAddRef
,
3021 INetCfgComponentPropertyUi_fnRelease
,
3022 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
3023 INetCfgComponentPropertyUi_fnSetContext
,
3024 INetCfgComponentPropertyUi_fnMergePropPages
,
3025 INetCfgComponentPropertyUi_fnValidateProperties
,
3026 INetCfgComponentPropertyUi_fnApplyProperties
,
3027 INetCfgComponentPropertyUi_fnCancelProperties
3030 /***************************************************************
3031 * INetCfgComponentControl interface
3036 INetCfgComponentControl_fnQueryInterface(
3037 INetCfgComponentControl
* iface
,
3041 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3042 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
3047 INetCfgComponentControl_fnAddRef(
3048 INetCfgComponentControl
* iface
)
3050 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3051 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
3056 INetCfgComponentControl_fnRelease(
3057 INetCfgComponentControl
* iface
)
3059 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3060 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3065 INetCfgComponentControl_fnInitialize(
3066 INetCfgComponentControl
* iface
,
3067 INetCfgComponent
*pIComp
,
3071 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3073 This
->pNCfg
= pINetCfg
;
3074 This
->pNComp
= pIComp
;
3081 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3084 DWORD dwSize
, dwIpAddr
;
3086 IP_ADDR
*pTemp
= pAddr
;
3094 dwIpAddr
= pTemp
->IpAddress
;
3095 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3096 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3097 }else if (Type
== SUBMASK
)
3099 dwIpAddr
= pTemp
->u
.Subnetmask
;
3100 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3101 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3103 else if (Type
== METRIC
)
3105 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3108 dwSize
+= wcslen(szBuffer
) + 1;
3109 pTemp
= pTemp
->Next
;
3115 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3124 dwIpAddr
= pTemp
->IpAddress
;
3125 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3126 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3127 }else if (Type
== SUBMASK
)
3129 dwIpAddr
= pTemp
->u
.Subnetmask
;
3130 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3131 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3133 else if (Type
== METRIC
)
3135 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3140 pStr
+= wcslen(pStr
);
3149 pStr
+= wcslen(pStr
) + 1;
3151 pTemp
= pTemp
->Next
;
3154 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3161 INetCfgComponentControl_fnApplyRegistryChanges(
3162 INetCfgComponentControl
* iface
)
3167 WCHAR szBuffer
[200];
3168 TcpipSettings
* pCurrentConfig
, *pOldConfig
;
3170 DWORD DhcpApiVersion
;
3172 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3174 pCurrentConfig
= This
->pCurrentConfig
;
3175 This
->pCurrentConfig
= NULL
;
3177 if (FAILED(Initialize(This
)))
3179 This
->pCurrentConfig
= pCurrentConfig
;
3182 pOldConfig
= This
->pCurrentConfig
;
3183 This
->pCurrentConfig
= pCurrentConfig
;
3185 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3188 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3190 if (pCurrentConfig
->pDNS
)
3192 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3193 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)pCurrentConfig
->pDNS
->szSearchList
,
3194 (wcslen(pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3196 if (pCurrentConfig
->pFilter
)
3198 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3199 (LPBYTE
)&pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3204 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3207 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3208 CoTaskMemFree(pStr
);
3210 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3212 if (pCurrentConfig
->pDNS
)
3214 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3215 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3216 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3217 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3220 if (pCurrentConfig
->pFilter
)
3222 if (pCurrentConfig
->pFilter
->szTCPAllowedPorts
)
3224 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3225 (LPBYTE
)pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3226 pCurrentConfig
->pFilter
->TCPSize
);
3228 if (pCurrentConfig
->pFilter
->szUDPAllowedPorts
)
3230 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3231 (LPBYTE
)pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3232 pCurrentConfig
->pFilter
->UDPSize
);
3234 if (pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
)
3236 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3237 (LPBYTE
)pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3238 pCurrentConfig
->pFilter
->IPSize
);
3242 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3243 if (pCurrentConfig
->DhcpEnabled
)
3245 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3246 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3247 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3248 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3249 if (!pOldConfig
->DhcpEnabled
)
3251 /* Delete this adapter's current IP address */
3252 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3254 /* Delete all default routes for this adapter */
3256 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3259 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3260 if (pIpForwardTable
)
3262 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3264 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3266 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3267 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3269 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3273 CoTaskMemFree(pIpForwardTable
);
3280 /* Open the DHCP API if DHCP is enabled */
3281 if (pOldConfig
->DhcpEnabled
&& DhcpCApiInitialize(&DhcpApiVersion
) == NO_ERROR
)
3283 /* We have to tell DHCP about this */
3284 DhcpStaticRefreshParams(pCurrentConfig
->Index
,
3285 htonl(pCurrentConfig
->Ip
->IpAddress
),
3286 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
));
3293 /* Delete this adapter's current static IP address */
3294 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3296 /* Add the static IP address via the standard IPHLPAPI function */
3297 AddIPAddress(htonl(pCurrentConfig
->Ip
->IpAddress
),
3298 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
),
3299 pCurrentConfig
->Index
,
3300 &pCurrentConfig
->Ip
->NTEContext
,
3304 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3307 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3308 CoTaskMemFree(pStr
);
3311 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3314 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3315 CoTaskMemFree(pStr
);
3318 /* Delete all default routes for this adapter */
3320 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3323 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3324 if (pIpForwardTable
)
3326 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3328 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3330 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3331 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3333 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3337 CoTaskMemFree(pIpForwardTable
);
3341 if (pCurrentConfig
->Gw
)
3343 MIB_IPFORWARDROW RouterMib
;
3344 ZeroMemory(&RouterMib
, sizeof(MIB_IPFORWARDROW
));
3346 RouterMib
.dwForwardMetric1
= 1;
3347 RouterMib
.dwForwardIfIndex
= pOldConfig
->Index
;
3348 RouterMib
.dwForwardNextHop
= htonl(pCurrentConfig
->Gw
->IpAddress
);
3351 // add multiple gw addresses when required
3353 if (CreateIpForwardEntry(&RouterMib
) == NO_ERROR
)
3355 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3358 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3359 CoTaskMemFree(pStr
);
3362 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3365 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3366 CoTaskMemFree(pStr
);
3372 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3373 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", sizeof(WCHAR
) * 2);
3377 if (!pCurrentConfig
->Ns
|| pCurrentConfig
->AutoconfigActive
)
3379 RegDeleteValueW(hKey
, L
"NameServer");
3383 pStr
= CreateMultiSzString(pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3386 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3387 //RegDeleteValueW(hKey, L"DhcpNameServer");
3388 CoTaskMemFree(pStr
);
3399 INetCfgComponentControl_fnApplyPnpChanges(
3400 INetCfgComponentControl
* iface
,
3401 INetCfgPnpReconfigCallback
*pICallback
)
3403 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3409 INetCfgComponentControl_fnCancelChanges(
3410 INetCfgComponentControl
* iface
)
3412 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3416 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3418 INetCfgComponentControl_fnQueryInterface
,
3419 INetCfgComponentControl_fnAddRef
,
3420 INetCfgComponentControl_fnRelease
,
3421 INetCfgComponentControl_fnInitialize
,
3422 INetCfgComponentControl_fnApplyRegistryChanges
,
3423 INetCfgComponentControl_fnApplyPnpChanges
,
3424 INetCfgComponentControl_fnCancelChanges
3429 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3431 TcpipConfNotifyImpl
*This
;
3436 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3438 return E_OUTOFMEMORY
;
3441 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3442 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3444 This
->pUnknown
= NULL
;
3445 This
->pNComp
= NULL
;
3446 This
->pCurrentConfig
= NULL
;
3448 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3450 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3451 return E_NOINTERFACE
;
3454 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);