Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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 вся ветка

Форум: "WinAPI";
Текущий архив: 2005.09.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.016 c
3-1122909888
ArchValentin
2005-08-01 19:24
2005.09.11
Сохранение информации из DBGrid


1-1124388046
Сергей Никонов
2005-08-18 22:00
2005.09.11
Перерисовки в FileListBox


3-1122800706
NickMan
2005-07-31 13:05
2005.09.11
Возможен ли такой запрос?


2-1123487761
ingine
2005-08-08 11:56
2005.09.11
NegCurrFormat


14-1124273711
Экспериментатор
2005-08-17 14:15
2005.09.11
$(Delphi) - где присваивается значение этой переменной?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский