Здравствуйте, Alter_, Вы писали:
A_>Подозреваю, что из-за того, что SMSS.EXE не является Win32 приложением. Это Native.
A_>А создание Native Thread — операция нетривиальная (на сколько мне известно) и одним вызовом, тем более из Win32, не делается.
CreateRemoteThread не работает для процессов в других терминальных сессиях и для native процессов типа smss. Это связано с тем, что в native процессы не загружена kernel32.dll (а для других терминальных сессий — из-за того, что новые потоки/процессы должны регистрироваться в csrss в текущей сессии).
Создать поток можно при помощи более низкоуровневых функций — NtCreateThread или RtlCreateUserThread. здесь есть пример —
http://www.rsdn.ru/Forum/Message.aspx?mid=167206&only=1Автор: vasketsov
Дата: 08.01.03
В этом случае, он не будет зарегистрирован в csrss и поэтому в нем может не работать часть API функций (в частности из такого потока нельзя создавать процессы и потоки )
Пишу программу, которая активно хукает различные юзермодные функции. В момент запуска программы пишу свой код ко всем процессам и запускаю его вызовом CreateRemoteThread. Всё работает прекрасно, но при попытке вызвать CreateRemoteThread для запуска моего кода в SMSS.EXE функция возвращает NULL, а GetLastError() возвращает 8 — "Недостаточно памяти для обработки команды.". Для всех остальных процессов системы всё проходит нормально.. Проблема появляется не только на моей машине, но и на всех, где мне удалось попробовать, — (2000/XP/2003). Почему так и как исправить?
Подозреваю, что из-за того, что SMSS.EXE не является Win32 приложением. Это Native.
А создание Native Thread — операция нетривиальная (на сколько мне известно) и одним вызовом, тем более из Win32, не делается.
Здравствуйте, Ivan, Вы писали:
I>Создать поток можно при помощи более низкоуровневых функций — NtCreateThread или RtlCreateUserThread. здесь есть пример — http://www.rsdn.ru/Forum/Message.aspx?mid=167206&only=1Автор: vasketsov
Дата: 08.01.03
I>В этом случае, он не будет зарегистрирован в csrss и поэтому в нем может не работать часть API функций (в частности из такого потока нельзя создавать процессы и потоки )
Скажите, а как можно самому зарегистрироваться в csrss ?