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
37 struct tagIP_ADDR
* Next
;
54 UINT AutoconfigActive
;
56 TcpFilterSettings
* pFilter
;
57 TcpipAdvancedDNSDlgSettings
* pDNS
;
62 const INetCfgComponentPropertyUi
* lpVtbl
;
63 const INetCfgComponentControl
* lpVtblCompControl
;
67 INetCfgComponent
* pNComp
;
68 TcpipSettings
*pCurrentConfig
;
69 CLSID NetCfgInstanceId
;
70 }TcpipConfNotifyImpl
, *LPTcpipConfNotifyImpl
;
100 }TcpipSuffixSettings
;
109 static LPTcpipConfNotifyImpl __inline
impl_from_INetCfgComponentControl(INetCfgComponentControl
*iface
)
111 return (TcpipConfNotifyImpl
*)((char *)iface
- FIELD_OFFSET(TcpipConfNotifyImpl
, lpVtblCompControl
));
114 INT
GetSelectedItem(HWND hDlgCtrl
);
115 HRESULT
InitializeTcpipBasicDlgCtrls(HWND hwndDlg
, TcpipSettings
* pCurSettings
);
116 VOID
InsertColumnToListView(HWND hDlgCtrl
, UINT ResId
, UINT SubItem
, UINT Size
);
117 INT_PTR
StoreTcpipBasicSettings(HWND hwndDlg
, TcpipConfNotifyImpl
* This
, BOOL bApply
);
120 DisplayError(UINT ResTxt
, UINT ResTitle
, UINT Type
)
125 if (LoadStringW(netcfgx_hInstance
, ResTxt
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
126 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
130 if (LoadStringW(netcfgx_hInstance
, ResTitle
, szTitle
, sizeof(szTitle
)/sizeof(WCHAR
)))
131 szTitle
[(sizeof(szTitle
)/sizeof(WCHAR
))-1] = L
'\0';
135 MessageBoxW(NULL
, szBuffer
, szTitle
, Type
);
139 /***************************************************************
140 * TCP/IP Filter Dialog
153 TcpipPortSettings
* pPort
;
162 pPort
= (TcpipPortSettings
*)lParam
;
163 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pPort
);
164 if (LoadStringW(netcfgx_hInstance
, pPort
->ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
166 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
167 SendDlgItemMessageW(hwndDlg
, IDC_PORT_DESC
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
170 if (pPort
->MaxNum
== 65536)
171 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 5, 0);
173 SendDlgItemMessageW(hwndDlg
, IDC_PORT_VAL
, EM_LIMITTEXT
, 3, 0);
177 if (LOWORD(wParam
) == IDCANCEL
)
179 EndDialog(hwndDlg
, FALSE
);
182 else if (LOWORD(wParam
) == IDC_OK
)
184 pPort
= (TcpipPortSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
185 Num
= GetDlgItemInt(hwndDlg
, IDC_PORT_VAL
, NULL
, TRUE
);
186 if (Num
> pPort
->MaxNum
|| Num
== 0)
188 if (pPort
->MaxNum
== 65536)
189 DisplayError(IDS_PORT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
191 DisplayError(IDS_PROT_RANGE
, IDS_TCPIP
, MB_ICONWARNING
);
193 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
196 if (GetWindowTextW(GetDlgItem(hwndDlg
, IDC_PORT_VAL
), szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
198 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
199 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
200 find
.flags
= LVFI_STRING
;
202 if (SendMessageW(pPort
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
204 ZeroMemory(&li
, sizeof(LVITEMW
));
206 li
.iItem
= ListView_GetItemCount(pPort
->hDlgCtrl
);
207 li
.pszText
= szBuffer
;
208 SendMessageW(pPort
->hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
209 EndDialog(hwndDlg
, TRUE
);
212 DisplayError(IDS_DUP_NUMBER
, IDS_PROT_RANGE
, MB_ICONWARNING
);
213 SetFocus(GetDlgItem(hwndDlg
, IDC_PORT_VAL
));
222 InitFilterListBox(LPWSTR pData
, HWND hwndDlg
, HWND hDlgCtrl
, UINT AllowButton
, UINT RestrictButton
, UINT AddButton
, UINT DelButton
)
228 if (!pData
|| !_wtoi(pData
))
230 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
231 EnableWindow(GetDlgItem(hwndDlg
, AddButton
), FALSE
);
232 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
237 memset(&li
, 0x0, sizeof(LVITEMW
));
245 SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
247 pCur
+= wcslen(pCur
) + 1;
251 SendDlgItemMessageW(hwndDlg
, AllowButton
, BM_SETCHECK
, BST_CHECKED
, 0);
253 SendDlgItemMessageW(hwndDlg
, RestrictButton
, BM_SETCHECK
, BST_CHECKED
, 0);
267 iCount
= ListView_GetItemCount(hDlgCtrl
);
270 pData
= (LPWSTR
)CoTaskMemAlloc(3 * sizeof(WCHAR
));
276 *Size
= 3 * sizeof(WCHAR
);
280 pData
= CoTaskMemAlloc((6 * iCount
+ 1) * sizeof(WCHAR
));
286 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
288 ZeroMemory(&li
, sizeof(LVITEMW
));
291 li
.pszText
= szBuffer
;
292 li
.cchTextMax
= sizeof(szBuffer
) /sizeof(WCHAR
);
293 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
295 wcscpy(pCur
, szBuffer
);
296 dwSize
+= wcslen(szBuffer
) + 1;
297 pCur
+= wcslen(szBuffer
) + 1;
301 *Size
= (dwSize
+1) * sizeof(WCHAR
);
306 StoreTcpipFilterSettings(
309 TcpFilterSettings
* pFilter
;
311 pFilter
= CoTaskMemAlloc(sizeof(TcpFilterSettings
));
315 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
316 pFilter
->EnableSecurityFilters
= TRUE
;
318 pFilter
->EnableSecurityFilters
= FALSE
;
320 pFilter
->szTCPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), &pFilter
->TCPSize
);
321 pFilter
->szUDPAllowedPorts
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), &pFilter
->UDPSize
);
322 pFilter
->szRawIPAllowedProtocols
= CreateFilterList(GetDlgItem(hwndDlg
, IDC_IP_LIST
), &pFilter
->IPSize
);
335 TcpipPortSettings Port
;
337 Port
.MaxNum
= MaxItem
;
338 Port
.hDlgCtrl
= hDlgCtrl
;
341 DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIP_PORT_DLG
), hwndDlg
, TcpipFilterPortDlg
, (LPARAM
)&Port
);
349 INT iIndex
= GetSelectedItem(hDlgCtrl
);
353 (void)ListView_DeleteItem(hDlgCtrl
, iIndex
);
356 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONWARNING
);
361 TcpipFilterSettingsDlg(
368 TcpipConfNotifyImpl
*pContext
;
369 TcpFilterSettings
*pFilter
;
374 pContext
= (TcpipConfNotifyImpl
*)lParam
;
375 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDS_TCP_PORTS
, 0, 100);
376 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDS_UDP_PORTS
, 0, 100);
377 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDS_IP_PROTO
, 0, 100);
378 if (pContext
->pCurrentConfig
->pFilter
)
380 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), IDC_TCP_ALLOW_ALL
, IDC_TCP_RESTRICT
, IDC_TCP_ADD
, IDC_TCP_DEL
);
381 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), IDC_UDP_ALLOW_ALL
, IDC_UDP_RESTRICT
, IDC_UDP_ADD
, IDC_UDP_DEL
);
382 InitFilterListBox(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
, hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), IDC_IP_ALLOW_ALL
, IDC_IP_RESTRICT
, IDC_IP_ADD
, IDC_IP_DEL
);
383 if (pContext
->pCurrentConfig
->pFilter
->EnableSecurityFilters
)
384 SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_SETCHECK
, BST_CHECKED
, 0);
386 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pContext
);
389 if (HIWORD(wParam
) == BN_CLICKED
)
391 switch (LOWORD(wParam
))
393 case IDC_TCP_ALLOW_ALL
:
394 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
396 SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
397 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), FALSE
);
398 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), FALSE
);
399 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), FALSE
);
402 case IDC_TCP_RESTRICT
:
403 if (SendDlgItemMessageW(hwndDlg
, IDC_TCP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
405 SendDlgItemMessageW(hwndDlg
, IDC_TCP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
406 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_LIST
), TRUE
);
407 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_ADD
), TRUE
);
408 EnableWindow(GetDlgItem(hwndDlg
, IDC_TCP_DEL
), TRUE
);
411 case IDC_UDP_ALLOW_ALL
:
412 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
414 SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
415 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), FALSE
);
416 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), FALSE
);
417 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), FALSE
);
420 case IDC_UDP_RESTRICT
:
421 if (SendDlgItemMessageW(hwndDlg
, IDC_UDP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
423 SendDlgItemMessageW(hwndDlg
, IDC_UDP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
424 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_LIST
), TRUE
);
425 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_ADD
), TRUE
);
426 EnableWindow(GetDlgItem(hwndDlg
, IDC_UDP_DEL
), TRUE
);
429 case IDC_IP_ALLOW_ALL
:
430 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
432 SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_SETCHECK
, BST_UNCHECKED
, 0);
433 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), FALSE
);
434 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), FALSE
);
435 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), FALSE
);
438 case IDC_IP_RESTRICT
:
439 if (SendDlgItemMessageW(hwndDlg
, IDC_IP_RESTRICT
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
441 SendDlgItemMessageW(hwndDlg
, IDC_IP_ALLOW_ALL
, BM_SETCHECK
, BST_UNCHECKED
, 0);
442 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_LIST
), TRUE
);
443 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_ADD
), TRUE
);
444 EnableWindow(GetDlgItem(hwndDlg
, IDC_IP_DEL
), TRUE
);
448 if (SendDlgItemMessageW(hwndDlg
, IDC_USE_FILTER
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
449 DisplayError(IDS_DISABLE_FILTER
, IDS_TCPIP
, MB_OK
);
454 switch(LOWORD(wParam
))
457 pContext
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
458 pFilter
= StoreTcpipFilterSettings(hwndDlg
);
461 if (pContext
->pCurrentConfig
->pFilter
)
463 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
);
464 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
);
465 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
);
466 CoTaskMemFree(pContext
->pCurrentConfig
->pFilter
);
468 pContext
->pCurrentConfig
->pFilter
= pFilter
;
470 EndDialog(hwndDlg
, (INT_PTR
)TRUE
);
473 EndDialog(hwndDlg
, FALSE
);
476 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_TCP_LIST
), 65536, IDS_TCP_PORTS
);
479 DelItem(GetDlgItem(hwndDlg
, IDC_TCP_LIST
));
482 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_UDP_LIST
), 65536, IDS_UDP_PORTS
);
485 DelItem(GetDlgItem(hwndDlg
, IDC_UDP_LIST
));
488 AddItem(hwndDlg
, GetDlgItem(hwndDlg
, IDC_IP_LIST
), 256, IDS_IP_PROTO
);
491 DelItem(GetDlgItem(hwndDlg
, IDC_IP_LIST
));
505 InitializePropertySheetPage(LPWSTR resname
, DLGPROC dlgproc
, LPARAM lParam
, LPWSTR szTitle
)
507 PROPSHEETPAGEW ppage
;
509 memset(&ppage
, 0x0, sizeof(PROPSHEETPAGEW
));
510 ppage
.dwSize
= sizeof(PROPSHEETPAGEW
);
511 ppage
.dwFlags
= PSP_DEFAULT
;
512 ppage
.u
.pszTemplate
= resname
;
513 ppage
.pfnDlgProc
= dlgproc
;
514 ppage
.lParam
= lParam
;
515 ppage
.hInstance
= netcfgx_hInstance
;
518 ppage
.dwFlags
|= PSP_USETITLE
;
519 ppage
.pszTitle
= szTitle
;
521 return CreatePropertySheetPageW(&ppage
);
524 /***************************************************************
525 * TCP/IP Advanced Option Dialog
530 InitializeTcpipAdvancedOptDlg(
532 TcpipConfNotifyImpl
* This
)
536 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
538 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTER
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
540 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
541 if (SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_ADDSTRING
, 0, (LPARAM
)szText
) != LB_ERR
)
542 SendDlgItemMessageW(hwndDlg
, IDC_OPTLIST
, LB_SETCURSEL
, 0, 0);
545 if (LoadStringW(netcfgx_hInstance
, IDS_TCPFILTERDESC
, szText
, sizeof(szText
)/sizeof(WCHAR
)))
547 szText
[(sizeof(szText
)/sizeof(WCHAR
))-1] = L
'\0';
548 SendDlgItemMessageW(hwndDlg
, IDC_OPTDESC
, WM_SETTEXT
, 0, (LPARAM
)szText
);
563 TcpipConfNotifyImpl
* This
;
564 LPPROPSHEETPAGE page
;
570 page
= (LPPROPSHEETPAGE
)lParam
;
571 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
572 InitializeTcpipAdvancedOptDlg(hwndDlg
, This
);
575 if (LOWORD(wParam
) == IDC_OPTPROP
)
577 res
= DialogBoxParamW(netcfgx_hInstance
,
578 MAKEINTRESOURCEW(IDD_TCPIP_FILTER_DLG
),
580 TcpipFilterSettingsDlg
,
581 (LPARAM
)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
589 InsertColumnToListView(
598 if (!LoadStringW(netcfgx_hInstance
, ResId
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
601 memset(&lc
, 0, sizeof(LV_COLUMN
) );
602 lc
.mask
= LVCF_WIDTH
| LVCF_TEXT
| LVCF_SUBITEM
| LVCF_FMT
;
603 lc
.iSubItem
= SubItem
;
604 lc
.fmt
= LVCFMT_FIXED_WIDTH
;
606 lc
.cchTextMax
= wcslen(szBuffer
);
607 lc
.pszText
= szBuffer
;
609 (void)SendMessageW(hDlgCtrl
, LVM_INSERTCOLUMNW
, SubItem
, (LPARAM
)&lc
);
613 InsertIpAddressToListView(
625 ZeroMemory(&li
, sizeof(li
));
627 li
.iItem
= itemCount
;
629 dwIpAddr
= pAddr
->IpAddress
;
630 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
631 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
633 li
.pszText
= szBuffer
;
634 li
.iItem
= SendMessageW(hDlgCtrl
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
639 dwIpAddr
= pAddr
->u
.Subnetmask
;
640 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
641 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
646 swprintf(szBuffer
, L
"%u", pAddr
->u
.Metric
);
648 LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
));
653 li
.pszText
= szBuffer
;
654 SendMessageW(hDlgCtrl
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
663 InitializeTcpipAdvancedIpDlg(
665 TcpipConfNotifyImpl
* This
)
672 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_IPADDR
, 0, 100);
673 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
674 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), IDS_SUBMASK
, 1, (rect
.right
- rect
.left
- 100));
676 if (This
->pCurrentConfig
->DhcpEnabled
)
678 if (LoadStringW(netcfgx_hInstance
, IDS_DHCPACTIVE
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
680 ZeroMemory(&li
, sizeof(LVITEMW
));
682 li
.pszText
= szBuffer
;
683 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
685 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADD
), FALSE
);
686 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPMOD
), FALSE
);
687 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPDEL
), FALSE
);
691 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
->pCurrentConfig
->Ip
, TRUE
);
694 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_GATEWAY
, 0, 100);
695 GetClientRect(GetDlgItem(hwndDlg
, IDC_IPLIST
), &rect
);
696 InsertColumnToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), IDS_METRIC
, 1, (rect
.right
- rect
.left
- 100));
698 InsertIpAddressToListView(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
->pCurrentConfig
->Gw
, FALSE
);
699 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, EM_LIMITTEXT
, 4, 0);
713 TcpipGwSettings
*pGwSettings
;
715 LPNMIPADDRESS lpnmipa
;
721 pGwSettings
= (TcpipGwSettings
*)lParam
;
722 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
723 if (pGwSettings
->bAdd
)
725 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
727 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
728 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
730 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
731 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
735 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
737 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
738 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
740 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pGwSettings
->szIP
);
741 if (pGwSettings
->Metric
)
743 SetDlgItemInt(hwndDlg
, IDC_METRIC
, pGwSettings
->Metric
, FALSE
);
744 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
745 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
749 SendDlgItemMessageW(hwndDlg
, IDC_USEMETRIC
, BM_SETCHECK
, BST_CHECKED
, 0);
750 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
751 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
754 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
755 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
756 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
757 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
760 if (LOWORD(wParam
) == IDC_USEMETRIC
)
762 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
764 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
765 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), FALSE
);
766 SendDlgItemMessageW(hwndDlg
, IDC_METRIC
, WM_SETTEXT
, 0, (LPARAM
)L
"");
770 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
771 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRICTXT
), TRUE
);
775 else if (LOWORD(wParam
) == IDCANCEL
)
777 EndDialog(hwndDlg
, FALSE
);
780 else if (LOWORD(wParam
) == IDC_OK
)
782 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
784 pGwSettings
= (TcpipGwSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
785 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pGwSettings
->szIP
);
787 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
788 find
.flags
= LVFI_STRING
;
789 find
.psz
= pGwSettings
->szIP
;
791 if (SendDlgItemMessage(hwndDlg
, IDC_USEMETRIC
, BM_GETCHECK
, 0, 0) == BST_UNCHECKED
)
792 pGwSettings
->Metric
= GetDlgItemInt(hwndDlg
, IDC_METRIC
, NULL
, FALSE
);
794 pGwSettings
->Metric
= 0;
797 if (SendMessageW(pGwSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
) == -1)
799 EndDialog(hwndDlg
, TRUE
);
802 if (!pGwSettings
->bAdd
)
804 EndDialog(hwndDlg
, FALSE
);
807 DisplayError(IDS_DUP_GW
, IDS_TCPIP
, MB_ICONINFORMATION
);
813 lpnmipa
= (LPNMIPADDRESS
) lParam
;
814 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
816 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
818 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
819 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
828 GetGWListEntry(HWND hDlgCtrl
, INT Index
, TcpipGwSettings
* pGwSettings
)
834 ZeroMemory(&li
, sizeof(LVITEMW
));
837 li
.pszText
= pGwSettings
->szIP
;
840 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
842 li
.pszText
= szBuffer
;
846 bRet
= SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
849 pGwSettings
->Metric
= _wtoi(szBuffer
);
864 LPNMIPADDRESS lpnmipa
;
866 TcpipIpSettings
*pIpSettings
;
874 pIpSettings
= (TcpipIpSettings
*)lParam
;
875 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
877 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
878 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
879 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
880 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
881 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
882 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
883 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
884 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
886 if (pIpSettings
->bAdd
)
888 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
890 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
891 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
893 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
897 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
899 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
900 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
902 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szIP
);
903 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_SETTEXT
, 0, (LPARAM
)pIpSettings
->szMask
);
907 lpnmipa
= (LPNMIPADDRESS
) lParam
;
908 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
910 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
912 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
914 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
915 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
916 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
917 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
918 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
919 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
920 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
926 if (LOWORD(wParam
) == IDC_OK
)
928 pIpSettings
= (TcpipIpSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
929 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szIP
);
930 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, WM_GETTEXT
, 16, (LPARAM
)pIpSettings
->szMask
);
932 ZeroMemory(&find
, sizeof(LVFINDINFOW
));
933 find
.flags
= LVFI_STRING
;
934 find
.psz
= pIpSettings
->szIP
;
935 lResult
= SendMessageW(pIpSettings
->hDlgCtrl
, LVM_FINDITEMW
, (WPARAM
)-1, (LPARAM
)&find
);
939 EndDialog(hwndDlg
, TRUE
);
942 else if (!pIpSettings
->bAdd
)
944 EndDialog(hwndDlg
, FALSE
);
947 DisplayError(IDS_DUP_IPADDR
, IDS_TCPIP
, MB_ICONINFORMATION
);
950 else if (LOWORD(wParam
) == IDCANCEL
)
952 EndDialog(hwndDlg
, FALSE
);
964 UINT Length
= wcslen(szName
);
966 for(Index
= 0; Index
< Length
; Index
++)
967 if (iswalnum(szName
[Index
]) == 0 && szName
[Index
] != '.' && szName
[Index
] != '-')
983 TcpipSuffixSettings
* pSettings
;
989 pSettings
= (TcpipSuffixSettings
*)lParam
;
990 if (!pSettings
->bAdd
)
992 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->Suffix
);
993 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
995 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
996 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
998 CoTaskMemFree(pSettings
->Suffix
);
999 pSettings
->Suffix
= NULL
;
1003 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1005 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1006 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1009 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)pSettings
);
1012 if (LOWORD(wParam
) == IDCANCEL
)
1014 EndDialog(hwndDlg
, FALSE
);
1017 else if (LOWORD(wParam
) == IDC_OK
)
1019 lLength
= SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXTLENGTH
, 0, 0);
1022 pSettings
= (TcpipSuffixSettings
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1023 pSettings
->Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1)* sizeof(WCHAR
));
1024 if (pSettings
->Suffix
)
1026 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, lLength
+ 1, (LPARAM
)pSettings
->Suffix
);
1027 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->Suffix
) != LB_ERR
)
1029 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1030 CoTaskMemFree(pSettings
->Suffix
);
1034 if (!VerifyDNSSuffix(pSettings
->Suffix
))
1036 DisplayError(IDS_DOMAIN_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1037 CoTaskMemFree(pSettings
->Suffix
);
1040 EndDialog(hwndDlg
, TRUE
);
1052 GetSelectedItem(HWND hDlgCtrl
)
1055 UINT iItemCount
, iIndex
;
1057 iItemCount
= ListView_GetItemCount(hDlgCtrl
);
1061 for (iIndex
= 0; iIndex
< iItemCount
; iIndex
++)
1063 ZeroMemory(&li
, sizeof(LVITEMW
));
1064 li
.mask
= LVIF_STATE
;
1065 li
.stateMask
= (UINT
)-1;
1067 if (SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1069 if (li
.state
& LVIS_SELECTED
)
1078 GetIPListEntry(HWND hDlgCtrl
, INT Index
, TcpipIpSettings
* pIpSettings
)
1082 ZeroMemory(&li
, sizeof(LVITEMW
));
1083 li
.mask
= LVIF_TEXT
;
1085 li
.pszText
= pIpSettings
->szIP
;
1088 if (!SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
))
1091 ZeroMemory(&li
, sizeof(LVITEMW
));
1092 li
.mask
= LVIF_TEXT
;
1094 li
.pszText
= pIpSettings
->szMask
;
1098 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1102 DeleteItemFromList(HWND hDlgCtrl
)
1106 memset(&li
, 0x0, sizeof(LVITEMW
));
1107 li
.iItem
= GetSelectedItem(hDlgCtrl
);
1110 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1115 (void)ListView_DeleteItem(hDlgCtrl
, li
.iItem
);
1120 GetIpAddressFromStringW(
1126 LPWSTR pLast
= szBuffer
;
1127 LPWSTR pNext
= szBuffer
;
1130 while((pNext
= wcschr(pNext
, L
'.')))
1134 dwIpAddr
|= (Val
<< Index
* 8);
1139 dwIpAddr
|= _wtoi(pLast
);
1145 GetIpAddressFromStringA(
1150 if (MultiByteToWideChar(CP_ACP
, 0, sBuffer
, -1, szIp
, 16))
1153 return GetIpAddressFromStringW(szIp
);
1160 FreeIPAddr(IP_ADDR
*pAddr
)
1169 pNext
= pAddr
->Next
;
1170 CoTaskMemFree(pAddr
);
1176 GetListViewItem(HWND hDlgCtrl
, UINT Index
, UINT SubIndex
, WCHAR
* szBuffer
, UINT BufferSize
)
1180 ZeroMemory(&li
, sizeof(LVITEMW
));
1181 li
.mask
= LVIF_TEXT
;
1182 li
.pszText
= szBuffer
;
1184 li
.iSubItem
= SubIndex
;
1185 li
.cchTextMax
= BufferSize
;
1186 return SendMessageW(hDlgCtrl
, LVM_GETITEMW
, 0, (LPARAM
)&li
);
1192 TcpipConfNotifyImpl
* This
,
1198 IP_ADDR
*pCur
, *pLast
;
1200 iCount
= ListView_GetItemCount(hDlgCtrl
);
1207 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1209 if (GetListViewItem(hDlgCtrl
, iIndex
, 0, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1211 pCur
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
1214 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1216 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1217 pCur
->IpAddress
= GetIpAddressFromStringW(szBuffer
);
1219 if (GetListViewItem(hDlgCtrl
, iIndex
, 1, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
) ))
1221 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1223 pCur
->u
.Subnetmask
= GetIpAddressFromStringW(szBuffer
);
1225 pCur
->u
.Metric
= _wtoi(szBuffer
);
1231 This
->pCurrentConfig
->Ip
= pCur
;
1233 This
->pCurrentConfig
->Gw
= pCur
;
1255 TcpipConfNotifyImpl
* This
;
1256 LPPROPSHEETPAGE page
;
1258 WCHAR szBuffer
[200];
1268 page
= (LPPROPSHEETPAGE
)lParam
;
1269 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1270 InitializeTcpipAdvancedIpDlg(hwndDlg
, This
);
1271 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1274 lppsn
= (LPPSHNOTIFY
) lParam
;
1275 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1277 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1278 if (!This
->pCurrentConfig
->DhcpEnabled
&& ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
)) == 0)
1280 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
1281 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1285 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1287 This
= (TcpipConfNotifyImpl
*) GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1288 FreeIPAddr(This
->pCurrentConfig
->Gw
);
1289 This
->pCurrentConfig
->Gw
= NULL
;
1290 FreeIPAddr(This
->pCurrentConfig
->Ip
);
1291 This
->pCurrentConfig
->Ip
= NULL
;
1292 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_IPLIST
), This
, TRUE
);
1293 StoreIPSettings(GetDlgItem(hwndDlg
, IDC_GWLIST
), This
, FALSE
);
1294 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
1299 if (LOWORD(wParam
) == IDC_AUTOMETRIC
)
1301 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTOMETRIC
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1302 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), FALSE
);
1304 EnableWindow(GetDlgItem(hwndDlg
, IDC_METRIC
), TRUE
);
1306 else if (LOWORD(wParam
) == IDC_IPADD
)
1309 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1310 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1313 memset(&li
, 0x0, sizeof(LVITEMW
));
1314 li
.mask
= LVIF_TEXT
| LVIF_PARAM
;
1315 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1316 li
.pszText
= Ip
.szIP
;
1317 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1320 li
.mask
= LVIF_TEXT
;
1322 li
.pszText
= Ip
.szMask
;
1323 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1327 else if (LOWORD(wParam
) == IDC_IPMOD
)
1329 memset(&li
, 0x0, sizeof(LVITEMW
));
1330 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1333 /* no item selected */
1334 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1335 SetFocus(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1339 Ip
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_IPLIST
);
1340 if (GetIPListEntry(GetDlgItem(hwndDlg
, IDC_IPLIST
), li
.iItem
, &Ip
))
1342 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPADDIP_DLG
), hwndDlg
, TcpipAddIpDlg
, (LPARAM
)&Ip
);
1345 li
.mask
= LVIF_TEXT
;
1346 li
.pszText
= Ip
.szIP
;
1347 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1348 li
.pszText
= Ip
.szMask
;
1350 SendDlgItemMessageW(hwndDlg
, IDC_IPLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1354 else if (LOWORD(wParam
) == IDC_IPDEL
)
1356 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_IPLIST
));
1359 else if (LOWORD(wParam
) == IDC_GWADD
)
1362 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1363 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1366 memset(&li
, 0x0, sizeof(LVITEMW
));
1367 li
.mask
= LVIF_TEXT
;
1368 li
.iItem
= ListView_GetItemCount(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1369 li
.pszText
= Gw
.szIP
;
1370 li
.iItem
= SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_INSERTITEMW
, 0, (LPARAM
)&li
);
1375 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1377 li
.pszText
= szBuffer
;
1378 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1382 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1384 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1386 li
.pszText
= szBuffer
;
1387 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1394 else if (LOWORD(wParam
) == IDC_GWMOD
)
1396 memset(&li
, 0x0, sizeof(LVITEMW
));
1397 li
.iItem
= GetSelectedItem(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1400 /* no item selected */
1401 DisplayError(IDS_NOITEMSEL
, IDS_TCPIP
, MB_ICONINFORMATION
);
1402 SetFocus(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1405 if (GetGWListEntry(GetDlgItem(hwndDlg
, IDC_GWLIST
), li
.iItem
, &Gw
))
1408 Gw
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_GWLIST
);
1409 res
= DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPGW_DLG
), hwndDlg
, TcpipAdvGwDlg
, (LPARAM
)&Gw
);
1412 li
.mask
= LVIF_TEXT
;
1413 li
.pszText
= Gw
.szIP
;
1414 (void)SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1417 swprintf(szBuffer
, L
"%u", Gw
.Metric
);
1419 li
.pszText
= szBuffer
;
1420 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1424 if (LoadStringW(netcfgx_hInstance
, IDS_AUTOMATIC
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1426 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1428 li
.pszText
= szBuffer
;
1429 SendDlgItemMessageW(hwndDlg
, IDC_GWLIST
, LVM_SETITEMW
, 0, (LPARAM
)&li
);
1436 else if (LOWORD(wParam
) == IDC_GWDEL
)
1438 DeleteItemFromList(GetDlgItem(hwndDlg
, IDC_GWLIST
));
1454 TcpipDnsSettings
* pSettings
;
1455 WCHAR szBuffer
[100];
1457 LPNMIPADDRESS lpnmipa
;
1462 pSettings
= (TcpipDnsSettings
*)lParam
;
1463 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)lParam
);
1464 if (!pSettings
->bAdd
)
1466 if (LoadStringW(netcfgx_hInstance
, IDS_MOD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1468 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1469 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1471 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_SETTEXT
, 0, (LPARAM
)pSettings
->szIP
);
1472 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1476 if (LoadStringW(netcfgx_hInstance
, IDS_ADD
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
1478 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
1479 SendDlgItemMessageW(hwndDlg
, IDC_OK
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1481 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), FALSE
);
1485 if (LOWORD(wParam
) == IDCANCEL
)
1487 EndDialog(hwndDlg
, FALSE
);
1490 else if (LOWORD(wParam
) == IDC_OK
)
1492 pSettings
= (TcpipDnsSettings
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1493 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, WM_GETTEXT
, 16, (LPARAM
)pSettings
->szIP
);
1494 if (SendMessageW(pSettings
->hDlgCtrl
, LB_FINDSTRING
, 0, (LPARAM
)pSettings
->szIP
) == LB_ERR
)
1496 if (pSettings
->bAdd
)
1497 SendMessageW(pSettings
->hDlgCtrl
, LB_ADDSTRING
, 0, (LPARAM
)pSettings
->szIP
);
1498 EndDialog(hwndDlg
, TRUE
);
1501 if (!pSettings
->bAdd
)
1503 EndDialog(hwndDlg
, FALSE
);
1506 DisplayError(IDS_DUP_SUFFIX
, IDS_TCPIP
, MB_ICONERROR
);
1511 lpnmipa
= (LPNMIPADDRESS
) lParam
;
1512 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
1514 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
1516 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
1517 EnableWindow(GetDlgItem(hwndDlg
, IDC_OK
), TRUE
);
1528 InitializeTcpipAdvancedDNSDlg(
1530 TcpipConfNotifyImpl
* This
)
1532 WCHAR szBuffer
[200];
1533 LPWSTR pFirst
, pSep
, pList
;
1537 /* insert DNS addresses */
1538 pAddr
= This
->pCurrentConfig
->Ns
;
1541 dwIpAddr
= pAddr
->IpAddress
;
1542 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
1543 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
1545 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_ADDSTRING
, 0, (LPARAM
)szBuffer
);
1546 pAddr
= pAddr
->Next
;
1548 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, 0, 0);
1550 if (!This
->pCurrentConfig
->pDNS
)
1553 if (This
->pCurrentConfig
->pDNS
->RegisterAdapterName
)
1554 SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1556 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1558 if (This
->pCurrentConfig
->pDNS
->RegistrationEnabled
)
1559 SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1561 if (This
->pCurrentConfig
->pDNS
->szDomain
[0])
1562 SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_SETTEXT
, 0, (LPARAM
)szBuffer
);
1564 if (This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
)
1565 SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1567 if (!This
->pCurrentConfig
->pDNS
->szSearchList
|| (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
) == 0))
1569 SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1570 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1575 pList
= This
->pCurrentConfig
->pDNS
->szSearchList
;
1581 pSep
= wcschr(pFirst
, L
',');
1585 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1591 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)pFirst
);
1596 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1597 SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_SETCHECK
, BST_CHECKED
, 0);
1598 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, 0, 0);
1603 ToggleUpDown(HWND hwndDlg
, HWND hDlgCtrl
, UINT UpButton
, UINT DownButton
, UINT ModButton
, UINT DelButton
)
1605 LRESULT lResult
, lCount
;
1607 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1608 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1609 if (lResult
!= LB_ERR
)
1612 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1614 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), TRUE
);
1616 if (lResult
< lCount
-1)
1617 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), TRUE
);
1619 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1624 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), TRUE
);
1625 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), TRUE
);
1629 EnableWindow(GetDlgItem(hwndDlg
, ModButton
), FALSE
);
1630 EnableWindow(GetDlgItem(hwndDlg
, DelButton
), FALSE
);
1631 EnableWindow(GetDlgItem(hwndDlg
, UpButton
), FALSE
);
1632 EnableWindow(GetDlgItem(hwndDlg
, DownButton
), FALSE
);
1641 WCHAR szBuffer
[100];
1644 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1645 if (lResult
!= LB_ERR
)
1647 if (SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, (WPARAM
)lResult
, 0) < sizeof(szBuffer
)/sizeof(WCHAR
) - 1)
1649 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, (WPARAM
)lResult
, (LPARAM
)szBuffer
) != LB_ERR
)
1651 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1652 SendMessageW(hDlgCtrl
, LB_INSERTSTRING
, (WPARAM
)lResult
+ pos
, (LPARAM
)szBuffer
);
1653 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
+ pos
, 0);
1662 LRESULT lResult
, lCount
;
1664 lResult
= SendMessageW(hDlgCtrl
, LB_GETCURSEL
, 0, 0);
1665 if (lResult
!= LB_ERR
)
1667 SendMessageW(hDlgCtrl
, LB_DELETESTRING
, (WPARAM
)lResult
, 0);
1668 lCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1669 if (lResult
+ 1 < lCount
)
1670 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lResult
, 0);
1672 SendMessageW(hDlgCtrl
, LB_SETCURSEL
, (WPARAM
)lCount
-1, 0);
1683 LPWSTR pszSearchList
, pItem
;
1685 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1686 if (!iCount
|| iCount
== LB_ERR
)
1687 return NULL
; //BUGBUG
1691 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1693 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXTLEN
, iIndex
, 0);
1694 if (lResult
== LB_ERR
)
1697 dwSize
+= lResult
+ 1;
1700 pszSearchList
= (LPWSTR
)CoTaskMemAlloc((dwSize
+ 1) * sizeof(WCHAR
));
1704 pItem
= pszSearchList
;
1705 for (iIndex
= 0; iIndex
< iCount
; iIndex
++)
1707 lResult
= SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)pItem
);
1708 if (lResult
== LB_ERR
)
1710 CoTaskMemFree(pszSearchList
);
1713 dwSize
-= lResult
+ 1;
1714 pItem
+= wcslen(pItem
);
1715 if (iIndex
!= iCount
-1)
1722 return pszSearchList
;
1728 TcpipConfNotifyImpl
*This
)
1732 IP_ADDR
*pCur
, *pLast
;
1734 FreeIPAddr(This
->pCurrentConfig
->Ns
);
1735 This
->pCurrentConfig
->Ns
= NULL
;
1737 iCount
= SendMessageW(hDlgCtrl
, LB_GETCOUNT
, 0, 0);
1738 if (!iCount
|| iCount
== LB_ERR
)
1744 for(iIndex
= 0; iIndex
< iCount
; iIndex
++)
1746 if (SendMessageW(hDlgCtrl
, LB_GETTEXT
, iIndex
, (LPARAM
)Ip
) == LB_ERR
)
1749 pCur
= CoTaskMemAlloc(sizeof(IP_ADDR
));
1752 ZeroMemory(pCur
, sizeof(IP_ADDR
));
1753 pCur
->IpAddress
= GetIpAddressFromStringW(Ip
);
1756 This
->pCurrentConfig
->Ns
= pCur
;
1767 TcpipAdvancedDnsDlg(
1774 TcpipConfNotifyImpl
* This
;
1775 LPPROPSHEETPAGE page
;
1776 TcpipDnsSettings Dns
;
1777 LRESULT lIndex
, lLength
;
1778 TcpipSuffixSettings Suffix
;
1780 WCHAR szSuffix
[100];
1781 WCHAR szFormat
[200];
1782 WCHAR szBuffer
[300];
1788 page
= (LPPROPSHEETPAGE
)lParam
;
1789 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
1790 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (INT_PTR
)This
);
1791 InitializeTcpipAdvancedDNSDlg(hwndDlg
, This
);
1792 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1793 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1796 lppsn
= (LPPSHNOTIFY
) lParam
;
1797 if (lppsn
->hdr
.code
== PSN_KILLACTIVE
)
1799 if (SendDlgItemMessageW(hwndDlg
, IDC_SELSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
&&
1800 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCOUNT
, 0, 0) == 0)
1802 DisplayError(IDS_NO_SUFFIX
, IDS_TCPIP
, MB_ICONWARNING
);
1803 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1806 if (SendDlgItemMessageW(hwndDlg
, IDC_SUFFIX
, WM_GETTEXT
, sizeof(szSuffix
)/sizeof(WCHAR
), (LPARAM
)szSuffix
))
1808 szSuffix
[(sizeof(szSuffix
)/sizeof(WCHAR
))-1] = L
'\0';
1809 if (VerifyDNSSuffix(szSuffix
) == FALSE
)
1811 if (LoadStringW(netcfgx_hInstance
, IDS_DNS_SUFFIX
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1813 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1814 swprintf(szBuffer
, szFormat
, szSuffix
);
1815 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szFormat
, sizeof(szFormat
)/sizeof(WCHAR
)))
1816 szFormat
[(sizeof(szFormat
)/sizeof(WCHAR
))-1] = L
'\0';
1818 szFormat
[0] = L
'\0';
1820 MessageBoxW(hwndDlg
, szBuffer
, szFormat
, MB_ICONWARNING
);
1821 SetWindowLongPtr(hwndDlg
, DWL_MSGRESULT
, TRUE
);
1822 SetFocus(GetDlgItem(hwndDlg
, IDC_SUFFIX
));
1828 else if (lppsn
->hdr
.code
== PSN_APPLY
)
1830 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
1831 if (!This
->pCurrentConfig
->pDNS
)
1834 StoreDNSSettings(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), This
);
1835 if (SendDlgItemMessageW(hwndDlg
, IDC_PRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1837 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1838 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1839 if (SendDlgItemMessageW(hwndDlg
, IDC_TOPPRIMSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1840 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= TRUE
;
1842 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1846 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
1847 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
1848 This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
= FALSE
;
1849 This
->pCurrentConfig
->pDNS
->szSearchList
= GetListViewEntries(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1852 if (SendDlgItemMessageW(hwndDlg
, IDC_REGSUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1854 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= TRUE
;
1855 if (SendDlgItemMessageW(hwndDlg
, IDC_USESUFFIX
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1856 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= TRUE
;
1858 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1862 This
->pCurrentConfig
->pDNS
->RegisterAdapterName
= FALSE
;
1863 This
->pCurrentConfig
->pDNS
->RegistrationEnabled
= FALSE
;
1868 if (LOWORD(wParam
) == IDC_DNSADDRLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1870 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1871 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1874 else if (LOWORD(wParam
) == IDC_DNSSUFFIXLIST
&& HIWORD(wParam
) == LBN_SELCHANGE
)
1876 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1877 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1880 else if (LOWORD(wParam
) == IDC_PRIMSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1882 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1884 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXUP
), FALSE
);
1885 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDOWN
), FALSE
);
1886 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), FALSE
);
1887 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXMOD
), FALSE
);
1888 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXDEL
), FALSE
);
1889 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), TRUE
);
1890 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_RESETCONTENT
, 0, 0);
1891 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1894 else if (LOWORD(wParam
) == IDC_SELSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1896 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1898 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXADD
), TRUE
);
1899 EnableWindow(GetDlgItem(hwndDlg
, IDC_TOPPRIMSUFFIX
), FALSE
);
1900 ToggleUpDown(hwndDlg
, (HWND
)lParam
, IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1901 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1905 else if (LOWORD(wParam
) == IDC_REGSUFFIX
&& HIWORD(wParam
) == BN_CLICKED
)
1907 if (SendMessageW((HWND
)lParam
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
1908 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), TRUE
);
1910 EnableWindow(GetDlgItem(hwndDlg
, IDC_USESUFFIX
), FALSE
);
1911 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1913 else if (LOWORD(wParam
) == IDC_DNSADDRUP
&& HIWORD(wParam
) == BN_CLICKED
)
1915 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), -1);
1916 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1917 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1918 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1921 else if (LOWORD(wParam
) == IDC_DNSADDRDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1923 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), 1);
1924 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1925 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1926 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1929 else if (LOWORD(wParam
) == IDC_DNSSUFFIXUP
&& HIWORD(wParam
) == BN_CLICKED
)
1931 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), -1);
1932 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1933 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1934 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1937 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDOWN
&& HIWORD(wParam
) == BN_CLICKED
)
1939 MoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), 1);
1940 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1941 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1942 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1945 else if (LOWORD(wParam
) == IDC_DNSADDRDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1947 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1948 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1949 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1950 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1953 else if (LOWORD(wParam
) == IDC_DNSSUFFIXDEL
&& HIWORD(wParam
) == BN_CLICKED
)
1955 RemoveItem(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1956 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1957 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
1958 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1961 else if (LOWORD(wParam
) == IDC_DNSADDRADD
&& HIWORD(wParam
) == BN_CLICKED
)
1964 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1965 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1967 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
), IDC_DNSADDRUP
, IDC_DNSADDRDOWN
, IDC_DNSADDRMOD
, IDC_DNSADDRDEL
);
1968 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1972 else if (LOWORD(wParam
) == IDC_DNSADDRMOD
&& HIWORD(wParam
) == BN_CLICKED
)
1974 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSADDRLIST
, LB_GETCURSEL
, 0, 0);
1975 if (lIndex
!= LB_ERR
)
1978 Dns
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
);
1979 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_GETTEXT
, (WPARAM
)lIndex
, (LPARAM
)Dns
.szIP
);
1980 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPDNS_DLG
), NULL
, TcpipAddDNSDlg
, (LPARAM
)&Dns
))
1982 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_DELETESTRING
, lIndex
, 0);
1983 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Dns
.szIP
);
1984 SendDlgItemMessageW(hwndDlg
, IDC_DNSADDRLIST
, LB_SETCURSEL
, lIndex
, 0);
1985 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSADDRLIST
));
1986 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
1991 else if (LOWORD(wParam
) == IDC_DNSSUFFIXADD
&& HIWORD(wParam
) == BN_CLICKED
)
1994 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
1995 Suffix
.Suffix
= NULL
;
1996 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
1998 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
1999 lIndex
= SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_ADDSTRING
, 0, (LPARAM
)Suffix
.Suffix
);
2000 if (lIndex
!= LB_ERR
)
2001 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2002 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2003 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2004 CoTaskMemFree(Suffix
.Suffix
);
2008 else if (LOWORD(wParam
) == IDC_DNSSUFFIXMOD
&& HIWORD(wParam
) == BN_CLICKED
)
2010 lIndex
= SendDlgItemMessage(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_GETCURSEL
, 0, 0);
2011 if (lIndex
!= LB_ERR
)
2013 Suffix
.bAdd
= FALSE
;
2014 Suffix
.hDlgCtrl
= GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
);
2015 lLength
= SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXTLEN
, lIndex
, 0);
2016 if (lLength
!= LB_ERR
)
2018 Suffix
.Suffix
= (LPWSTR
)CoTaskMemAlloc((lLength
+ 1) * sizeof(WCHAR
));
2021 SendMessageW(Suffix
.hDlgCtrl
, LB_GETTEXT
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2022 Suffix
.Suffix
[lLength
] = L
'\0';
2023 if (DialogBoxParamW(netcfgx_hInstance
, MAKEINTRESOURCEW(IDD_TCPIPSUFFIX_DLG
), NULL
, TcpipAddSuffixDlg
, (LPARAM
)&Suffix
))
2027 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_DELETESTRING
, lIndex
, 0);
2028 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_INSERTSTRING
, lIndex
, (LPARAM
)Suffix
.Suffix
);
2029 SendDlgItemMessageW(hwndDlg
, IDC_DNSSUFFIXLIST
, LB_SETCURSEL
, lIndex
, 0);
2030 SetFocus(GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
));
2031 CoTaskMemFree(Suffix
.Suffix
);
2033 ToggleUpDown(hwndDlg
, GetDlgItem(hwndDlg
, IDC_DNSSUFFIXLIST
), IDC_DNSSUFFIXUP
, IDC_DNSSUFFIXDOWN
, IDC_DNSSUFFIXMOD
, IDC_DNSSUFFIXDEL
);
2034 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2046 LaunchAdvancedTcpipSettings(
2049 TcpipConfNotifyImpl
* This
)
2051 PROPSHEETHEADERW pinfo
;
2052 HPROPSHEETPAGE hppages
[3];
2053 WCHAR szBuffer
[100];
2055 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVIP_DLG
), TcpipAdvancedIpDlg
, (LPARAM
)This
, NULL
);
2056 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVDNS_DLG
), TcpipAdvancedDnsDlg
, (LPARAM
)This
, NULL
);
2057 hppages
[2] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ADVOPT_DLG
), TcpipAdvancedOptDlg
, (LPARAM
)This
, NULL
);
2060 if (LoadStringW(netcfgx_hInstance
, IDS_TCPIP
, szBuffer
, sizeof(szBuffer
)/sizeof(WCHAR
)))
2061 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2063 szBuffer
[0] = L
'\0';
2065 ZeroMemory(&pinfo
, sizeof(PROPSHEETHEADERW
));
2066 pinfo
.dwSize
= sizeof(PROPSHEETHEADERW
);
2067 pinfo
.dwFlags
= PSH_NOCONTEXTHELP
| PSH_PROPTITLE
| PSH_NOAPPLYNOW
;
2068 pinfo
.u3
.phpage
= hppages
;
2070 pinfo
.hwndParent
= hDlg
;
2071 pinfo
.pszCaption
= szBuffer
;
2073 StoreTcpipBasicSettings(hwndDlg
, This
, FALSE
);
2074 PropertySheetW(&pinfo
);
2076 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2077 PropSheet_Changed(hDlg
, hwndDlg
);
2097 AddAlternativeDialog(
2099 TcpipConfNotifyImpl
* This
)
2101 HPROPSHEETPAGE hpage
;
2103 hpage
= InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2107 SendMessageW(hDlg
, PSM_INSERTPAGE
, 1, (LPARAM
)hpage
);
2111 StoreTcpipBasicSettings(
2113 TcpipConfNotifyImpl
* This
,
2118 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2120 This
->pCurrentConfig
->DhcpEnabled
= FALSE
;
2121 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2125 DisplayError(IDS_NO_IPADDR_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2126 SetFocus(GetDlgItem(hwndDlg
, IDC_IPADDR
));
2130 if (!This
->pCurrentConfig
->Ip
)
2132 This
->pCurrentConfig
->Ip
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2133 if (!This
->pCurrentConfig
->Ip
)
2134 return E_OUTOFMEMORY
;
2135 ZeroMemory(This
->pCurrentConfig
->Ip
, sizeof(IP_ADDR
));
2137 This
->pCurrentConfig
->Ip
->IpAddress
= dwIpAddr
;
2139 if (SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) != 4)
2142 DisplayError(IDS_NO_SUBMASK_SET
, IDS_TCPIP
, MB_ICONWARNING
);
2143 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2145 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2146 dwIpAddr
= MAKEIPADDRESS(255, 0, 0, 0);
2147 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2148 dwIpAddr
= MAKEIPADDRESS(255, 255, 0, 0);
2149 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2150 dwIpAddr
= MAKEIPADDRESS(255, 255, 255, 0);
2152 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)dwIpAddr
);
2156 SetFocus(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
));
2160 /* store subnetmask */
2161 This
->pCurrentConfig
->Ip
->u
.Subnetmask
= dwIpAddr
;
2163 if (SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2165 if (!This
->pCurrentConfig
->Gw
)
2167 This
->pCurrentConfig
->Gw
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2168 if (!This
->pCurrentConfig
->Gw
)
2169 return E_OUTOFMEMORY
;
2170 ZeroMemory(This
->pCurrentConfig
->Gw
, sizeof(IP_ADDR
));
2172 /* store default gateway */
2173 This
->pCurrentConfig
->Gw
->IpAddress
= dwIpAddr
;
2178 This
->pCurrentConfig
->DhcpEnabled
= TRUE
;
2180 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2183 This
->pCurrentConfig
->AutoconfigActive
= FALSE
;
2184 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2186 if (!This
->pCurrentConfig
->Ns
)
2188 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2189 if (!This
->pCurrentConfig
->Ns
)
2190 return E_OUTOFMEMORY
;
2191 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2193 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2195 else if (This
->pCurrentConfig
->Ns
)
2197 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
;
2199 CoTaskMemFree(This
->pCurrentConfig
->Ns
);
2200 This
->pCurrentConfig
->Ns
= pTemp
;
2205 if (SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2207 if (!This
->pCurrentConfig
->Ns
|| bSkip
)
2209 if (!This
->pCurrentConfig
->Ns
)
2211 This
->pCurrentConfig
->Ns
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2212 if (!This
->pCurrentConfig
->Ns
)
2213 return E_OUTOFMEMORY
;
2214 ZeroMemory(This
->pCurrentConfig
->Ns
, sizeof(IP_ADDR
));
2216 This
->pCurrentConfig
->Ns
->IpAddress
= dwIpAddr
;
2218 else if (!This
->pCurrentConfig
->Ns
->Next
)
2220 This
->pCurrentConfig
->Ns
->Next
= (IP_ADDR
*)CoTaskMemAlloc(sizeof(IP_ADDR
));
2221 if (!This
->pCurrentConfig
->Ns
->Next
)
2222 return E_OUTOFMEMORY
;
2223 ZeroMemory(This
->pCurrentConfig
->Ns
->Next
, sizeof(IP_ADDR
));
2224 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2228 This
->pCurrentConfig
->Ns
->Next
->IpAddress
= dwIpAddr
;
2233 if (This
->pCurrentConfig
->Ns
&& This
->pCurrentConfig
->Ns
->Next
)
2235 if (This
->pCurrentConfig
->Ns
->Next
->Next
)
2237 IP_ADDR
*pTemp
= This
->pCurrentConfig
->Ns
->Next
->Next
;
2238 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2239 This
->pCurrentConfig
->Ns
->Next
= pTemp
;
2243 CoTaskMemFree(This
->pCurrentConfig
->Ns
->Next
);
2244 This
->pCurrentConfig
->Ns
->Next
= NULL
;
2251 This
->pCurrentConfig
->AutoconfigActive
= TRUE
;
2257 InitializeTcpipBasicDlgCtrls(
2259 TcpipSettings
* pCurSettings
)
2261 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2262 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2263 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2264 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2266 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 0, MAKEIPRANGE(0, 255));
2267 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2268 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2269 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2271 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2272 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2273 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2274 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2276 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2277 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2278 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2279 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2281 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 0, MAKEIPRANGE(1, 223));
2282 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 1, MAKEIPRANGE(0, 255));
2283 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 2, MAKEIPRANGE(0, 255));
2284 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETRANGE
, 3, MAKEIPRANGE(0, 255));
2286 if (pCurSettings
->DhcpEnabled
)
2288 SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2289 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2290 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2291 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2292 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2296 SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_SETCHECK
, BST_CHECKED
, 0);
2298 if (pCurSettings
->Ip
)
2300 /* set current ip address */
2301 SendDlgItemMessageA(hwndDlg
, IDC_IPADDR
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->IpAddress
);
2302 /* set current hostmask */
2303 SendDlgItemMessageA(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ip
->u
.Subnetmask
);
2305 if (pCurSettings
->Gw
->IpAddress
)
2307 /* set current gateway */
2308 SendDlgItemMessageA(hwndDlg
, IDC_DEFGATEWAY
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Gw
->IpAddress
);
2311 if (pCurSettings
->AutoconfigActive
)
2313 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2314 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2315 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2319 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2320 if (pCurSettings
->Ns
)
2322 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->IpAddress
);
2323 if (pCurSettings
->Ns
->Next
)
2325 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_SETADDRESS
, 0, (LPARAM
)pCurSettings
->Ns
->Next
->IpAddress
);
2329 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2334 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2335 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2344 IP_ADDR_STRING
* pSrc
,
2350 IP_ADDR_STRING
* pCurrent
;
2351 IP_ADDR
*pNew
, *pLast
;
2360 pNew
= CoTaskMemAlloc(sizeof(IP_ADDR
));
2365 ZeroMemory(pNew
, sizeof(IP_ADDR
));
2366 pNew
->IpAddress
= GetIpAddressFromStringA(pCurrent
->IpAddress
.String
);
2367 if (!pNew
->IpAddress
)
2369 CoTaskMemFree(pNew
);
2373 if (Type
== SUBMASK
)
2375 pNew
->u
.Subnetmask
= GetIpAddressFromStringA(pCurrent
->IpMask
.String
);
2377 else if (Type
== METRIC
)
2379 if (szMetric
&& szMetric
[0] != L
'\0')
2381 pNew
->u
.Metric
= _wtoi(szMetric
);
2382 szMetric
+= wcslen(szMetric
) + 1;
2392 pCurrent
= pCurrent
->Next
;
2410 TcpipConfNotifyImpl
* This
;
2411 LPPROPSHEETPAGE page
;
2412 LPNMIPADDRESS lpnmipa
;
2420 page
= (LPPROPSHEETPAGE
)lParam
;
2421 This
= (TcpipConfNotifyImpl
*)page
->lParam
;
2422 if (This
->pCurrentConfig
)
2423 InitializeTcpipBasicDlgCtrls(hwndDlg
, This
->pCurrentConfig
);
2424 SetWindowLongPtr(hwndDlg
, DWLP_USER
, (LONG_PTR
)This
);
2427 lppsn
= (LPPSHNOTIFY
) lParam
;
2428 lpnmipa
= (LPNMIPADDRESS
) lParam
;
2429 if (lpnmipa
->hdr
.code
== IPN_FIELDCHANGED
)
2431 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2432 if (lpnmipa
->hdr
.idFrom
== IDC_IPADDR
)
2434 if (SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_GETADDRESS
, 0, (LPARAM
)&dwIpAddr
) == 4)
2436 if (dwIpAddr
<= MAKEIPADDRESS(127, 255, 255, 255))
2437 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 0, 0, 0));
2438 else if (dwIpAddr
<= MAKEIPADDRESS(191, 255, 255, 255))
2439 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 0, 0));
2440 else if (dwIpAddr
<= MAKEIPADDRESS(223, 255, 255, 255))
2441 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_SETADDRESS
, 0, (LPARAM
)MAKEIPADDRESS(255, 255, 255, 0));
2445 else if (lppsn
->hdr
.code
== PSN_APPLY
)
2447 This
= (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
);
2448 if (SUCCEEDED(StoreTcpipBasicSettings(hwndDlg
, This
, TRUE
)))
2449 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_NOERROR
);
2451 SetWindowLong(hwndDlg
, DWL_MSGRESULT
, PSNRET_INVALID
);
2457 if (HIWORD(wParam
) == BN_CLICKED
)
2459 switch (LOWORD(wParam
))
2462 if (SendDlgItemMessageW(hwndDlg
, IDC_USEDHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2464 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2465 SendDlgItemMessageW(hwndDlg
, IDC_IPADDR
, IPM_CLEARADDRESS
, 0, 0);
2466 SendDlgItemMessageW(hwndDlg
, IDC_SUBNETMASK
, IPM_CLEARADDRESS
, 0, 0);
2467 SendDlgItemMessageW(hwndDlg
, IDC_DEFGATEWAY
, IPM_CLEARADDRESS
, 0, 0);
2468 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), FALSE
);
2469 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), FALSE
);
2470 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), FALSE
);
2471 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), TRUE
);
2472 AddAlternativeDialog(GetParent(hwndDlg
), (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2476 if (SendDlgItemMessageW(hwndDlg
, IDC_NODHCP
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2478 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2479 EnableWindow(GetDlgItem(hwndDlg
, IDC_IPADDR
), TRUE
);
2480 EnableWindow(GetDlgItem(hwndDlg
, IDC_SUBNETMASK
), TRUE
);
2481 EnableWindow(GetDlgItem(hwndDlg
, IDC_DEFGATEWAY
), TRUE
);
2482 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2484 SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_SETCHECK
, BST_UNCHECKED
, 0);
2486 EnableWindow(GetDlgItem(hwndDlg
, IDC_AUTODNS
), FALSE
);
2487 SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_SETCHECK
, BST_CHECKED
, 0);
2488 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2489 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2490 SendMessageW(GetParent(hwndDlg
), PSM_REMOVEPAGE
, 1, 0);
2494 if (SendDlgItemMessageW(hwndDlg
, IDC_AUTODNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2496 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2497 SendDlgItemMessageW(hwndDlg
, IDC_DNS1
, IPM_CLEARADDRESS
, 0, 0);
2498 SendDlgItemMessageW(hwndDlg
, IDC_DNS2
, IPM_CLEARADDRESS
, 0, 0);
2499 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), FALSE
);
2500 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), FALSE
);
2504 if (SendDlgItemMessageW(hwndDlg
, IDC_FIXEDDNS
, BM_GETCHECK
, 0, 0) == BST_CHECKED
)
2506 PropSheet_Changed(GetParent(hwndDlg
), hwndDlg
);
2507 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS1
), TRUE
);
2508 EnableWindow(GetDlgItem(hwndDlg
, IDC_DNS2
), TRUE
);
2512 LaunchAdvancedTcpipSettings(GetParent(hwndDlg
), hwndDlg
, (TcpipConfNotifyImpl
*)GetWindowLongPtr(hwndDlg
, DWLP_USER
));
2524 /***************************************************************
2525 * INetCfgComponentPropertyUi interface
2530 INetCfgComponentPropertyUi_fnQueryInterface(
2531 INetCfgComponentPropertyUi
* iface
,
2536 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2541 if (IsEqualIID (iid
, &IID_IUnknown
) ||
2542 IsEqualIID (iid
, &IID_INetCfgComponentPropertyUi
))
2545 INetCfgComponentPropertyUi_AddRef(iface
);
2548 else if (IsEqualIID(iid
, &IID_INetCfgComponentControl
))
2550 *ppvObj
= (LPVOID
*)&This
->lpVtblCompControl
;
2551 INetCfgComponentPropertyUi_AddRef(iface
);
2555 //StringFromCLSID(iid, &pStr);
2556 //MessageBoxW(NULL, pStr, L"INetConnectionPropertyUi_fnQueryInterface", MB_OK);
2557 //CoTaskMemFree(pStr);
2559 return E_NOINTERFACE
;
2565 INetCfgComponentPropertyUi_fnAddRef(
2566 INetCfgComponentPropertyUi
* iface
)
2568 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2569 ULONG refCount
= InterlockedIncrement(&This
->ref
);
2576 INetCfgComponentPropertyUi_fnRelease(
2577 INetCfgComponentPropertyUi
* iface
)
2579 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2580 ULONG refCount
= InterlockedDecrement(&This
->ref
);
2584 CoTaskMemFree(This
);
2591 INetCfgComponentPropertyUi_fnQueryPropertyUi(
2592 INetCfgComponentPropertyUi
* iface
,
2593 IUnknown
*pUnkReserved
)
2595 INetLanConnectionUiInfo
* pLanInfo
;
2597 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2599 hr
= IUnknown_QueryInterface(pUnkReserved
, &IID_INetLanConnectionUiInfo
, (LPVOID
*)&pLanInfo
);
2603 INetLanConnectionUiInfo_GetDeviceGuid(pLanInfo
, &This
->NetCfgInstanceId
);
2606 // check if tcpip is enabled on that binding */
2607 IUnknown_Release(pUnkReserved
);
2613 INetCfgComponentPropertyUi_fnSetContext(
2614 INetCfgComponentPropertyUi
* iface
,
2615 IUnknown
*pUnkReserved
)
2617 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2619 if (!iface
|| !pUnkReserved
)
2622 This
->pUnknown
= pUnkReserved
;
2628 TcpipConfNotifyImpl
* This
)
2631 WCHAR szBuffer
[200];
2635 This
->pCurrentConfig
->pDNS
= (TcpipAdvancedDNSDlgSettings
*) CoTaskMemAlloc(sizeof(TcpipAdvancedDNSDlgSettings
));
2636 if (!This
->pCurrentConfig
->pDNS
)
2639 ZeroMemory(This
->pCurrentConfig
->pDNS
, sizeof(TcpipAdvancedDNSDlgSettings
));
2641 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2644 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2645 CoTaskMemFree(pStr
);
2646 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2648 dwSize
= sizeof(DWORD
);
2649 RegQueryValueExW(hKey
, L
"RegisterAdapterName", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, &dwSize
);
2650 RegQueryValueExW(hKey
, L
"RegistrationEnabled", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, &dwSize
);
2652 dwSize
= sizeof(This
->pCurrentConfig
->pDNS
->szDomain
) / sizeof(WCHAR
);
2653 RegQueryValueExW(hKey
, L
"Domain", NULL
, NULL
, (LPBYTE
)szBuffer
, &dwSize
);
2658 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2660 dwSize
= sizeof(DWORD
);
2661 RegQueryValueExW(hKey
, L
"UseDomainNameDevolution", NULL
, NULL
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, &dwSize
);
2664 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, NULL
, &dwSize
) == ERROR_SUCCESS
)
2666 This
->pCurrentConfig
->pDNS
->szSearchList
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2667 if (This
->pCurrentConfig
->pDNS
->szSearchList
)
2669 if (RegQueryValueExW(hKey
, L
"SearchList", NULL
, NULL
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
, &dwSize
) != ERROR_SUCCESS
)
2671 CoTaskMemFree(This
->pCurrentConfig
->pDNS
->szSearchList
);
2672 This
->pCurrentConfig
->pDNS
->szSearchList
= NULL
;
2682 LoadTcpFilterSettingsFromRegistry(HKEY hKey
, LPCWSTR szName
, LPDWORD Size
)
2687 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, NULL
, &dwSize
) != ERROR_SUCCESS
)
2690 pData
= (LPWSTR
)CoTaskMemAlloc(dwSize
);
2694 if (RegQueryValueExW(hKey
, szName
, NULL
, NULL
, (LPBYTE
)pData
, &dwSize
) != ERROR_SUCCESS
)
2696 CoTaskMemFree(pData
);
2705 TcpipConfNotifyImpl
* This
)
2708 TcpFilterSettings
*pFilter
;
2709 WCHAR szBuffer
[200];
2711 DWORD dwVal
, dwSize
;
2713 pFilter
= (TcpFilterSettings
*)CoTaskMemAlloc(sizeof(TcpFilterSettings
));
2717 ZeroMemory(pFilter
, sizeof(TcpFilterSettings
));
2718 This
->pCurrentConfig
->pFilter
= pFilter
;
2721 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
2723 dwSize
= sizeof(DWORD
);
2724 if (RegQueryValueExW(hKey
, L
"EnableSecurityFilters", NULL
, NULL
, (LPBYTE
)&dwVal
, &dwSize
) == ERROR_SUCCESS
)
2725 pFilter
->EnableSecurityFilters
= dwVal
;
2730 pFilter
->EnableSecurityFilters
= FALSE
;
2733 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
2736 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
2737 CoTaskMemFree(pStr
);
2738 if (RegOpenKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, KEY_READ
, &hKey
) != ERROR_SUCCESS
)
2742 pFilter
->szTCPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"TCPAllowedPorts", &pFilter
->TCPSize
);
2743 pFilter
->szUDPAllowedPorts
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"UDPAllowedPorts", &pFilter
->UDPSize
);
2744 pFilter
->szRawIPAllowedProtocols
= LoadTcpFilterSettingsFromRegistry(hKey
, L
"RawIPAllowedProtocols", &pFilter
->IPSize
);
2751 InitializeTcpipBasicDlg(TcpipConfNotifyImpl
* This
)
2755 IP_ADAPTER_INFO
* pCurrentAdapter
;
2756 IP_ADAPTER_INFO
* pInfo
;
2757 PIP_PER_ADAPTER_INFO pPerInfo
;
2761 TcpipSettings
* pCurSettings
;
2764 if (This
->pCurrentConfig
)
2767 hr
= StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
);
2773 if (GetAdaptersInfo(NULL
, &dwSize
) != ERROR_BUFFER_OVERFLOW
)
2775 CoTaskMemFree(pStr
);
2779 pInfo
= CoTaskMemAlloc(dwSize
);
2782 CoTaskMemFree(pStr
);
2786 if (GetAdaptersInfo(pInfo
, &dwSize
) != ERROR_SUCCESS
)
2788 CoTaskMemFree(pStr
);
2789 CoTaskMemFree(pInfo
);
2793 pCurrentAdapter
= pInfo
;
2795 while(pCurrentAdapter
)
2797 szBuffer
[0] = L
'\0';
2798 if (MultiByteToWideChar(CP_ACP
, 0, pCurrentAdapter
->AdapterName
, -1, szBuffer
, sizeof(szBuffer
)/sizeof(szBuffer
[0])))
2800 szBuffer
[(sizeof(szBuffer
)/sizeof(WCHAR
))-1] = L
'\0';
2802 if (!wcsicmp(szBuffer
, pStr
))
2807 pCurrentAdapter
= pCurrentAdapter
->Next
;
2809 CoTaskMemFree(pStr
);
2813 CoTaskMemFree(pInfo
);
2817 pCurSettings
= CoTaskMemAlloc(sizeof(TcpipSettings
));
2820 CoTaskMemFree(pInfo
);
2824 ZeroMemory(pCurSettings
, sizeof(TcpipSettings
));
2825 This
->pCurrentConfig
= pCurSettings
;
2826 pCurSettings
->DhcpEnabled
= pCurrentAdapter
->DhcpEnabled
;
2827 pCurSettings
->Index
= pCurrentAdapter
->Index
;
2829 if (!pCurrentAdapter
->DhcpEnabled
)
2831 CopyIpAddrString(&pCurrentAdapter
->IpAddressList
, &pCurSettings
->Ip
, SUBMASK
, NULL
);
2832 CopyIpAddrString(&pCurrentAdapter
->GatewayList
, &pCurSettings
->Gw
, METRIC
, NULL
); //FIXME
2835 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, NULL
, &uLength
) == ERROR_BUFFER_OVERFLOW
)
2837 pPerInfo
= (PIP_PER_ADAPTER_INFO
)CoTaskMemAlloc(uLength
);
2840 if (GetPerAdapterInfo(pCurrentAdapter
->Index
, pPerInfo
, &uLength
) == NOERROR
)
2842 if (!pPerInfo
->AutoconfigActive
)
2844 CopyIpAddrString(&pPerInfo
->DnsServerList
, &pCurSettings
->Ns
, IPADDR
, NULL
);
2846 pCurSettings
->AutoconfigActive
= pPerInfo
->AutoconfigActive
;
2848 CoTaskMemFree(pInfo
);
2853 if (FAILED(LoadFilterSettings(This
)))
2856 if (FAILED(LoadDNSSettings(This
)))
2859 CoTaskMemFree(pInfo
);
2866 INetCfgComponentPropertyUi_fnMergePropPages(
2867 INetCfgComponentPropertyUi
* iface
,
2869 BYTE
**pahpspPrivate
,
2872 LPCWSTR
*pszStartPage
)
2874 HPROPSHEETPAGE
* hppages
;
2877 TcpipConfNotifyImpl
* This
= (TcpipConfNotifyImpl
*)iface
;
2879 hr
= InitializeTcpipBasicDlg(This
);
2883 if (This
->pCurrentConfig
->DhcpEnabled
)
2888 hppages
= (HPROPSHEETPAGE
*) CoTaskMemAlloc(sizeof(HPROPSHEETPAGE
) * NumPages
);
2892 hppages
[0] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_BASIC_DLG
), TcpipBasicDlg
, (LPARAM
)This
, NULL
);
2895 CoTaskMemFree(hppages
);
2900 hppages
[1] = InitializePropertySheetPage(MAKEINTRESOURCEW(IDD_TCPIP_ALTCF_DLG
), TcpipAltConfDlg
, (LPARAM
)This
, NULL
);
2903 DestroyPropertySheetPage(hppages
[0]);
2904 CoTaskMemFree(hppages
);
2909 *pahpspPrivate
= (BYTE
*)hppages
;
2910 *pcPages
= NumPages
;
2917 INetCfgComponentPropertyUi_fnValidateProperties(
2918 INetCfgComponentPropertyUi
* iface
,
2921 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnValidateProperties", NULL
, MB_OK
);
2927 INetCfgComponentPropertyUi_fnApplyProperties(
2928 INetCfgComponentPropertyUi
* iface
)
2930 MessageBoxW(NULL
, L
"INetCfgComponentPropertyUi_fnApplyProperties", NULL
, MB_OK
);
2937 INetCfgComponentPropertyUi_fnCancelProperties(
2938 INetCfgComponentPropertyUi
* iface
)
2940 //MessageBoxW(NULL, L"INetCfgComponentPropertyUi_fnCancelProperties", NULL, MB_OK);
2944 static const INetCfgComponentPropertyUiVtbl vt_NetCfgComponentPropertyUi
=
2946 INetCfgComponentPropertyUi_fnQueryInterface
,
2947 INetCfgComponentPropertyUi_fnAddRef
,
2948 INetCfgComponentPropertyUi_fnRelease
,
2949 INetCfgComponentPropertyUi_fnQueryPropertyUi
,
2950 INetCfgComponentPropertyUi_fnSetContext
,
2951 INetCfgComponentPropertyUi_fnMergePropPages
,
2952 INetCfgComponentPropertyUi_fnValidateProperties
,
2953 INetCfgComponentPropertyUi_fnApplyProperties
,
2954 INetCfgComponentPropertyUi_fnCancelProperties
2957 /***************************************************************
2958 * INetCfgComponentControl interface
2963 INetCfgComponentControl_fnQueryInterface(
2964 INetCfgComponentControl
* iface
,
2968 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2969 return INetCfgComponentPropertyUi_QueryInterface((INetCfgComponentPropertyUi
*)This
, iid
, ppvObj
);
2974 INetCfgComponentControl_fnAddRef(
2975 INetCfgComponentControl
* iface
)
2977 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2978 return INetCfgComponentPropertyUi_AddRef((INetCfgComponentPropertyUi
*)This
);
2983 INetCfgComponentControl_fnRelease(
2984 INetCfgComponentControl
* iface
)
2986 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
2987 return INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
2992 INetCfgComponentControl_fnInitialize(
2993 INetCfgComponentControl
* iface
,
2994 INetCfgComponent
*pIComp
,
2998 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3000 This
->pNCfg
= pINetCfg
;
3001 This
->pNComp
= pIComp
;
3008 CreateMultiSzString(IP_ADDR
* pAddr
, COPY_TYPE Type
, LPDWORD Size
, BOOL bComma
)
3011 DWORD dwSize
, dwIpAddr
;
3013 IP_ADDR
*pTemp
= pAddr
;
3021 dwIpAddr
= pTemp
->IpAddress
;
3022 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3023 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3024 }else if (Type
== SUBMASK
)
3026 dwIpAddr
= pTemp
->u
.Subnetmask
;
3027 swprintf(szBuffer
, L
"%lu.%lu.%lu.%lu",
3028 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3030 else if (Type
== METRIC
)
3032 swprintf(szBuffer
, L
"%u", pTemp
->u
.Metric
);
3035 dwSize
+= wcslen(szBuffer
) + 1;
3036 pTemp
= pTemp
->Next
;
3042 pStr
= pRet
= CoTaskMemAlloc((dwSize
+1) * sizeof(WCHAR
));
3051 dwIpAddr
= pTemp
->IpAddress
;
3052 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3053 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3054 }else if (Type
== SUBMASK
)
3056 dwIpAddr
= pTemp
->u
.Subnetmask
;
3057 swprintf(pStr
, L
"%lu.%lu.%lu.%lu",
3058 FIRST_IPADDRESS(dwIpAddr
), SECOND_IPADDRESS(dwIpAddr
), THIRD_IPADDRESS(dwIpAddr
), FOURTH_IPADDRESS(dwIpAddr
));
3060 else if (Type
== METRIC
)
3062 swprintf(pStr
, L
"%u", pTemp
->u
.Metric
);
3067 pStr
+= wcslen(pStr
);
3076 pStr
+= wcslen(pStr
) + 1;
3078 pTemp
= pTemp
->Next
;
3081 *Size
= (dwSize
+1) * sizeof(WCHAR
);
3088 INetCfgComponentControl_fnApplyRegistryChanges(
3089 INetCfgComponentControl
* iface
)
3094 WCHAR szBuffer
[200];
3096 TcpipConfNotifyImpl
* This
= impl_from_INetCfgComponentControl(iface
);
3098 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyRegistryChanges", NULL, MB_OK);
3101 if (RegCreateKeyExW(hKey
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters", 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3103 if (This
->pCurrentConfig
->pDNS
)
3105 RegSetValueExW(hKey
, L
"UseDomainNameDevolution", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->UseDomainNameDevolution
, sizeof(DWORD
));
3106 RegSetValueExW(hKey
, L
"SearchList", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szSearchList
,
3107 (wcslen(This
->pCurrentConfig
->pDNS
->szSearchList
)+1) * sizeof(WCHAR
));
3109 if (This
->pCurrentConfig
->pFilter
)
3111 RegSetValueExW(hKey
, L
"EnableSecurityFilters", 0, REG_DWORD
,
3112 (LPBYTE
)&This
->pCurrentConfig
->pFilter
->EnableSecurityFilters
, sizeof(DWORD
));
3117 if (FAILED(StringFromCLSID(&This
->NetCfgInstanceId
, &pStr
)))
3120 swprintf(szBuffer
, L
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\%s", pStr
);
3121 CoTaskMemFree(pStr
);
3123 if (RegCreateKeyExW(HKEY_LOCAL_MACHINE
, szBuffer
, 0, NULL
, 0, KEY_WRITE
, NULL
, &hKey
, NULL
) == ERROR_SUCCESS
)
3125 if (This
->pCurrentConfig
->pDNS
)
3127 RegSetValueExW(hKey
, L
"RegisterAdapterName", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegisterAdapterName
, sizeof(DWORD
));
3128 RegSetValueExW(hKey
, L
"RegistrationEnabled", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->pDNS
->RegistrationEnabled
, sizeof(DWORD
));
3129 RegSetValueExW(hKey
, L
"Domain", 0, REG_SZ
, (LPBYTE
)This
->pCurrentConfig
->pDNS
->szDomain
,
3130 (wcslen(This
->pCurrentConfig
->pDNS
->szDomain
)+1) * sizeof(WCHAR
));
3133 if (This
->pCurrentConfig
->pFilter
)
3135 RegSetValueExW(hKey
, L
"TCPAllowedPorts", 0, REG_MULTI_SZ
,
3136 (LPBYTE
)This
->pCurrentConfig
->pFilter
->szTCPAllowedPorts
,
3137 This
->pCurrentConfig
->pFilter
->TCPSize
);
3139 RegSetValueExW(hKey
, L
"UDPAllowedPorts", 0, REG_MULTI_SZ
,
3140 (LPBYTE
)This
->pCurrentConfig
->pFilter
->szUDPAllowedPorts
,
3141 This
->pCurrentConfig
->pFilter
->UDPSize
);
3143 RegSetValueExW(hKey
, L
"RawIPAllowedProtocols", 0, REG_MULTI_SZ
,
3144 (LPBYTE
)This
->pCurrentConfig
->pFilter
->szRawIPAllowedProtocols
,
3145 This
->pCurrentConfig
->pFilter
->IPSize
);
3148 RegSetValueExW(hKey
, L
"EnableDHCP", 0, REG_DWORD
, (LPBYTE
)&This
->pCurrentConfig
->DhcpEnabled
, sizeof(DWORD
));
3149 if (This
->pCurrentConfig
->DhcpEnabled
)
3151 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3152 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)L
"0.0.0.0\0", 9 * sizeof(WCHAR
));
3153 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3154 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)L
"\0", 2 * sizeof(WCHAR
));
3158 pStr
= CreateMultiSzString(This
->pCurrentConfig
->Ip
, IPADDR
, &dwSize
, FALSE
);
3161 RegSetValueExW(hKey
, L
"IPAddress", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3162 CoTaskMemFree(pStr
);
3165 pStr
= CreateMultiSzString(This
->pCurrentConfig
->Ip
, SUBMASK
, &dwSize
, FALSE
);
3168 RegSetValueExW(hKey
, L
"SubnetMask", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3169 CoTaskMemFree(pStr
);
3172 pStr
= CreateMultiSzString(This
->pCurrentConfig
->Gw
, IPADDR
, &dwSize
, FALSE
);
3175 RegSetValueExW(hKey
, L
"DefaultGateway", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3176 CoTaskMemFree(pStr
);
3179 pStr
= CreateMultiSzString(This
->pCurrentConfig
->Gw
, METRIC
, &dwSize
, FALSE
);
3182 RegSetValueExW(hKey
, L
"DefaultGatewayMetric", 0, REG_MULTI_SZ
, (LPBYTE
)pStr
, dwSize
);
3183 CoTaskMemFree(pStr
);
3187 if (!This
->pCurrentConfig
->Ns
|| This
->pCurrentConfig
->AutoconfigActive
)
3189 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)L
"", 1 * sizeof(WCHAR
));
3193 pStr
= CreateMultiSzString(This
->pCurrentConfig
->Ns
, IPADDR
, &dwSize
, TRUE
);
3196 RegSetValueExW(hKey
, L
"NameServer", 0, REG_SZ
, (LPBYTE
)pStr
, dwSize
);
3197 RegDeleteValueW(hKey
, L
"DhcpNameServer");
3198 CoTaskMemFree(pStr
);
3210 INetCfgComponentControl_fnApplyPnpChanges(
3211 INetCfgComponentControl
* iface
,
3212 INetCfgPnpReconfigCallback
*pICallback
)
3214 //MessageBoxW(NULL, L"INetCfgComponentControl_fnApplyPnpChanges", NULL, MB_OK);
3220 INetCfgComponentControl_fnCancelChanges(
3221 INetCfgComponentControl
* iface
)
3223 //MessageBoxW(NULL, L"INetCfgComponentControl_fnCancelChanges", NULL, MB_OK);
3227 static const INetCfgComponentControlVtbl vt_NetCfgComponentControl
=
3229 INetCfgComponentControl_fnQueryInterface
,
3230 INetCfgComponentControl_fnAddRef
,
3231 INetCfgComponentControl_fnRelease
,
3232 INetCfgComponentControl_fnInitialize
,
3233 INetCfgComponentControl_fnApplyRegistryChanges
,
3234 INetCfgComponentControl_fnApplyPnpChanges
,
3235 INetCfgComponentControl_fnCancelChanges
3240 TcpipConfigNotify_Constructor (IUnknown
* pUnkOuter
, REFIID riid
, LPVOID
* ppv
)
3242 TcpipConfNotifyImpl
*This
;
3247 This
= (TcpipConfNotifyImpl
*) CoTaskMemAlloc(sizeof (TcpipConfNotifyImpl
));
3249 return E_OUTOFMEMORY
;
3252 This
->lpVtbl
= (const INetCfgComponentPropertyUi
*)&vt_NetCfgComponentPropertyUi
;
3253 This
->lpVtblCompControl
= (const INetCfgComponentControl
*)&vt_NetCfgComponentControl
;
3255 This
->pUnknown
= NULL
;
3256 This
->pNComp
= NULL
;
3257 This
->pCurrentConfig
= NULL
;
3259 if (!SUCCEEDED (INetCfgComponentPropertyUi_QueryInterface ((INetCfgComponentPropertyUi
*)This
, riid
, ppv
)))
3261 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);
3262 return E_NOINTERFACE
;
3265 INetCfgComponentPropertyUi_Release((INetCfgComponentPropertyUi
*)This
);