Как реализовать множественный одновременный доступ к приложениям с помощью WinUsb

Мы портируем dll нашего USB-устройства, чтобы использовать универсальный WinUsb. Однако WinUsb не поддерживает несколько одновременных приложений для доступа к одному и тому же устройству (один и тот же VID и PID). Я хотел знать, есть ли способ реализовать этот одновременный доступ с помощью WinUsb? Я читал о драйверах фильтров и услугах. 1. Я не хочу использовать драйвер фильтра, потому что, как я понимаю, для этого придется пройти WHQL, а я не хочу идти по этому пути. 2. Что касается службы Windows: как именно мне ее реализовать? должна ли служба получать все вызовы WinUsb, и если другое приложение попытается получить доступ к тому же устройству, оно закроет соединение с первым приложением, откроет новое соединение и обратно?

Является ли сервис правильным правильным решением в этом случае? Есть ли другой способ реализовать решение, отличное от того, что я написал?

Спасибо.


person Eldad    schedule 02.11.2010    source источник


Ответы (1)


Драйверу фильтра не нужно проходить WHQL. Вам нужно только подписать файл каталога, необходимый для пакета драйверов. Для этого требуется только сертификат подписи кода от verising/... . Это должно стать хорошей отправной точкой для ознакомления с этим.

Тем не менее, драйвер ядра может быть трудно разработать. Так что, возможно, COM-сервер был бы лучшим подходом. Вы реализуете это совместное использование из службы, позволяя COM-клиентам создавать объекты из вашей службы, а затем реализуете какое-либо совместное использование/взаимное исключение на вашем COM-сервере.

Сервера COM-exe могут быть написаны относительно быстро.

person Christopher    schedule 02.11.2010
comment
Как мне реализовать упомянутое вами взаимное исключение при общении с WinUSB? Нужно ли закрывать соединение между каждым USB-вызовом? - person Eldad; 03.11.2010
comment
Сорри, я действительно не знаю WinUSb. В большинстве случаев вы должны иметь возможность просто мультиплексировать запросы на чтение и запись. Только когда приходится делать несколько запросов сразу, это можно было сделать введением блокировки (а потом входящие вызовы проваливаются при занятости устройства...) - person Christopher; 03.11.2010