mirror of
https://github.com/reactos/reactos.git
synced 2025-01-07 14:51:00 +00:00
[NETCFGX]
- Notify the DHCP service when a static IP address is assigned to an adapter svn path=/branches/wlan-bringup/; revision=54980
This commit is contained in:
parent
36be6f512a
commit
a2acf8b4b2
4 changed files with 62 additions and 24 deletions
|
@ -22,6 +22,6 @@ target_link_libraries(netcfgx
|
|||
uuid
|
||||
wine)
|
||||
|
||||
add_importlibs(netcfgx rpcrt4 setupapi advapi32 iphlpapi ole32 user32 comctl32 ws2_32 msvcrt kernel32 ntdll)
|
||||
add_importlibs(netcfgx rpcrt4 setupapi advapi32 iphlpapi dhcpcsvc ole32 user32 comctl32 ws2_32 msvcrt kernel32 ntdll)
|
||||
add_pch(netcfgx precomp.h)
|
||||
add_cd_file(TARGET netcfgx DESTINATION reactos/system32 FOR all)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<library>advapi32</library>
|
||||
<library>uuid</library>
|
||||
<library>iphlpapi</library>
|
||||
<library>iphlpapi</library>
|
||||
<library>dhcpcsvc</library>
|
||||
<library>wine</library>
|
||||
<library>ole32</library>
|
||||
<library>user32</library>
|
||||
|
|
|
@ -14,6 +14,8 @@
|
|||
#include <setupapi.h>
|
||||
#include <stdio.h>
|
||||
#include <iphlpapi.h>
|
||||
#include <dhcpcsdk.h>
|
||||
#include <dhcpcapi.h>
|
||||
#include <olectl.h>
|
||||
#include <netcfgn.h>
|
||||
#include "resource.h"
|
||||
|
|
|
@ -3117,6 +3117,7 @@ INetCfgComponentControl_fnApplyRegistryChanges(
|
|||
WCHAR szBuffer[200];
|
||||
TcpipSettings * pCurrentConfig, *pOldConfig;
|
||||
ULONG NTEInstance;
|
||||
DWORD DhcpApiVersion;
|
||||
|
||||
TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
|
||||
|
||||
|
@ -3197,39 +3198,74 @@ INetCfgComponentControl_fnApplyRegistryChanges(
|
|||
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)L"\0", 2 * sizeof(WCHAR));
|
||||
if (!pOldConfig->DhcpEnabled)
|
||||
{
|
||||
/* Delete this adapter's current IP address */
|
||||
DeleteIPAddress(pOldConfig->Ip->NTEContext);
|
||||
//FIXME
|
||||
// start dhcp client service for the adapter
|
||||
|
||||
/* Delete all default routes for this adapter */
|
||||
dwSize = 0;
|
||||
if (GetIpForwardTable(NULL, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
DWORD Index;
|
||||
PMIB_IPFORWARDTABLE pIpForwardTable = (PMIB_IPFORWARDTABLE)CoTaskMemAlloc(dwSize);
|
||||
if (pIpForwardTable)
|
||||
{
|
||||
if (GetIpForwardTable(pIpForwardTable, &dwSize, FALSE) == NO_ERROR)
|
||||
{
|
||||
for (Index = 0; Index < pIpForwardTable->dwNumEntries; Index++)
|
||||
{
|
||||
if (pIpForwardTable->table[Index].dwForwardIfIndex == pOldConfig->Index &&
|
||||
pIpForwardTable->table[Index].dwForwardDest == 0)
|
||||
{
|
||||
DeleteIpForwardEntry(&pIpForwardTable->table[Index]);
|
||||
}
|
||||
}
|
||||
}
|
||||
CoTaskMemFree(pIpForwardTable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!pOldConfig->DhcpEnabled)
|
||||
/* Open the DHCP API if DHCP is enabled */
|
||||
if (pOldConfig->DhcpEnabled && DhcpCApiInitialize(&DhcpApiVersion) == NO_ERROR)
|
||||
{
|
||||
/* We have to tell DHCP about this */
|
||||
DhcpStaticRefreshParams(pCurrentConfig->Index,
|
||||
htonl(pCurrentConfig->Ip->IpAddress),
|
||||
htonl(pCurrentConfig->Ip->u.Subnetmask));
|
||||
|
||||
/* Close the API */
|
||||
DhcpCApiCleanup();
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Delete this adapter's current static IP address */
|
||||
DeleteIPAddress(pOldConfig->Ip->NTEContext);
|
||||
//TODO
|
||||
//delete multiple ip addresses when required
|
||||
}
|
||||
|
||||
//TODO
|
||||
// add multiple ip addresses when required
|
||||
if (AddIPAddress(htonl(pCurrentConfig->Ip->IpAddress), htonl(pCurrentConfig->Ip->u.Subnetmask), pCurrentConfig->Index, &pCurrentConfig->Ip->NTEContext, &NTEInstance) == NO_ERROR)
|
||||
/* Add the static IP address via the standard IPHLPAPI function */
|
||||
AddIPAddress(htonl(pCurrentConfig->Ip->IpAddress),
|
||||
htonl(pCurrentConfig->Ip->u.Subnetmask),
|
||||
pCurrentConfig->Index,
|
||||
&pCurrentConfig->Ip->NTEContext,
|
||||
&NTEInstance);
|
||||
}
|
||||
|
||||
pStr = CreateMultiSzString(pCurrentConfig->Ip, IPADDR, &dwSize, FALSE);
|
||||
if(pStr)
|
||||
{
|
||||
pStr = CreateMultiSzString(pCurrentConfig->Ip, IPADDR, &dwSize, FALSE);
|
||||
if(pStr)
|
||||
{
|
||||
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||
CoTaskMemFree(pStr);
|
||||
}
|
||||
|
||||
pStr = CreateMultiSzString(pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
|
||||
if(pStr)
|
||||
{
|
||||
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||
CoTaskMemFree(pStr);
|
||||
}
|
||||
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||
CoTaskMemFree(pStr);
|
||||
}
|
||||
|
||||
pStr = CreateMultiSzString(pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
|
||||
if(pStr)
|
||||
{
|
||||
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||
CoTaskMemFree(pStr);
|
||||
}
|
||||
|
||||
/* Delete all default routes for this adapter */
|
||||
dwSize = 0;
|
||||
if (GetIpForwardTable(NULL, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue