From b0845da65baa413bfac76c2daa9e99eade39002f Mon Sep 17 00:00:00 2001 From: Mikhail Tyukin Date: Fri, 28 Aug 2026 20:22:34 -0400 Subject: [PATCH] [SETUPAPI] Fix SetupDiDeleteDeviceInfo (#9436) SetupDiDeleteDeviceInfo always returned FALSE as it used the SP_DEVINFO_DATA structure internally rather than accessing the DeviceInfo structure. Needed for latest XP Nvidia installer. CORE-20472 --- dll/win32/setupapi/devinst.c | 10 +++++----- dll/win32/setupapi/setupapi.spec | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dll/win32/setupapi/devinst.c b/dll/win32/setupapi/devinst.c index baf7dc9c153..9797b31befc 100644 --- a/dll/win32/setupapi/devinst.c +++ b/dll/win32/setupapi/devinst.c @@ -4999,11 +4999,10 @@ IsDeviceInfoInDeviceInfoSet( */ BOOL WINAPI SetupDiDeleteDeviceInfo( - IN HDEVINFO DeviceInfoSet, - IN PSP_DEVINFO_DATA DeviceInfoData) + _In_ HDEVINFO DeviceInfoSet, + _In_ PSP_DEVINFO_DATA DeviceInfoData) { struct DeviceInfoSet *deviceInfoSet; - struct DeviceInfo *deviceInfo = (struct DeviceInfo *)DeviceInfoData; BOOL ret = FALSE; TRACE("%s(%p %p)\n", __FUNCTION__, DeviceInfoSet, DeviceInfoData); @@ -5012,12 +5011,13 @@ SetupDiDeleteDeviceInfo( SetLastError(ERROR_INVALID_HANDLE); else if ((deviceInfoSet = (struct DeviceInfoSet *)DeviceInfoSet)->magic != SETUP_DEVICE_INFO_SET_MAGIC) SetLastError(ERROR_INVALID_HANDLE); - else if (DeviceInfoData && DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA)) + else if (!DeviceInfoData || DeviceInfoData->cbSize != sizeof(*DeviceInfoData) || !DeviceInfoData->Reserved) SetLastError(ERROR_INVALID_USER_BUFFER); - else if (!IsDeviceInfoInDeviceInfoSet(deviceInfoSet, deviceInfo)) + else if (!IsDeviceInfoInDeviceInfoSet(deviceInfoSet, (struct DeviceInfo *)DeviceInfoData->Reserved)) SetLastError(ERROR_INVALID_PARAMETER); else { + struct DeviceInfo *deviceInfo = (struct DeviceInfo *)DeviceInfoData->Reserved; RemoveEntryList(&deviceInfo->ListEntry); DestroyDeviceInfo(deviceInfo); ret = TRUE; diff --git a/dll/win32/setupapi/setupapi.spec b/dll/win32/setupapi/setupapi.spec index fc3a936725b..6734932be86 100644 --- a/dll/win32/setupapi/setupapi.spec +++ b/dll/win32/setupapi/setupapi.spec @@ -311,7 +311,7 @@ @ stdcall SetupDiCreateDeviceInterfaceRegKeyW(ptr ptr long long ptr ptr) @ stdcall SetupDiCreateDeviceInterfaceW(ptr ptr ptr wstr long ptr) @ stdcall SetupDiDeleteDevRegKey(ptr ptr long long long) -@ stdcall SetupDiDeleteDeviceInfo(long ptr) +@ stdcall SetupDiDeleteDeviceInfo(ptr ptr) @ stdcall SetupDiDeleteDeviceInterfaceData(ptr ptr) @ stdcall SetupDiDeleteDeviceInterfaceRegKey(ptr ptr long) @ stdcall SetupDiDestroyClassImageList(ptr)