Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.03.2012, 11:31
pporokka pporokka вне форума
Прохожий
 
Регистрация: 22.07.2011
Сообщения: 9
Репутация: 10
По умолчанию Получить список процессов и имена пользователей от которых они запущены

Нигде не нашёл как это делается, только кусками. Подскажите где у меня ошибка.
Проблема в том что функция OpenProcessToken Работает правильно только если ей передать Process=-1 (Тогда выдает текущего пользователя). В остальных случаях я получаю ошибку 6 - Не верный PID, в отладчике проверял - приходят верные. Может какая нибудь ошибка в доступе?

PHP код:
procedure TForm1.Button1Click(Sender: TObject);
var
  
hSnap:THandle;
  
pe:TProcessEntry32;
  
s2:THandle;
  
res:String;
  
i:integer;
begin
  memo1
.Clear;
  
pe.dwSize:=SizeOf(pe);
  
hSnap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS ,0);
  If 
Process32First(hSnap,pe) then
    begin
      memo1
.Lines.Add(pe.szExeFile+#9#9+strpas(GetProcessusername(pe.th32ProcessID)));
      
While Process32Next(hSnap,pe) do
        
begin
          memo1
.Lines.Add(pe.szExeFile+#9#9+strpas(GetProcessusername(pe.th32ProcessID)));
        
end;
    
end;
end;


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
    begin
      form1
.memo1.lines.Add(inttostr(GetLastError));
      exit;
    
end;
  
_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; 
Ответить с цитированием
  #2  
Старый 05.03.2012, 11:37
pporokka pporokka вне форума
Прохожий
 
Регистрация: 22.07.2011
Сообщения: 9
Репутация: 10
По умолчанию

Основная идея - надо убить все процессы по имени, запущенные под конкретным пользователем (в моем случае под системным), может быть будут другие идеи
Ответить с цитированием
  #3  
Старый 05.03.2012, 16:42
ChinYan ChinYan вне форума
Тыкаю клавиши
 
Регистрация: 13.07.2009
Сообщения: 804
Версия Delphi:
Репутация: 48633
По умолчанию

Программа запущена с правами админа? Отладочные привилегии есть?
Ответить с цитированием
  #4  
Старый 05.03.2012, 21:06
pporokka pporokka вне форума
Прохожий
 
Регистрация: 22.07.2011
Сообщения: 9
Репутация: 10
По умолчанию

Всё получилось, нужно было сделать так

PHP код:
OpenProcessToken(OpenProcess(PROCESS_ALL_ACCESS, FALSE, Process), TOKEN_QUERY, _Token) 

Правда по выходу выдаёт access violation, но я думаю это проблемы с закрытием хэндэлов, дальше дело техники))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:50.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2026