Драйвер и библиотека
От: Роланд Бродяга Россия  
Дата: 04.03.08 17:22
Оценка:
Народ, кто шарит в дровах...
Проблемка возникла такая: есть драйвер, в нем тело одной функции может изменяться во время работы драйвера, а перезапускать его нельзя (сам драйвер — легаси).
Получается, что функцию эту надо компилить отдельно от остального драйвера...
А вот во что? В dll? Или можно создать что-то типа библиотеки режима ядра?
И как вызывать эту функцию из драйвера?
З. Ы.: Использую Win DDK.
Re: Драйвер и библиотека
От: pva  
Дата: 04.03.08 17:38
Оценка:
Здравствуйте, Роланд Бродяга, Вы писали:

РБ>Народ, кто шарит в дровах...

РБ>Проблемка возникла такая: есть драйвер, в нем тело одной функции может изменяться во время работы драйвера, а перезапускать его нельзя (сам драйвер — легаси).
Количество вариантов фиксировано? Если да — все варианты в один драйвер.

РБ>Получается, что функцию эту надо компилить отдельно от остального драйвера...

РБ>А вот во что? В dll? Или можно создать что-то типа библиотеки режима ядра?
В другой драйвер, сервис или user-mode приложение, а дальше одним из способов обмена данными организовать взаимодействие.

РБ>И как вызывать эту функцию из драйвера?

Зависит от выбранного механизма.

РБ>З. Ы.: Использую Win DDK.

А другого ничего и нет.
newbie
Re[2]: Драйвер и библиотека
От: RolandBrodyaga Россия  
Дата: 05.03.08 11:35
Оценка:
Здравствуйте, pva, Вы писали:

pva>Здравствуйте, Роланд Бродяга, Вы писали:


РБ>>Народ, кто шарит в дровах...

РБ>>Проблемка возникла такая: есть драйвер, в нем тело одной функции может изменяться во время работы драйвера, а перезапускать его нельзя (сам драйвер — легаси).
pva>Количество вариантов фиксировано? Если да — все варианты в один драйвер.
Нет, тело этой функции может быть произвольным.

РБ>>Получается, что функцию эту надо компилить отдельно от остального драйвера...

РБ>>А вот во что? В dll? Или можно создать что-то типа библиотеки режима ядра?
pva>В другой драйвер, сервис или user-mode приложение, а дальше одним из способов обмена данными организовать взаимодействие.
Критично время выполнения, так что только в режим ядра. Нужно сделать что-то вроде динамически подключаемой библиотеки, чтобы ее бинарник можно было менять когда угодно. Вопрос в том, возможно ли это вообще?

РБ>>И как вызывать эту функцию из драйвера?

pva>Зависит от выбранного механизма.

РБ>>З. Ы.: Использую Win DDK.

pva>А другого ничего и нет.
Re[3]: Драйвер и библиотека
От: Denwer Россия  
Дата: 05.03.08 12:01
Оценка:
Здравствуйте, RolandBrodyaga, Вы писали:

[Поскипано, а то модераторы лютуют]

Есть такая вещь как как EXPORT DRIVER, но он работает как экспоритуремая DLL юзер моды через LIB, и соответсвенно черет таблицу экспорта, что сразу же накладывает ограничение на перезагруку новой версии. В ядре есть функция аля GetProcAddr, но только она для хала и ядра сделана. Думаю тут можно сделать следующимим методами
1 — как обычный драйвер, вызовы делать через IRP & IoCallDriver
2 — как обычный драйвер, через IRP получить адрес функции и потом уже делать вызовы напрямую
3 — как обычный драйвер, в котором сделать экспортируемую функцию, но без явной привязки, т.е. ее адрес получать динамически, с помощью разбора таблицы экспорта (функцию нахождения экспорта могу выложить если нужно)

Все это дает возможность выгружать дарйвер во время работы основного, и загружать новый.
Re[4]: Драйвер и библиотека
От: pva  
Дата: 05.03.08 16:58
Оценка: 2 (1)
Здравствуйте, Denwer, Вы писали:

D>[Поскипано, а то модераторы лютуют]

http://www.wd-3.com/archive/KernelDlls.htm
http://alter.org.ua/ru/docs/nt_kernel/procaddr/
newbie
Re[4]: Драйвер и библиотека
От: Роланд Бродяга Россия  
Дата: 05.03.08 22:01
Оценка:
Т.е. еще один драйвер и функция в нем?
Это вариант, при изменении исходника функции перекомпилить этот драйвер и перезагрузить его.
А можно ли перезагрузить драйвер без перезагрузки ОС? Если да, то как?
Re[5]: Драйвер и библиотека
От: Denwer Россия  
Дата: 06.03.08 16:39
Оценка: 2 (1)
Здравствуйте, Роланд Бродяга, Вы писали:

РБ>Т.е. еще один драйвер и функция в нем?

РБ>Это вариант, при изменении исходника функции перекомпилить этот драйвер и перезагрузить его.
РБ>А можно ли перезагрузить драйвер без перезагрузки ОС? Если да, то как?

ZwLoadDriver/ZwUnloadDriver
Re: Драйвер и библиотека
От: Ligen Украина http://zone-of-ambiguity.blogspot.com/
Дата: 17.03.08 19:19
Оценка: 2 (1)
РБ>Народ, кто шарит в дровах...
РБ>Проблемка возникла такая: есть драйвер, в нем тело одной функции может изменяться во время работы драйвера, а перезапускать его нельзя (сам драйвер — легаси).
РБ>Получается, что функцию эту надо компилить отдельно от остального драйвера...
РБ>А вот во что? В dll? Или можно создать что-то типа библиотеки режима ядра?
РБ>И как вызывать эту функцию из драйвера?
РБ>З. Ы.: Использую Win DDK.

Если нужен свой собственный лоадер: ZwCreateSection + ZwMapViewOfSection + самописный GetProcAddress (да хоть тут же на форуме)
Viva el Junta Militar! Viva el Presidente!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.