Напоминаю что я новичок в написании драйверов Ввожу в курс дела... читал Солдатова, тут в статьях про ввод/вывод DeviceIoControl, по форуму искал. Но так и не нашел конкретный ответ ри помощи чего можно организовать передачу строки из драйвера в юзермодное приложение. Метод передачи должен быть надежным. Т.е. все данные без возможности перехвата и изменения другими приложениями должны поступать в мое приложение для обработки. Ответ драйверу необязателен. =\ Помогите нубу с проблемкой... буду очень благодарен =)
DeviceIoControl можно перехватить. Лучше в драйвере модифицируй IDT, а при вызове int X в твоём приложении, управление перейдёт к драйверу, ты промаппируешь память на юзермодерное пространство, и вернешь в eax указатель в АП твоего процесса.
WaterGhost Без возможности перехвата - ну если вы новичек это будет трудно вам, но смысл таков: Аттачимся драйвером в контекст процесса, заказываем память под Mdl (ExAllocatePool), формируем Mdl (IoAllocateMdl), Делаем блок на адресное пространство процесса (напрмер MmMapLockedPagesSpecifyCache), и копируем туда что хотим напрямую. Потом детач. Все. Можно и без аттача-детача, но тут еще сложнее и на сколько я понимаю надо самим обработат MmAccessFault и подкачать страницы памяти нужного процесса из файла подкачки в ОП.
n0name Можно ему это сказать, например как ответ на DeviceIoControl. Если перехватят , то надо догадаться что это пришло . Можно память пометить сигнатурой.. В общем есть пути .
Так, сперва нада выяснить какой способ будет легче))) А то я БСОД'ов не один десяток увижу пока достигну цели =)
дык это надо будет делать всегда. а вызывать этот код можно через прерывания, либо DeviceIoControl, либо еще какойнибудь неозвученный вариант.
n0name На да вы правы, в принципе одинаково все. Но можно и без мапинга - Прямой ввод вывод, между драйвером и приложением, а данные при передачи шифовать - тогда перехватить не удастся - придется разобраться с алгоритмом шифрования и тп.
Ну тут другая проблема возникнет... эти данные необязательно расшифровывать. В них ничего полездного для других, но вот главное чтобы они дошли. Так что можно перехватить и уничтожить пакет... и он не дойдет.
WaterGhost Кароче, смысл такой, никак)) память которую ты выделишь и на которую будет надеяться твоё приложение с драйвером легко можно поставить под бряк и контролировать, единственно что ты можешь сделать, это попытаться запудрить мозги, но, помоему, у тебя это не получится)))
WaterGhost передачу данных между дровом и юзермодом можно организовать тем же тупым образом - бряк на диаппазон адресов из драйвера, к примеру когда юзермодное приложение будет писать\читать память из этого диаппазона, и даже незаметно получится)) по крайней мере новичёк может сразу не догадаться, либо подсовывать фолтную инструкцию, обработчик в idt которого будет держать драйвер. но это будет заметно, можно конечно сделать и незаметно=)), но тут уж сам думай