Здравствуйте, BArt, Вы писали:
BA>Хачу запустить прогу из драйвера, вообще это возможно или нет? BA>Хорошо бы было поиметь пример если возможно
--
Наиболее просто это сделать из отдельного специального user's mode приложения или сервиса, которое взаимодействуют с драйвером. Когда драйвер решает, что нужно запустить приложение, он каким-то образом (например, завершая pending IOCTL call, или устанавливая event, и т.п.) сигнализирует об этом приложению, которое собственно и выполняет всю работу по запуску другого приложения.
Если по каким-то причинам такой подход не устраивает, попробуйте реализовать пример 6.2 "Creating a Win32 Process" из книги Garry Nebbett "Windows NT/2000 Native API Reference".
C уважением,
Геннадий Майко.
Re[2]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, BArt, Вы писали:
BA>>Хачу запустить прогу из драйвера, вообще это возможно или нет? BA>>Хорошо бы было поиметь пример если возможно ГМ>-- ГМ>Наиболее просто это сделать из отдельного специального user's mode приложения или сервиса, которое взаимодействуют с драйвером. Когда драйвер решает, что нужно запустить приложение, он каким-то образом (например, завершая pending IOCTL call, или устанавливая event, и т.п.) сигнализирует об этом приложению, которое собственно и выполняет всю работу по запуску другого приложения.
ГМ>Если по каким-то причинам такой подход не устраивает, попробуйте реализовать пример 6.2 "Creating a Win32 Process" из книги Garry Nebbett "Windows NT/2000 Native API Reference".
ГМ>C уважением, ГМ>Геннадий Майко.
Это пример — мне кажется для user-mode все таки.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[3]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, Злость, Вы писали:
ГМ>>Если по каким-то причинам такой подход не устраивает, попробуйте реализовать пример 6.2 "Creating a Win32 Process" из книги Garry Nebbett "Windows NT/2000 Native API Reference".
З>Это пример — мне кажется для user-mode все таки.
--
Да, я тоже так думаю. Я поэтому и предложил: "попробуйте реализовать", — насколько я понял, практически все эти функции или их аналоги доступны в kernel mode.
C уважением,
Геннадий Майко.
Re[4]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, Злость, Вы писали:
ГМ>>>Если по каким-то причинам такой подход не устраивает, попробуйте реализовать пример 6.2 "Creating a Win32 Process" из книги Garry Nebbett "Windows NT/2000 Native API Reference".
З>>Это пример — мне кажется для user-mode все таки. ГМ>-- ГМ>Да, я тоже так думаю. Я поэтому и предложил: "попробуйте реализовать", — насколько я понял, практически все эти функции или их аналоги доступны в kernel mode.
Спасибо, как я раньше его не заметил, это поможет но не совсем. Во-первых нужно запустить процесс без участия user-mode, во-вторых я бегло посмотрел пример, там используется вызов ZwCreateProcess, дело в том, что в режиме ядра не экспортируется эта точка входа (возможно есть еще такие), таким образом видимо нужно найти адрез начала процедуры ZwCreateProcess режима ядра, но как?
Re[5]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, BArt, Вы писали:
BA>Здравствуйте, Геннадий Майко, Вы писали:
ГМ>>Здравствуйте, Злость, Вы писали:
ГМ>>>>Если по каким-то причинам такой подход не устраивает, попробуйте реализовать пример 6.2 "Creating a Win32 Process" из книги Garry Nebbett "Windows NT/2000 Native API Reference".
З>>>Это пример — мне кажется для user-mode все таки. ГМ>>-- ГМ>>Да, я тоже так думаю. Я поэтому и предложил: "попробуйте реализовать", — насколько я понял, практически все эти функции или их аналоги доступны в kernel mode.
BA>Спасибо, как я раньше его не заметил, это поможет но не совсем. Во-первых нужно запустить процесс без участия user-mode, во-вторых я бегло посмотрел пример, там используется вызов ZwCreateProcess, дело в том, что в режиме ядра не экспортируется эта точка входа (возможно есть еще такие), таким образом видимо нужно найти адрез начала процедуры ZwCreateProcess режима ядра, но как?
Могу посоветовать... поиск по группам гугла зделать...
Как я понял — там надо просто запускать через APC. Который будет выпонятся в уже в user-mode, а уже из него сможешь зделать все-что хочешь.
Клучевое слово "Перенаправление в/в для процесса, запущенного из драйвера" помоему.. так.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[6]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, Злость, Вы писали:
BA>>Спасибо, как я раньше его не заметил, это поможет но не совсем. Во-первых нужно запустить процесс без участия user-mode, во-вторых я бегло посмотрел пример, там используется вызов ZwCreateProcess, дело в том, что в режиме ядра не экспортируется эта точка входа (возможно есть еще такие), таким образом видимо нужно найти адрез начала процедуры ZwCreateProcess режима ядра, но как?
З>Могу посоветовать... поиск по группам гугла зделать...
З>Как я понял — там надо просто запускать через APC. Который будет выпонятся в уже в user-mode, а уже из него сможешь зделать все-что хочешь.
З>Клучевое слово "Перенаправление в/в для процесса, запущенного из драйвера" помоему.. так.
--
Вы, наверное, имели ввиду вот эту статью?
С уважением,
Геннадий Майко.
Re[7]: Как создать и запустить процесс из режима ядра Win200
От:
Аноним
Дата:
11.02.04 11:21
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, Злость, Вы писали:
BA>>>Спасибо, как я раньше его не заметил, это поможет но не совсем. Во-первых нужно запустить процесс без участия user-mode, во-вторых я бегло посмотрел пример, там используется вызов ZwCreateProcess, дело в том, что в режиме ядра не экспортируется эта точка входа (возможно есть еще такие), таким образом видимо нужно найти адрез начала процедуры ZwCreateProcess режима ядра, но как?
З>>Могу посоветовать... поиск по группам гугла зделать...
З>>Как я понял — там надо просто запускать через APC. Который будет выпонятся в уже в user-mode, а уже из него сможешь зделать все-что хочешь.
З>>Клучевое слово "Перенаправление в/в для процесса, запущенного из драйвера" помоему.. так. ГМ>-- ГМ>Вы, наверное, имели ввиду вот эту статью?
здорово, надо будет попробовать, спасибо
Re[7]: Как создать и запустить процесс из режима ядра Win200
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, Злость, Вы писали:
BA>>>Спасибо, как я раньше его не заметил, это поможет но не совсем. Во-первых нужно запустить процесс без участия user-mode, во-вторых я бегло посмотрел пример, там используется вызов ZwCreateProcess, дело в том, что в режиме ядра не экспортируется эта точка входа (возможно есть еще такие), таким образом видимо нужно найти адрез начала процедуры ZwCreateProcess режима ядра, но как?
З>>Могу посоветовать... поиск по группам гугла зделать...
З>>Как я понял — там надо просто запускать через APC. Который будет выпонятся в уже в user-mode, а уже из него сможешь зделать все-что хочешь.
З>>Клучевое слово "Перенаправление в/в для процесса, запущенного из драйвера" помоему.. так. ГМ>-- ГМ>Вы, наверное, имели ввиду вот эту статью?
А эта ссылка тоже интересная.
ГМ>С уважением, ГМ>Геннадий Майко.
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.
Re[8]: Как создать и запустить процесс из режима ядра Win200
ГМ>>Вы, наверное, имели ввиду вот эту статью?
З>Я про это говорил — здесь
З>А эта ссылка тоже интересная.
гм, практически получается создать процесс, похоже что осталось только сделать вызов на создание процесса из контекста нормального win32-процесса, видимо как пишут надо сделать вызов APC для какой-то нити процесса, делаю по примеру из 1-й ссылки, вот только незадача — как получить PKTHREAD не текущей нити, а какой-либо другой из другого процесса?