Доброго времени суток.
Пишу драйвер, который должен работать на WinXP SP2 не зависимо от того, какие обновления установлены на сам SP2. Желательно чтобы он также работал на WinXP SP0 и WinXP SP1.
Сам драйвер должен при запуске каждого процесса в системе сначала проверять наличие етого процесса, в том числе и откуда именно он запускается, в текстовом файле. Текстовый файл C:\needrun.txt имеет следующий формат:
При наличии процесса, что запускается, в текстовом файле, етот процесс нужно запустить под указаным пользователем. Имена пользователей и их пароли известны.
Если же процесс, что запускается, отсутствует в текстовом файле, никакие действия не предпринимаются.
Для реализации такой функциональности драйвера он сначала при запуске каждого процесса проверяет его наличие в текстовом файле. Если он существует, то драйвер убивает процесс. После етого убитый процесс нужно запустить из драйвера от имени указанного пользователя.
Отслеживать и убивать нужные процессы получается.
Как запускать нужные процессы из режима ядра под именем указанного пользователя?
Искал и читал статьи. Но там сам запуск процесса очень зависим от версии обновления системных файлов Windows. К тому же имперсонация возможна только из пользовательского режима.
Хотел бы подробнее почитать про возможность подобного запуска процесса. Желательно с рабочими исходниками, где ето можно посмотреть.
Зарание благодарен за ответ.
Re: Драйвер, запускающий процесы от имени указаного пользова
Здравствуйте, Gradiz, Вы писали:
G>Как запускать нужные процессы из режима ядра под именем указанного пользователя?
1) The LocalService account does not have sufficient privileges to start other processes.
2) запуск процессов из драйвера навскику не кажется хорошей идеей, т.к. в любом случае это будет недокументированный путь — нет выставленного наружу CreateProcess API в ядре, об этом кстати регулярно пишут и в книгах и на этом форуме, см например Re: Несколько небольших вопросов по ядру
по мне, лучше подумать о схеме где драйверу нужно просить кого-то в user mode запустить что требуется — в гарантированно правильном контексте и документированным способом, через CreateProcessWithLogonW раз у Вас есть все credentials на руках.
Например можно попробовать свести задачу к хорошо известной — запуску процесса из сервиса
и т.п. — поиск рулит
G>К тому же имперсонация возможна только из пользовательского режима.
неужели? А зачем тогда PsImpersonateClient ?
... << RSDN@Home 1.2.0 alpha rev. 685>>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Вопрос "как запустить процесс из драйвера" обсуждался на встрече DDK MVPs с разработчиками ОС на саммите.
Peter Wieland — такой известный человек, написал одну из версий SCSIPORT, занимался дисковым стеком, ныне KMDF — сказал "это очень сложно, я не помню, как это делать, и никому не советую".
Я ему — "у тебя исходники есть".
Он — "я тебя уверяю, даже если я открою нужные исходники и буду их смотреть, то не пойму, как именно правильно запустить процесс из драйвера".
Так что лучше все вспомогательный сервис. Отслеживать будет драйвер, запускать — сервис.