Решил воспользоваться стандартным WDF-драйвером Winusb.sys из WDK 7600. Все делал согласно инструкции.
Настроив inf-файл под свое устройство, удалось успешно установить драйвер, открыть устройство с помощью createfile. Далее при попытке записи 1-го байта в драйвер с использованием функции WinUsb_WritePipe из библиотеки winusb.lib, не смотря на то, что функция записи WinUsb_WritePipe возвращает TRUE, программа USBTrace показала, что было отправлено 0 байт, хотя пытался отправить 1 байт. Проверил адреса конечных точек для записи и чтения, в моем устройстве они следующие:
0x81, // bEndpointAddress, Endpoint 01 - IN
0x02, // bEndpointAddress, Endpoint 02 - OUT,
то есть, направления точек заданы верны, если адреса поменять местами, то WinUsb_WritePipe возвращает FALSE, отсюда сделал вывод, что, видимо, направления и адреса задал правильно.
Атрибуты обеих конечных точек BULK.
Может быть я еще что-то не учел в дескрипторах конечных точек на устройстве? Со стороны приложения хоста вроде никаких изменений по сравнению с кодом из msdn не вносил.
Почему WinUsb_WritePipe возвращает TRUE, но при этом ничего не отправляет?