Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом?
Re: Запуск пользовательского процесса из kernel-mode
M>Необходимо запустить пользовательский процесс из kernel-mode.
Вообще-то, это уже много раз обсуждалось. Думаю, ты плохо искал.
M>Может быть это возможно каким-либо более простым способом?
Боюсь, что нет. Создание процесса полностью из ядра — задача сложная. Поэтому лучше всего попробовать заставить какой-нибудь уже существующий процесс создать новый процесс. Ну а для этого способов не так уж и много — либо зашедулить APC, либо создать пользовательский поток. Вариант с APC требует грязной работы с недокументированными вещами. Создать пользовательский поток из ядра проще, но на Windows 7 есть определённые проблемы с этим. Есть ещё один вариант, вполне стабильный, однако требующий некоторых исследований и внимательности. Нужно экспериментально найти процесс (один из системных), который часто-часто вызывает какую-либо API (например, WaitForSingleObject() или Sleep() или ReadFile(), ну ты понел), похукать эту функцию из ядра (через IAT, например), в перехватчике выполнить CreateProcess(), ну и затем снять перехват. Звучит просто, но на деле будут грабли, внимательнее.
Re: Запуск пользовательского процесса из kernel-mode
Здравствуйте, miksayer,
M>Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом?
--
Если Вы смогли установить в систему драйвер, из которого собираетесь запускать пользовательский процесс, то пока не понятно, что мешает Вам одновременно с установкой драйвера установить еще и service, который запустит этот пользовательский процесс по команде из драйвера.
C уважением,
Геннадий Майко.
Re[2]: Запуск пользовательского процесса из kernel-mode
Здравствуйте, Геннадий Майко, Вы писали:
ГМ>Здравствуйте, miksayer,
M>>Доброго времени суток! Необходимо запустить пользовательский процесс из kernel-mode. Гугление привело только к вот этой статье. Может быть это возможно каким-либо более простым способом? ГМ>-- ГМ>Если Вы смогли установить в систему драйвер, из которого собираетесь запускать пользовательский процесс, то пока не понятно, что мешает Вам одновременно с установкой драйвера установить еще и service, который запустит этот пользовательский процесс по команде из драйвера.
ГМ>C уважением, ГМ>Геннадий Майко.
так, а где об этом можно подробнее почитать(о написании сервисов и работе с ними из драйвера)? я просто вообще нуб в данном вопросе.
Re[3]: Запуск пользовательского процесса из kernel-mode
Здравствуйте, miksayer, Вы писали:
ГМ>>C уважением, ГМ>>Геннадий Майко. M>так, а где об этом можно подробнее почитать(о написании сервисов и работе с ними из драйвера)? я просто вообще нуб в данном вопросе.
Написать службу в dotnet можно с помощью мышки — есть мастер в студииб на плюсах — здесь
Спасибо за внимание
Re[2]: Запуск пользовательского процесса из kernel-mode
Так, вроде как получилось сделать так, как описано в статье из моего первого поста. Но я еще не совсем понял, как это работает. Например, что такое alertable thread? чем он отличается от обычного потока?
Re[3]: Запуск пользовательского процесса из kernel-mode