Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.11;
Скачать: CL | DM;

Вниз

Как узнать владельца процесса?   Найти похожие ветки 

 
KSergey ©   (2005-07-22 15:58) [0]

Необходимо узнать имя пользователя, под которым запущен процесс по PID этого процесса.

Используется схема:

OpenProcess -> OpenProcessToken -> GetTokenInformation

Однако для некоторых процессов на OpenProcessToken заваливаемся с ошибкой Acces Denided (5).

Попытка выполнить для таких процессов OpenProcessToken с установкой Debug привилегий (чо помогает для OpenProcess) к успеху не приводит.

Вопрос: как эту проблему решить? А может я вообще не тем путем пошел? А каким надо?

На всякий случай, изначальная задача: поубивать в системе процессы с определенным именем запущенные из-под определенного пользователя.

Получилось все, кроме фильтрации имени пользователя...


 
BiN ©   (2005-07-22 16:06) [1]

Какой доступ запрашиваешь при открытии маркера?
Для твоей задачи достаточно TOKEN_QUERY.


 
KSergey ©   (2005-07-22 16:35) [2]

Я, конечно, не уточнил. но разумеется, что TOKEN_QUERY

Если это важно - код такой (на вражьем, правда)

bool
getProcUserName(DWORD processId, std::string& strUserName)
{
HANDLE hProcess;
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, processId);

if (!hProcess) {
 return false;
}

HANDLE hToken;
HANDLR hProcDup;

hProcDup = DuplicateHandle(

if (!OpenProcessToken(hProcess, TOKEN_QUERY, &hToken)) {
 return false;
}

char buf[2000];
TOKEN_USER tu;
DWORD dwLen;

if (GetTokenInformation(hToken, TokenUser, &buf, sizeof(buf), &dwLen))  {

... тут пошел разбор полученой информации ...

} else {
 return false;
}

CloseHandle(hToken);
return true;
}


Валится именно на OpenProcessToken
Если необходимо, погу привести полный код. Штука в том, что вместо OpenProcess используется оберточка, которая в случае неудачи OpenProcess назначает Debug привилегии и стова зовет OpenProcess.

Эта часть работает, а вот на OpenProcessToken валится, причем тот же финт с Debug привилегиями не проходит..


 
KSergey ©   (2005-07-22 16:37) [3]

Мдя.. табуляции все поелись...


 
BiN ©   (2005-07-22 17:43) [4]

При использовании подобного кода у меня не получилось открыть маркеры лишь процессов Idle и System. Все остальные процессы "поддались" при включенной отладочной пивилегии, которая, впрочем, понадобилась только при открытии процесса подсистемы Win32 (csrss).


 
KSergey ©   (2005-07-22 19:46) [5]

Я не знаю, есть ли на чем у вас сейчас жевьем играться, но на самом деле иммитировать мою ситуацию просто: завести на машине некоего пользователя (например с правами "обычные пользователи", хотя это и не принципиально) и от имени этого пользователя запустить какой-либо процесс. И все. На этом процессе все заламывается.

Причем, еще раз подчеркну...

Если в вашем случае при этом все работает - было бы очень прелюбопытно взглянуть на вашкод - может я упускаю какую-то деталь при включении привилегий? Или еще что-то?


 
KSergey ©   (2005-07-22 19:48) [6]

Пока набирал предыдущий пост - мысль по дороге потерялась :)

Причем, еще раз подчеркну, что для OpenProcess привилегия помогает, для OpenProcessToken - нифига...


 
Piter ©   (2005-07-22 19:58) [7]

KSergey ©   (22.07.05 15:58)
Как узнать владельца процесса?


по прическе можно, по лицу, по бороде. Можно по очкам, еслиесть онные


 
BiN ©   (2005-07-22 23:45) [8]

KSergey ©   (22.07.05 19:48) [6]

Хм, да, действительно. Не получается открыть.-(
Если копнуть поглубже, можно увидеть, что маркеры, созданные seclogon-ом, да, в принципе, и другими источниками маркеров, по умолчанию открыты только для пользователя-владельца и для системной учетной записи. Почему-то, подобный маркер не удалось также открыть на запись Sid-a владельца (флаг WRITE_OWNER) даже при наличии привилегии SE_TAKE_OWNERSHIP_NAME. Мистика.
Доступ к маркеру целевого процесса удалось получить, сдуплицировав уже существующий описатель маркера. Но это -искусственная ситуация и врятли может помочь в данном случае.
Понятное дело, что здесь не рассматривались выкрутасы с внедрением и с чтением структур ядра напрямую, ибо не спортивно.


 
KSergey ©   (2005-07-25 07:56) [9]

В общем беда, оказывается, в равах пользователя, под которым запускается программа.
Под LocalSystem все работает отлично.

Спасибо за участие.

PS
А я пошел новый вопрос стряпать...



Страницы: 1 вся ветка

Текущий архив: 2005.09.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
3-1122901908
Начинающий3
2005-08-01 17:11
2005.09.11
TADOQUERY


14-1124301761
lookin
2005-08-17 22:02
2005.09.11
Ошибки страницы...


14-1124100382
KilkennyCat
2005-08-15 14:06
2005.09.11
Нет ли у кого книги по работе с БД в Делфи в електронном виде?


10-1102088528
12345
2004-12-03 18:42
2005.09.11
Как внедрить Word Viewer в приложение


1-1124693266
DVM
2005-08-22 10:47
2005.09.11
Помогите с разбором HTTP ответа сервера (IP-камеры).