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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2009, 23:19   #1
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Ну раз здесь разговор был о процессах , то и я свой вопрос оставлю сдесь. Искал по форуму инфу насчет процессов, да нашел , но не совсем то что хотел.Вопрос вот в чем, как узнать под каким пользователем запущен тот или иной процесс. К примеру на компе сейчас запущено 3 учетных записей пользователей. Например запущен процесс под каким-либо пользователем. Как получить его имя? Диспетчер задач винды получает имя пользователя, и мне надо что-то вроде того. Буду признателен за ответ или подсказку где можно поискать информацию.
PS: Помучаю сейчас поисковик, может что найду.
sysyman вне форума Ответить с цитированием
Старый 02.02.2009, 08:38   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

вот так
Код:
var
 _user:array[0..255] of char;
 _Domain:array[0..255] of char;   

function EnableDebugPrivilege: Boolean;
var
  Token: THandle;
  tkp: TTokenPrivileges;
begin
  Result := false;
  if OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token) then
  begin
   if LookupPrivilegeValue(nil, PChar('SeDebugPrivilege'), tkp.Privileges[0].Luid) then
    begin
     tkp.PrivilegeCount := 1;
     tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
     Result := AdjustTokenPrivileges(Token, false, tkp, 0, PTokenPrivileges(nil)^, PDWord(nil)^);
    end;
  end;
end;

function GetProcessId(pName: PChar): dword;
var
 Snap: dword;
 Process: TPROCESSENTRY32;
begin
  Result := 0;
  Snap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(TPROCESSENTRY32);
      if Process32First(Snap, Process) then
         repeat
          if lstrcmpi(Process.szExeFile, pName) = 0 then
             begin
              Result := Process.th32ProcessID;
              CloseHandle(Snap);
              Exit;
             end;
         until not Process32Next(Snap, Process);
      Result := 0;
      CloseHandle(Snap);
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 prH,th:THandle;
 RL:DWORD;
 sid:_SID_AND_ATTRIBUTES;
 S,s1,s2:DWORD;
 buff:pointer;
begin
 EnableDebugPrivilege;

 prH:=OpenProcess(PROCESS_QUERY_INFORMATION,false,GetProcessId('alg.exe'));
 if prh=0 then ShowMessage('ошибочка1');
 OpenProcessToken(prH,TOKEN_QUERY,th);
 if th=0 then ShowMessage('ошибочка2');

 buff:=HeapAlloc(GetProcessHeap,0,256);

 if not GetTokenInformation(th,TokenUser,buff,256,RL) then exit;

 sid:=SID_AND_ATTRIBUTES(buff^);

 s:=256;
 s1:=256;
 s2:=SidTypeUser;

 if not LookupAccountSid(0,sid.Sid,@_user,s,@_domain,s1,s2) then
  ShowMessage('ошибочка3');

 ShowMessage(_user);

 CloseHandle(th);
 CloseHandle(prh);
end;
rpy3uH вне форума Ответить с цитированием
Старый 10.02.2009, 00:10   #3
sysyman
Пользователь Подтвердите свой е-майл
 
Аватар для sysyman
 
Регистрация: 04.07.2007
Сообщений: 75
По умолчанию

Спасибо rpy3uH.
sysyman вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать - запущен ли определенный процесс ? 12usver12 Общие вопросы Delphi 16 21.02.2011 02:52
Запуск процесса под другим пользователем Андреy Win Api 3 03.12.2008 17:57
Как узнать,нужен ли мне определённый процесс Alximik Софт 5 21.11.2007 13:50
Вход под одним пользователем Mihael Безопасность, Шифрование 3 21.11.2007 12:14
Как узнать под каким именем залогинился юзер? =LeonZone= Win Api 12 11.11.2007 16:03