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; }