Конференция "WinAPI" » Определение пользователя который запустил процесс [D7, WinXP]
 
  • denis_l (22.12.09 22:32) [0]
    Есть приложение, в котором я получаю список процессов в виде дерева TreeView. О процессе знаю следующее:
    1) Имя процесса (например Project1.exe)
    2) ID процесса (PID)
    Необходимо определить пользователя, от имени которого запущен процесс.
    Если можно - пример!
  • Игорь Шевченко © (22.12.09 23:51) [1]
    Пример можно:


    function SIDToName (const SID: PSID): string;
    var
     Use: SID_NAME_USE;
     DomainName: array;0..1024] of char;
     DomainNameLength: DWORD;
     Name: array[0..1024] of char;
     NameLength: DWORD;
    begin
     DomainNameLength := SizeOf(DomainName);
     NameLength := SizeOf(Name);
     if not LookupAccountSid (nil, SID, Name, NameLength, DomainName,
        DomainNameLength, Use) then
       Result := '***'
     else
       Result := Name;
    end;

    function GetUserName (ProcessId: Cardinal): string;
    var
     AccessToken: THandle;
     SidInfo: PSIDANDATTRIBUTES;
     ReturnLength: DWORD;
     ProcessHandle: THandle;
    begin
     Result := '';
     ProcessHandle := OpenProcess(PROCESS_QUERY_INFORMATION, false,
       ProcessId);
     if ProcessHandle = 0 then
       Exit;
     try
       if not OpenProcessToken(ProcessHandle, TOKEN_QUERY, AccessToken) then
         Exit;
       GetMem (SidInfo, 4096);
       try
         Win32Check(GetTokenInformation(AccessToken, TokenUser, SidInfo, 4096,
           ReturnLength));
         Result := SidToName(SidInfo^.Sid);
       finally
         FreeMem(SidInfo);
         CloseHandle(AccessToken);
       end;
     finally
       CloseHandle(ProcessHandle);
     end;
    end;

 
Конференция "WinAPI" » Определение пользователя который запустил процесс [D7, WinXP]
Есть новые Нет новых   [134431   +15][b:0][p:0.001]