From 56b509a84a26576e4dbfe95b076e5463f2496b6f Mon Sep 17 00:00:00 2001 From: Zhiyi Zhang Date: Wed, 20 Mar 2019 23:27:41 +0800 Subject: [PATCH] hidclass.sys: Handle create existent device failure. Signed-off-by: Zhiyi Zhang Signed-off-by: Aric Stewart Signed-off-by: Alexandre Julliard --- dlls/hidclass.sys/device.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c index 547c3554108..81d5c3c6709 100644 --- a/dlls/hidclass.sys/device.c +++ b/dlls/hidclass.sys/device.c @@ -90,26 +90,24 @@ NTSTATUS HID_LinkDevice(DEVICE_OBJECT *device) RtlInitUnicodeString( &nameW, ext->device_name); - devinfo = SetupDiGetClassDevsW(&GUID_DEVCLASS_HIDCLASS, NULL, NULL, DIGCF_DEVICEINTERFACE); - if (!devinfo) + devinfo = SetupDiCreateDeviceInfoList(&GUID_DEVCLASS_HIDCLASS, NULL); + if (devinfo == INVALID_HANDLE_VALUE) { FIXME( "failed to get ClassDevs %x\n", GetLastError()); return STATUS_UNSUCCESSFUL; } Data.cbSize = sizeof(Data); - if (!SetupDiCreateDeviceInfoW(devinfo, ext->instance_id, &GUID_DEVCLASS_HIDCLASS, NULL, NULL, DICD_INHERIT_CLASSDRVS, &Data)) + if (SetupDiCreateDeviceInfoW(devinfo, ext->instance_id, &GUID_DEVCLASS_HIDCLASS, NULL, NULL, DICD_INHERIT_CLASSDRVS, &Data)) { - if (GetLastError() == ERROR_DEVINST_ALREADY_EXISTS) + if (!SetupDiRegisterDeviceInfo(devinfo, &Data, 0, NULL, NULL, NULL)) { - SetupDiDestroyDeviceInfoList(devinfo); - return STATUS_SUCCESS; + FIXME( "failed to register device info %x\n", GetLastError()); + goto error; } - FIXME( "failed to Create Device Info %x\n", GetLastError()); - goto error; } - if (!SetupDiRegisterDeviceInfo( devinfo, &Data, 0, NULL, NULL, NULL )) + else if (GetLastError() != ERROR_DEVINST_ALREADY_EXISTS) { - FIXME( "failed to Register Device Info %x\n", GetLastError()); + FIXME( "failed to create device info %x\n", GetLastError()); goto error; } SetupDiDestroyDeviceInfoList(devinfo);