На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> Программирование драйверов Windows
    Я во временном тупичке и очень прошу помощи! :unsure:

    Ситуация следующая

    Передо мной лежит устройство - USB Card Reader. В системе оно распознается как HID Keyboard. Мне нужно написать небольшую программу, которая будет пользоваться этим устройством. Но основной затык в том, что программа должна им пользоваться единолично! Т.е. каким-то образом его "захватить". И если будет активным другое приложение - весь вывод с устройства должен идти в мою программу. Без "захвата" устройство работает как обычная клава. К примеру, если будет активным окно ворда, после считывания магнитной карты, данные с устройства запишутся в ворд.

    Сперва я хотел обойтись малой кровью. Нашел библиотеку libusb (и на заметке была еще hidapi). Даже было уже начал эксперименты, см. соседний пост. Но, как начал углубляться в тему, споткнулся о пренеприятнейший для меня тупичок. Цитата из libusb FAQ:

    Цитата
    * HID keyboards and mice cannot be accessed using the native HID driver as Windows reserves exclusive access to them.


    ADD: или я не так понял утверждение выше???

    Засим мои эксперименты с libusb, считаю, бессмысленными. На сколько я понял по дальнейшему изучению материала - мне нужно писать драйвер-фильтр. И уже своей прогой общаться с этим драйвером. Но драйверов я никогда не писал, а надо. Перед стартом углубления в эту тему возникли вопросы. Хочу найти отправную точку, чтобы тупо не тратить месяцы на поиски правильных путей. Поэтому прошу, кто в курсе - помогите с ответами!

    Вопросы

    1) Какой "комплект" начать изучать WDM (Windows DDK) или WDF (Windows Driver Frameworks). На сколько я понял, WDF создавался с целью упрощения написания драйверов, и позволяет сократить время и усилия?

    2) При использовании WDF нужен ли рядом WDK?

    3) Для написания драйверов хватит ли Windows Build Tools, или нужно ставить полную студию?

    4) Есть ли свежая и не отсталая альтернатива WinDBG?

    5) WDF состоит из дух компонентов KMDF и UMDF, в моем случае (драйвера-фильтра) что нужно использовать (если буду использовать WDF)?

    6) Относительно самого драйвера-фильтра тоже не понятно - писать драйвер для HID устройства, или на более низком уровне как для USB-устройства? Мне нужно только перехватывать весь вывод из устройства и давать возможность моей прикладной программе его читать. Если моя прикладная программа не запущена - просто перехватывать вывод от устройства и никуда его дальше не передавать.

    7) Кроме изучения MSDN есть ли какой свежий полезный материал по WDF/WDM?

    Уфффф :wall:
    Сообщение отредактировано: JoeUser -
      Цитата JoeUser @
      * HID keyboards and mice cannot be accessed using the native HID driver as Windows reserves exclusive access to them.

      Это означает что у вас будет эксклюзивный доступ.


      Цитата JoeUser @
      1) Какой "комплект" начать изучать WDM (Windows DDK) или WDF (Windows Driver Frameworks). На сколько я понял, WDF создавался с целью упрощения написания драйверов, и позволяет сократить время и усилия?

      Думаю WDF вам подойдет.

      Цитата JoeUser @
      2) При использовании WDF нужен ли рядом WDK?

      Да нужно. Первое это обёртка над вторым, но для низкого уровня второе нужно.

      Цитата
      3) Для написания драйверов хватит ли Windows Build Tools, или нужно ставить полную студию?

      Лично я ставил Win7 + 2015 студию. Плюс WDK времён Win7 ибо совместимость ужасная.

      Цитата
      4) Есть ли свежая и не отсталая альтернатива WinDBG?

      На Wasm.In его считают лучшим отладчиком.

      Цитата
      5) WDF состоит из дух компонентов KMDF и UMDF, в моем случае (драйвера-фильтра) что нужно использовать (если буду использовать WDF)?

      UMDF вам не нужен. Это нужно если вы напишите драйвер ядра и захотите к нему свой API придумать и раздавать DLL. Правда и в этом случае ценность UMDF сомнительно. Вы что DLL сами не напишете что-ли? Тем более вызов ядерного драйвера это 2 строчки.
      Короче UMDF совсем не нужен, поэтому МС даже толком его и не документировала.

      Цитата
      6) Относительно самого драйвера-фильтра тоже не понятно - писать драйвер для HID устройства, или на более низком уровне как для USB-устройства? Мне нужно только перехватывать весь вывод из устройства и давать возможность моей прикладной программе его читать. Если моя прикладная программа не запущена - просто перехватывать вывод от устройства и никуда его дальше не передавать.

      Лично у меня в голове картридер и HID не вяжется.

      Раз перехватить почему просто не использовать USBPcap ?


      Цитата
      Кроме изучения MSDN есть ли какой свежий полезный материал по WDF/WDM?

      Исходники драйверов на git это основной источник материала.
        Pavia, огромное спасибо за развернутые ответы!!!

        Цитата Pavia @
        Лично у меня в голове картридер и HID не вяжется.

        Да там все просто - провожу карту, в текущем месте ввода печатаются символы. Примерно тоже самое, если бы это печаталось с клавиатуры.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0210 ]   [ 17 queries used ]   [ Generated: 16.04.24, 21:29 GMT ]