Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Взаимодействие приложения с UMDF драйвером создающим виртуальные у-ва.  (Прочитано 7035 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kuzulis
Интересующийся

ru
Offline Offline

« : 27-12-2011 13:56 » 

Доброго времени.

Я новичек в драйверо кодинге.

Мне нужна консультация спецов по созданию и взаимодействию с Windows
драйверами нового типа UMDF/KMDF.

Я тут подумал приступить к созданию кросс-платформенного набора Open Source GUI
утилит для мониторинга траффика и т.п. через последовательные порты, основанного на Qt:

https://gitorious.org/qt-serial-port-monito...ls/trees/master

Предварительно этот набор будет состоять из трех утилит:

- QtSerialPortDataTerminal - тулза, выполняющая роль обычного терминала для трассировки, приема, отправки данных в порт.
   
- QtSerialPortSpy               - тулза, которая "внедряется" в драйвер текущего последовательный порта и
                                         перехватывает все данные, запросы и т.п. проходящие через него (собственно является драйвером-фильтром.) 
       
- QtSerialPortVirtualConfigurator - тулза, создающаа пары связанных между собой виртуальных последовательных портов.


Так вот, начал я с QtSerialPortVirtualConfigurator.

За основу драйвера виртуального порта планирую взять пример из WDK /src/serial/VirtualSerial, который
является юзер-мод драйвером UMDF.

Суть работы этого драйвера должна быть такая:

При его загрузке он должен создать некое "скрытое" устройство типа \\\\?\\MyHiddenControlDevice.
Основная задача которого взаимодействовать с GUI приложением через Win32 Api (т.е. через CreateFile, DeviceIoControl и т.п.)
и выполнять от него запросы (например через DeviceIoControl) на создание, удаление, управление парами "программно связанных" виртуальных
последовательных портов (типа два порта соединены кабелем).

Возможно ли это сделать? Или может быть, есть иной способ?

Просто непонятно как сообщить драйверу команду на создание како-го то объекта-устройства виртуального порта.
В том примере, что идет в WDK драйвер при своей загрузке сразу создает новый последовательный порт.

А мне нужно чтобы он его создавал/удалял и т.п.  полько по команде из GUI приложения.

Подскажите ГУРУ, как решить данную задачу?

ЗЫ: Ссылка на обсуждение и на другом форуме:
http://forum.vingrad.ru/forum/topic-344525/kw-umdf-virtual-serial.html
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 27-12-2011 15:38 » 

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

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
kuzulis
Интересующийся

ru
Offline Offline

« Ответ #2 : 27-12-2011 17:36 » 

Цитата
при загрузке драйвера создавайте свой хидден-девайс, через который управлять станете, а по командам последнему - уже создавать новый порт,
Ну так это и непонятно мне.

Т.е.
1. Как создать это "скрытое" устройство при загрузке драйвера?
2. Как создавать пары виртуальных портов по командам к "скрытому" устройству?
3. Как сделать общее "адресное" пространство для пары виртуальных портов для обмена данными между ними? (типа кросс кабеля)
4. Как и где хранятся эти пары (указатели на объекты) виртуальных портов в драйвере после создания? В каких-то списках или как?

и т.д. и. т.п.

Цитата
ровно так же как это сделано в примере.

Ну так в примере то у-во (виртуальный порт) автоматом создается при загрузке драйвера.
Что за это отвечает? Почему он создается?
В документации написано, что при появлении устройства - фреймворк вызывает в драйвере метод типа OnCreate().
Но в данном примере откуда появляется этот самый порт? Он же виртуальный, кто его первоначально создает?
Какой-то замкнутый круг.

Блин. Ничего еще не понятно, извиняюсь за сумбур.

Можете как-то по рабоче-крестьянски объяснить на пальцах как вообще это должно работать?



Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 27-12-2011 18:58 » new

ээээ.... тут в двух словах никак не объяснить) при всем желании.
лучше начните с книги Вальтера Они, чтобы понять сам принцип взаимодействия между драйверами.
когда разберетесь - Пенни Орвик в которой разбирается работа WDF.
первая книга вообще обязательна к прочтению, вторая - поскольку вы выбрали WDF.
еще желательно Соломона-Руссиновича хотя бы полистать - это тоже про внутреннее устройство Windows.

иначе я вам назову требуемые функции, а дальше будет еще больше вопросов, потому что базовых знаний не будет хватать.

полное название книг в первой теме раздела.
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines