Как определить владельца процесса?...
От: slay93  
Дата: 28.05.03 13:59
Оценка:
...если процесс был создан с помощью CreateProcessAsUser или CreateProcessWithLogon?
Другими словами, можно ли определить из-под кого был запущен некоторый процесс?

Как один из вариантов, пробовать читать из окружения нужного процесса значение переменной USERNAME.
Может быть известен более правильный/изящный путь?

Всем спасибо

28.05.03 18:38: Перенесено модератором из 'C/C++' — ПК
Re: Как определить владельца процесса?...
От: Аноним  
Дата: 02.06.03 10:21
Оценка:
Здравствуйте, slay93, Вы писали:

S>...если процесс был создан с помощью CreateProcessAsUser или CreateProcessWithLogon?

S>Другими словами, можно ли определить из-под кого был запущен некоторый процесс?

S>Как один из вариантов, пробовать читать из окружения нужного процесса значение переменной USERNAME.


Подход не верен так как о данных которые попадут в окружение заботся приложение, вызывающие эти функции, со всеми вытекающими последствиями (ну поставили NULL например при вызове для lpEnvironment ).

S>Может быть известен более правильный/изящный путь?


[skip]

Более правильный путь узнать Token и получить по нему информацию ZwQueryInformationToken или GetTokenInformation.

Re[2]: Как определить владельца процесса?...
От: SergH Россия  
Дата: 02.06.03 14:26
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подход не верен так как о данных которые попадут в окружение заботся приложение, вызывающие эти функции, со всеми вытекающими последствиями (ну поставили NULL например при вызове для lpEnvironment ).


А я всю жизнь NULL ставлю. Насколько я помню, при этом они копируются.. А вот если не NULL поставить, то да, можно и поменять.

S>>Может быть известен более правильный/изящный путь?


А>Более правильный путь узнать Token и получить по нему информацию ZwQueryInformationToken или GetTokenInformation.


А чем GetCurrentUser не устраивает? Она, правда, возвращает для потока, но обычно это одно и то же.
Делай что должно, и будь что будет
Re[3]: Как определить владельца процесса?...
От: Аноним  
Дата: 03.06.03 06:27
Оценка:
Здравствуйте, SergH, Вы писали:

А>>Подход не верен так как о данных которые попадут в окружение заботся приложение, вызывающие эти функции, со всеми вытекающими последствиями (ну поставили NULL например при вызове для lpEnvironment ).


SH>А я всю жизнь NULL ставлю. Насколько я помню, при этом они копируются.. А вот если не NULL поставить, то да, можно и поменять.


Так ведь если выставить NULL то просто копируется переменные окружения вызывающего процесса и как следствие — фигня получается. Не делайте так


S>>>Может быть известен более правильный/изящный путь?


А>>Более правильный путь узнать Token и получить по нему информацию ZwQueryInformationToken или GetTokenInformation.


SH>А чем GetCurrentUser не устраивает? Она, правда, возвращает для потока, но обычно это одно и то же.


Так вопрос был как раз узнать из вне — так что я думаю это не подойдет .
Re[4]: Как определить владельца процесса?...
От: SergH Россия  
Дата: 03.06.03 06:56
Оценка:
Здравствуйте, Аноним, Вы писали:

[skip]

Ты кругом прав. А я невнимательно прочитал вопрос.
Делай что должно, и будь что будет
Re: Как определить владельца процесса?...
От: avi  
Дата: 07.06.03 07:15
Оценка:
есть GetSecurityInfo она возвращает SID владельца, если нужно имя, то LookupAccountName

Здравствуйте, slay93, Вы писали:

S>...если процесс был создан с помощью CreateProcessAsUser или CreateProcessWithLogon?

S>Другими словами, можно ли определить из-под кого был запущен некоторый процесс?

S>Как один из вариантов, пробовать читать из окружения нужного процесса значение переменной USERNAME.

S>Может быть известен более правильный/изящный путь?

S>Всем спасибо
Re: Как определить владельца процесса?...
От: Alexey Shirshov Россия http://wise-orm.com
Дата: 07.06.03 10:49
Оценка:
Здравствуйте, slay93, Вы писали:

[]

OpenProcess(PROCESS_QUERY_INFORMATION)
OpenProcessToken(TOKEN_QUERY)
GetTokenInformation(TokenUser)
LookupAccountSid

GetCurrentUser выбирает информацию из токена текущего потока или из первичного токена процесса, если поток не имперсонирован.

GetUserNameEx реализовать по сложнее будет, так как она лезет в AD.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.