IOCTL_HID_GET_INPUT_REPORT control code
The IOCTL_HID_GET_INPUT_REPORT request obtains an input report from a top-level collection.
For general information about HIDClass devices, see HID Collections.
The Parameters.DeviceIoControl.OutputBufferLength member specifies the size, in bytes, of a requester-allocated output buffer. The HID class driver uses this buffer to return an input report. The buffer size, in bytes, must be large enough to hold the input report -- excluding its report ID, if report IDs are used -- plus one additional byte that specifies a nonzero report ID or zero.
If the collection includes report IDs, the requester must set the first byte of the output buffer to a nonzero report ID. Otherwise, the requester must set the first byte of the output buffer to zero.
The Irp->MdlAddress member points to the requester-allocated output buffer that the HID class driver uses to return the input report. The first byte of the buffer, which the requester uses to input a report ID or zero, is unchanged. The input report -- excluding its report ID, if report IDs are used -- is returned at ((PUCHAR)Irp->MdlAddress + 1).
The HID class driver sets the following fields of Irp->IoStatus:
Information is set to zero.
Status is set to STATUS_SUCCESS if the transfer completed without error. Otherwise, it is set to an appropriate NTSTATUS error code.