From b2e9439a5381eab8c52bcd0414e2d18d2e829e8c Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 6 Apr 2026 14:13:07 +0200 Subject: [PATCH] [NETCFGX] Call DhcpFallbackRefreshParams when the alternate configuration has been changed --- dll/win32/netcfgx/tcpipconf_notify.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/dll/win32/netcfgx/tcpipconf_notify.c b/dll/win32/netcfgx/tcpipconf_notify.c index af91ad83186..1de63d78876 100644 --- a/dll/win32/netcfgx/tcpipconf_notify.c +++ b/dll/win32/netcfgx/tcpipconf_notify.c @@ -6,6 +6,8 @@ #include #include +typedef DWORD (WINAPI *PDHCPFALLBACKREFRESHPARAMS)(PWSTR pAdapterName); + typedef struct { DWORD EnableSecurityFilters; @@ -3789,6 +3791,7 @@ INetCfgComponentControl_fnApplyPnpChanges( INetCfgPnpReconfigCallback *pICallback) { TcpipSettings *pCurrentConfig, *pOldConfig; + LPOLESTR pAdapterName; ULONG NTEInstance; DWORD DhcpApiVersion; DWORD dwSize; @@ -3797,6 +3800,11 @@ INetCfgComponentControl_fnApplyPnpChanges( TcpipConfNotifyImpl *This = (TcpipConfNotifyImpl*)iface; + if (FAILED(StringFromCLSID(&This->NetCfgInstanceId, &pAdapterName))) + { + return E_FAIL; + } + pCurrentConfig = This->pCurrentConfig; pOldConfig = This->pOldConfig; @@ -3895,6 +3903,20 @@ INetCfgComponentControl_fnApplyPnpChanges( CreateIpForwardEntry(&RouterMib); } + + /* Notify the DHCP client of the changed alternate configuration */ + if (!RtlEqualMemory(&pCurrentConfig->AltConfig, &pOldConfig->AltConfig, sizeof(AlternateConfiguration))) + { + HMODULE hDhcpModule = LoadLibraryW(L"dhcpcsvc.dll"); + if (hDhcpModule) + { + PDHCPFALLBACKREFRESHPARAMS pFunc = (PDHCPFALLBACKREFRESHPARAMS)GetProcAddress(hDhcpModule, "DhcpFallbackRefreshParams"); + (pFunc)(pAdapterName); + + FreeLibrary(hDhcpModule); + } + } + return S_OK; }