[PATCH 1/2] hidclass.sys: Handle create existent device failure.

Aric Stewart aric at codeweavers.com
Thu Mar 21 07:00:36 CDT 2019


Signed-off-by: Aric Stewart <aric at codeweavers.com>

On 3/20/19 10:27 AM, Zhiyi Zhang wrote:
> Signed-off-by: Zhiyi Zhang <zzhang at codeweavers.com>
> ---
> Supersede 161283
> 
>   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 547c355410..81d5c3c670 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);
> 



More information about the wine-devel mailing list