|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.03.2012, 10:58 | #1 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Узнать имя пользователя запустившего процесс
Хай! Необходимо узнать имя пользователя запустившего процесс. Знаю тема заезженная, но у меня проблема: запускаю процесс от другого пользователя и функция OpenProcessToken(pid,TOKEN_QUERY,hT oken) выдает ошибку, мол "Отказано в доступе". Выставлял привилегии "SeDebugPrivilege". Пол инета перерыл, и понял что проблема скорее всего в DACL, нарыл код который сбрасывает настройки DACL, но проблема не решена, всё равно OpenProcessToken(pid,TOKEN_QUERY,hT oken) выдаёт ошибку отказа в доступе. Возможно ли её обойти?
|
21.03.2012, 11:11 | #2 |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Какой ещё PID? У OpenProcessToken первый параметр - описатель.
Если ты открываешь свой процесс, то OpenProcessToken не может вернуть access denied, потому что описатель GetCurrentProcess даёт PROCESS_ALL_ACCESS.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
21.03.2012, 11:18 | #3 |
!=
Участник клуба
Регистрация: 08.09.2008
Сообщений: 1,751
|
а функция GetUserName не помогает?
|
21.03.2012, 11:33 | #4 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Прилагаю код в студию:
h:=OpenProcess(PROCESS_QUERY_INFORM ATION, false, strtoint(rlist.Strings[i])); chDomain:=50; chUser :=50; if not GetCurrentUserAndDomain(h,User,chus er,Domain,chDomain) then begin user:='Не определено'; end; function GetCurrentUserAndDomain (var pid:Thandle; szUser : PChar; var chUser: DWORD; szDomain :PChar; var chDomain : DWORD ):Boolean; var hToken : THandle; cbBuf : Cardinal; ptiUser : PTOKEN_USER; snu : SID_NAME_USE; begin Result:=false; if not OpenProcessToken(pid,TOKEN_QUERY,hT oken) then exit; // Вывываем GetTokenInformation для получения размера буфера if not GetTokenInformation(hToken, TokenUser, nil, 0, cbBuf) then if GetLastError()<> ERROR_INSUFFICIENT_BUFFER then begin CloseHandle(hToken); exit; end; if cbBuf = 0 then exit; // Выделяем память под буфер GetMem(ptiUser,cbBuf); // В случае удачного вызова получим указатель на TOKEN_USER if //GetUserName(szUser,chUser) GetTokenInformation(hToken,TokenUse r,ptiUser,cbBuf,cbBuf) then begin // Ищем имя пользователя и его домен по его SID if LookupAccountSid(nil,ptiUser.User.S id,szUser,chUser,szDomain,chDomain, snu) then Result:=true; end; // Освобождаем ресурсы CloseHandle(hToken); FreeMem(ptiUser); end; |
21.03.2012, 11:37 | #5 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Если я не ошибаюсь, то GetUserName возвращает имя пользователя запустившего текущий процесс.
|
21.03.2012, 11:40 | #6 |
!=
Участник клуба
Регистрация: 08.09.2008
Сообщений: 1,751
|
|
21.03.2012, 11:49 | #7 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Да, сторонний процесс. Я создал пользователя, для теста, и запускаю от его имени процесс, а под своей учёткой не могу определить его имя. Отказано в доступе....
|
21.03.2012, 11:56 | #8 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Есть ещё один вариант получить имя пользователя этой функцией, но для этого необходимо попасть на ring0, но для Win7 я не могу найти подходящий драйвер...
|
21.03.2012, 12:58 | #9 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Есть какие-нибудь предложения?
|
23.03.2012, 16:04 | #10 |
Пользователь
Регистрация: 19.10.2011
Сообщений: 12
|
Количество всегда переходит в качество!
http://forum.ixbt.com/topic.cgi?id=26:33840 |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Имя пользователя под которым запущен процесс | nikcpp | Win Api | 2 | 13.04.2011 13:42 |
Узнать имя листа, если известно кодовое имя | tae1980 | Microsoft Office Excel | 3 | 20.03.2011 21:57 |
узнать имя пользователя и пароль windows | D1AVOL | Общие вопросы Delphi | 7 | 09.01.2010 12:16 |
Узнать имя текущего пользователя и букву диска с запущенной Windows | Vistar | Общие вопросы .NET | 1 | 02.12.2009 18:16 |
Как узнать имя залогинившегося пользователя? | Stilet | JavaScript, Ajax | 5 | 13.08.2009 23:02 |