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

Вниз

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

 
Помощник админа   (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 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.026 c
14-1104776808
Anonimus
2005-01-03 21:26
2005.01.23
Программа


1-1105604589
LML
2005-01-13 11:23
2005.01.23
Иконки из PNG


3-1103377788
МАХНО
2004-12-18 16:49
2005.01.23
пароль на БД


1-1105332216
Ray Eagle
2005-01-10 07:43
2005.01.23
интеграция отчета из Rave Reports


1-1105284562
pasha L
2005-01-09 18:29
2005.01.23
Приравнивание одного шрифта к другому