Форум: "WinAPI";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
ВнизНужно определить владельцев всех процессов Найти похожие ветки
← →
torin-sd (2007-06-12 15:53) [0]Процессы могут быть запущены и от имени других пользователей. Вот тут-то функция OpenProcessToken и отказывается открывать Token другого пользователя.
//=== CUT ===
var
h,ph,h1,ph2:THandle;
p:PROCESSENTRY32;
ProcessName:string;
ProcessOwner: PChar;
c1: cardinal;
KilledCounter,q:integer;
s:string;
tp1, tp2: TTOKENPRIVILEGES;
c2: cardinal;
z: integer;
z1: DWord;
begin
// ...
q:=0;
h:=createtoolhelp32snapshot(TH32CS_SNAPPROCESS, 0);
GetMem(ProcessOwner, 255);
KilledCounter:=0;
z:=0;
if h<>0 then
begin
fillchar(p,sizeof(p),0);
p.dwSize:=sizeof(p);
if Process32First(h,p) then
begin
repeat
inc(z);
ph:=OpenProcess(MAXIMUM_ALLOWED,false,p.th32ProcessID);
ProcessName:=p.szExeFile;
if ph = 0 then
begin
writeln(ProcessName + " Error # ",GetLastError());
continue;
end;
if OpenProcessToken(ph, TOKEN_DUPLICATE or OKEN_QUERY, h1) then
begin
if not ImpersonateLoggedOnUser(h1) then
begin
writeln(ProcessName + " Error # ",GetLastError);
Continue;
end;
c1:=255;
GetUserName(ProcessOwner, c1);
Writeln(ProcessName + #32 + ProcessOwner);
end;
closehandle(ph);
until not Process32Next(h,p);
end;
closehandle(h);
end;
//=== CUT ===
Это только КУСОК кода (вырезал), но самый важный.
Проблема возникает тогда, когда процесс запущен не под моим аккаунтом (например, RunAs...). Вот тут-то ф-я OpenProcessToken и затыкается с кодом ошибки Access Denied.
Как мне это побороть?
← →
Игорь Шевченко © (2007-06-13 10:16) [1]
> Вот тут-то функция OpenProcessToken и отказывается открывать
> Token другого пользователя.
Установи себе привилегию отладки (SeDebugPrivilege)
← →
SLoW.AlfaMoon.Com (2007-06-14 11:04) [2]Для вызова
ImpersonateLoggedOnUser
у вас не хватает привилегий токену h1.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.12.30;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c