Главная страница
    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.038 c
1-1105452842
saNat
2005-01-11 17:14
2005.01.23
Выделенный пункт в ListBox


4-1102135227
W00dy
2004-12-04 07:40
2005.01.23
WinApi


4-1101586279
TankMan
2004-11-27 23:11
2005.01.23
Кто-нибудь может дать примерчик в котором можно было-бы


14-1104328970
Homer Simpson
2004-12-29 17:02
2005.01.23
Автомобиль (иномарка) для новичка: новый vs б/у


3-1103195595
cad2206
2004-12-16 14:13
2005.01.23
Записи из запроса в Edit ы. КАК?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский