Когда мы логофимся из висты, то прибиваются все процессы, живущие в юзерной сессии, кроме winlogon.exe и csrss.exe. Эта парочка живет в юзерной сессии и не умерает (и не перезапускается) при логофе. Я хочу чтобы мой процесс тоже жил в юзерной сессии и не умирал при логофе. Это реально?
_DEN_ А как ты думаешь что делает winlogon.exe? вот он и живет. Если напишешь свой - то можно. Второй момент - замена стандартной библиотеки winlogon.exe
_DEN_ Ответ ищи в описании загрузки XP. (по-поему у Хелен Харпер описано) Второй вариант - чтобы запустить свой процесс - создай библиотеку которую использует winlogon.exe (т.е. подмени стандартную).
PROFi Дело в том, что мне не нужно чтобы процесс стартовал вместе с виндой. Его запускает специальный сервис тогда когда надо. Просто надо чтобы он не дох вместе с логофом. Это жесть Более гуманного способа нет?
winlogon и csrss запускаются не от юзера, а от SYSTEM, поэтому и не дохнут. И выполняют они критически важные для работы системы функции. Если попробуешь прибить csrss вручную, винда сразу же склеит ласты - CRITICAL_OBJECT_TERMINATION. winlogon аналогично
_DEN_ Это жесть Более гуманного способа нет? Это гуманный способ - он не изменяет байты в памяти, а всего лишь подменяет dll.
Great Это прекрасно. Так вот как мне запустить свой процесс от SYSTEM, но так, чтобы он жил в юзерной сессии.
Страшно извиняюсь, мне казалось что Хелен Харпер - марка ммм... гигиенических средств. Хелен Кастер может быть?
_DEN_ Помоему это нереально (в плане того что систем это систем а юзер это юзер и тут уже ничего не сделаешь), можно конечно в ручную создать процесс, повысив ему привелегии и сделав родителем тот же csrss, но это только в теории. На практике я не пробовал..
А кто родитель твоего процесса? У него скорее всего user = ТВОЙ_АКК, поэтому при убийстве родителя дохнет и твой. Нужно создать свой процесс как дочерний у winlogon, например. Как вариант - через APC
Great Есть сервис. Он живет всегда. Сервис запускает процесс A обычным критпроцессом, который живет в нулевой сессии и следовательно тоже живет всегда. Процесс A тырит токен у winlogon.exe и запускает с ним процесс B (CreateProcessAsUser). При логофе сервис и процесс A, естественно никуда не деваюца, а вот процесс B умирает. Можно чуть подробнее?
Ну как из ядра создают процесс дочерний от произвольного процесса в системе (посылая APC, внутри которой лежит CreateProcess), так и ты сделай. Под валялся на codeproject кажется, там драйвер ядра.
_DEN_ AFAIK, winlogon свой для каждой сессии и умирает вместе с ней. То же и с csrss (правда есть ещё глобальный csrss в нулевой сессии). Как ты определял, что winlogon неубиваем ?
green Неа, он "глобальный" для всех сессий. Он запускается by smss, как и csrss. _DEN_ А разве обычный сервис после логоффа умирает?
green afaik, ни первое ни второе неверно надо в Руссиновича глянуть. Но я недавно перечитывал описание загрузки, и, насколько я помню, эти процессы глобальны для системы и от сессии не зависят