Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.05;
Скачать: CL | DM;

Вниз

как определить, под каким именем запущен процесс?   Найти похожие ветки 

 
kami ©   (2005-12-14 14:48) [0]

Как в стандартном TaskManager или ProcessExplorer
Имеются: Handle и ID процесса.
Так как не знаю, что искать, то поиск в MSDN дал мало чего :)
Попробовал так:
if ProcessIdToSessionID(ProcessID,SessionID) then
begin
 WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE,SessionID,WTSUserName,pUserName,BytesRet);
 FProcessUserName:=pUserName;
 WTSFreeMemory(pUserName);
end;

возвращает для всех процессов имя моей учетной записи (и SessionID всегда = 0). А что использовать, чтобы получить, (например) для WinLogon.exe - NT Authority/SYSTEM ?


 
BiN ©   (2005-12-14 15:44) [1]

function GetSidInfo(lpSystemName: PChar; Sid: PSID;
                   var Name, Domain: string; var Use: SID_NAME_USE):Boolean;
var
 cbNameLen: DWORD;
 cbDomainLen: DWORD;
begin
 Result:=IsValidSid(Sid);
 if not Result then
 begin
   SetLastError(ERROR_INVALID_SID);
   Exit;
 end;
 cbNameLen := UNLEN + 1;
 cbDomainLen := DNLEN + 1;

 SetLength (Name, cbNameLen);
 SetLength (Domain, cbDomainLen);
 Result:=LookupAccountSid (lpSystemName, Sid, PChar (Name), cbNameLen, PChar (Domain), cbDomainLen, Use);
 if not Result
 then Exit;

 Name := PChar (Name);
 Domain := PChar (Domain);
end;

function GetProcessTokenSid(ProcessId:DWORD; Var Sid: PSID): Boolean; // освобождается через Realloc(Sid, 0);
var
 hProcess:DWORD;
 hToken:DWORD;
 pTokenUserSID:PSIDAndAttributes;
 dwRetLen:DWORD;
begin
 Result:=False;
 Sid:=nil;
 hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
 if hProcess=0 then Exit;

 if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
 begin
   if not GetTokenInformation(hToken, TokenUser, nil, 0, dwRetLen) and
     (GetLastError=ERROR_INSUFFICIENT_BUFFER) then
   try
     GetMem(pTokenUserSID, dwRetLen);
     Result:=GetTokenInformation(hToken, TokenUser, pTokenUserSID, dwRetLen, dwRetLen);
     if Result then
     begin
       dwRetLen:=GetLengthSid(pTokenUserSID^.Sid);
       ReallocMem(Sid, dwRetLen);
       Result:=CopySid(dwRetLen, Sid, pTokenUserSID^.Sid);
     end;
   finally
     FreeMem(pTokenUserSID);
     if not Result then ReallocMem(Sid, 0);
   end;
   CloseHandle(hToken);
 end;
 CloseHandle(hProcess);
end;

function GetProcessUserInformation(ProcessId:DWORD;
                                  var UserName,
                                  Domain: String;
                                  var SIDName:SID_NAME_USE):Boolean;
var
 TokenSid: PSID;
begin
 Result:=false;
 if not GetProcessTokenSid(ProcessId, TokenSid) then Exit;
 try
   Result:=GetSidInfo(nil, TokenSid, UserName, Domain, SIDName);
 finally
   ReallocMem(TokenSid, 0);
 end;
end;


 
Rouse_ ©   (2005-12-14 15:50) [2]

Можешь вот это еще посмотреть: http://rouse.front.ru/taskmon.zip


 
kami ©   (2005-12-14 19:56) [3]

Огромное спасибо.
Даже не думал, что нужно смотреть в сторону security identifier`ов



Страницы: 1 вся ветка

Текущий архив: 2006.03.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.035 c
2-1140004057
MIXER
2006-02-15 14:47
2006.03.05
про Edit


1-1138621301
Ega23
2006-01-30 14:41
2006.03.05
Создание ShortCut в run-time


1-1138624499
tytus
2006-01-30 15:34
2006.03.05
Как копировать данные с последующей обработкой?


3-1136643582
plop
2006-01-07 17:19
2006.03.05
ORA-00xxx


15-1139542859
Бугага
2006-02-10 06:40
2006.03.05
Barry Manilow - Mandy