[PSDK][DHCSCSVC][IPCONFIG] Add DhcpHandlePnpEvent stub and use it in ipconfig

Ipconfig uses DhcpHandlePnpEvent to notify the dhcp client of a changed class id.
This commit is contained in:
Eric Kohl
2026-03-08 12:22:47 +01:00
parent 4cba65d760
commit 3f9f0e2a96
3 changed files with 50 additions and 5 deletions
+26 -1
View File
@@ -1244,8 +1244,10 @@ SetClassId(
ULONG ret = 0;
WCHAR szFriendlyName[MAX_PATH];
WCHAR szKeyName[256];
WCHAR szUnicodeAdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
MIB_IFROW mibEntry;
HKEY hKey;
DHCP_PNP_EVENT PnpEvent;
ConResPrintf(StdOut, IDS_HEADER);
@@ -1313,8 +1315,31 @@ SetClassId(
if (pszClassId == NULL)
pszClassId = L"";
RegSetValueExW(hKey, L"DhcpClassId", 0, REG_SZ, (LPBYTE)pszClassId, (wcslen(pszClassId) + 1) * sizeof(WCHAR));
ret = RegSetValueExW(hKey, L"DhcpClassId", 0, REG_SZ, (LPBYTE)pszClassId, (wcslen(pszClassId) + 1) * sizeof(WCHAR));
RegCloseKey(hKey);
if (ret != ERROR_SUCCESS)
{
ConResPrintf(StdOut, IDS_DHCPSETIDERROR, szFriendlyName);
DoFormatMessage(ret);
goto done;
}
mbstowcs(szUnicodeAdapterName, pFoundAdapter->AdapterName, strlen(pFoundAdapter->AdapterName) + 1);
ZeroMemory(&PnpEvent, sizeof(PnpEvent));
PnpEvent.Unknown5 = 1;
ret = DhcpHandlePnPEvent(0,
1,
szUnicodeAdapterName,
&PnpEvent,
0);
if (ret != ERROR_SUCCESS)
{
ConResPrintf(StdOut, IDS_DHCPSETIDERROR, szFriendlyName);
DoFormatMessage(ret);
goto done;
}
ConResPrintf(StdOut, IDS_DHCPSETIDSUCCESS, szFriendlyName);
}
+8 -3
View File
@@ -8,6 +8,7 @@
#include <rosdhcp.h>
#include <winsvc.h>
#include <dhcpcapi.h>
#define NDEBUG
#include <debug.h>
@@ -168,11 +169,15 @@ DhcpHandlePnPEvent(
_In_ DWORD Unknown1,
_In_ DWORD Unknown2,
_In_ PWSTR AdapterName,
_In_ DWORD Unknown4,
_In_ PDHCP_PNP_EVENT PnpEvent,
_In_ DWORD Unknown5)
{
DPRINT1("DhcpHandlePnPEvent(%lx %lx %S %lx %lx)\n",
Unknown1, Unknown2, AdapterName, Unknown4, Unknown5);
DPRINT1("DhcpHandlePnPEvent(%lx %lx %S %p %lx)\n",
Unknown1, Unknown2, AdapterName, PnpEvent, Unknown5);
if ((Unknown1 != 0) || (Unknown2 != 1) || (PnpEvent == NULL) || (Unknown5 != 0))
return ERROR_INVALID_PARAMETER;
return 0;
}
+16 -1
View File
@@ -5,6 +5,21 @@
extern "C" {
#endif
typedef struct _DHCP_PNP_EVENT
{
DWORD Unknown1;
DWORD Unknown2;
DWORD Unknown3;
DWORD Unknown4;
DWORD Unknown5;
DWORD Unknown6;
DWORD Unknown7;
DWORD Unknown8;
DWORD Unknown9;
DWORD Unknown10;
DWORD Unknown11;
} DHCP_PNP_EVENT, *PDHCP_PNP_EVENT;
DWORD
APIENTRY
DhcpAcquireParameters(
@@ -24,7 +39,7 @@ DhcpHandlePnPEvent(
_In_ DWORD Unknown1,
_In_ DWORD Unknown2,
_In_ LPWSTR AdapterName,
_In_ DWORD Unknown4,
_In_ PDHCP_PNP_EVENT PnpEvent,
_In_ DWORD Unknown5);
DWORD