Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 13.04.2011, 13:14   #1
nikcpp
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 35
Репутация: 0
Хорошо Имя пользователя под которым запущен процесс

Подскажите как можно узнать имя пользователя по которым запущен процесс. Handle известен процесса. можете написать кусок кода
nikcpp вне форума   Ответить с цитированием
Старый 13.04.2011, 13:37   #2
rpy3uH
добрый няша
СуперМодератор
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Адрес: Солнечное Тбилиси
Сообщений: 4,806
Репутация: 2006
По умолчанию

если текущего процесса, то есть функция GetUserName. там всё элементарно

если любого, то так
Код:
function GetNamebySID(destSystem: PChar; sid: PSID):PChar;
var
  _userName : PChar;
  _Domain: PChar;
  _Needed : DWORD;
  _DomLen : DWORD;
  _use  : SID_NAME_USE;
begin
  Result := 0;
  _Needed := 0;
  _DomLen := 0;
  LookupAccountSid(destSystem, sid, 0, _Needed, 0, _DomLen,  _use);

  if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
   begin
    Result := HeapAlloc(GetProcessHeap(), 0, _Needed);
    _Domain:= GetMemory(_DomLen);
    LookupAccountSid(destSystem, sid, Result, _Needed, _Domain, _DomLen, _use);
    FreeMemory(_Domain);
   end;
end;

function GetProcessUserName(Process:THandle):PChar;
var
  _Token:THandle;
  _Info:PTOKEN_USER;
  _Needed:DWORD;
begin
  Result:=0;
  if not OpenProcessToken(Process, TOKEN_QUERY, _Token) then exit;
  _Needed:=0;
  GetTokenInformation(_Token, TokenUser, 0, 0, _Needed);
  if GetLastError() = ERROR_INSUFFICIENT_BUFFER then
   begin
    _Info := HeapAlloc(GetProcessHeap(), 0, _Needed);
    if GetTokenInformation(_Token, TokenUser, _Info, _Needed, _Needed) then
     Result:=GetNamebySID(0, _Info^.User.Sid);
    HeapFree(GetProcessHeap(),0, _Info);
   end;
end;
сначала получаем SID пользовтеля по хендлу процесса. потом имя пользователя по SID.

и вообще надо юзать поиск! я сначала хотел удалить тему, но потом передумал (настроение хорошее)
rpy3uH вне форума   Ответить с цитированием
Старый 13.04.2011, 13:42   #3
nikcpp
Пользователь
 
Регистрация: 05.04.2011
Сообщений: 35
Репутация: 0
По умолчанию

спасибо
nikcpp вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать - запущен ли определенный процесс ? 12usver12 Общие вопросы Delphi 16 21.02.2011 03:52
Узнать, был ли процесс запущен пользователем или системой niki2012 Общие вопросы Delphi 3 26.01.2011 22:04
Имя пользователя OlegSkal Общие вопросы Delphi 1 07.10.2010 18:40
запущен ли процесс Vaska Общие вопросы C/C++ 0 03.04.2009 15:42


15:49.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.