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

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

ru
Offline Offline

« : 26-08-2012 12:45 » 

Доброго времени суток!
Столкнулся со следующей проблемой. Надо написать драйвер виртуального устройства, способного вбрасывать в систему прерывания. Целевая система: Windows 7.
Прочитал, что необходимо использовать функцию IoConnectInterruptEx. Но нигде не нашел примеров её использования. На данный момент пришёл к выводу, что итоговая система будет выглядеть так:
- устанавливаю драйвер виртуальной шины (как в драйвере из WDK Toaster);
- посылаю ему запрос установить виртуальное устройство;
- в IRP_MN_QUERY_RESOURCE_REQUIREMENTS заполняю структуру IO_RESOURCE_REQUIREMENTS_LIST;
- в IRP_MN_START_DEVICE функционального драйвера устройства вызываю IoConnectInterruptEx.
Можете, пожалуйста подтвердить догадку?

Второй вопрос. В Windows в драйвере шины при создании объекта устройства шины (если не перепутал) можно поставить флаг RawDeviceOK, говорящий что шина сама принимает запросы к устройствам. Можно ли это использовать для того, что бы использовать только драйвер шины? Как в этом случае регистрировать прерывание?

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

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

« Ответ #1 : 27-08-2012 08:38 » 

IoConnectInterruptEx - НЕ предназначена для ВБРОСА прерываний в систему. ее используют для регистрации обработчика прерываний приходящих от железки например.
http://msdn.microsoft.com/en-us/library/windows/hardware/ff547974(v=vs.85).aspx

второе:
RawDeviceOK - Specifies whether the driver for the underlying bus can drive the device if there is no function driver (for example, SCSI devices in pass-through mode). This mode of operation is called raw mode.
raw mode - The mode of operation in which a device's driver stack does not include a function driver. A device running in raw mode is being controlled primarily by the bus driver. Upper-level, lower-level, and/or bus filter drivers might be included in the driver stack.
то есть просто говорит о том что устройство как бы есть, но для его обслуживания не требуется установить драйвер функционального устройства, т.к. драйвер шины сам все делает. если я сам правильно все понимаю.

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

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
valor
Новенький

ru
Offline Offline

« Ответ #2 : 27-08-2012 11:11 » 

Попробую точнее выразиться.
Задача написать драйвер, который зарегистрирует обработчик прерываний. А вбрасывает прерывание некое устройство (пока что виртуальное, т.к. его нет).
Я только что отлаживал пример Toaster из WDK и добился того, что драйвер шины сообщает подсистеме PnP о том, что необходимо прерывание, а драйвер устройства пытается зарегистрировать обработчик. Но IoConnectInterruptEx возвращает FFFFFFFFC0000034 - STATUS_OBJECT_NAME_NOT_FOUND (если я ничего не путаю).
Вопрос 1. Кто успешно использовал IoConnectInterruptEx и может объяснить как это делать?
Вопрос 2. Кто пользовался RawDeviceOK (чтобы работать не с двумя драйверами, а с одним) и может объяснить с точки зрения вопроса 1?
Записан
dE fENDER
Интересующийся

us
Offline Offline

« Ответ #3 : 27-08-2012 17:06 » 

Могу подсказать два перспективных направления для исследования:
1. Собственно симуляция прерываний при помощи программирования PIC/APIC. Эта штука вендорозависимая и нужно смотреть соответствующие даташиты на конкретный чип. Кстати, нагуглил что такая симуляция защищена патентом US 6370606.
2. Взять PCI-карту с плисиной и соответствующим образом ее запрограммить. Все равно для разработки драйверов нужно что-то физическое для полного понимания, как оно работает (а OSR'овские девайсы для это пригодны не самым лучшим образом, как мне кажется).
Записан
valor
Новенький

ru
Offline Offline

« Ответ #4 : 27-08-2012 17:56 » 

Спасибо за совет. Я думал написать какое-нибудь виртуальное устройство на Bochs. Сейчас же главное понять как написать соответствующий драйвер. Я читал, что в Linux это делается вызовом одной функции! Хотелось бы так и в Windows.
Записан
Ochkarik
Модератор

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

« Ответ #5 : 27-08-2012 19:48 » 

погодите. а вам собственно "вброс" прерываний с какой целью нужен? если исключительно для отладки без железа... то может оно вам и не надо?) эмулировать через DPC. не такая уж и большая разница получится...
или задача написать драйвер целиком на 100%  раньше чем железо будет, и больше никогда его не править?
« Последнее редактирование: 27-08-2012 19:50 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
valor
Новенький

ru
Offline Offline

« Ответ #6 : 28-08-2012 07:52 » 

У меня не стоит вопрос прерываний. И железа скорее всего не будет. Я изучаю сейчас драйвера, а прерывания - самая непонятная для меня часть. Точнее мне не понятно как зарегистрировать свой обработчик (он же ISR) в системе Windows 7. До сих пор я занимался написание программ на ассемблере. Писал даже что-то вроде небольшой ОС (хотя сильно сказано). Теперь вот осваиваю новое. Буду ковырять пример PCIDRV. Мне сказали, что более актуален чем Тостер. Если разберусь, то обязательно напишу в этой ветке что, да как.
Записан
dE fENDER
Интересующийся

us
Offline Offline

« Ответ #7 : 28-08-2012 10:04 » 

Если еще не прочли/читаете книгу Уолтера Они по WDM - начните с нее и WinXP. В примерах кода было использование IoConnectInterrupt, можно использовать таймер или еще что-нить системное для начала.
Научиться писать драйверы, только изучив исходники из WDK тоже можно, но тяжеловато. Хотя научиться этому. не изучив эти исходники вообще невозможно.
Обе книжки по WDF, которые мне известны - слишком ... не в тему для обучения, только как вспомогательный справочник, поэтому рекомендовать не могу.
Записан
Ochkarik
Модератор

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

« Ответ #8 : 28-08-2012 12:52 » 

поверьте, прерывания - это самая простая вещь в WDM))) там и изучать ничего не надо, если вы все остальное взаимодействие хорошо понимаете) лучше уделите больше внимания  стеку устройств, IRQL, обработке IRP, DPC, переключению контекстов и планировщику задач.
« Последнее редактирование: 28-08-2012 12:55 от Ochkarik » Записан

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

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines