IOCTL_HID_GET_COLLECTION_DESCRIPTOR control code
The IOCTL_HID_GET_COLLECTION_DESCRIPTOR request obtains a top-level collection's preparsed data, which the HID class driver extracted from the physical device's report descriptor during device initialization.
For general information about HIDClass devices, see HID Collections.
Parameters.DeviceIoControl.OutputBufferLength in the I/O stack location of the IRP indicates the size, in bytes, of the output buffer specified by Irp->UserBuffer.
Irp->UserBuffer is a PVOID pointer to a requester-allocated buffer that the HID class driver uses to return a variable length _HIDP_PREPARSED_DATA structure. This buffer must be allocated from nonpaged pool. The size, in bytes, of the preparsed data structure is obtained using IOCTL_HID_GET_COLLECTION_INFORMATION.
The HID class driver sets the following fields of Irp->IoStatus:
Information is set to size, in bytes, of the preparesed data.
Status is set to STATUS_SUCCESS if the preparsed data was retrieved without error. Otherwise, it is set to an appropriate NTSTATUS error code. If the requester-supplied output buffer is not large enough to hold the preparsed data, then status is set to STATUS_INVALID_BUFFER_SIZE.