📄 tcpip_properties.c
字号:
if (rc != ERROR_SUCCESS)
goto cleanup;
RegCloseKey(hKey);
/* Save parameters in HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters */
rc = RegOpenKey(HKEY_LOCAL_MACHINE, _T("SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters"), &hKey);
if (rc != ERROR_SUCCESS)
goto cleanup;
if (DlgData->Dns1 == INADDR_NONE)
{
rc = RegDeleteValue(hKey, _T("NameServer"));
if (rc != ERROR_SUCCESS && rc != ERROR_FILE_NOT_FOUND)
goto cleanup;
}
else
{
if (!GetAddressFromField(Dlg, IDC_DNS1, &Address, &AddressString))
goto cleanup;
rc = RegSetValueExA(hKey, "NameServer", 0, REG_SZ, (const BYTE*)AddressString, strlen(AddressString) + 1);
if (rc != ERROR_SUCCESS)
goto cleanup;
}
// arty ... Not needed anymore ... We update the address live now
//MessageBox(NULL, TEXT("You need to reboot before the new parameters take effect."), TEXT("Reboot required"), MB_OK | MB_ICONWARNING);
ret = TRUE;
cleanup:
if (hKey != NULL)
RegCloseKey(hKey);
return ret;
#if 0
Changed = FALSE;
if (DlgData->DhcpEnabled) {
Changed = ! DlgData->OldDhcpEnabled;
IpChanged = FALSE;
DhcpAction = 1;
} else {
Changed = DlgData->OldDhcpEnabled ||
DlgData->IpAddress != DlgData->OldIpAddress ||
DlgData->SubnetMask != DlgData->OldSubnetMask;
IpChanged = DlgData->OldDhcpEnabled ||
DlgData->IpAddress != DlgData->OldIpAddress;
DhcpAction = 2;
}
if (Changed) {
AdapterName = HeapAlloc(GetProcessHeap(), 0,
(strlen(DlgData->AdapterName) + 1) *
sizeof(WCHAR));
if (NULL == AdapterName) {
ShowError(Dlg, IDS_OUT_OF_MEMORY);
return FALSE;
}
MultiByteToWideChar(CP_THREAD_ACP, 0, DlgData->AdapterName, -1,
AdapterName, strlen(DlgData->AdapterName) + 1);
if (0 == DhcpNotifyConfigChange(NULL, AdapterName, IpChanged,
DlgData->AdapterIndex,
DlgData->IpAddress,
DlgData->SubnetMask, DhcpAction)) {
HeapFree(GetProcessHeap(), 0, AdapterName);
ShowError(Dlg, IDS_CANNOT_SAVE_CHANGES);
return FALSE;
}
HeapFree(GetProcessHeap(), 0, AdapterName);
}
/* FIXME Save default gateway and DNS entries */
return TRUE;
#endif
}
static INT_PTR CALLBACK
TCPIPPropertyPageProc(HWND Dlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LPPROPSHEETPAGEW Page;
PTCPIP_PROPERTIES_DATA DlgData;
LPNMHDR Nmhdr;
DlgData = (PTCPIP_PROPERTIES_DATA) GetWindowLongPtrW(Dlg, GWL_USERDATA);
switch(uMsg) {
case WM_INITDIALOG:
Page = (LPPROPSHEETPAGEW) lParam;
DlgData = (PTCPIP_PROPERTIES_DATA) Page->lParam;
SetWindowLongPtrW(Dlg, GWL_USERDATA, Page->lParam);
EnableWindow(GetDlgItem(Dlg, IDC_ADVANCED), FALSE);
EnableDHCP(Dlg, DlgData->OldDhcpEnabled, 0);
if (! DlgData->OldDhcpEnabled)
{
if (INADDR_NONE != DlgData->OldIpAddress) {
SendDlgItemMessage(Dlg, IDC_IPADDR, IPM_SETADDRESS, 0,
ntohl(DlgData->OldIpAddress));
}
if (INADDR_NONE != DlgData->OldSubnetMask) {
SendDlgItemMessage(Dlg, IDC_SUBNETMASK, IPM_SETADDRESS, 0,
ntohl(DlgData->OldSubnetMask));
}
if (INADDR_NONE != DlgData->OldGateway) {
SendDlgItemMessage(Dlg, IDC_DEFGATEWAY, IPM_SETADDRESS, 0,
ntohl(DlgData->OldGateway));
}
}
if (INADDR_NONE != DlgData->OldDns1) {
SendDlgItemMessage(Dlg, IDC_DNS1, IPM_SETADDRESS, 0,
ntohl(DlgData->OldDns1));
if (INADDR_NONE != DlgData->OldDns2) {
SendDlgItemMessage(Dlg, IDC_DNS2, IPM_SETADDRESS, 0,
ntohl(DlgData->OldDns2));
}
}
if (DlgData->OldDhcpEnabled)
{
ManualDNS(Dlg, INADDR_NONE != DlgData->OldDns1, 0);
}
break;
case WM_COMMAND:
switch(LOWORD(wParam)) {
case IDC_FIXEDDNS:
ManualDNS(Dlg, TRUE, LOWORD(wParam));
return TRUE;
case IDC_AUTODNS:
ManualDNS(Dlg, FALSE, LOWORD(wParam));
return TRUE;
case IDC_USEDHCP:
EnableDHCP(Dlg, TRUE, LOWORD(wParam));
return TRUE;
case IDC_NODHCP:
EnableDHCP(Dlg, FALSE, LOWORD(wParam));
return TRUE;
}
break;
case WM_NOTIFY:
Nmhdr = (LPNMHDR) lParam;
switch(Nmhdr->code) {
case PSN_KILLACTIVE:
/* Do validation here, must set FALSE to continue */
SetWindowLongPtrW(Dlg, DWL_MSGRESULT,
(LONG_PTR) ! ValidateAndStore(Dlg, DlgData));
return TRUE;
case PSN_APPLY:
/* Set the IP Address and DNS Information so we won't
* be doing all this for nothing */
SetWindowLongPtrW(Dlg, DWL_MSGRESULT,
InternTCPIPSettings(Dlg, DlgData) ?
PSNRET_NOERROR : PSNRET_INVALID);
return TRUE;
}
break;
}
return FALSE;
}
static BOOL
LoadDataFromInfo(PTCPIP_PROPERTIES_DATA DlgData, IP_ADAPTER_INFO *Info)
{
IP_ADDR_STRING *pString;
WCHAR RegKey[MAX_PATH];
HKEY hKey;
char Dns[MAX_PATH];
DWORD Size;
DWORD Type;
char *NextDnsServer;
DlgData->AdapterName = Info->AdapterName;
DlgData->AdapterIndex = Info->Index;
DlgData->OldDhcpEnabled = Info->DhcpEnabled;
pString = &Info->IpAddressList;
while (NULL != pString->Next) {
pString = pString->Next;
}
DlgData->OldIpAddress = inet_addr(pString->IpAddress.String);
DlgData->OldSubnetMask = inet_addr(pString->IpMask.String);
pString = &Info->GatewayList;
while (NULL != pString->Next) {
pString = pString->Next;
}
DlgData->OldGateway = inet_addr(pString->IpAddress.String);
DlgData->OldDns1 = INADDR_NONE;
DlgData->OldDns2 = INADDR_NONE;
swprintf(RegKey,
L"SYSTEM\\CurrentControlSet\\Services\\TCPIP\\Parameters\\Interfaces\\%S",
Info->AdapterName);
if (ERROR_SUCCESS == RegOpenKeyW(HKEY_LOCAL_MACHINE, RegKey, &hKey)) {
Size = sizeof(Dns);
RegQueryValueExA(hKey, "NameServer", NULL, &Type, (BYTE *)Dns,
&Size);
RegCloseKey(hKey);
if ('\0' != Dns[0]) {
DlgData->OldDns1 = inet_addr(Dns);
NextDnsServer = strchr(Dns, ',');
if (NULL != NextDnsServer && '\0' != *NextDnsServer) {
DlgData->OldDns2 = inet_addr(NextDnsServer);
}
}
}
return TRUE;
}
void
DisplayTCPIPProperties(HWND hParent, IP_ADAPTER_INFO *pInfo)
{
PROPSHEETPAGEW psp[1];
PROPSHEETHEADERW psh;
INITCOMMONCONTROLSEX cce;
TCPIP_PROPERTIES_DATA DlgData;
LPTSTR tpszCaption = NULL;
INT StrLen;
HWND hListBox = GetDlgItem(hParent, IDC_COMPONENTSLIST);
int iListBoxIndex = (int) SendMessage(hListBox, LB_GETCURSEL, 0, 0);
if(iListBoxIndex != LB_ERR)
{
StrLen = SendMessage(hListBox, LB_GETTEXTLEN, iListBoxIndex, 0);
if (StrLen != LB_ERR)
{
TCHAR suffix[] = _T(" Properties");
INT HeapSize = ((StrLen + 1) + (_tcslen(suffix) + 1)) * sizeof(TCHAR);
tpszCaption = (LPTSTR)HeapAlloc(GetProcessHeap(), 0, HeapSize);
SendMessage(hListBox, LB_GETTEXT, iListBoxIndex, (LPARAM)tpszCaption);
_tcscat(tpszCaption, suffix);
}
}
if (! LoadDataFromInfo(&DlgData, pInfo))
{
ShowError(hParent, IDS_CANNOT_LOAD_CONFIG);
return;
}
cce.dwSize = sizeof(INITCOMMONCONTROLSEX);
cce.dwICC = ICC_INTERNET_CLASSES;
InitCommonControlsEx(&cce);
ZeroMemory(&psh, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_PROPSHEETPAGE | PSH_NOAPPLYNOW;
psh.hwndParent = hParent;
psh.hInstance = hApplet;
psh.hIcon = LoadIcon(hApplet, MAKEINTRESOURCE(IDI_CPLSYSTEM));
psh.pszCaption = tpszCaption;
psh.nPages = sizeof(psp) / sizeof(PROPSHEETPAGE);
psh.nStartPage = 0;
psh.ppsp = psp;
psh.pfnCallback = NULL;
InitPropSheetPage(&psp[0], IDD_TCPIPPROPERTIES, TCPIPPropertyPageProc, (LPARAM) &DlgData);
if (PropertySheetW(&psh) == -1)
{
ShowError(hParent, IDS_CANNOT_CREATE_PROPSHEET);
}
if (tpszCaption != NULL)
HeapFree(GetProcessHeap(), 0, tpszCaption);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -