Если указать в дескрипторе отчёта REPORT_ID, то тогда размер буфера отчёта будет равен размеру наибольшего из отчётов, но как быть, если необходимо отравить сразу несколько отчётов? Да, можно не указывать REPORT_ID и тогда размер буфера отчёта будет равен размеру всех отчётов, но тогда придётся заполнять чем-то их все, даже если на тот момент у моего драйвера не будет актуальных данных. Подскажите, пожалуйста, можно ли как-то самому указать общий размер буфера отчёта
Тогда зачем вам несколько отчётов? Обычно достаточно одного. Но если надо несколько делаете FSM и отправляете их в цикле по очереди. И в какой такой момент? Данные у вас будут неизвестны только в момент сброса то бишь включения. После этого данные сидят в вашем буфере, что значит в переводе элемент задержки, и вы когда надо вычитываете данные из буфера и отправляете. А то что они немного не актуальны. Так о этом никому знать не положено. Тем более это стандартная практика (грязное чтение называется). REPORT_ID обнулять не надо.
Нет) данные не будут сидеть в буфере. В момент их получение драйвер будет доставать IRP IOCTL_HID_READ_REPORT из системной очереди, заполнять его буфер пришедшими данными, и завершать его. Если размер буфера никак нельзя задать, может лучше обойтись без REPORT_ID, а непришедшие данные заменять предыдущими значениями?