Есть задачка, ограничить доступ к драйверу, кроме заспустившего его приложения. Т.е. доступ к драйверу имеет только юзермодное приложение, запустившее его. Я скрывал драйвер, но это делало его невидимым даже для моего приложения. Не подскажете что необходимо перехватывать чтобы обеспечить защиту для драйвера и дать доступ для работы моему приложению с драйвером?
сделай аутентификацию запросов в драйвере. пусть драйвер будет видимым, но при этом чтобы он проверял запросы. либо через общую с прогой память сделай проверку "кодов доступа".
Моя задача запустить драйвер, скрыть его отовсех... b при завершении программы выгрузить. Я не могу его выгрузить, т.к. он невидим даже для меня... как это сделать ? =\\\
Ну смотри- ты скрыл драйвер из директории обьектов, стало быть для менежера в/в он стан. невидимым, стало быть IRP до него не дойдут. А стало быть коммуникации через пайпы, deviceioctl тоже. , да так можно, коды как работать с IDT, были когда в кодах Рутковской, но там не рассчитано на неоднопроцессорные машины. Тебе придется перезатачивать эти коды, помнить про некоторые ньюансы. Ну и помнить, что посмотреть, что там в IDT тоже просто. А Jupiter очевидно тебе предлагает в обработчике MJ_CREATE, смотреть, что за процесс и откуда вызывает его, если не аутотентичный, то посылать его, тоже вариант. EP_X0FF поясняет, что создавай поток из DriverEntry, функцией PsCreateSystemThread и делай что тебе надо там. Только имей ввиду, что ты в контексте процесса system, необх. контекст другого процесса - KeAttachProcess. Вообще не стоит использовать недокументированные методы без особой на то надобности
А какой способ, на ваш взгляд, наиболее оптимален? Насчет потока: ну создал я поток... но я же устанавливаю перехват в драйвере... я новичек в этом. Я не понимаю что можно при помощи этого потока сделать =/
Ну про оттимальный способ никто ничего не скажет, как так не известно что делает твой драйвер. Ну про поток тебе толкуют, что в выдели память, загони туда код и запускай поток
создать процессом мутекс, передать его драйверу, в драйвере создать поток, и ждать этот мутекс. при завершении процесса, мутекс просигналит (KeWaitForSingleObject вернет STATUS_ABANDONED). Ну и выгрузить драйвер...
Другим драйвером и выгрузить. Потом, тем же макаром, его тоже, выгрузить.. Вобщем припастись как следует драйверами выгрузки.
не вижу смысла выгружать драйвер - лучше (проще и стабильнее) оставить его в памяти и не трогать. сначала я было подумал, что непонятно написал про аутентификацию запросов в драйвере, но Cock же меня правильно понял! принцип таков: для того, чтобы драйвер работал только с твоим приложением, он должен как-то твоё приложение узнавать. я и предложил сделать аутентификацию при обращениях к драйверу. при вызове драйвера ты сначала передаёшь ему некий "код начала сеанса", после проверки которого драйвер ждёт от тебя указателя (или ты его сам получаешь в драйвере - тут как те проще) на общую память (секцию), в которой вы обмениваетесь "ключами", драйвер проверяет ключ на правильность, при полоэительном рез-те выдаёт тебе код для данной сесси, который ты впоследствии передаёшь драйверу. разработай протокол обмена сообщениями твоей программы с драйвером, почитав доки по аутентификации.
Ну мне же необходимо тогда при запуске программы проверять, загружен ли мой драйвер или нет. Темболее метод что ты написал мне совершенно незнаком... и это будет осуществлено не за одну неделю =\ Мне необходимо показать драйвер уже через 2а дня =\