mirror of
https://github.com/reactos/reactos.git
synced 2024-08-07 19:58:21 +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
|
@ -22,6 +22,6 @@ target_link_libraries(netcfgx
|
||||||
uuid
|
uuid
|
||||||
wine)
|
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_pch(netcfgx precomp.h)
|
||||||
add_cd_file(TARGET netcfgx DESTINATION reactos/system32 FOR all)
|
add_cd_file(TARGET netcfgx DESTINATION reactos/system32 FOR all)
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<library>advapi32</library>
|
<library>advapi32</library>
|
||||||
<library>uuid</library>
|
<library>uuid</library>
|
||||||
<library>iphlpapi</library>
|
<library>iphlpapi</library>
|
||||||
<library>iphlpapi</library>
|
<library>dhcpcsvc</library>
|
||||||
<library>wine</library>
|
<library>wine</library>
|
||||||
<library>ole32</library>
|
<library>ole32</library>
|
||||||
<library>user32</library>
|
<library>user32</library>
|
||||||
|
|
|
@ -14,6 +14,8 @@
|
||||||
#include <setupapi.h>
|
#include <setupapi.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <iphlpapi.h>
|
#include <iphlpapi.h>
|
||||||
|
#include <dhcpcsdk.h>
|
||||||
|
#include <dhcpcapi.h>
|
||||||
#include <olectl.h>
|
#include <olectl.h>
|
||||||
#include <netcfgn.h>
|
#include <netcfgn.h>
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
|
|
|
@ -3117,6 +3117,7 @@ INetCfgComponentControl_fnApplyRegistryChanges(
|
||||||
WCHAR szBuffer[200];
|
WCHAR szBuffer[200];
|
||||||
TcpipSettings * pCurrentConfig, *pOldConfig;
|
TcpipSettings * pCurrentConfig, *pOldConfig;
|
||||||
ULONG NTEInstance;
|
ULONG NTEInstance;
|
||||||
|
DWORD DhcpApiVersion;
|
||||||
|
|
||||||
TcpipConfNotifyImpl * This = impl_from_INetCfgComponentControl(iface);
|
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));
|
RegSetValueExW(hKey, L"DefaultGatewayMetric", 0, REG_MULTI_SZ, (LPBYTE)L"\0", 2 * sizeof(WCHAR));
|
||||||
if (!pOldConfig->DhcpEnabled)
|
if (!pOldConfig->DhcpEnabled)
|
||||||
{
|
{
|
||||||
|
/* Delete this adapter's current IP address */
|
||||||
DeleteIPAddress(pOldConfig->Ip->NTEContext);
|
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
|
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);
|
DeleteIPAddress(pOldConfig->Ip->NTEContext);
|
||||||
//TODO
|
|
||||||
//delete multiple ip addresses when required
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO
|
/* Add the static IP address via the standard IPHLPAPI function */
|
||||||
// add multiple ip addresses when required
|
AddIPAddress(htonl(pCurrentConfig->Ip->IpAddress),
|
||||||
if (AddIPAddress(htonl(pCurrentConfig->Ip->IpAddress), htonl(pCurrentConfig->Ip->u.Subnetmask), pCurrentConfig->Index, &pCurrentConfig->Ip->NTEContext, &NTEInstance) == NO_ERROR)
|
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);
|
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||||
if(pStr)
|
CoTaskMemFree(pStr);
|
||||||
{
|
}
|
||||||
RegSetValueExW(hKey, L"IPAddress", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
|
||||||
CoTaskMemFree(pStr);
|
pStr = CreateMultiSzString(pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
|
||||||
}
|
if(pStr)
|
||||||
|
{
|
||||||
pStr = CreateMultiSzString(pCurrentConfig->Ip, SUBMASK, &dwSize, FALSE);
|
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
||||||
if(pStr)
|
CoTaskMemFree(pStr);
|
||||||
{
|
|
||||||
RegSetValueExW(hKey, L"SubnetMask", 0, REG_MULTI_SZ, (LPBYTE)pStr, dwSize);
|
|
||||||
CoTaskMemFree(pStr);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Delete all default routes for this adapter */
|
||||||
dwSize = 0;
|
dwSize = 0;
|
||||||
if (GetIpForwardTable(NULL, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
|
if (GetIpForwardTable(NULL, &dwSize, FALSE) == ERROR_INSUFFICIENT_BUFFER)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue