Запуск пользовательского процесса из kernel-mode
От: miksayer  
Дата: 04.11.10 11:55
Оценка:
Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом?
Re: Запуск пользовательского процесса из kernel-mode
От: x64 Россия  
Дата: 04.11.10 18:09
Оценка: 2 (1)
M>Необходимо запустить пользовательский процесс из kernel-mode.

Вообще-то, это уже много раз обсуждалось. Думаю, ты плохо искал.

M>Может быть это возможно каким-либо более простым способом?


Боюсь, что нет. Создание процесса полностью из ядра — задача сложная. Поэтому лучше всего попробовать заставить какой-нибудь уже существующий процесс создать новый процесс. Ну а для этого способов не так уж и много — либо зашедулить APC, либо создать пользовательский поток. Вариант с APC требует грязной работы с недокументированными вещами. Создать пользовательский поток из ядра проще, но на Windows 7 есть определённые проблемы с этим. Есть ещё один вариант, вполне стабильный, однако требующий некоторых исследований и внимательности. Нужно экспериментально найти процесс (один из системных), который часто-часто вызывает какую-либо API (например, WaitForSingleObject() или Sleep() или ReadFile(), ну ты понел), похукать эту функцию из ядра (через IAT, например), в перехватчике выполнить CreateProcess(), ну и затем снять перехват. Звучит просто, но на деле будут грабли, внимательнее.
Re: Запуск пользовательского процесса из kernel-mode
От: Геннадий Майко США  
Дата: 04.11.10 19:36
Оценка: +1
Здравствуйте, miksayer,

M>Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом?

--
Если Вы смогли установить в систему драйвер, из которого собираетесь запускать пользовательский процесс, то пока не понятно, что мешает Вам одновременно с установкой драйвера установить еще и service, который запустит этот пользовательский процесс по команде из драйвера.

C уважением,
Геннадий Майко.
Re[2]: Запуск пользовательского процесса из kernel-mode
От: miksayer  
Дата: 04.11.10 19:51
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Здравствуйте, miksayer,


M>>Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом?

ГМ>--
ГМ>Если Вы смогли установить в систему драйвер, из которого собираетесь запускать пользовательский процесс, то пока не понятно, что мешает Вам одновременно с установкой драйвера установить еще и service, который запустит этот пользовательский процесс по команде из драйвера.

ГМ>C уважением,

ГМ>Геннадий Майко.
так, а где об этом можно подробнее почитать(о написании сервисов и работе с ними из драйвера)? я просто вообще нуб в данном вопросе.
Re[3]: Запуск пользовательского процесса из kernel-mode
От: Слава Израиль  
Дата: 05.11.10 00:30
Оценка:
Здравствуйте, miksayer, Вы писали:

ГМ>>C уважением,

ГМ>>Геннадий Майко.
M>так, а где об этом можно подробнее почитать(о написании сервисов и работе с ними из драйвера)? я просто вообще нуб в данном вопросе.

Написать службу в dotnet можно с помощью мышки — есть мастер в студииб на плюсах — здесь
Спасибо за внимание
Re[2]: Запуск пользовательского процесса из kernel-mode
От: miksayer  
Дата: 13.11.10 12:07
Оценка:
Так, вроде как получилось сделать так, как описано в статье из моего первого поста. Но я еще не совсем понял, как это работает. Например, что такое alertable thread? чем он отличается от обычного потока?
Re[3]: Запуск пользовательского процесса из kernel-mode
От: x64 Россия  
Дата: 13.11.10 12:20
Оценка:
M>Но я еще не совсем понял, как это работает.

На, разбирайся:

Scheduling, Thread Context, and IRQL
Asynchronous Procedure Calls
Waits and APCs
Types of APCs
Disabling APCs
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.