Перехват обращений к порту
А вот собственно и проблема. Есть DLL, предназначенная для работы с устройством (устройство подключено через USB) и экспортирующая для этого набор функций (вроде открыть устройство, закрыть, передать на устройство данные и пр.). При вызове этих функций DLL для их исполнения обращается к определенному сервису в системе, который уже собственно и осуществляет ввод/вывод с устройством.
Так вот, или этот сервис написан криво, либо что-то еще, но факт в том, что когда я вызваю функцию из DLL для передачи определенных данных на устройство, сервис при непосредственной передаче добавляет к данным еще и служебные байты. Но в одном из служебных байтов перепутаны тетрады (вместо 0xAB передает 0xBA) ну и устройство из-за этого "ругается" на неизвестную команду.
Собственно вот и проблема, как исправить этот байт? Исходников ни DLL ни тем более сервиса у меня нет.
Думал вместо вызова функции из DLL для передачи данных напрямую писать в порт (благо протокол я уже узнал), но боюсь проблем с синхронизацией, которые обязательно возникнут, так как после открытия устройства сервис беспрерывно обменивается с ним данными.
Можно было бы поднапрячься и перехватывать пакеты, идущие к USB порту, но как-то не хочется из-за одного байта писать кучу кода.
Может кто поможет советом, какие еще могут быть способы заменить этот байт на правильный? Всем заранее спасибо.
Видимо варианта 2. Или вытащить новую версию сервиса, где байты не перепутаны, либо "подправить" существующий в hex-редакторе (что чревато и не всегда напрямую возможно)..