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 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pGwSettings
->szIP
));
785 if (pGwSettings
->Metric
)
787 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
788 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
789 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
793 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
794 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
795 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
800 if (LOWORD(wParam
) == IDC_USEMETRIC
)
802 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
804 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
805 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
806 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
810 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
811 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
815 else if (LOWORD(wParam
) == IDCANCEL
)
817 EndDialog(hwndDlg
, FALSE
);
820 else if (LOWORD(wParam
) == IDC_OK
)
822 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
824 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
825 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
827 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
828 find
.flags
= LVFI_STRING
;
829 find
.psz
= pGwSettings
->szIP
;
831 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
832 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
834 pGwSettings
->Metric
= 0;
837 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
839 EndDialog(hwndDlg
, TRUE
);
842 if (!pGwSettings
->bAdd
)
844 EndDialog(hwndDlg
, FALSE
);
847 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
853 lpnmipa
= (LPNMIPADDRESS
) lParam
;
854 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
856 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
858 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
859 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
868 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
874 ZeroMemory(&li
, sizeof(LVITEMW
));
877 li
.pszText
= pGwSettings
->szIP
;
880 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
882 li
.pszText
= szBuffer
;
886 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
889 pGwSettings
->Metric
= _wtoi(szBuffer
);
904 LPNMIPADDRESS lpnmipa
;
906 TcpipIpSettings
*pIpSettings
;
914 pIpSettings
= (TcpipIpSettings
*)lParam
;
915 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
917 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
918 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
919 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
920 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
921 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
922 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
923 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
924 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
926 if (pIpSettings
->bAdd
)
928 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
930 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
931 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
933 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
937 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
939 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
940 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
943 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pIpSettings
->szIP
));
944 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)GetIpAddressFromStringW(pIpSettings
->szMask
));
948 lpnmipa
= (LPNMIPADDRESS
) lParam
;
949 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
951 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
953 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
955 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
956 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
957 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
958 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
959 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
960 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
961 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
967 if (LOWORD(wParam
) == IDC_OK
)
969 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
970 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
971 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
973 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
974 find
.flags
= LVFI_STRING
;
975 find
.psz
= pIpSettings
->szIP
;
976 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
980 EndDialog(hwndDlg
, TRUE
);
983 else if (!pIpSettings
->bAdd
)
985 EndDialog(hwndDlg
, FALSE
);
988 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
991 else if (LOWORD(wParam
) == IDCANCEL
)
993 EndDialog(hwndDlg
, FALSE
);
1005 UINT Length
= wcslen(szName
);
1007 for(Index
= 0; Index
< Length
; Index
++)
1008 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
1023 WCHAR szBuffer
[100];
1024 TcpipSuffixSettings
* pSettings
;
1030 pSettings
= (TcpipSuffixSettings
*)lParam
;
1031 if (!pSettings
->bAdd
)
1033 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
1034 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1036 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1037 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1039 CoTaskMemFree(pSettings
->Suffix
);
1040 pSettings
->Suffix
= NULL
;
1044 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1046 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1047 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1050 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1053 if (LOWORD(wParam
) == IDCANCEL
)
1055 EndDialog(hwndDlg
, FALSE
);
1058 else if (LOWORD(wParam
) == IDC_OK
)
1060 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1063 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1064 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1065 if (pSettings
->Suffix
)
1067 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1068 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1070 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1071 CoTaskMemFree(pSettings
->Suffix
);
1075 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1077 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1078 CoTaskMemFree(pSettings
->Suffix
);
1081 EndDialog(hwndDlg
, TRUE
);
1093 GetSelectedItem(HWND hDlgCtrl
)
1096 UINT iItemCount
, iIndex
;
1098 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1102 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1104 ZeroMemory(&li
, sizeof(LVITEMW
));
1105 li
.mask
= LVIF_STATE
;
1106 li
.stateMask
= (UINT
)-1;
1108 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1110 if (li
.state
& LVIS_SELECTED
)
1119 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1123 ZeroMemory(&li
, sizeof(LVITEMW
));
1124 li
.mask
= LVIF_TEXT
;
1126 li
.pszText
= pIpSettings
->szIP
;
1129 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1132 ZeroMemory(&li
, sizeof(LVITEMW
));
1133 li
.mask
= LVIF_TEXT
;
1135 li
.pszText
= pIpSettings
->szMask
;
1139 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1143 DeleteItemFromList(HWND hDlgCtrl
)
1147 memset(&li
, 0x0, sizeof(LVITEMW
));
1148 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1151 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1156 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1161 GetIpAddressFromStringW(
1167 LPWSTR pLast
= szBuffer
;
1168 LPWSTR pNext
= szBuffer
;
1171 while((pNext
= wcschr(pNext
, L
'.')))
1175 dwIpAddr
|= (Val
<< Index
* 8);
1180 dwIpAddr
|= _wtoi(pLast
);
1186 GetIpAddressFromStringA(
1191 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1194 return GetIpAddressFromStringW(szIp
);
1201 FreeIPAddr(IP_ADDR
*pAddr
)
1210 pNext
= pAddr
->Next
;
1211 CoTaskMemFree(pAddr
);
1217 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1221 ZeroMemory(&li
, sizeof(LVITEMW
));
1222 li
.mask
= LVIF_TEXT
;
1223 li
.pszText
= szBuffer
;
1225 li
.iSubItem
= SubIndex
;
1226 li
.cchTextMax
= BufferSize
;
1227 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1233 TcpipConfNotifyImpl
* This
,
1239 IP_ADDR
*pCur
, *pLast
;
1241 iCount
= ListView_GetItemCount(hDlgCtrl
);
1248 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1250 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1252 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1255 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1257 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1258 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1260 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1262 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1264 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1266 pCur
->u
.Metric
= _wtoi(szBuffer
);
1272 This
->pCurrentConfig
->Ip
= pCur
;
1274 This
->pCurrentConfig
->Gw
= pCur
;
1296 TcpipConfNotifyImpl
* This
;
1297 LPPROPSHEETPAGE page
;
1299 WCHAR szBuffer
[200];
1309 page
= (LPPROPSHEETPAGE
)lParam
;
1310 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1311 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1312 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1315 lppsn
= (LPPSHNOTIFY
) lParam
;
1316 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1318 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1319 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1321 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1322 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, TRUE
);
1326 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1328 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1329 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1330 This
->pCurrentConfig
->Gw
= NULL
;
1331 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1332 This
->pCurrentConfig
->Ip
= NULL
;
1333 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1334 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1335 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, PSNRET_NOERROR
);
1340 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1342 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1343 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1345 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1347 else if (LOWORD(wParam
) == IDC_IPADD
)
1350 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1351 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1354 memset(&li
, 0x0, sizeof(LVITEMW
));
1355 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1356 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1357 li
.pszText
= Ip
.szIP
;
1358 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1361 li
.mask
= LVIF_TEXT
;
1363 li
.pszText
= Ip
.szMask
;
1364 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1367 EnableIpButtons(hwndDlg
);
1370 else if (LOWORD(wParam
) == IDC_IPMOD
)
1372 memset(&li
, 0x0, sizeof(LVITEMW
));
1373 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1376 /* no item selected */
1377 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1378 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1382 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1383 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1385 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1388 li
.mask
= LVIF_TEXT
;
1389 li
.pszText
= Ip
.szIP
;
1390 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1391 li
.pszText
= Ip
.szMask
;
1393 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1397 else if (LOWORD(wParam
) == IDC_IPDEL
)
1399 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1400 EnableIpButtons(hwndDlg
);
1403 else if (LOWORD(wParam
) == IDC_GWADD
)
1406 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1407 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1410 memset(&li
, 0x0, sizeof(LVITEMW
));
1411 li
.mask
= LVIF_TEXT
;
1412 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1413 li
.pszText
= Gw
.szIP
;
1414 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1419 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1421 li
.pszText
= szBuffer
;
1422 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1426 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1428 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1430 li
.pszText
= szBuffer
;
1431 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1436 EnableGwButtons(hwndDlg
);
1440 else if (LOWORD(wParam
) == IDC_GWMOD
)
1442 memset(&li
, 0x0, sizeof(LVITEMW
));
1443 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1446 /* no item selected */
1447 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1448 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1451 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1454 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1455 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1458 li
.mask
= LVIF_TEXT
;
1459 li
.pszText
= Gw
.szIP
;
1460 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1463 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1465 li
.pszText
= szBuffer
;
1466 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1470 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1472 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1474 li
.pszText
= szBuffer
;
1475 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1482 else if (LOWORD(wParam
) == IDC_GWDEL
)
1484 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1485 EnableGwButtons(hwndDlg
);
1501 TcpipDnsSettings
* pSettings
;
1502 WCHAR szBuffer
[100];
1504 LPNMIPADDRESS lpnmipa
;
1509 pSettings
= (TcpipDnsSettings
*)lParam
;
1510 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1511 if (!pSettings
->bAdd
)
1513 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1515 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1516 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1518 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1519 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1523 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1525 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1526 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1528 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1532 if (LOWORD(wParam
) == IDCANCEL
)
1534 EndDialog(hwndDlg
, FALSE
);
1537 else if (LOWORD(wParam
) == IDC_OK
)
1539 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1540 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1541 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1543 if (pSettings
->bAdd
)
1544 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1545 EndDialog(hwndDlg
, TRUE
);
1548 if (!pSettings
->bAdd
)
1550 EndDialog(hwndDlg
, FALSE
);
1553 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1558 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1559 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1561 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1563 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1564 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1575 InitializeTcpipAdvancedDNSDlg(
1577 TcpipConfNotifyImpl
* This
)
1579 WCHAR szBuffer
[200];
1580 LPWSTR pFirst
, pSep
, pList
;
1584 /* insert DNS addresses */
1585 pAddr
= This
->pCurrentConfig
->Ns
;
1588 dwIpAddr
= pAddr
->IpAddress
;
1589 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1590 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1592 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1593 pAddr
= pAddr
->Next
;
1595 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1597 if (!This
->pCurrentConfig
->pDNS
)
1600 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1601 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1603 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1605 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1606 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1608 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1609 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1611 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1612 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1614 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1616 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1617 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1622 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1628 pSep
= wcschr(pFirst
, L
',');
1632 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1638 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1643 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1644 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1645 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1650 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1652 LRESULT lResult
, lCount
;
1654 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1655 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1656 if (lResult
!= LB_ERR
)
1659 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1661 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1663 if (lResult
< lCount
-1)
1664 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1666 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1671 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1672 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1676 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1677 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1678 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1679 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1688 WCHAR szBuffer
[100];
1691 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1692 if (lResult
!= LB_ERR
)
1694 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1696 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1698 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1699 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1700 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1709 LRESULT lResult
, lCount
;
1711 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1712 if (lResult
!= LB_ERR
)
1714 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1715 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1716 if (lResult
+ 1 < lCount
)
1717 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1719 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1730 LPWSTR pszSearchList
, pItem
;
1732 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1733 if (!iCount
|| iCount
== LB_ERR
)
1734 return NULL
; //BUGBUG
1738 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1740 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1741 if (lResult
== LB_ERR
)
1744 dwSize
+= lResult
+ 1;
1747 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1751 pItem
= pszSearchList
;
1752 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1754 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1755 if (lResult
== LB_ERR
)
1757 CoTaskMemFree(pszSearchList
);
1760 dwSize
-= lResult
+ 1;
1761 pItem
+= wcslen(pItem
);
1762 if (iIndex
!= iCount
-1)
1769 return pszSearchList
;
1775 TcpipConfNotifyImpl
*This
)
1779 IP_ADDR
*pCur
, *pLast
;
1781 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1782 This
->pCurrentConfig
->Ns
= NULL
;
1784 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1785 if (!iCount
|| iCount
== LB_ERR
)
1791 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1793 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1796 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1799 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1800 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1803 This
->pCurrentConfig
->Ns
= pCur
;
1810 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
1815 TcpipAdvancedDnsDlg(
1822 TcpipConfNotifyImpl
* This
;
1823 LPPROPSHEETPAGE page
;
1824 TcpipDnsSettings Dns
;
1825 LRESULT lIndex
, lLength
;
1826 TcpipSuffixSettings Suffix
;
1828 WCHAR szSuffix
[100];
1829 WCHAR szFormat
[200];
1830 WCHAR szBuffer
[300];
1836 page
= (LPPROPSHEETPAGE
)lParam
;
1837 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1838 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1839 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1840 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1841 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1844 lppsn
= (LPPSHNOTIFY
) lParam
;
1845 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1847 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1848 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1850 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1851 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, TRUE
);
1854 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1856 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1857 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1859 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1861 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1862 swprintf(szBuffer
, szFormat
, szSuffix
);
1863 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1864 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1866 szFormat
[0] = L
'\0';
1868 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1869 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, TRUE
);
1870 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1876 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1878 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1879 if (!This
->pCurrentConfig
->pDNS
)
1882 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1883 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1885 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1886 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1887 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1888 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1890 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1894 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1895 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1896 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1897 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1900 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1902 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1903 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1904 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1906 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1910 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1911 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1916 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1918 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1919 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1922 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1924 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1925 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1928 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1930 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1932 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1933 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1934 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1935 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1936 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1937 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1938 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1939 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1942 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1944 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1946 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1947 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1948 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1949 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1953 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1955 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1956 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1958 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1959 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1961 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1963 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1964 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1965 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1966 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1969 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1971 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1972 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1973 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1974 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1977 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1979 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1980 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1981 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1982 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1985 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1987 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1988 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1989 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1990 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1993 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1995 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1996 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1997 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1998 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2001 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
2003 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2004 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2005 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2006 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2009 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
2012 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
2013 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
2015 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
2016 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2020 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2022 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
2023 if (lIndex
!= LB_ERR
)
2026 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
2027 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
2028 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
2030 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
2031 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
2032 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
2033 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
2034 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2039 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
2042 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2043 Suffix
.Suffix
= NULL
;
2044 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2046 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2047 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2048 if (lIndex
!= LB_ERR
)
2049 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2050 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2051 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2052 CoTaskMemFree(Suffix
.Suffix
);
2056 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2058 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2059 if (lIndex
!= LB_ERR
)
2061 Suffix
.bAdd
= FALSE
;
2062 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2063 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2064 if (lLength
!= LB_ERR
)
2066 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2069 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2070 Suffix
.Suffix
[lLength
] = L
'\0';
2071 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2075 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2076 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2077 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2078 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2079 CoTaskMemFree(Suffix
.Suffix
);
2081 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2082 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2094 PropSheetProc(HWND hwndDlg
, UINT uMsg
, LPARAM lParam
)
2096 // NOTE: This callback is needed to set large icon correctly.
2100 case PSCB_INITIALIZED
:
2102 hIcon
= LoadIconW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDI_NETWORK
));
2103 SendMessageW(hwndDlg
, WM_SETICON
, ICON_BIG
, (LPARAM
)hIcon
);
2111 LaunchAdvancedTcpipSettings(
2113 TcpipConfNotifyImpl
* This
)
2115 PROPSHEETHEADERW pinfo
;
2116 HPROPSHEETPAGE hppages
[3];
2117 WCHAR szBuffer
[100];
2119 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2120 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2121 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2124 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2125 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2127 szBuffer
[0] = L
'\0';
2129 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2130 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2131 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
|
2132 PSH_USEICONID
| PSH_USECALLBACK
;
2133 pinfo
.u3
.phpage
= hppages
;
2135 pinfo
.hwndParent
= hwndDlg
;
2136 pinfo
.hInstance
= netcfgx_hInstance
;
2137 pinfo
.pszCaption
= szBuffer
;
2138 pinfo
.u
.pszIcon
= MAKEINTRESOURCEW(IDI_NETWORK
);
2139 pinfo
.pfnCallback
= PropSheetProc
;
2141 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2142 PropertySheetW(&pinfo
);
2144 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2145 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2165 AddAlternativeDialog(
2167 TcpipConfNotifyImpl
* This
)
2169 HPROPSHEETPAGE hpage
;
2171 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2175 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2179 StoreTcpipBasicSettings(
2181 TcpipConfNotifyImpl
* This
,
2186 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2188 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2189 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2193 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2194 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2198 if (!This
->pCurrentConfig
->Ip
)
2200 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2201 if (!This
->pCurrentConfig
->Ip
)
2202 return E_OUTOFMEMORY
;
2203 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2205 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2207 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2210 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2211 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2213 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2214 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2215 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2216 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2217 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2218 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2220 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2224 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2228 /* store subnetmask */
2229 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2231 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2233 if (!This
->pCurrentConfig
->Gw
)
2235 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2236 if (!This
->pCurrentConfig
->Gw
)
2237 return E_OUTOFMEMORY
;
2238 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2240 /* store default gateway */
2241 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2245 if (This
->pCurrentConfig
->Gw
)
2247 IP_ADDR
* pNextGw
= This
->pCurrentConfig
->Gw
->Next
;
2248 CoTaskMemFree(This
->pCurrentConfig
->Gw
);
2249 This
->pCurrentConfig
->Gw
= pNextGw
;
2255 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2257 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2260 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2261 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2263 if (!This
->pCurrentConfig
->Ns
)
2265 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2266 if (!This
->pCurrentConfig
->Ns
)
2267 return E_OUTOFMEMORY
;
2268 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2270 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2272 else if (This
->pCurrentConfig
->Ns
)
2274 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2276 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2277 This
->pCurrentConfig
->Ns
= pTemp
;
2282 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2284 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2286 if (!This
->pCurrentConfig
->Ns
)
2288 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2289 if (!This
->pCurrentConfig
->Ns
)
2290 return E_OUTOFMEMORY
;
2291 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2293 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2295 else if (!This
->pCurrentConfig
->Ns
->Next
)
2297 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2298 if (!This
->pCurrentConfig
->Ns
->Next
)
2299 return E_OUTOFMEMORY
;
2300 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2301 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2305 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2310 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2312 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2314 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2315 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2316 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2320 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2321 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2328 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2334 InitializeTcpipBasicDlgCtrls(
2336 TcpipSettings
* pCurSettings
)
2338 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2339 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2340 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2341 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2343 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2344 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2345 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2346 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2348 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2349 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2350 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2351 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2353 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2354 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2355 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2356 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2358 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2359 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2360 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2361 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2363 if (pCurSettings
->DhcpEnabled
)
2365 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2366 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2367 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2368 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2369 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2373 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2375 if (pCurSettings
->Ip
)
2377 /* set current ip address */
2378 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2379 /* set current hostmask */
2380 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2382 if (pCurSettings
->Gw
&& pCurSettings
->Gw
->IpAddress
)
2384 /* set current gateway */
2385 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2388 if (pCurSettings
->AutoconfigActive
)
2390 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2391 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2392 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2396 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2397 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2398 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2399 if (pCurSettings
->Ns
)
2401 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2402 if (pCurSettings
->Ns
->Next
)
2404 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2408 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2413 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2414 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2423 IP_ADDR_STRING
* pSrc
,
2428 IP_ADDR_STRING
* pCurrent
;
2429 IP_ADDR
*pNew
, *pLast
;
2436 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2441 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2442 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2443 if (!pNew
->IpAddress
)
2445 CoTaskMemFree(pNew
);
2449 if (Type
== SUBMASK
)
2451 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2452 pNew
->NTEContext
= pCurrent
->Context
;
2454 else if (Type
== METRIC
)
2456 if (szMetric
&& szMetric
[0] != L
'\0')
2458 pNew
->u
.Metric
= _wtoi(szMetric
);
2459 szMetric
+= wcslen(szMetric
) + 1;
2469 pCurrent
= pCurrent
->Next
;
2487 TcpipConfNotifyImpl
* This
;
2488 LPPROPSHEETPAGE page
;
2489 LPNMIPADDRESS lpnmipa
;
2497 page
= (LPPROPSHEETPAGE
)lParam
;
2498 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2499 if (This
->pCurrentConfig
)
2500 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2501 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2504 lppsn
= (LPPSHNOTIFY
) lParam
;
2505 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2506 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2508 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2509 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2511 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2513 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2514 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2515 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2516 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2517 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2518 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2522 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2524 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2525 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2526 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, PSNRET_NOERROR
);
2528 SetWindowLongPtr(hwndDlg
, DWLP_MSGRESULT
, PSNRET_INVALID
);
2534 if (HIWORD(wParam
) == BN_CLICKED
)
2536 switch (LOWORD(wParam
))
2539 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2541 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2542 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2543 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2544 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2545 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2546 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2547 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2548 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2549 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2553 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2555 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2556 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2557 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2558 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2559 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2561 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2563 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2564 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2565 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2566 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2567 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2571 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2573 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2574 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2575 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2576 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2577 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2581 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2583 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2584 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2585 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2589 LaunchAdvancedTcpipSettings(hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2601 /***************************************************************
2602 * INetCfgComponentPropertyUi interface
2607 INetCfgComponentPropertyUi_fnQueryInterface(
2608 INetCfgComponentPropertyUi
* iface
,
2613 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2618 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2619 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2622 INetCfgComponentPropertyUi_AddRef(iface
);
2625 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2627 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2628 INetCfgComponentPropertyUi_AddRef(iface
);
2632 //StringFromCLSID(iid, &pStr);
2633 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2634 //CoTaskMemFree(pStr);
2636 return E_NOINTERFACE
;
2642 INetCfgComponentPropertyUi_fnAddRef(
2643 INetCfgComponentPropertyUi
* iface
)
2645 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2646 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2653 INetCfgComponentPropertyUi_fnRelease(
2654 INetCfgComponentPropertyUi
* iface
)
2656 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2657 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2661 CoTaskMemFree(This
);
2668 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2669 INetCfgComponentPropertyUi
* iface
,
2670 IUnknown
*pUnkReserved
)
2672 INetLanConnectionUiInfo
* pLanInfo
;
2674 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2676 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2680 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2683 // check if tcpip is enabled on that binding */
2684 IUnknown_Release(pUnkReserved
);
2690 INetCfgComponentPropertyUi_fnSetContext(
2691 INetCfgComponentPropertyUi
* iface
,
2692 IUnknown
*pUnkReserved
)
2694 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2696 if (!iface
|| !pUnkReserved
)
2699 This
->pUnknown
= pUnkReserved
;
2705 TcpipConfNotifyImpl
* This
)
2708 WCHAR szBuffer
[200];
2713 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2714 if (!This
->pCurrentConfig
->pDNS
)
2717 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2719 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2722 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2723 CoTaskMemFree(pStr
);
2724 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2726 dwSize
= sizeof(DWORD
);
2727 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2728 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2730 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
);
2731 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
, &dwSize
);
2736 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2738 dwSize
= sizeof(DWORD
);
2739 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2742 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2744 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2745 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2747 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2749 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2750 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2760 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2765 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2768 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2772 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2774 CoTaskMemFree(pData
);
2783 TcpipConfNotifyImpl
* This
)
2786 TcpFilterSettings
*pFilter
;
2787 WCHAR szBuffer
[200];
2789 DWORD dwVal
, dwSize
;
2791 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2795 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2796 This
->pCurrentConfig
->pFilter
= pFilter
;
2799 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2801 dwSize
= sizeof(DWORD
);
2802 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2803 pFilter
->EnableSecurityFilters
= dwVal
;
2808 pFilter
->EnableSecurityFilters
= FALSE
;
2811 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2814 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2815 CoTaskMemFree(pStr
);
2816 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2820 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2821 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2822 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2829 Initialize(TcpipConfNotifyImpl
* This
)
2831 DWORD dwSize
, Status
;
2833 IP_ADAPTER_INFO
* pCurrentAdapter
;
2834 IP_ADAPTER_INFO
* pInfo
;
2835 PIP_PER_ADAPTER_INFO pPerInfo
;
2836 IP_PER_ADAPTER_INFO Info
;
2840 TcpipSettings
* pCurSettings
;
2843 if (This
->pCurrentConfig
)
2846 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2852 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2854 CoTaskMemFree(pStr
);
2858 pInfo
= CoTaskMemAlloc(dwSize
);
2861 CoTaskMemFree(pStr
);
2865 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2867 CoTaskMemFree(pStr
);
2868 CoTaskMemFree(pInfo
);
2872 pCurrentAdapter
= pInfo
;
2874 while(pCurrentAdapter
)
2876 szBuffer
[0] = L
'\0';
2877 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2879 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2881 if (!_wcsicmp(szBuffer
, pStr
))
2886 pCurrentAdapter
= pCurrentAdapter
->Next
;
2888 CoTaskMemFree(pStr
);
2892 CoTaskMemFree(pInfo
);
2896 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2899 CoTaskMemFree(pInfo
);
2903 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2904 This
->pCurrentConfig
= pCurSettings
;
2905 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2906 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2908 if (!pCurrentAdapter
->DhcpEnabled
)
2910 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2911 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2914 uLength
= sizeof(IP_PER_ADAPTER_INFO
);
2915 ZeroMemory(&Info
, sizeof(IP_PER_ADAPTER_INFO
));
2917 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, &Info
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2919 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2922 Status
= GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
);
2923 if (Status
== NOERROR
)
2925 if (!pPerInfo
->AutoconfigActive
)
2927 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2929 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2931 CoTaskMemFree(pPerInfo
);
2936 if (!Info
.AutoconfigActive
)
2938 CopyIpAddrString(&Info
.DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2940 pCurSettings
->AutoconfigActive
= Info
.AutoconfigActive
;
2943 if (FAILED(LoadFilterSettings(This
)))
2946 if (FAILED(LoadDNSSettings(This
)))
2949 CoTaskMemFree(pInfo
);
2956 INetCfgComponentPropertyUi_fnMergePropPages(
2957 INetCfgComponentPropertyUi
* iface
,
2959 BYTE
**pahpspPrivate
,
2962 LPCWSTR
*pszStartPage
)
2964 HPROPSHEETPAGE
* hppages
;
2967 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2969 hr
= Initialize(This
);
2973 if (This
->pCurrentConfig
->DhcpEnabled
)
2978 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2982 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2985 CoTaskMemFree(hppages
);
2990 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2993 DestroyPropertySheetPage(hppages
[0]);
2994 CoTaskMemFree(hppages
);
2999 *pahpspPrivate
= (BYTE
*)hppages
;
3000 *pcPages
= NumPages
;
3007 INetCfgComponentPropertyUi_fnValidateProperties(
3008 INetCfgComponentPropertyUi
* iface
,
3011 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
3017 INetCfgComponentPropertyUi_fnApplyProperties(
3018 INetCfgComponentPropertyUi
* iface
)
3020 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
3027 INetCfgComponentPropertyUi_fnCancelProperties(
3028 INetCfgComponentPropertyUi
* iface
)
3030 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
3034 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
3036 INetCfgComponentPropertyUi_fnQueryInterface
,
3037 INetCfgComponentPropertyUi_fnAddRef
,
3038 INetCfgComponentPropertyUi_fnRelease
,
3039 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
3040 INetCfgComponentPropertyUi_fnSetContext
,
3041 INetCfgComponentPropertyUi_fnMergePropPages
,
3042 INetCfgComponentPropertyUi_fnValidateProperties
,
3043 INetCfgComponentPropertyUi_fnApplyProperties
,
3044 INetCfgComponentPropertyUi_fnCancelProperties
3047 /***************************************************************
3048 * INetCfgComponentControl interface
3053 INetCfgComponentControl_fnQueryInterface(
3054 INetCfgComponentControl
* iface
,
3058 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3059 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
3064 INetCfgComponentControl_fnAddRef(
3065 INetCfgComponentControl
* iface
)
3067 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3068 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
3073 INetCfgComponentControl_fnRelease(
3074 INetCfgComponentControl
* iface
)
3076 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3077 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3082 INetCfgComponentControl_fnInitialize(
3083 INetCfgComponentControl
* iface
,
3084 INetCfgComponent
*pIComp
,
3088 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3090 This
->pNCfg
= pINetCfg
;
3091 This
->pNComp
= pIComp
;
3098 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3101 DWORD dwSize
, dwIpAddr
;
3103 IP_ADDR
*pTemp
= pAddr
;
3111 dwIpAddr
= pTemp
->IpAddress
;
3112 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3113 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3114 }else if (Type
== SUBMASK
)
3116 dwIpAddr
= pTemp
->u
.Subnetmask
;
3117 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3118 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3120 else if (Type
== METRIC
)
3122 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3125 dwSize
+= wcslen(szBuffer
) + 1;
3126 pTemp
= pTemp
->Next
;
3132 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3141 dwIpAddr
= pTemp
->IpAddress
;
3142 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3143 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3144 }else if (Type
== SUBMASK
)
3146 dwIpAddr
= pTemp
->u
.Subnetmask
;
3147 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3148 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3150 else if (Type
== METRIC
)
3152 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3157 pStr
+= wcslen(pStr
);
3166 pStr
+= wcslen(pStr
) + 1;
3168 pTemp
= pTemp
->Next
;
3171 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3178 INetCfgComponentControl_fnApplyRegistryChanges(
3179 INetCfgComponentControl
* iface
)
3184 WCHAR szBuffer
[200];
3185 TcpipSettings
* pCurrentConfig
, *pOldConfig
;
3187 DWORD DhcpApiVersion
;
3189 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3191 pCurrentConfig
= This
->pCurrentConfig
;
3192 This
->pCurrentConfig
= NULL
;
3194 if (FAILED(Initialize(This
)))
3196 This
->pCurrentConfig
= pCurrentConfig
;
3199 pOldConfig
= This
->pCurrentConfig
;
3200 This
->pCurrentConfig
= pCurrentConfig
;
3202 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3205 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3207 if (pCurrentConfig
->pDNS
)
3209 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3210 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)pCurrentConfig
->pDNS
->szSearchList
,
3211 (wcslen(pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3213 if (pCurrentConfig
->pFilter
)
3215 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3216 (LPBYTE
)&pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3221 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3224 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3225 CoTaskMemFree(pStr
);
3227 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3229 if (pCurrentConfig
->pDNS
)
3231 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3232 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3233 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3234 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3237 if (pCurrentConfig
->pFilter
)
3239 if (pCurrentConfig
->pFilter
->szTCPAllowedPorts
)
3241 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3242 (LPBYTE
)pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3243 pCurrentConfig
->pFilter
->TCPSize
);
3245 if (pCurrentConfig
->pFilter
->szUDPAllowedPorts
)
3247 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3248 (LPBYTE
)pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3249 pCurrentConfig
->pFilter
->UDPSize
);
3251 if (pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
)
3253 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3254 (LPBYTE
)pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3255 pCurrentConfig
->pFilter
->IPSize
);
3259 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3260 if (pCurrentConfig
->DhcpEnabled
)
3262 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3263 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3264 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3265 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3266 if (!pOldConfig
->DhcpEnabled
)
3268 /* Delete this adapter's current IP address */
3269 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3271 /* Delete all default routes for this adapter */
3273 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3276 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3277 if (pIpForwardTable
)
3279 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3281 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3283 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3284 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3286 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3290 CoTaskMemFree(pIpForwardTable
);
3297 /* Open the DHCP API if DHCP is enabled */
3298 if (pOldConfig
->DhcpEnabled
&& DhcpCApiInitialize(&DhcpApiVersion
) == NO_ERROR
)
3300 /* We have to tell DHCP about this */
3301 DhcpStaticRefreshParams(pCurrentConfig
->Index
,
3302 htonl(pCurrentConfig
->Ip
->IpAddress
),
3303 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
));
3310 /* Delete this adapter's current static IP address */
3311 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3313 /* Add the static IP address via the standard IPHLPAPI function */
3314 AddIPAddress(htonl(pCurrentConfig
->Ip
->IpAddress
),
3315 htonl(pCurrentConfig
->Ip
->u
.Subnetmask
),
3316 pCurrentConfig
->Index
,
3317 &pCurrentConfig
->Ip
->NTEContext
,
3321 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3324 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3325 CoTaskMemFree(pStr
);
3328 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3331 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3332 CoTaskMemFree(pStr
);
3335 /* Delete all default routes for this adapter */
3337 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3340 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3341 if (pIpForwardTable
)
3343 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3345 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3347 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
&&
3348 pIpForwardTable
->table
[Index
].dwForwardDest
== 0)
3350 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3354 CoTaskMemFree(pIpForwardTable
);
3358 if (pCurrentConfig
->Gw
)
3360 MIB_IPFORWARDROW RouterMib
;
3361 ZeroMemory(&RouterMib
, sizeof(MIB_IPFORWARDROW
));
3363 RouterMib
.dwForwardMetric1
= 1;
3364 RouterMib
.dwForwardIfIndex
= pOldConfig
->Index
;
3365 RouterMib
.dwForwardNextHop
= htonl(pCurrentConfig
->Gw
->IpAddress
);
3368 // add multiple gw addresses when required
3370 if (CreateIpForwardEntry(&RouterMib
) == NO_ERROR
)
3372 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3375 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3376 CoTaskMemFree(pStr
);
3379 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3382 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3383 CoTaskMemFree(pStr
);
3389 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3390 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", sizeof(WCHAR
) * 2);
3394 if (!pCurrentConfig
->Ns
|| pCurrentConfig
->AutoconfigActive
)
3396 RegDeleteValueW(hKey
, L
"NameServer");
3400 pStr
= CreateMultiSzString(pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3403 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3404 //RegDeleteValueW(hKey, L"DhcpNameServer");
3405 CoTaskMemFree(pStr
);
3416 INetCfgComponentControl_fnApplyPnpChanges(
3417 INetCfgComponentControl
* iface
,
3418 INetCfgPnpReconfigCallback
*pICallback
)
3420 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3426 INetCfgComponentControl_fnCancelChanges(
3427 INetCfgComponentControl
* iface
)
3429 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3433 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3435 INetCfgComponentControl_fnQueryInterface
,
3436 INetCfgComponentControl_fnAddRef
,
3437 INetCfgComponentControl_fnRelease
,
3438 INetCfgComponentControl_fnInitialize
,
3439 INetCfgComponentControl_fnApplyRegistryChanges
,
3440 INetCfgComponentControl_fnApplyPnpChanges
,
3441 INetCfgComponentControl_fnCancelChanges
3446 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3448 TcpipConfNotifyImpl
*This
;
3453 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3455 return E_OUTOFMEMORY
;
3458 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3459 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3461 This
->pUnknown
= NULL
;
3462 This
->pNComp
= NULL
;
3463 This
->pCurrentConfig
= NULL
;
3465 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3467 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3468 return E_NOINTERFACE
;
3471 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);