Создание драйвера-фильтра для HID Keyboard

Описание ситуации

Передо мной лежит устройство - 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.

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

Вопросы

  1. Какой "комплект" начать изучать WDM (Windows DDK) или WDF (Windows Driver Frameworks). На сколько я понял, WDF создавался с целью упрощения написания драйверов, и позволяет сократить время и усилия?
  2. При использовании WDF нужен ли рядом WDK?
  3. Для написания драйверов хватит ли Windows Build Tools, или нужно ставить полную студию?
  4. WDF состоит из дух компонентов KMDF и UMDF, в моем случае (драйвера-фильтра) что нужно использовать (если буду использовать WDF)?
  5. Относительно самого драйвера-фильтра тоже не понятно - писать драйвер для HID устройства, или на более низком уровне как для USB-устройства? Мне нужно только перехватывать весь вывод из устройства и давать возможность моей прикладной программе его читать. Если моя прикладная программа не запущена - просто перехватывать вывод от устройства и никуда его дальше не передавать.
  6. Есть ли свежая и не отсталая альтернатива WinDBG?
  7. Кроме изучения MSDN есть ли какой свежий полезный материал по WDF/WDM?

Конечно же, кроме ответов на вопросы, приветствуется любая полезная информация по теме. Возможно я на каких-то этапах заблуждаюсь?


Ответы (0 шт):