Форум: "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.01 c