Всем привет! После серии эксперементов имею некторые ответы, думаю кому-то будут полезны
В целом ХИД драйвер виндоус анализирует вид отчета, то есть если в нем не указан таг Репорт ИД, то виндоус делает его нулевым и не использует. Он не ждет его на интерапт конечной точке, и не посылает его на интерапт конечную точку. WriteFile, ReadFile сам регулирует этот момент, WriteFile требует нулевое значение, а ReadFile возвращает нулевое значение. В устройство передается только данные отчета без первого символа РепортИД, и принимаются тоже только данные отчета.
Если же добавить таг репорта ИД в описание хид репорта, тогда ReadFile требует данных на 1 байт больше и нулевой должен быть идентификато отчета, если слать из устройтсва сообщения с неверным нулевым байтом то ReadFile не возвращается со считанными данными, WriteFile требует верный РепортИд на входе, и этот байт приходит в устройство.
То есть виндоус на основе данных об описании репорта сам регулирует все дела с РепортИд, не дает передавать неверные, и игнорирует прием неверных.
Что делать в устройстве с неправильным РепортИД непонятно, так как виндоус не дает посылать те идентификаторы что неверны, если же ответить Сталл на верный ИД виндоус вернет ошибку устройтсво не работает. Попытка из винды слать неверные репорт ИД данные до устрйотсва не доходят, функция возвращает ошибку контрольной суммы, думаю имелось ввиду ошибка данных.
Резюме
1. непонятно, так как виндоус не допускает посылки неверных репорт ИД, логично наверное посылать СТАЛЛ, на случай стороних хост устройств.
2. Они добавляются драйвером и отрезаются драйвером хид. Если нет тага репорт ИД в описании хид репорта, то их не будет в отчетах, если будут то их надо дабавлять, и устройство буддет их получать
3. Если нет репорт ИД то просто слать данные, если есть то первым символом идет РепортИД, иначе передача не пройдет
4. Да, да, да по данным численного эксперемента

)