[DHCPCSVC][PSDK][IDL] Improve DhcpRequestParams and add DhcpUndoRequestParams stub

Add a call into the server side for DhcpRequestParams.
This commit is contained in:
Eric Kohl
2026-05-17 13:16:05 +02:00
parent df7c1fbc6b
commit fb47d37a49
5 changed files with 122 additions and 16 deletions

View File

@@ -347,3 +347,20 @@ Server_RemoveDNSRegistrations(
/* FIXME: Call dnsapi.DnsRemoveRegistrations() */
return ERROR_SUCCESS;
}
/* Function 7 */
DWORD
__stdcall
Server_RequestParams(
_In_ PDHCP_SERVER_NAME ServerName,
_In_ LPWSTR AdapterName,
_In_ DHCPCAPI_CLASSID *ClassId,
_In_ DWORD Unknown4,
_In_ DWORD Unknown5,
_In_ DWORD Unknown6)
{
DPRINT1("Server_RequestParams(%S %p)\n", AdapterName, ClassId);
UNIMPLEMENTED;
return ERROR_SUCCESS;
}

View File

@@ -601,7 +601,7 @@ DhcpReleaseParameters(
* \return ERROR_SUCCESS on success
*/
DWORD
WINAPI
APIENTRY
DhcpRemoveDNSRegistrations(VOID)
{
DWORD ret;
@@ -621,6 +621,55 @@ DhcpRemoveDNSRegistrations(VOID)
return ret;
}
DWORD
APIENTRY
DhcpRequestParams(
_In_ DWORD Flags,
_In_ PVOID Reserved,
_In_ LPWSTR AdapterName,
_In_ LPDHCPCAPI_CLASSID ClassId,
_In_ DHCPCAPI_PARAMS_ARRAY SendParams,
_Inout_ DHCPCAPI_PARAMS_ARRAY RecdParams,
_In_ LPBYTE Buffer,
_Inout_ LPDWORD pSize,
_In_ LPWSTR RequestIdStr)
{
DWORD ret = ERROR_SUCCESS;
DPRINT1("DhcpRequestParams(%lx %p %S %p %p %p %p %p %S)\n",
Flags, Reserved, AdapterName, ClassId, SendParams,
RecdParams, Buffer, pSize, RequestIdStr);
if ((Reserved != NULL) || (AdapterName == NULL))
return ERROR_INVALID_PARAMETER;
if (ClassId != NULL)
{
if (ClassId->Flags != 0)
return ERROR_INVALID_PARAMETER;
if ((ClassId->Data == NULL) || (ClassId->nBytesData == 0))
return ERROR_INVALID_PARAMETER;
}
RpcTryExcept
{
ret = Client_RequestParams(NULL,
AdapterName,
ClassId,
0,
0,
0);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
ret = I_RpcMapWin32Status(RpcExceptionCode());
}
RpcEndExcept;
return ret;
}
DWORD
APIENTRY
DhcpStaticRefreshParams(DWORD AdapterIndex,
@@ -644,20 +693,22 @@ DhcpStaticRefreshParams(DWORD AdapterIndex,
return (ret == ERROR_SUCCESS) ? 1 : 0;
}
DWORD APIENTRY
DhcpRequestParams(DWORD Flags,
PVOID Reserved,
LPWSTR AdapterName,
LPDHCPCAPI_CLASSID ClassId,
DHCPCAPI_PARAMS_ARRAY SendParams,
DHCPCAPI_PARAMS_ARRAY RecdParams,
LPBYTE Buffer,
LPDWORD pSize,
LPWSTR RequestIdStr)
DWORD
APIENTRY
DhcpUndoRequestParams(
_In_ DWORD Flags,
_In_ LPVOID Reserved,
_In_ LPWSTR AdapterName,
_In_ LPWSTR RequestIdStr)
{
DPRINT1("DhcpUndoRequestParams(%lx %p %S %S)\n",
Flags, Reserved, AdapterName, RequestIdStr);
if ((Flags != 0) || (Reserved != NULL) || (RequestIdStr == NULL))
return ERROR_INVALID_PARAMETER;
UNIMPLEMENTED;
return 0;
return STATUS_SUCCESS;
}
static VOID

View File

@@ -34,7 +34,7 @@
@ stub DhcpRequestOptions
@ stdcall DhcpRequestParams(long ptr ptr ptr long ptr long ptr ptr ptr ptr)
@ stdcall DhcpStaticRefreshParams(long long long)
@ stub DhcpUndoRequestParams
@ stdcall DhcpUndoRequestParams(long ptr wstr wstr)
@ stub McastApiCleanup
@ stub McastApiStartup
@ stub McastEnumerateScopes

View File

@@ -92,7 +92,11 @@ typedef struct _DHCPAPI_PARAMS
ULONG Flags;
ULONG OptionId;
BOOL IsVendor;
BYTE *Data;
#if defined(__midl) || defined(__WIDL__)
[size_is(nBytesData), unique] LPBYTE Data;
#else
LPBYTE Data;
#endif
DWORD nBytesData;
} DHCPAPI_PARAMS, *PDHCPAPI_PARAMS, *LPDHCPAPI_PARAMS;
@@ -101,13 +105,21 @@ typedef struct _DHCPAPI_PARAMS DHCPCAPI_PARAMS, *PDHCPCAPI_PARAMS, *LPDHCPCAPI_P
typedef struct _DHCPCAPI_PARAMS_ARARAY
{
ULONG nParams;
#if defined(__midl) || defined(__WIDL__)
[size_is(nParams), unique] LPDHCPCAPI_PARAMS Params;
#else
LPDHCPCAPI_PARAMS Params;
#endif
} DHCPCAPI_PARAMS_ARRAY, *PDHCPCAPI_PARAMS_ARRAY, *LPDHCPCAPI_PARAMS_ARRAY;
typedef struct _DHCPCAPI_CLASSID
{
ULONG Flags;
BYTE *Data;
#if defined(__midl) || defined(__WIDL__)
[size_is(nBytesData), unique] LPBYTE Data;
#else
LPBYTE Data;
#endif
ULONG nBytesData;
} DHCPCAPI_CLASSID, *PDHCPCAPI_CLASSID, *LPDHCPCAPI_CLASSID;
@@ -117,6 +129,7 @@ typedef struct _DHCPCAPI_CLASSID
#define DHCPCAPI_REQUEST_CANCEL 0x8
#define DHCPCAPI_REQUEST_MASK 0xf
#if !defined(__midl) && !defined(__WIDL__)
void WINAPI DhcpCApiCleanup(void);
DWORD WINAPI DhcpCApiInitialize(DWORD *);
DWORD WINAPI DhcpDeRegisterParamChange(DWORD, void *, void *);
@@ -125,5 +138,6 @@ DWORD WINAPI DhcpRemoveDNSRegistrations(VOID);
DWORD WINAPI DhcpRequestParams(DWORD, void *, WCHAR *, DHCPCAPI_CLASSID *, DHCPCAPI_PARAMS_ARRAY,
DHCPCAPI_PARAMS_ARRAY, BYTE *, DWORD *, WCHAR *);
DWORD WINAPI DhcpUndoRequestParams(DWORD, LPVOID, LPWSTR, LPWSTR);
#endif
#endif

View File

@@ -6,6 +6,19 @@
typedef [handle] wchar_t *PDHCP_SERVER_NAME;
cpp_quote("#ifndef _DHCPCSDK_")
typedef struct _DHCPCAPI_CLASSID
{
ULONG Flags;
#if defined(__midl) || defined(__WIDL__)
[size_is(nBytesData), unique] LPBYTE Data;
#else
LPBYTE Data;
#endif
ULONG nBytesData;
} DHCPCAPI_CLASSID, *PDHCPCAPI_CLASSID, *LPDHCPCAPI_CLASSID;
cpp_quote("#endif")
[
uuid(4D5839D6-01BC-559C-B2EC-7DF12EC1B7E6),
version(0.0),
@@ -70,4 +83,15 @@ interface dhcpcsvc
__stdcall
RemoveDNSRegistrations(
[in, string, unique] PDHCP_SERVER_NAME ServerName);
/* Function 7 */
DWORD
__stdcall
RequestParams(
[in, unique, string] PDHCP_SERVER_NAME ServerName,
[in, string] LPWSTR AdapterName,
[in, unique] DHCPCAPI_CLASSID *ClassId,
[in] DWORD Unknown4,
[in] DWORD Unknown5,
[in] DWORD Unknown6);
}