[PATCH 2/3] setupapi: Implement SetupDiSetDeviceInstallParams().

Zebediah Figura z.figura12 at gmail.com
Wed May 15 22:56:07 CDT 2019


Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
---
 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 46aeb5a7d6..43b86c7dd0 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -3600,25 +3600,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, &paramsW);
 }
 
 /***********************************************************************
  *              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;
 }
-- 
2.21.0




More information about the wine-devel mailing list