![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
FalseMaster |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Вот дожил до того, что припёрло написать драйвер. После первой синьки в обработчике "IRP_MJ_DEVICE_CONTROL" проверил поля "Tail.Overlay.CurrentStackLocation" и "UserBuffer" - оба в нулях. Почему, ума не приложу, вроде всё делал как пишут в интернетах. Если не трудно, гляньте, может я что-то напутал.
создание устр-ва:
открытие устр-ва:
обращение к устр-ву:
|
||||||
|
|||||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
||||
|
||||
FalseMaster |
|
||||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Не обращай внимания - оригинал на паскале, а в сишном формате я для удобства восприятия запостил, но кривовато получилось ![]()
Ну не знаю, на MSDN пишут, что в "UserBuffer" помещается адрес выходного буфера, передаваемого в параметре "lpOutBuffer" ф-ции "DeviceIoControl", т.е. там должно быть "&out_buf". Ну да не в этом соль. Я пробовал и с METHOD_BUFFERED - всё равно "CurrentStackLocation"=NULL, хотя адрес в "AssociatedIrp.SystemBuffer" вполне допустимый (0x8???????), но читать/писать не рискнул. Код то вроде правильный, но по каким-то причинам не выделяется IRP-стёк. Может при загрузке драйвера с помощью "NtLoadDriver" есть какие-то подводные камни. |
||||
|
|||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Да, действительно. Перепутал с SystemBuffer ![]()
А что возвращает IoGetCurrentIrpStackLocation() ? (Прямой доступ к CurrentStackLocation вроде как запрещен) |
|||
|
||||
FalseMaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
"IoGetCurrentIrpStackLocation" возвращает тот же самый NULL, ибо это всего лишь макрос, и не думаю, что можно запретить доступ к блоку памяти размером 4 байта. Сейчас попробовал грузить драйвер с помощью "KMDManager" - результат тот же. Прямо мистика какая-то. |
|||
|
||||
FalseMaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Проблему решил. Тему фтопку.
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 9 Всего: 45 |
Ну, если Вы не поделитесь опытом, что да как было не так, то, да, фтопку... -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
FalseMaster |
|
|||
Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 18.11.2009 Репутация: нет Всего: нет |
Я неспроста попросил топик кильнуть. Причина была в моей невнимательности. Поскольку я на делфях пишу, заголовочники приходится сдирать с сишных хидеров. Вот я сдуру и воспользовался с незапамятных времён завалявшимся на диске "winddk.h" за авторством Casper S. Hornstrup, а он на поверку оказался кривой. На данный момент вроде (полностью не проверял, ибо нефиг) пофиксен, но рисковать не стал, качнул оригинальный (мелкомягкий) DDK, исправил лажу у себя и всё заработало. Так что, тема не несёт полезной информации.
|
|||
|
||||
Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
Ну отчего же не несет информации, теперь нужно знать что нужно следить за хидерами и использовать только оригинальные.
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 2 Всего: 88 |
Да, необходимость все время переводить и перепроверять сишные хедеры это то, почему мы всё-таки пишем драйвера на сях
-------------------- Обижено школьников: 8 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |