Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2011, 13:14   #1
nikcpp
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 35
Хорошо Имя пользователя под которым запущен процесс

Подскажите как можно узнать имя пользователя по которым запущен процесс. Handle известен процесса. можете написать кусок кода
nikcpp вне форума Ответить с цитированием
Старый 13.04.2011, 13:37   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если текущего процесса, то есть функция GetUserName. там всё элементарно

если любого, то так
Код:
function GetNamebySID(destSystem: PChar; sid: PSID):PChar;
var
  _userName : PChar;
  _Domain: PChar;
  _Needed : DWORD;
  _DomLen : DWORD;
  _use  : SID_NAME_USE;
begin
  Result := 0;
  _Needed := 0;
  _DomLen := 0;
  LookupAccountSid(destSystem, sid, 0, _Needed, 0, _DomLen,  _use);

  if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
   begin
    Result := HeapAlloc(GetProcessHeap(), 0, _Needed);
    _Domain:= GetMemory(_DomLen);
    LookupAccountSid(destSystem, sid, Result, _Needed, _Domain, _DomLen, _use);
    FreeMemory(_Domain);
   end;
end;

function GetProcessUserName(Process:THandle):PChar;
var
  _Token:THandle;
  _Info:PTOKEN_USER;
  _Needed:DWORD;
begin
  Result:=0;
  if not OpenProcessToken(Process, TOKEN_QUERY, _Token) then exit;
  _Needed:=0;
  GetTokenInformation(_Token, TokenUser, 0, 0, _Needed);
  if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
   begin
    _Info := HeapAlloc(GetProcessHeap(), 0, _Needed);
    if GetTokenInformation(_Token, TokenUser, _Info, _Needed, _Needed) then
     Result:=GetNamebySID(0, _Info^.User.Sid);
    HeapFree(GetProcessHeap(),0, _Info);
   end;
end;
сначала получаем SID пользовтеля по хендлу процесса. потом имя пользователя по SID.

и вообще надо юзать поиск! я сначала хотел удалить тему, но потом передумал (настроение хорошее)
rpy3uH вне форума Ответить с цитированием
Старый 13.04.2011, 13:42   #3
nikcpp
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 35
По умолчанию

спасибо
nikcpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать - запущен ли определенный процесс ? 12usver12 Общие вопросы Delphi 16 21.02.2011 02:52
Узнать, был ли процесс запущен пользователем или системой niki2012 Общие вопросы Delphi 3 26.01.2011 21:04
Имя пользователя OlegSkal Общие вопросы Delphi 1 07.10.2010 18:40
запущен ли процесс Vaska Общие вопросы C/C++ 0 03.04.2009 15:42