Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Вниз

Логин пользователя, запустившего процесс   Найти похожие ветки 

 
Помощник админа   (2004-12-07 08:46) [0]

Всем доброго времени суток!

Надеюсь на помощь Знатоков:

Дано:
Windows Server 2003
Некое приложение с известным именем типа "programma.exe", запускаемое от имени разных пользователей

Требуется:
Программно получить список Логинов, от имени которых в текущий момент времени запущено приложение.

В идеале - на удаленной машине, но пойдет и на локальной. ;-)
Запускаться программа будет администратором, поэтому все права считаются доступными.


 
Xaker ©   (2004-12-07 10:09) [1]

внедриться в каждый экземпляр и "спрость" имя запустившего:)


 
BiN ©   (2004-12-07 10:12) [2]

С помощью EnumProcess получаешь спсиок процессов. В списке находишь процессы с нужным тебе именем образа. Затем что-то типа


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 GetProcessUserInformation(ProcessId:DWORD;
                                  var UserName,
                                  Domain;
                                  var NameUse: DWORD):BOOL;
var
 hProcess:DWORD;
 hToken:DWORD;
 pTokenUserSID:PSIDAndAttributes;
 dwRetLen:DWORD;
 PeUse:SID_NAME_USE;
 cbName, cbDomain:DWORD;
begin
 Result:=False;
 hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
 if hProcess<>0 then
 begin
   if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
   begin
     if not GetTokenInformation(hToken, TokenUser, nil, 0, dwRetLen) and
       (GetLastError=ERROR_INSUFFICIENT_BUFFER) then
     begin
       GetMem(pTokenUserSID, dwRetLen);
       try
         if GetTokenInformation(hToken, TokenUser, pTokenUserSID, dwRetLen, dwRetLen) then
         begin
           Result:= GetSidInfo(nil, pTokenUserSID^.Sid, UserName, Domain, PeUse);
         end;
       finally
         FreeMem(pTokenUserSID, dwRetLen);
       end;
     end;
     CloseHandle(hToken);
   end;
   CloseHandle(hProcess);
 end;
end;


 
BiN ©   (2004-12-07 10:15) [3]

Да тут по ходу кое-что изменял. С NameUse заморочка :)
Должно быть так:

function GetProcessUserInformation(ProcessId:DWORD;
                                 var UserName,
                                 Domain;
                                 var NameUse: SID_NAME_USE):BOOL;
var
hProcess:DWORD;
hToken:DWORD;
pTokenUserSID:PSIDAndAttributes;
dwRetLen:DWORD;
cbName, cbDomain:DWORD;
begin
Result:=False;
hProcess:=OpenProcess(PROCESS_QUERY_INFORMATION, False, ProcessId);
if hProcess<>0 then
begin
  if OpenProcessToken(hProcess, TOKEN_QUERY, hToken) then
  begin
    if not GetTokenInformation(hToken, TokenUser, nil, 0, dwRetLen) and
      (GetLastError=ERROR_INSUFFICIENT_BUFFER) then
    begin
      GetMem(pTokenUserSID, dwRetLen);
      try
        if GetTokenInformation(hToken, TokenUser, pTokenUserSID, dwRetLen, dwRetLen) then
        begin
          Result:= GetSidInfo(nil, pTokenUserSID^.Sid, UserName, Domain, NameUse);
        end;
      finally
        FreeMem(pTokenUserSID, dwRetLen);
      end;
    end;
    CloseHandle(hToken);
  end;
  CloseHandle(hProcess);
end;
end;


 
Игорь Шевченко ©   (2004-12-07 10:22) [4]

http://www.sysinternals.com - Process Explorer


 
Помощник админа   (2004-12-07 10:45) [5]


> BiN ©   (07.12.04 10:15) [3]

Большое спасибо. Попробую.


Игорь Шевченко ©   (07.12.04 10:22) [4]
> http://www.sysinternals.com - Process Explorer

Спасибо, программка неплохая (скачал ее ранее), но не нашел (а может плохо искал ;-) ) в ней возможности обрабатывать информацию.
Я хочу список полученных логинов позже обрабатывать...
Все как всегда, если чего-то не хватает в стандартных программах - хочется сделать самому...



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

Форум: "WinAPI";
Текущий архив: 2005.01.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.116 c
1-1105371563
td
2005-01-10 18:39
2005.01.23
словарь с ссылками


14-1104667326
Чеширский_Кот
2005-01-02 15:02
2005.01.23
Андрей Шевченко привез "Золотой мяч" в Киев


14-1105109952
Василий
2005-01-07 17:59
2005.01.23
нужен человек, хотя бы средне знающий Delphi


9-1097692756
rts111
2004-10-13 22:39
2005.01.23
Полезные утилиты


6-1099136025
Diaskhan
2004-10-30 15:33
2005.01.23
Ошибка в Win98 при определении IP-adressa





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский