From 4b9adaa971f7bce059749de282dff8169de01255 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Mon, 6 Apr 2026 13:42:03 +0200 Subject: [PATCH] [DHCPCSVC] Add the client code and server stub for DhcpFallbackRefreshParams DhcpFallbackRefreshParams is called by the TCPIP notification object after the alternate configuration has been changed. --- base/services/dhcpcsvc/dhcp/api.c | 39 +++++++++++++++++++++++++--- base/services/dhcpcsvc/dhcpcsvc.c | 34 +++++++++++++++++++++++- base/services/dhcpcsvc/dhcpcsvc.spec | 2 +- sdk/include/psdk/dhcpcapi.h | 5 ++++ sdk/include/reactos/idl/dhcpcsvc.idl | 11 ++++++-- 5 files changed, 83 insertions(+), 8 deletions(-) diff --git a/base/services/dhcpcsvc/dhcp/api.c b/base/services/dhcpcsvc/dhcp/api.c index 5730fa5db03..933ff83abdc 100644 --- a/base/services/dhcpcsvc/dhcp/api.c +++ b/base/services/dhcpcsvc/dhcp/api.c @@ -86,7 +86,7 @@ Server_AcquireParameters( struct protocol* proto; DWORD ret = ERROR_SUCCESS; - DPRINT("Server_AcquireParameters()\n"); + DPRINT("Server_AcquireParameters(%S)\n", AdapterName); ApiLock(); @@ -131,7 +131,7 @@ Server_ReleaseParameters( struct protocol* proto; DWORD ret = ERROR_SUCCESS; - DPRINT("Server_ReleaseParameters()\n"); + DPRINT("Server_ReleaseParameters(%S)\n", AdapterName); ApiLock(); @@ -162,6 +162,37 @@ done: /* Function 2 */ DWORD __stdcall +Server_FallbackRefreshParams( + _In_ PDHCP_SERVER_NAME ServerName, + _In_ LPWSTR AdapterName) +{ + PDHCP_ADAPTER Adapter; + DWORD ret = ERROR_SUCCESS; + + DPRINT("Server_FallbackRefreshParams(%S)\n", AdapterName); + + ApiLock(); + + Adapter = AdapterFindName(AdapterName); + if (Adapter == NULL) + { + ret = ERROR_FILE_NOT_FOUND; + goto done; + } + + DPRINT("Adapter: %p\n", Adapter); + + /* FIXME */ + +done: + ApiUnlock(); + + return ret; +} + +/* Function 3 */ +DWORD +__stdcall Server_QueryHWInfo( _In_ PDHCP_SERVER_NAME ServerName, _In_ DWORD AdapterIndex, @@ -195,7 +226,7 @@ done: return ret; } -/* Function 3 */ +/* Function 4 */ DWORD __stdcall Server_StaticRefreshParams( @@ -252,7 +283,7 @@ done: return ret; } -/* Function 4 */ +/* Function 5 */ DWORD __stdcall Server_RemoveDNSRegistrations( diff --git a/base/services/dhcpcsvc/dhcpcsvc.c b/base/services/dhcpcsvc/dhcpcsvc.c index 9dc7d322772..a347aad56fd 100644 --- a/base/services/dhcpcsvc/dhcpcsvc.c +++ b/base/services/dhcpcsvc/dhcpcsvc.c @@ -293,7 +293,39 @@ DhcpEnumClasses( } /*! - * Enumerates the DHCP user classes for the given adapter + * Notify the DHCP client to refresh its fallback configuration + * + * \param[in] AdapterName + * Name (GUID) of the Adapter + * + * \return ERROR_SUCCESS on success + * + * \remarks Undocumented by Microsoft + */ +DWORD +APIENTRY +DhcpFallbackRefreshParams( + _In_ PWSTR AdapterName) +{ + DWORD ret; + + DPRINT("DhcpFallbackRefreshParams(%S)\n", AdapterName); + + RpcTryExcept + { + ret = Client_FallbackRefreshParams(NULL, AdapterName); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + ret = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return ret; +} + +/*! + * Notify the DHCP client of PNP events * * \param[in] Unknown1 * Unknown diff --git a/base/services/dhcpcsvc/dhcpcsvc.spec b/base/services/dhcpcsvc/dhcpcsvc.spec index 84109c57534..1df9fdbcbb6 100644 --- a/base/services/dhcpcsvc/dhcpcsvc.spec +++ b/base/services/dhcpcsvc/dhcpcsvc.spec @@ -13,7 +13,7 @@ @ stub DhcpDeRegisterOptions @ stub DhcpDeRegisterParamChange @ stdcall DhcpEnumClasses(long wstr long long) -@ stub DhcpFallbackRefreshParams +@ stdcall DhcpFallbackRefreshParams(wstr) @ stdcall DhcpHandlePnPEvent(long long wstr long long) @ stub DhcpLeaseIpAddress @ stub DhcpLeaseIpAddressEx diff --git a/sdk/include/psdk/dhcpcapi.h b/sdk/include/psdk/dhcpcapi.h index ec876d9804d..1bba6ac5116 100644 --- a/sdk/include/psdk/dhcpcapi.h +++ b/sdk/include/psdk/dhcpcapi.h @@ -33,6 +33,11 @@ DhcpEnumClasses( _In_ DWORD Unknown3, _In_ DWORD Unknown4); +DWORD +APIENTRY +DhcpFallbackRefreshParams( + _In_ PWSTR AdapterName); + DWORD APIENTRY DhcpHandlePnPEvent( diff --git a/sdk/include/reactos/idl/dhcpcsvc.idl b/sdk/include/reactos/idl/dhcpcsvc.idl index c17b013cce9..0172c78204e 100644 --- a/sdk/include/reactos/idl/dhcpcsvc.idl +++ b/sdk/include/reactos/idl/dhcpcsvc.idl @@ -37,6 +37,13 @@ interface dhcpcsvc /* Function 2 */ DWORD __stdcall + FallbackRefreshParams( + [in, string, unique] PDHCP_SERVER_NAME ServerName, + [in, string] LPWSTR AdapterName); + + /* Function 3 */ + DWORD + __stdcall QueryHWInfo( [in, string, unique] PDHCP_SERVER_NAME ServerName, [in] DWORD AdapterIndex, @@ -44,7 +51,7 @@ interface dhcpcsvc [out] PDWORD Mtu, [out] PDWORD Speed); - /* Function 3 */ + /* Function 4 */ DWORD __stdcall StaticRefreshParams( @@ -53,7 +60,7 @@ interface dhcpcsvc [in] DWORD Address, [in] DWORD Netmask); - /* Function 4 */ + /* Function 5 */ DWORD __stdcall RemoveDNSRegistrations(