[PATCH (resend) 5/8] winebus.sys: IOCTL_HID_GET_STRING for iohid

Ken Thomases ken at codeweavers.com
Fri Nov 4 00:26:58 CDT 2016


On Nov 3, 2016, at 7:15 AM, Aric Stewart <aric at codeweavers.com> wrote:
> 
> Signed-off-by: Aric Stewart <aric at codeweavers.com>
> ---
> dlls/winebus.sys/bus_iohid.c | 24 +++++++++++++++++++++++-
> 1 file changed, 23 insertions(+), 1 deletion(-)
> 
> diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c
> index 26243fb..6e3c044 100644
> --- a/dlls/winebus.sys/bus_iohid.c
> +++ b/dlls/winebus.sys/bus_iohid.c
> @@ -88,6 +88,7 @@
>  #include "winternl.h"
>  #include "winioctl.h"
>  #include "ddk/wdm.h"
> +#include "ddk/hidtypes.h"
>  #include "wine/debug.h"
>  
>  #include "bus.h"
> @@ -143,7 +144,28 @@ static NTSTATUS get_reportdescriptor(DEVICE_OBJECT *device, BYTE *buffer, DWORD
>  
>  static NTSTATUS get_string(DEVICE_OBJECT *device, DWORD index, WCHAR *buffer, DWORD length)
>  {
> -    return STATUS_NOT_IMPLEMENTED;
> +    IOHIDDeviceRef dev = *(IOHIDDeviceRef*)get_platform_private(device);
> +    CFStringRef str = NULL;

It's not necessary to initialize str here.

> +    switch (index)
> +    {
> +        case HID_STRING_ID_IPRODUCT:
> +            str = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDProductKey));
> +            break;
> +        case HID_STRING_ID_IMANUFACTURER:
> +            str = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDManufacturerKey));
> +            break;
> +        case HID_STRING_ID_ISERIALNUMBER:
> +            str = IOHIDDeviceGetProperty(dev, CFSTR(kIOHIDSerialNumberKey));
> +            break;
> +        default:
> +            ERR("Unknown string index\n");
> +            return STATUS_NOT_IMPLEMENTED;
> +    }
> +
> +    if (str)
> +        CFStringToWSTR(str, buffer, length);

What if str is NULL?  Should the function return a different result code, or should it set the caller's buffer to the empty string, or…? Certainly, it shouldn't just return success but leave the caller's buffer with junk.

> +
> +    return STATUS_SUCCESS;
>  }




More information about the wine-devel mailing list