Драйвер создаёт устройство, символьную ссылку и завершается ошибкой. система его автоматически выгружает. будет ли работать это устройство? Разумеестя, адреса обработчиков валидны и указывают вне драйвера.
Мм, адреса заполняются же в DRIVER_OBJECT, а после выгрузки его уже не будет... имхо дело закончится PAGE_FAULT_IN_NONPAGED_AREA или просто KMODE_EXCEPTION_NOT_HANDLED
Ещё вариант. Предложил Грейт: Копируем DriverObject в буфер. создаём для него устройство. тож не работает
я кажется догадываюсь, почему ты интиресуешься сабжем, и пока вижу тут только два выхода: 1. создавать устройство путём перелопачивания и модификации вручную целой кучи стситемных структур 2. использовать другую систему коммуникации драйвера с юзермодным приложением (благо вариантов тут огромное кол-во)
Хм.. Есть род программ которым совершенно всё-равно на дырявость системы - главное чтоб БСОДа не было. Так что можно реализовать всё что угодно.
ВОТ ОТСЮДА ПОПОДРОБНЕЕ... Примеры, ссылки... Нужно тоже организовать обмен р3 с р0 без устройства.. ну к примеру через файл или разделяемую память... Но если есть другие варианты, с удов. выслушаю ))
nitrotoluol 1. файлы/пайпы 2. разделяемая память (как ты уже сказал) 3. lpc 4. добавление своего сервиса в sdt 5. установка своего обработчика какого-нибуть прерывания 6. KeStackAttachProcess и последующие манипуляциями с данными в его контексте 7. похукать irp-обработчики какого-нибуть чужого девайса, и юзать его это только то, что первым пришло в голову, если подумать над этим более основательно, то думаю можно будет ещё много чего напридумывать
Cr4sh оффтоп: что такое "lpc"? я всегда думал, что так просто называется совокупность всех способов: типа файлов/пайпов, разделяемой памяти итд. Или различные обертки типа rpc, если их использовать в пределах одной машины..
>> имхо ты намешал способы передачи информации и способы передачи управления эти понятия взаимосвязаны и взаимодополняющие
хе.. я тут ещё кое что придумал. вот берём, допустим, NtQuerySystemInformation и добавляем туда свой SystemInformationClass. эту апишку всё-равно перехватывать придётся (для скрытия процессов). ну тут уже всё ясно: при п6ерехвате проверяем первый параметр - если это то что нам нужно, то выполняем комманды (их можно передавать в буффере). Дырявость я имею ввиду то, что способ управления может содержать потенциальные дыры. вот, напримар, общая память. если приложение работает в несколько потоков и один из них вдруг освободит эту память, затем дров обратится к ней - произойдёт BSOD.
gevara Ещё один малозаметный способ промаячить драйверу из ring3: Драйвер подписывается на события по загрузке модулей, вызывая PsSetLoadImageNotifyRoutine. Клиентский процесс в нужные моменты загружает/выгружает длл с определённым именем.