From 14a354e5756c3c25cf6d8402d1458d5182102451 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Wed, 15 May 2019 22:56:07 -0500 Subject: [PATCH] setupapi: Implement SetupDiSetDeviceInstallParams(). Signed-off-by: Zebediah Figura Signed-off-by: Aric Stewart Signed-off-by: Alexandre Julliard --- dlls/setupapi/devinst.c | 48 +++++++++++++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c index 8c919605ec6..48b6ca30f04 100644 --- a/dlls/setupapi/devinst.c +++ b/dlls/setupapi/devinst.c @@ -3559,25 +3559,51 @@ BOOL WINAPI SetupDiGetDeviceInstallParamsA(HDEVINFO devinfo, /*********************************************************************** * SetupDiSetDeviceInstallParamsA (SETUPAPI.@) */ -BOOL WINAPI SetupDiSetDeviceInstallParamsA( - HDEVINFO DeviceInfoSet, - PSP_DEVINFO_DATA DeviceInfoData, - PSP_DEVINSTALL_PARAMS_A DeviceInstallParams) +BOOL WINAPI SetupDiSetDeviceInstallParamsA(HDEVINFO devinfo, + SP_DEVINFO_DATA *device_data, SP_DEVINSTALL_PARAMS_A *params) { - FIXME("(%p, %p, %p) stub\n", DeviceInfoSet, DeviceInfoData, DeviceInstallParams); + SP_DEVINSTALL_PARAMS_W paramsW; - return TRUE; + if (params->cbSize != sizeof(SP_DEVINSTALL_PARAMS_A)) + { + SetLastError(ERROR_INVALID_USER_BUFFER); + return FALSE; + } + + paramsW.cbSize = sizeof(paramsW); + paramsW.Flags = params->Flags; + paramsW.FlagsEx = params->FlagsEx; + paramsW.hwndParent = params->hwndParent; + paramsW.InstallMsgHandler = params->InstallMsgHandler; + paramsW.InstallMsgHandlerContext = params->InstallMsgHandlerContext; + paramsW.FileQueue = params->FileQueue; + paramsW.ClassInstallReserved = params->ClassInstallReserved; + paramsW.Reserved = params->Reserved; + MultiByteToWideChar(CP_ACP, 0, params->DriverPath, -1, paramsW.DriverPath, sizeof(paramsW.DriverPath)); + + return SetupDiSetDeviceInstallParamsW(devinfo, device_data, ¶msW); } /*********************************************************************** * SetupDiSetDeviceInstallParamsW (SETUPAPI.@) */ -BOOL WINAPI SetupDiSetDeviceInstallParamsW( - HDEVINFO DeviceInfoSet, - PSP_DEVINFO_DATA DeviceInfoData, - PSP_DEVINSTALL_PARAMS_W DeviceInstallParams) +BOOL WINAPI SetupDiSetDeviceInstallParamsW(HDEVINFO devinfo, + SP_DEVINFO_DATA *device_data, SP_DEVINSTALL_PARAMS_W *params) { - FIXME("(%p, %p, %p) stub\n", DeviceInfoSet, DeviceInfoData, DeviceInstallParams); + struct device *device; + + TRACE("devinfo %p, device_data %p, params %p.\n", devinfo, device_data, params); + + if (params->cbSize != sizeof(SP_DEVINSTALL_PARAMS_W)) + { + SetLastError(ERROR_INVALID_USER_BUFFER); + return FALSE; + } + + if (!(device = get_device(devinfo, device_data))) + return FALSE; + + device->params = *params; return TRUE; }