перечисление процессов LocalSystem
От: Александр  
Дата: 08.12.02 13:18
Оценка:
Хочу чуть уменьшить траблы с getad — нужно найти все процессы Local System и некоторые из них грохнуть. Теория понятна, но может у кого есть готовый пример?
Re: перечисление процессов LocalSystem
От: Алекс Россия http://wise-orm.com
Дата: 08.12.02 13:40
Оценка:
Здравствуйте, Александр, Вы писали:

А>Хочу чуть уменьшить траблы с getad — нужно найти все процессы Local System и некоторые из них грохнуть. Теория понятна, но может у кого есть готовый пример?


Готовый пример наверняка у кого-нибудь найдется. Если не найдется — вот примерный план действий.

1. Используя PSAPI перечисляем все процессы. Получаем ProcessId
2. С помощью OpenProcess получаем ProcessHandle. Открыть его нужно с правом PROCESS_ALL_ACCESS, для этого необходимо включить привилегию se_debug, т.к. системные процессы, без этой привилегии так просто с правом PROCESS_ALL_ACCESS и не откроются.
3. Получаем токен процесса (TokenHandle) с помощью OpenProcessToken. Скажем с правом TOKEN_QUERY.
4. Плучаем SID юзера с помощью GetTokenInformation(TokenUser). Если это будет что-то типа NTAUTHORITY\SYSTEM — грохаем процесс.

Грохать тоже нужно с умом, т.е. типа снача шлем WM_CLOSE (если есть окно), потом ждем, и только потом TerminateProcess. Если не будет отвечать на WM_CLOSE, можно всем потокам попытаться послать wm_quit (PostThreadMessage). Вобщем тут уже сам решай. Эта тема много раз обсуждалась — поищи.
Re[2]: перечисление процессов LocalSystem
От: Igor Soukhov  
Дата: 08.12.02 13:54
Оценка:
Здравствуйте, Алекс, Вы писали:

А>Грохать тоже нужно с умом, т.е. типа снача шлем WM_CLOSE (если есть окно), потом ждем, и только потом TerminateProcess. Если не будет отвечать на WM_CLOSE, можно всем потокам попытаться послать wm_quit (PostThreadMessage). Вобщем тут уже сам решай. Эта тема много раз обсуждалась — поищи.


Вот классика от AF:

http://www.rsdn.ru/qna/?baseserv/killproc.xml
http://www.rsdn.ru/qna/?baseserv/killapp.xml
* thriving in a production environment *
Re[2]: перечисление процессов LocalSystem
От: Александр  
Дата: 08.12.02 18:45
Оценка:
Здравствуйте, Алекс, Вы писали:


А>4. Получаем SID юзера с помощью GetTokenInformation(TokenUser). Если это будет что-то типа NTAUTHORITY\SYSTEM — грохаем процесс.


Предыдущее реализовал, теперь осталось писать логи.
И еще вопрос (не по теме, но я ленивый) — как получить имя залогинившегося пользователя? (текущего — у меня нет Terminal services)

Спасибо за информацию.
Re[3]: перечисление процессов LocalSystem
От: Hacker_Delphi Россия  
Дата: 08.12.02 18:51
Оценка:
Здравствуйте, Александр, Вы писали:

А>И еще вопрос (не по теме, но я ленивый) — как получить имя залогинившегося пользователя? (текущего — у меня нет Terminal services)

GetUserNameA/GetUserNameW/GetUserNameExA/GetUserNameExW
RSDN@Home 1.0 beta 2 РУЛИТ!!!\nСоседей достает, в данный момент: Ария — Пробил час \nВек живи — век учись!
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[3]: перечисление процессов LocalSystem
От: Алекс Россия http://wise-orm.com
Дата: 09.12.02 06:27
Оценка:
Здравствуйте, Александр, Вы писали:

хъ

А>И еще вопрос (не по теме, но я ленивый) — как получить имя залогинившегося пользователя? (текущего — у меня нет Terminal services)


А>Спасибо за информацию.


Если тебя интересует именно имя интерактивного юзера, то смотри в сторону LsaEnumerateLogonSessions. В MSDN есть пример на эту тему. Если же тебе просто нужен пользователь, от чьего имени выполняется текущий процесс (или поток), то Hacker_Delphi тебе уже посоветовал.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.