5 DWORD EnableSecurityFilters
;
6 LPWSTR szTCPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\TCPAllowedPorts
7 LPWSTR szUDPAllowedPorts
; // KEY: Tcpip\Parameter\{InstanceGuid}\UDPAllowedPorts
8 LPWSTR szRawIPAllowedProtocols
; // KEY: Tcpip\Parameter\{InstanceGuid}\RawIPAllowedProtocols
14 // KEY: Tcpip\Parameter\{InstanceGuid}\IpAddress | DhcpIpAddress
15 // KEY: Tcpip\Parameter\{InstanceGuid}\SubnetMask | DhcpSubnetMask
16 // KEY: Tcpip\Parameter\{InstanceGuid}\DefaultGateway | DhcpDefaultGateway
17 // KEY: Tcpip\Parameter\{InstanceGuid}\NameServer | DhcpNameServer
18 // KEY: Services\NetBT\Parameters\Interfaces\Tcpip_{INSTANCE_GUID}
22 DWORD RegisterAdapterName
;
23 DWORD RegistrationEnabled
;
24 DWORD UseDomainNameDevolution
;
27 }TcpipAdvancedDNSDlgSettings
;
29 typedef struct tagIP_ADDR
38 struct tagIP_ADDR
* Next
;
55 UINT AutoconfigActive
;
57 TcpFilterSettings
* pFilter
;
58 TcpipAdvancedDNSDlgSettings
* pDNS
;
63 const INetCfgComponentPropertyUi
* lpVtbl
;
64 const INetCfgComponentControl
* lpVtblCompControl
;
68 INetCfgComponent
* pNComp
;
69 TcpipSettings
*pCurrentConfig
;
70 CLSID NetCfgInstanceId
;
71 }TcpipConfNotifyImpl
, *LPTcpipConfNotifyImpl
;
101 }TcpipSuffixSettings
;
110 static __inline LPTcpipConfNotifyImpl
impl_from_INetCfgComponentControl(INetCfgComponentControl
*iface
)
112 return (TcpipConfNotifyImpl
*)((char *)iface
- FIELD_OFFSET(TcpipConfNotifyImpl
, lpVtblCompControl
));
115 INT
GetSelectedItem(HWND hDlgCtrl
);
116 HRESULT
InitializeTcpipBasicDlgCtrls(HWND hwndDlg
, TcpipSettings
* pCurSettings
);
117 VOID
InsertColumnToListView(HWND hDlgCtrl
, UINT ResId
, UINT SubItem
, UINT Size
);
118 INT_PTR
StoreTcpipBasicSettings(HWND hwndDlg
, TcpipConfNotifyImpl
* This
, BOOL bApply
);
119 HRESULT
Initialize(TcpipConfNotifyImpl
* This
);
122 DisplayError(UINT ResTxt
, UINT ResTitle
, UINT Type
)
127 if (LoadStringW(netcfgx_hInstance
, ResTxt
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
128 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
132 if (LoadStringW(netcfgx_hInstance
, ResTitle
, szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
133 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = L
'\0';
137 MessageBoxW(NULL
, szBuffer
, szTitle
, Type
);
141 /***************************************************************
142 * TCP/IP Filter Dialog
155 TcpipPortSettings
* pPort
;
164 pPort
= (TcpipPortSettings
*)lParam
;
165 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pPort
);
166 if (LoadStringW(netcfgx_hInstance
, pPort
->ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
168 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
169 SendDlgItemMessageW(hwndDlg
, IDC_PORT_DESC
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
172 if (pPort
->MaxNum
== 65536)
173 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 5, 0);
175 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 3, 0);
179 if (LOWORD(wParam
) == IDCANCEL
)
181 EndDialog(hwndDlg
, FALSE
);
184 else if (LOWORD(wParam
) == IDC_OK
)
186 pPort
= (TcpipPortSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
187 Num
= GetDlgItemInt(hwndDlg
, IDC_PORT_VAL
, NULL
, TRUE
);
188 if (Num
> pPort
->MaxNum
|| Num
== 0)
190 if (pPort
->MaxNum
== 65536)
191 DisplayError(IDS_PORT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
193 DisplayError(IDS_PROT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
195 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
198 if (GetWindowTextW(GetDlgItem(hwndDlg
, IDC_PORT_VAL
), szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
200 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
201 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
202 find
.flags
= LVFI_STRING
;
204 if (SendMessageW(pPort
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
206 ZeroMemory(&li
, sizeof(LVITEMW
));
208 li
.iItem
= ListView_GetItemCount(pPort
->hDlgCtrl
);
209 li
.pszText
= szBuffer
;
210 SendMessageW(pPort
->hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
211 EndDialog(hwndDlg
, TRUE
);
214 DisplayError(IDS_DUP_NUMBER
, IDS_PROT_RANGE
, MB_ICONWARNING
);
215 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
224 InitFilterListBox(LPWSTR pData
, HWND hwndDlg
, HWND hDlgCtrl
, UINT AllowButton
, UINT RestrictButton
, UINT AddButton
, UINT DelButton
)
230 if (!pData
|| !_wtoi(pData
))
232 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
233 EnableWindow(GetDlgItem(hwndDlg
, AddButton
), FALSE
);
234 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
239 memset(&li
, 0x0, sizeof(LVITEMW
));
247 SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
249 pCur
+= wcslen(pCur
) + 1;
253 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
255 SendDlgItemMessageW(hwndDlg
, RestrictButton
, BM_SETCHECK
, BST_CHECKED
, 0);
269 iCount
= ListView_GetItemCount(hDlgCtrl
);
272 pData
= (LPWSTR
)CoTaskMemAlloc(3 * sizeof(WCHAR
));
278 *Size
= 3 * sizeof(WCHAR
);
282 pData
= CoTaskMemAlloc((6 * iCount
+ 1) * sizeof(WCHAR
));
288 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
290 ZeroMemory(&li
, sizeof(LVITEMW
));
293 li
.pszText
= szBuffer
;
294 li
.cchTextMax
= sizeof(szBuffer
) /sizeof(WCHAR
);
295 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
297 wcscpy(pCur
, szBuffer
);
298 dwSize
+= wcslen(szBuffer
) + 1;
299 pCur
+= wcslen(szBuffer
) + 1;
303 *Size
= (dwSize
+1) * sizeof(WCHAR
);
308 StoreTcpipFilterSettings(
311 TcpFilterSettings
* pFilter
;
313 pFilter
= CoTaskMemAlloc(sizeof(TcpFilterSettings
));
317 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
318 pFilter
->EnableSecurityFilters
= TRUE
;
320 pFilter
->EnableSecurityFilters
= FALSE
;
322 pFilter
->szTCPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), &pFilter
->TCPSize
);
323 pFilter
->szUDPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), &pFilter
->UDPSize
);
324 pFilter
->szRawIPAllowedProtocols
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_IP_LIST
), &pFilter
->IPSize
);
337 TcpipPortSettings Port
;
339 Port
.MaxNum
= MaxItem
;
340 Port
.hDlgCtrl
= hDlgCtrl
;
343 DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIP_PORT_DLG
), hwndDlg
, TcpipFilterPortDlg
, (LPARAM
)&Port
);
351 INT iIndex
= GetSelectedItem(hDlgCtrl
);
355 (void)ListView_DeleteItem(hDlgCtrl
, iIndex
);
358 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONWARNING
);
363 TcpipFilterSettingsDlg(
370 TcpipConfNotifyImpl
*pContext
;
371 TcpFilterSettings
*pFilter
;
376 pContext
= (TcpipConfNotifyImpl
*)lParam
;
377 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDS_TCP_PORTS
, 0, 100);
378 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDS_UDP_PORTS
, 0, 100);
379 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDS_IP_PROTO
, 0, 100);
380 if (pContext
->pCurrentConfig
->pFilter
)
382 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDC_TCP_ALLOW_ALL
, IDC_TCP_RESTRICT
, IDC_TCP_ADD
, IDC_TCP_DEL
);
383 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDC_UDP_ALLOW_ALL
, IDC_UDP_RESTRICT
, IDC_UDP_ADD
, IDC_UDP_DEL
);
384 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDC_IP_ALLOW_ALL
, IDC_IP_RESTRICT
, IDC_IP_ADD
, IDC_IP_DEL
);
385 if (pContext
->pCurrentConfig
->pFilter
->EnableSecurityFilters
)
386 SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_SETCHECK
, BST_CHECKED
, 0);
388 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
391 if (HIWORD(wParam
) == BN_CLICKED
)
393 switch (LOWORD(wParam
))
395 case IDC_TCP_ALLOW_ALL
:
396 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
398 SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
399 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), FALSE
);
400 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), FALSE
);
401 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), FALSE
);
404 case IDC_TCP_RESTRICT
:
405 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
407 SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
408 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), TRUE
);
409 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), TRUE
);
410 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), TRUE
);
413 case IDC_UDP_ALLOW_ALL
:
414 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
416 SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
417 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), FALSE
);
418 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), FALSE
);
419 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), FALSE
);
422 case IDC_UDP_RESTRICT
:
423 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
425 SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
426 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), TRUE
);
427 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), TRUE
);
428 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), TRUE
);
431 case IDC_IP_ALLOW_ALL
:
432 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
434 SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
435 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), FALSE
);
436 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), FALSE
);
437 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), FALSE
);
440 case IDC_IP_RESTRICT
:
441 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
443 SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
444 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), TRUE
);
445 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), TRUE
);
446 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), TRUE
);
450 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
451 DisplayError(IDS_DISABLE_FILTER
, IDS_TCPIP
, MB_OK
);
456 switch(LOWORD(wParam
))
459 pContext
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
460 pFilter
= StoreTcpipFilterSettings(hwndDlg
);
463 if (pContext
->pCurrentConfig
->pFilter
)
465 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
);
466 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
);
467 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
);
468 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
);
470 pContext
->pCurrentConfig
->pFilter
= pFilter
;
472 EndDialog(hwndDlg
, (INT_PTR
)TRUE
);
475 EndDialog(hwndDlg
, FALSE
);
478 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), 65536, IDS_TCP_PORTS
);
481 DelItem(GetDlgItem(hwndDlg
, IDC_TCP_LIST
));
484 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), 65536, IDS_UDP_PORTS
);
487 DelItem(GetDlgItem(hwndDlg
, IDC_UDP_LIST
));
490 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), 256, IDS_IP_PROTO
);
493 DelItem(GetDlgItem(hwndDlg
, IDC_IP_LIST
));
507 InitializePropertySheetPage(LPWSTR resname
, DLGPROC dlgproc
, LPARAM lParam
, LPWSTR szTitle
)
509 PROPSHEETPAGEW ppage
;
511 memset(&ppage
, 0x0, sizeof(PROPSHEETPAGEW
));
512 ppage
.dwSize
= sizeof(PROPSHEETPAGEW
);
513 ppage
.dwFlags
= PSP_DEFAULT
;
514 ppage
.u
.pszTemplate
= resname
;
515 ppage
.pfnDlgProc
= dlgproc
;
516 ppage
.lParam
= lParam
;
517 ppage
.hInstance
= netcfgx_hInstance
;
520 ppage
.dwFlags
|= PSP_USETITLE
;
521 ppage
.pszTitle
= szTitle
;
523 return CreatePropertySheetPageW(&ppage
);
526 /***************************************************************
527 * TCP/IP Advanced Option Dialog
532 InitializeTcpipAdvancedOptDlg(
534 TcpipConfNotifyImpl
* This
)
538 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
540 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTER
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
542 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
543 if (SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_ADDSTRING
, 0, (LPARAM
)szText
) != LB_ERR
)
544 SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_SETCURSEL
, 0, 0);
547 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTERDESC
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
549 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
550 SendDlgItemMessageW(hwndDlg
, IDC_OPTDESC
, WM_SETTEXT
, 0, (LPARAM
)szText
);
565 TcpipConfNotifyImpl
* This
;
566 LPPROPSHEETPAGE page
;
572 page
= (LPPROPSHEETPAGE
)lParam
;
573 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
574 InitializeTcpipAdvancedOptDlg(hwndDlg
, This
);
577 if (LOWORD(wParam
) == IDC_OPTPROP
)
579 res
= DialogBoxParamW(netcfgx_hInstance
,
580 MAKEINTRESOURCEW(IDD_TCPIP_FILTER_DLG
),
582 TcpipFilterSettingsDlg
,
583 (LPARAM
)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
591 InsertColumnToListView(
600 if (!LoadStringW(netcfgx_hInstance
, ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
603 memset(&lc
, 0, sizeof(LV_COLUMN
) );
604 lc
.mask
= LVCF_WIDTH
| LVCF_TEXT
| LVCF_SUBITEM
| LVCF_FMT
;
605 lc
.iSubItem
= SubItem
;
606 lc
.fmt
= LVCFMT_FIXED_WIDTH
;
608 lc
.cchTextMax
= wcslen(szBuffer
);
609 lc
.pszText
= szBuffer
;
611 (void)SendMessageW(hDlgCtrl
, LVM_INSERTCOLUMNW
, SubItem
, (LPARAM
)&lc
);
615 InsertIpAddressToListView(
627 ZeroMemory(&li
, sizeof(li
));
629 li
.iItem
= itemCount
;
631 dwIpAddr
= pAddr
->IpAddress
;
632 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
633 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
635 li
.pszText
= szBuffer
;
636 li
.iItem
= SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
641 dwIpAddr
= pAddr
->u
.Subnetmask
;
642 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
643 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
648 swprintf(szBuffer
, L
"%u", pAddr
->u
.Metric
);
650 LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
));
655 li
.pszText
= szBuffer
;
656 SendMessageW(hDlgCtrl
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
665 InitializeTcpipAdvancedIpDlg(
667 TcpipConfNotifyImpl
* This
)
674 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_IPADDR
, 0, 100);
675 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
676 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_SUBMASK
, 1, (rect
.right
- rect
.left
- 100));
678 if (This
->pCurrentConfig
->DhcpEnabled
)
680 if (LoadStringW(netcfgx_hInstance
, IDS_DHCPACTIVE
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
682 ZeroMemory(&li
, sizeof(LVITEMW
));
684 li
.pszText
= szBuffer
;
685 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
687 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADD
), FALSE
);
688 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), FALSE
);
689 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), FALSE
);
693 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
->pCurrentConfig
->Ip
, TRUE
);
696 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_GATEWAY
, 0, 100);
697 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
698 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_METRIC
, 1, (rect
.right
- rect
.left
- 100));
700 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
->pCurrentConfig
->Gw
, FALSE
);
701 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, EM_LIMITTEXT
, 4, 0);
715 TcpipGwSettings
*pGwSettings
;
717 LPNMIPADDRESS lpnmipa
;
723 pGwSettings
= (TcpipGwSettings
*)lParam
;
724 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
725 if (pGwSettings
->bAdd
)
727 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
729 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
730 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
732 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
733 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
737 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
739 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
740 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
742 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pGwSettings
->szIP
);
743 if (pGwSettings
->Metric
)
745 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
746 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
747 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
751 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
752 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
753 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
756 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
757 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
758 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
759 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
762 if (LOWORD(wParam
) == IDC_USEMETRIC
)
764 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
766 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
767 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
768 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
772 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
773 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
777 else if (LOWORD(wParam
) == IDCANCEL
)
779 EndDialog(hwndDlg
, FALSE
);
782 else if (LOWORD(wParam
) == IDC_OK
)
784 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
786 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
787 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
789 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
790 find
.flags
= LVFI_STRING
;
791 find
.psz
= pGwSettings
->szIP
;
793 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
794 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
796 pGwSettings
->Metric
= 0;
799 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
801 EndDialog(hwndDlg
, TRUE
);
804 if (!pGwSettings
->bAdd
)
806 EndDialog(hwndDlg
, FALSE
);
809 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
815 lpnmipa
= (LPNMIPADDRESS
) lParam
;
816 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
818 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
820 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
821 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
830 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
836 ZeroMemory(&li
, sizeof(LVITEMW
));
839 li
.pszText
= pGwSettings
->szIP
;
842 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
844 li
.pszText
= szBuffer
;
848 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
851 pGwSettings
->Metric
= _wtoi(szBuffer
);
866 LPNMIPADDRESS lpnmipa
;
868 TcpipIpSettings
*pIpSettings
;
876 pIpSettings
= (TcpipIpSettings
*)lParam
;
877 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
879 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
880 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
881 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
882 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
883 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
884 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
885 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
886 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
888 if (pIpSettings
->bAdd
)
890 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
892 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
893 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
895 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
899 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
901 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
902 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
904 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szIP
);
905 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szMask
);
909 lpnmipa
= (LPNMIPADDRESS
) lParam
;
910 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
912 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
914 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
916 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
917 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
918 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
919 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
920 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
921 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
922 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
928 if (LOWORD(wParam
) == IDC_OK
)
930 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
931 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
932 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
934 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
935 find
.flags
= LVFI_STRING
;
936 find
.psz
= pIpSettings
->szIP
;
937 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
941 EndDialog(hwndDlg
, TRUE
);
944 else if (!pIpSettings
->bAdd
)
946 EndDialog(hwndDlg
, FALSE
);
949 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
952 else if (LOWORD(wParam
) == IDCANCEL
)
954 EndDialog(hwndDlg
, FALSE
);
966 UINT Length
= wcslen(szName
);
968 for(Index
= 0; Index
< Length
; Index
++)
969 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
985 TcpipSuffixSettings
* pSettings
;
991 pSettings
= (TcpipSuffixSettings
*)lParam
;
992 if (!pSettings
->bAdd
)
994 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
995 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
997 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
998 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1000 CoTaskMemFree(pSettings
->Suffix
);
1001 pSettings
->Suffix
= NULL
;
1005 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1007 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1008 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1011 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1014 if (LOWORD(wParam
) == IDCANCEL
)
1016 EndDialog(hwndDlg
, FALSE
);
1019 else if (LOWORD(wParam
) == IDC_OK
)
1021 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1024 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1025 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1026 if (pSettings
->Suffix
)
1028 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1029 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1031 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1032 CoTaskMemFree(pSettings
->Suffix
);
1036 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1038 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1039 CoTaskMemFree(pSettings
->Suffix
);
1042 EndDialog(hwndDlg
, TRUE
);
1054 GetSelectedItem(HWND hDlgCtrl
)
1057 UINT iItemCount
, iIndex
;
1059 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1063 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1065 ZeroMemory(&li
, sizeof(LVITEMW
));
1066 li
.mask
= LVIF_STATE
;
1067 li
.stateMask
= (UINT
)-1;
1069 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1071 if (li
.state
& LVIS_SELECTED
)
1080 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1084 ZeroMemory(&li
, sizeof(LVITEMW
));
1085 li
.mask
= LVIF_TEXT
;
1087 li
.pszText
= pIpSettings
->szIP
;
1090 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1093 ZeroMemory(&li
, sizeof(LVITEMW
));
1094 li
.mask
= LVIF_TEXT
;
1096 li
.pszText
= pIpSettings
->szMask
;
1100 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1104 DeleteItemFromList(HWND hDlgCtrl
)
1108 memset(&li
, 0x0, sizeof(LVITEMW
));
1109 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1112 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1117 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1122 GetIpAddressFromStringW(
1128 LPWSTR pLast
= szBuffer
;
1129 LPWSTR pNext
= szBuffer
;
1132 while((pNext
= wcschr(pNext
, L
'.')))
1136 dwIpAddr
|= (Val
<< Index
* 8);
1141 dwIpAddr
|= _wtoi(pLast
);
1147 GetIpAddressFromStringA(
1152 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1155 return GetIpAddressFromStringW(szIp
);
1162 FreeIPAddr(IP_ADDR
*pAddr
)
1171 pNext
= pAddr
->Next
;
1172 CoTaskMemFree(pAddr
);
1178 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1182 ZeroMemory(&li
, sizeof(LVITEMW
));
1183 li
.mask
= LVIF_TEXT
;
1184 li
.pszText
= szBuffer
;
1186 li
.iSubItem
= SubIndex
;
1187 li
.cchTextMax
= BufferSize
;
1188 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1194 TcpipConfNotifyImpl
* This
,
1200 IP_ADDR
*pCur
, *pLast
;
1202 iCount
= ListView_GetItemCount(hDlgCtrl
);
1209 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1211 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1213 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1216 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1218 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1219 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1221 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1223 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1225 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1227 pCur
->u
.Metric
= _wtoi(szBuffer
);
1233 This
->pCurrentConfig
->Ip
= pCur
;
1235 This
->pCurrentConfig
->Gw
= pCur
;
1257 TcpipConfNotifyImpl
* This
;
1258 LPPROPSHEETPAGE page
;
1260 WCHAR szBuffer
[200];
1270 page
= (LPPROPSHEETPAGE
)lParam
;
1271 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1272 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1273 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1276 lppsn
= (LPPSHNOTIFY
) lParam
;
1277 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1279 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1280 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1282 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1283 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1287 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1289 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1290 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1291 This
->pCurrentConfig
->Gw
= NULL
;
1292 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1293 This
->pCurrentConfig
->Ip
= NULL
;
1294 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1295 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1296 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
1301 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1303 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1304 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1306 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1308 else if (LOWORD(wParam
) == IDC_IPADD
)
1311 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1312 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1315 memset(&li
, 0x0, sizeof(LVITEMW
));
1316 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1317 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1318 li
.pszText
= Ip
.szIP
;
1319 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1322 li
.mask
= LVIF_TEXT
;
1324 li
.pszText
= Ip
.szMask
;
1325 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1329 else if (LOWORD(wParam
) == IDC_IPMOD
)
1331 memset(&li
, 0x0, sizeof(LVITEMW
));
1332 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1335 /* no item selected */
1336 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1337 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1341 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1342 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1344 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1347 li
.mask
= LVIF_TEXT
;
1348 li
.pszText
= Ip
.szIP
;
1349 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1350 li
.pszText
= Ip
.szMask
;
1352 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1356 else if (LOWORD(wParam
) == IDC_IPDEL
)
1358 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1361 else if (LOWORD(wParam
) == IDC_GWADD
)
1364 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1365 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1368 memset(&li
, 0x0, sizeof(LVITEMW
));
1369 li
.mask
= LVIF_TEXT
;
1370 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1371 li
.pszText
= Gw
.szIP
;
1372 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1377 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1379 li
.pszText
= szBuffer
;
1380 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1384 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1386 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1388 li
.pszText
= szBuffer
;
1389 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1396 else if (LOWORD(wParam
) == IDC_GWMOD
)
1398 memset(&li
, 0x0, sizeof(LVITEMW
));
1399 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1402 /* no item selected */
1403 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1404 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1407 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1410 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1411 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1414 li
.mask
= LVIF_TEXT
;
1415 li
.pszText
= Gw
.szIP
;
1416 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 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
);
1438 else if (LOWORD(wParam
) == IDC_GWDEL
)
1440 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1456 TcpipDnsSettings
* pSettings
;
1457 WCHAR szBuffer
[100];
1459 LPNMIPADDRESS lpnmipa
;
1464 pSettings
= (TcpipDnsSettings
*)lParam
;
1465 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1466 if (!pSettings
->bAdd
)
1468 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1470 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1471 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1473 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1474 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1478 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1480 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1481 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1483 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1487 if (LOWORD(wParam
) == IDCANCEL
)
1489 EndDialog(hwndDlg
, FALSE
);
1492 else if (LOWORD(wParam
) == IDC_OK
)
1494 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1495 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1496 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1498 if (pSettings
->bAdd
)
1499 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1500 EndDialog(hwndDlg
, TRUE
);
1503 if (!pSettings
->bAdd
)
1505 EndDialog(hwndDlg
, FALSE
);
1508 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1513 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1514 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1516 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1518 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1519 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1530 InitializeTcpipAdvancedDNSDlg(
1532 TcpipConfNotifyImpl
* This
)
1534 WCHAR szBuffer
[200];
1535 LPWSTR pFirst
, pSep
, pList
;
1539 /* insert DNS addresses */
1540 pAddr
= This
->pCurrentConfig
->Ns
;
1543 dwIpAddr
= pAddr
->IpAddress
;
1544 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1545 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1547 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1548 pAddr
= pAddr
->Next
;
1550 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1552 if (!This
->pCurrentConfig
->pDNS
)
1555 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1556 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1558 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1560 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1561 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1563 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1564 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1566 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1567 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1569 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1571 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1572 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1577 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1583 pSep
= wcschr(pFirst
, L
',');
1587 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1593 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1598 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1599 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1600 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1605 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1607 LRESULT lResult
, lCount
;
1609 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1610 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1611 if (lResult
!= LB_ERR
)
1614 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1616 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1618 if (lResult
< lCount
-1)
1619 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1621 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1626 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1627 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1631 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1632 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1633 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1634 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1643 WCHAR szBuffer
[100];
1646 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1647 if (lResult
!= LB_ERR
)
1649 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1651 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1653 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1654 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1655 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1664 LRESULT lResult
, lCount
;
1666 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1667 if (lResult
!= LB_ERR
)
1669 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1670 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1671 if (lResult
+ 1 < lCount
)
1672 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1674 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1685 LPWSTR pszSearchList
, pItem
;
1687 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1688 if (!iCount
|| iCount
== LB_ERR
)
1689 return NULL
; //BUGBUG
1693 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1695 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1696 if (lResult
== LB_ERR
)
1699 dwSize
+= lResult
+ 1;
1702 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1706 pItem
= pszSearchList
;
1707 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1709 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1710 if (lResult
== LB_ERR
)
1712 CoTaskMemFree(pszSearchList
);
1715 dwSize
-= lResult
+ 1;
1716 pItem
+= wcslen(pItem
);
1717 if (iIndex
!= iCount
-1)
1724 return pszSearchList
;
1730 TcpipConfNotifyImpl
*This
)
1734 IP_ADDR
*pCur
, *pLast
;
1736 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1737 This
->pCurrentConfig
->Ns
= NULL
;
1739 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1740 if (!iCount
|| iCount
== LB_ERR
)
1746 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1748 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1751 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1754 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1755 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1758 This
->pCurrentConfig
->Ns
= pCur
;
1765 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
1770 TcpipAdvancedDnsDlg(
1777 TcpipConfNotifyImpl
* This
;
1778 LPPROPSHEETPAGE page
;
1779 TcpipDnsSettings Dns
;
1780 LRESULT lIndex
, lLength
;
1781 TcpipSuffixSettings Suffix
;
1783 WCHAR szSuffix
[100];
1784 WCHAR szFormat
[200];
1785 WCHAR szBuffer
[300];
1791 page
= (LPPROPSHEETPAGE
)lParam
;
1792 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1793 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1794 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1795 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1796 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1799 lppsn
= (LPPSHNOTIFY
) lParam
;
1800 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1802 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1803 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1805 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1806 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1809 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1811 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1812 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1814 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1816 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1817 swprintf(szBuffer
, szFormat
, szSuffix
);
1818 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1819 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1821 szFormat
[0] = L
'\0';
1823 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1824 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1825 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1831 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1833 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1834 if (!This
->pCurrentConfig
->pDNS
)
1837 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1838 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1840 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1841 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1842 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1843 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1845 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1849 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1850 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1851 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1852 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1855 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1857 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1858 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1859 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1861 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1865 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1866 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1871 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1873 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1874 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1877 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1879 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1880 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1883 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1885 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1887 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1888 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1889 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1890 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1891 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1892 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1893 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1894 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1897 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1899 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1901 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1902 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1903 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1904 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1908 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1910 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1911 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1913 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1914 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1916 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1918 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1919 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1920 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1921 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1924 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1926 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1927 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1928 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1929 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1932 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1934 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1935 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1936 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1937 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1940 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1942 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1943 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1944 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1945 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1948 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1950 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1951 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1952 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1953 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1956 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1958 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1959 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1960 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1961 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1964 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
1967 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1968 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1970 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1971 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1975 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
1977 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
1978 if (lIndex
!= LB_ERR
)
1981 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1982 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
1983 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1985 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
1986 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
1987 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
1988 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1989 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1994 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
1997 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
1998 Suffix
.Suffix
= NULL
;
1999 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2001 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2002 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2003 if (lIndex
!= LB_ERR
)
2004 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2005 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2006 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2007 CoTaskMemFree(Suffix
.Suffix
);
2011 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2013 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2014 if (lIndex
!= LB_ERR
)
2016 Suffix
.bAdd
= FALSE
;
2017 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2018 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2019 if (lLength
!= LB_ERR
)
2021 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2024 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2025 Suffix
.Suffix
[lLength
] = L
'\0';
2026 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2030 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2031 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2032 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2033 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2034 CoTaskMemFree(Suffix
.Suffix
);
2036 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2037 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2049 LaunchAdvancedTcpipSettings(
2051 TcpipConfNotifyImpl
* This
)
2053 PROPSHEETHEADERW pinfo
;
2054 HPROPSHEETPAGE hppages
[3];
2055 WCHAR szBuffer
[100];
2057 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2058 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2059 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2062 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2063 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2065 szBuffer
[0] = L
'\0';
2067 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2068 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2069 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
;
2070 pinfo
.u3
.phpage
= hppages
;
2072 pinfo
.hwndParent
= hwndDlg
;
2073 pinfo
.pszCaption
= szBuffer
;
2075 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2076 PropertySheetW(&pinfo
);
2078 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2079 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2099 AddAlternativeDialog(
2101 TcpipConfNotifyImpl
* This
)
2103 HPROPSHEETPAGE hpage
;
2105 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2109 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2113 StoreTcpipBasicSettings(
2115 TcpipConfNotifyImpl
* This
,
2120 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2122 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2123 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2127 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2128 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2132 if (!This
->pCurrentConfig
->Ip
)
2134 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2135 if (!This
->pCurrentConfig
->Ip
)
2136 return E_OUTOFMEMORY
;
2137 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2139 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2141 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2144 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2145 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2147 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2148 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2149 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2150 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2151 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2152 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2154 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2158 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2162 /* store subnetmask */
2163 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2165 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2167 if (!This
->pCurrentConfig
->Gw
)
2169 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2170 if (!This
->pCurrentConfig
->Gw
)
2171 return E_OUTOFMEMORY
;
2172 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2174 /* store default gateway */
2175 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2179 if (This
->pCurrentConfig
->Gw
)
2181 IP_ADDR
* pNextGw
= This
->pCurrentConfig
->Gw
->Next
;
2182 CoTaskMemFree(This
->pCurrentConfig
->Gw
);
2183 This
->pCurrentConfig
->Gw
= pNextGw
;
2189 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2191 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2194 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2195 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2197 if (!This
->pCurrentConfig
->Ns
)
2199 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2200 if (!This
->pCurrentConfig
->Ns
)
2201 return E_OUTOFMEMORY
;
2202 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2204 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2206 else if (This
->pCurrentConfig
->Ns
)
2208 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2210 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2211 This
->pCurrentConfig
->Ns
= pTemp
;
2216 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2218 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2220 if (!This
->pCurrentConfig
->Ns
)
2222 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2223 if (!This
->pCurrentConfig
->Ns
)
2224 return E_OUTOFMEMORY
;
2225 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2227 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2229 else if (!This
->pCurrentConfig
->Ns
->Next
)
2231 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2232 if (!This
->pCurrentConfig
->Ns
->Next
)
2233 return E_OUTOFMEMORY
;
2234 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2235 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2239 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2244 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2246 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2248 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2249 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2250 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2254 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2255 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2262 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2268 InitializeTcpipBasicDlgCtrls(
2270 TcpipSettings
* pCurSettings
)
2272 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2273 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2274 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2275 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2277 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2278 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2279 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2280 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2282 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2283 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2284 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2285 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2287 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2288 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2289 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2290 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2292 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2293 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2294 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2295 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2297 if (pCurSettings
->DhcpEnabled
)
2299 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2300 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2301 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2302 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2303 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2307 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2309 if (pCurSettings
->Ip
)
2311 /* set current ip address */
2312 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2313 /* set current hostmask */
2314 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2316 if (pCurSettings
->Gw
&& pCurSettings
->Gw
->IpAddress
)
2318 /* set current gateway */
2319 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2322 if (pCurSettings
->AutoconfigActive
)
2324 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2325 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2326 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2330 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2331 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2332 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2333 if (pCurSettings
->Ns
)
2335 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2336 if (pCurSettings
->Ns
->Next
)
2338 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2342 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2347 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2348 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2357 IP_ADDR_STRING
* pSrc
,
2363 IP_ADDR_STRING
* pCurrent
;
2364 IP_ADDR
*pNew
, *pLast
;
2373 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2378 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2379 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2380 if (!pNew
->IpAddress
)
2382 CoTaskMemFree(pNew
);
2386 if (Type
== SUBMASK
)
2388 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2389 pNew
->NTEContext
= pCurrent
->Context
;
2391 else if (Type
== METRIC
)
2393 if (szMetric
&& szMetric
[0] != L
'\0')
2395 pNew
->u
.Metric
= _wtoi(szMetric
);
2396 szMetric
+= wcslen(szMetric
) + 1;
2406 pCurrent
= pCurrent
->Next
;
2424 TcpipConfNotifyImpl
* This
;
2425 LPPROPSHEETPAGE page
;
2426 LPNMIPADDRESS lpnmipa
;
2434 page
= (LPPROPSHEETPAGE
)lParam
;
2435 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2436 if (This
->pCurrentConfig
)
2437 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2438 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2441 lppsn
= (LPPSHNOTIFY
) lParam
;
2442 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2443 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2445 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2446 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2448 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2450 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2451 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2452 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2453 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2454 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2455 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2459 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2461 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2462 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2463 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
2465 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID
);
2471 if (HIWORD(wParam
) == BN_CLICKED
)
2473 switch (LOWORD(wParam
))
2476 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2478 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2479 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2480 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2481 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2482 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2483 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2484 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2485 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2486 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2490 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2492 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2493 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2494 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2495 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2496 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2498 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2500 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2501 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2502 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2503 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2504 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2508 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2510 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2511 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2512 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2513 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2514 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2518 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2520 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2521 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2522 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2526 LaunchAdvancedTcpipSettings(hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2538 /***************************************************************
2539 * INetCfgComponentPropertyUi interface
2544 INetCfgComponentPropertyUi_fnQueryInterface(
2545 INetCfgComponentPropertyUi
* iface
,
2550 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2555 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2556 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2559 INetCfgComponentPropertyUi_AddRef(iface
);
2562 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2564 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2565 INetCfgComponentPropertyUi_AddRef(iface
);
2569 //StringFromCLSID(iid, &pStr);
2570 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2571 //CoTaskMemFree(pStr);
2573 return E_NOINTERFACE
;
2579 INetCfgComponentPropertyUi_fnAddRef(
2580 INetCfgComponentPropertyUi
* iface
)
2582 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2583 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2590 INetCfgComponentPropertyUi_fnRelease(
2591 INetCfgComponentPropertyUi
* iface
)
2593 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2594 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2598 CoTaskMemFree(This
);
2605 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2606 INetCfgComponentPropertyUi
* iface
,
2607 IUnknown
*pUnkReserved
)
2609 INetLanConnectionUiInfo
* pLanInfo
;
2611 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2613 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2617 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2620 // check if tcpip is enabled on that binding */
2621 IUnknown_Release(pUnkReserved
);
2627 INetCfgComponentPropertyUi_fnSetContext(
2628 INetCfgComponentPropertyUi
* iface
,
2629 IUnknown
*pUnkReserved
)
2631 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2633 if (!iface
|| !pUnkReserved
)
2636 This
->pUnknown
= pUnkReserved
;
2642 TcpipConfNotifyImpl
* This
)
2645 WCHAR szBuffer
[200];
2650 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2651 if (!This
->pCurrentConfig
->pDNS
)
2654 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2656 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2659 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2660 CoTaskMemFree(pStr
);
2661 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2663 dwSize
= sizeof(DWORD
);
2664 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2665 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2667 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
) / sizeof(WCHAR
);
2668 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
2673 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2675 dwSize
= sizeof(DWORD
);
2676 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2679 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2681 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2682 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2684 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2686 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2687 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2697 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2702 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2705 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2709 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2711 CoTaskMemFree(pData
);
2720 TcpipConfNotifyImpl
* This
)
2723 TcpFilterSettings
*pFilter
;
2724 WCHAR szBuffer
[200];
2726 DWORD dwVal
, dwSize
;
2728 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2732 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2733 This
->pCurrentConfig
->pFilter
= pFilter
;
2736 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2738 dwSize
= sizeof(DWORD
);
2739 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2740 pFilter
->EnableSecurityFilters
= dwVal
;
2745 pFilter
->EnableSecurityFilters
= FALSE
;
2748 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2751 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2752 CoTaskMemFree(pStr
);
2753 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2757 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2758 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2759 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2766 Initialize(TcpipConfNotifyImpl
* This
)
2770 IP_ADAPTER_INFO
* pCurrentAdapter
;
2771 IP_ADAPTER_INFO
* pInfo
;
2772 PIP_PER_ADAPTER_INFO pPerInfo
;
2776 TcpipSettings
* pCurSettings
;
2779 if (This
->pCurrentConfig
)
2782 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2788 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2790 CoTaskMemFree(pStr
);
2794 pInfo
= CoTaskMemAlloc(dwSize
);
2797 CoTaskMemFree(pStr
);
2801 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2803 CoTaskMemFree(pStr
);
2804 CoTaskMemFree(pInfo
);
2808 pCurrentAdapter
= pInfo
;
2810 while(pCurrentAdapter
)
2812 szBuffer
[0] = L
'\0';
2813 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2815 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2817 if (!_wcsicmp(szBuffer
, pStr
))
2822 pCurrentAdapter
= pCurrentAdapter
->Next
;
2824 CoTaskMemFree(pStr
);
2828 CoTaskMemFree(pInfo
);
2832 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2835 CoTaskMemFree(pInfo
);
2839 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2840 This
->pCurrentConfig
= pCurSettings
;
2841 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2842 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2844 if (!pCurrentAdapter
->DhcpEnabled
)
2846 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2847 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2850 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, NULL
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2852 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2855 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
) == NOERROR
)
2857 if (!pPerInfo
->AutoconfigActive
)
2859 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2861 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2863 CoTaskMemFree(pInfo
);
2868 if (FAILED(LoadFilterSettings(This
)))
2871 if (FAILED(LoadDNSSettings(This
)))
2874 CoTaskMemFree(pInfo
);
2881 INetCfgComponentPropertyUi_fnMergePropPages(
2882 INetCfgComponentPropertyUi
* iface
,
2884 BYTE
**pahpspPrivate
,
2887 LPCWSTR
*pszStartPage
)
2889 HPROPSHEETPAGE
* hppages
;
2892 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2894 hr
= Initialize(This
);
2898 if (This
->pCurrentConfig
->DhcpEnabled
)
2903 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2907 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2910 CoTaskMemFree(hppages
);
2915 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2918 DestroyPropertySheetPage(hppages
[0]);
2919 CoTaskMemFree(hppages
);
2924 *pahpspPrivate
= (BYTE
*)hppages
;
2925 *pcPages
= NumPages
;
2932 INetCfgComponentPropertyUi_fnValidateProperties(
2933 INetCfgComponentPropertyUi
* iface
,
2936 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
2942 INetCfgComponentPropertyUi_fnApplyProperties(
2943 INetCfgComponentPropertyUi
* iface
)
2945 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
2952 INetCfgComponentPropertyUi_fnCancelProperties(
2953 INetCfgComponentPropertyUi
* iface
)
2955 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
2959 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
2961 INetCfgComponentPropertyUi_fnQueryInterface
,
2962 INetCfgComponentPropertyUi_fnAddRef
,
2963 INetCfgComponentPropertyUi_fnRelease
,
2964 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
2965 INetCfgComponentPropertyUi_fnSetContext
,
2966 INetCfgComponentPropertyUi_fnMergePropPages
,
2967 INetCfgComponentPropertyUi_fnValidateProperties
,
2968 INetCfgComponentPropertyUi_fnApplyProperties
,
2969 INetCfgComponentPropertyUi_fnCancelProperties
2972 /***************************************************************
2973 * INetCfgComponentControl interface
2978 INetCfgComponentControl_fnQueryInterface(
2979 INetCfgComponentControl
* iface
,
2983 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2984 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
2989 INetCfgComponentControl_fnAddRef(
2990 INetCfgComponentControl
* iface
)
2992 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2993 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
2998 INetCfgComponentControl_fnRelease(
2999 INetCfgComponentControl
* iface
)
3001 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3002 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3007 INetCfgComponentControl_fnInitialize(
3008 INetCfgComponentControl
* iface
,
3009 INetCfgComponent
*pIComp
,
3013 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3015 This
->pNCfg
= pINetCfg
;
3016 This
->pNComp
= pIComp
;
3023 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3026 DWORD dwSize
, dwIpAddr
;
3028 IP_ADDR
*pTemp
= pAddr
;
3036 dwIpAddr
= pTemp
->IpAddress
;
3037 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3038 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3039 }else if (Type
== SUBMASK
)
3041 dwIpAddr
= pTemp
->u
.Subnetmask
;
3042 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3043 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3045 else if (Type
== METRIC
)
3047 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3050 dwSize
+= wcslen(szBuffer
) + 1;
3051 pTemp
= pTemp
->Next
;
3057 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3066 dwIpAddr
= pTemp
->IpAddress
;
3067 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3068 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3069 }else if (Type
== SUBMASK
)
3071 dwIpAddr
= pTemp
->u
.Subnetmask
;
3072 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3073 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3075 else if (Type
== METRIC
)
3077 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3082 pStr
+= wcslen(pStr
);
3091 pStr
+= wcslen(pStr
) + 1;
3093 pTemp
= pTemp
->Next
;
3096 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3103 INetCfgComponentControl_fnApplyRegistryChanges(
3104 INetCfgComponentControl
* iface
)
3109 WCHAR szBuffer
[200];
3110 TcpipSettings
* pCurrentConfig
, *pOldConfig
;
3113 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3115 pCurrentConfig
= This
->pCurrentConfig
;
3116 This
->pCurrentConfig
= NULL
;
3118 if (FAILED(Initialize(This
)))
3120 This
->pCurrentConfig
= pCurrentConfig
;
3123 pOldConfig
= This
->pCurrentConfig
;
3124 This
->pCurrentConfig
= pCurrentConfig
;
3126 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3129 if (RegCreateKeyExW(hKey
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3131 if (pCurrentConfig
->pDNS
)
3133 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3134 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)pCurrentConfig
->pDNS
->szSearchList
,
3135 (wcslen(pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3137 if (pCurrentConfig
->pFilter
)
3139 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3140 (LPBYTE
)&pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3145 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3148 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3149 CoTaskMemFree(pStr
);
3151 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3153 if (pCurrentConfig
->pDNS
)
3155 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3156 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3157 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3158 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3161 if (pCurrentConfig
->pFilter
)
3163 if (pCurrentConfig
->pFilter
->szTCPAllowedPorts
)
3165 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3166 (LPBYTE
)pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3167 pCurrentConfig
->pFilter
->TCPSize
);
3169 if (pCurrentConfig
->pFilter
->szUDPAllowedPorts
)
3171 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3172 (LPBYTE
)pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3173 pCurrentConfig
->pFilter
->UDPSize
);
3175 if (pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
)
3177 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3178 (LPBYTE
)pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3179 pCurrentConfig
->pFilter
->IPSize
);
3183 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3184 if (pCurrentConfig
->DhcpEnabled
)
3186 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3187 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3188 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3189 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3190 if (!pOldConfig
->DhcpEnabled
)
3192 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3194 // start dhcp client service for the adapter
3199 if (!pOldConfig
->DhcpEnabled
)
3201 DeleteIPAddress(pOldConfig
->Ip
->NTEContext
);
3203 //delete multiple ip addresses when required
3207 // add multiple ip addresses when required
3208 if (AddIPAddress(htonl(pCurrentConfig
->Ip
->IpAddress
), htonl(pCurrentConfig
->Ip
->u
.Subnetmask
), pCurrentConfig
->Index
, &pCurrentConfig
->Ip
->NTEContext
, &NTEInstance
) == NO_ERROR
)
3210 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3213 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3214 CoTaskMemFree(pStr
);
3217 pStr
= CreateMultiSzString(pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3220 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3221 CoTaskMemFree(pStr
);
3228 if (GetIpForwardTable(NULL
, &dwSize
, FALSE
) == ERROR_INSUFFICIENT_BUFFER
)
3231 PMIB_IPFORWARDTABLE pIpForwardTable
= (PMIB_IPFORWARDTABLE
)CoTaskMemAlloc(dwSize
);
3232 if (pIpForwardTable
)
3234 if (GetIpForwardTable(pIpForwardTable
, &dwSize
, FALSE
) == NO_ERROR
)
3236 for (Index
= 0; Index
< pIpForwardTable
->dwNumEntries
; Index
++)
3238 if (pIpForwardTable
->table
[Index
].dwForwardIfIndex
== pOldConfig
->Index
)
3240 DeleteIpForwardEntry(&pIpForwardTable
->table
[Index
]);
3244 CoTaskMemFree(pIpForwardTable
);
3249 if (pCurrentConfig
->Gw
)
3251 MIB_IPFORWARDROW RouterMib
;
3252 ZeroMemory(&RouterMib
, sizeof(MIB_IPFORWARDROW
));
3254 RouterMib
.dwForwardMetric1
= 1;
3255 RouterMib
.dwForwardIfIndex
= pOldConfig
->Index
;
3256 RouterMib
.dwForwardNextHop
= htonl(pCurrentConfig
->Gw
->IpAddress
);
3259 // add multiple gw addresses when required
3261 if (CreateIpForwardEntry(&RouterMib
) == NO_ERROR
)
3263 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3266 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3267 CoTaskMemFree(pStr
);
3270 pStr
= CreateMultiSzString(pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3273 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3274 CoTaskMemFree(pStr
);
3280 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3281 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", sizeof(WCHAR
) * 2);
3285 if (!pCurrentConfig
->Ns
|| pCurrentConfig
->AutoconfigActive
)
3287 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3291 pStr
= CreateMultiSzString(pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3295 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3296 RegDeleteValueW(hKey
, L
"DhcpNameServer");
3297 CoTaskMemFree(pStr
);
3308 INetCfgComponentControl_fnApplyPnpChanges(
3309 INetCfgComponentControl
* iface
,
3310 INetCfgPnpReconfigCallback
*pICallback
)
3312 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3318 INetCfgComponentControl_fnCancelChanges(
3319 INetCfgComponentControl
* iface
)
3321 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3325 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3327 INetCfgComponentControl_fnQueryInterface
,
3328 INetCfgComponentControl_fnAddRef
,
3329 INetCfgComponentControl_fnRelease
,
3330 INetCfgComponentControl_fnInitialize
,
3331 INetCfgComponentControl_fnApplyRegistryChanges
,
3332 INetCfgComponentControl_fnApplyPnpChanges
,
3333 INetCfgComponentControl_fnCancelChanges
3338 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3340 TcpipConfNotifyImpl
*This
;
3345 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3347 return E_OUTOFMEMORY
;
3350 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3351 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3353 This
->pUnknown
= NULL
;
3354 This
->pNComp
= NULL
;
3355 This
->pCurrentConfig
= NULL
;
3357 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3359 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3360 return E_NOINTERFACE
;
3363 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);