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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Вопрос по Passthru Driver. Как сделать обратный вызов?  (Прочитано 8108 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Dmitry5
Гость
« : 03-10-2003 18:09 » 

Уважаемый Гром реализовал Ваш пример.
Создал приложение на Builder, которое с помощью DeviceIoControl
сохраняет некоторые значения в драйвере и соответственно забирает что-то из него.
Вопрос:
Как сделать так чтобы из драйвера можно было вызвать функцию
в моем приложении на Builder.
P.S Я хочу просматривать содержимое пакетов в приложении на Builder как бы в реальном времени, то есть чтобы из функции MPSend
вызывалась функция в приложении на Builder , далее в этом приложении просматривалось содержимое пакета, и решалось отправлять его дальше по цепочке драйверов или нет.
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 03-10-2003 21:26 » 

Ответ прост. Я делал это в драйвере - если проверка не требует много времени, и не несет возможность зацикоивания...
По поводу прорыва за область памяти здесь уже говорили, но тут возникает один момент - что будет вызывать драйвер - если программа не запущена???
Записан

А птичку нашу прошу не обижать!!!
Dmitry5
Гость
« Ответ #2 : 04-10-2003 07:01 » 

Если pfunc - это указатель на функцию void RPacket(char*buf,int count),
который был получен с помощью DeviceIoControl,
то в драйвере можно попробовать сделать так:
if (pfunc!=NULL)
{

try
{
RPacket(....пересылаем пакет в приложение на Builder);
}
catch (..)
{
pfunc=NULL;
}

}//То есть один раз вылетит ошибка, но в следующий раз уже этого не будет, пока ты снова не запустишь приложение и не передашь pfunc с помощью DeviceIoControl

По всей видимости у меня как раз проблема как пробить память - хорошо буду думать. Спасибо
Записан
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #3 : 04-10-2003 18:54 » 

Я думаю, что тебе просто надо дождаться будней и Славика - он тут по драйверам главный, я многих вещей не делал и не связан сейчас с драйверами, а вот Славик делал.

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

А птичку нашу прошу не обижать!!!
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 06-10-2003 06:11 » 

Не так нехорошо делать- user mode ф-цию из драйвера.  Объясняю почему.
1) Ты вызовешь ф-цию в режиме ядра, где использование user mode ф-ция Win32 API проблематично хотя бы из-за ограничений на размер стека, и вобще они не предназначены для работы в режиме ядра, поэтому могут уронить систему- скорее всего так и сделают, но могут и отработать нормально- это надо проверять каждую ф-цию, хотя ты можешь вызывать сразу ф-ции ядра, но это надо хитро получить указатели на них.
2) Вызывать callback ф-цию можно только в контексте того процесса, в котором получили ее адрес, иначе PF с синим экраном.
  Теоретически вызов callback ф-ции, находящейся в юзерском приложении возможен, но при вышеупомянутых ограничениях.
 По твоей проблеме есть статья
"In Context: Understanding Execution Context for NT Drivers"
вот тут она лежит
http://www.osronline.com/article.cfm?id=168
Записан
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #5 : 06-10-2003 13:28 » 

Если хочешь информировать приложение из драйера, то лучше подойдет событие. Читай вот тут.
http://www.osronline.com/article.cfm?id=108
Записан
Dmitry5
Гость
« Ответ #6 : 12-10-2003 07:36 » 

Спасибо
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines