Rémi Bernon : hidclass.sys: Set IoStatus.Information in IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS.

Alexandre Julliard julliard at winehq.org
Mon Aug 2 16:43:36 CDT 2021


Module: wine
Branch: master
Commit: 3eb8c6cd4d69302c57ee17c2797cd3411f3e0f8f
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=3eb8c6cd4d69302c57ee17c2797cd3411f3e0f8f

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Mon Aug  2 12:25:22 2021 +0200

hidclass.sys: Set IoStatus.Information in IOCTL_GET_NUM_DEVICE_INPUT_BUFFERS.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/hidclass.sys/device.c         | 2 ++
 dlls/ntoskrnl.exe/tests/ntoskrnl.c | 6 +++---
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/dlls/hidclass.sys/device.c b/dlls/hidclass.sys/device.c
index da1814587c7..73a8428ad22 100644
--- a/dlls/hidclass.sys/device.c
+++ b/dlls/hidclass.sys/device.c
@@ -560,11 +560,13 @@ NTSTATUS WINAPI pdo_ioctl(DEVICE_OBJECT *device, IRP *irp)
         {
             if (irpsp->Parameters.DeviceIoControl.OutputBufferLength < sizeof(ULONG))
             {
+                irp->IoStatus.Information = 0;
                 irp->IoStatus.Status = rc = STATUS_BUFFER_TOO_SMALL;
             }
             else
             {
                 *(ULONG *)irp->AssociatedIrp.SystemBuffer = RingBuffer_GetSize(ext->u.pdo.ring_buffer);
+                irp->IoStatus.Information = sizeof(ULONG);
                 rc = irp->IoStatus.Status = STATUS_SUCCESS;
             }
             break;
diff --git a/dlls/ntoskrnl.exe/tests/ntoskrnl.c b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
index a37697f4a69..8eaf8ee4888 100644
--- a/dlls/ntoskrnl.exe/tests/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/tests/ntoskrnl.c
@@ -2750,7 +2750,7 @@ static void test_hid_device(DWORD report_id, DWORD polled)
     SetLastError(0xdeadbeef);
     ret = HidD_GetNumInputBuffers(file, &count);
     ok(ret, "HidD_GetNumInputBuffers failed last error %u\n", GetLastError());
-    todo_wine ok(count == 32, "HidD_GetNumInputBuffers returned %u\n", count);
+    ok(count == 32, "HidD_GetNumInputBuffers returned %u\n", count);
 
     SetLastError(0xdeadbeef);
     ret = HidD_SetNumInputBuffers(file, 1);
@@ -2769,7 +2769,7 @@ static void test_hid_device(DWORD report_id, DWORD polled)
     SetLastError(0xdeadbeef);
     ret = HidD_GetNumInputBuffers(file, &count);
     ok(ret, "HidD_GetNumInputBuffers failed last error %u\n", GetLastError());
-    todo_wine ok(count == 16, "HidD_GetNumInputBuffers returned %u\n", count);
+    ok(count == 16, "HidD_GetNumInputBuffers returned %u\n", count);
 
     async_file = CreateFileA(iface_detail->DevicePath, FILE_READ_ACCESS | FILE_WRITE_ACCESS,
             FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
@@ -2790,7 +2790,7 @@ static void test_hid_device(DWORD report_id, DWORD polled)
     SetLastError(0xdeadbeef);
     ret = HidD_GetNumInputBuffers(async_file, &count);
     ok(ret, "HidD_GetNumInputBuffers failed last error %u\n", GetLastError());
-    todo_wine ok(count == 2, "HidD_GetNumInputBuffers returned %u\n", count);
+    ok(count == 2, "HidD_GetNumInputBuffers returned %u\n", count);
     count = 0xdeadbeef;
     SetLastError(0xdeadbeef);
     ret = HidD_GetNumInputBuffers(file, &count);




More information about the wine-cvs mailing list