![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получение уровня привелегий процесса [D4, D5, D6, D7, NT4, Win2k, WinXP]
AngelFire © (2005-09-01 18:01:00)Уважаемые Мастера и подмастерья!
Не подскажете, каким образом можно (программно!) получить уровень привелегий запущенного процесса, имея в наличии только хэндл процесса, и, при необходимости, поднять уровень привилегий процесса? А также, каким образом запустить процесс/изменить параметры запущенного чтобы он выполнялся с правами конкретного пользователя (чаще всего, администратора)?
Игорь Шевченко (2005-09-01 18:07:00) [1]
> Не подскажете, каким образом можно (программно!) получить
> уровень привелегий запущенного процесса, имея в наличии
> только хэндл процесса
OpenProcessToken, GetTokenInformation (...TOKEN_PRIVILEGE...)
> и, при необходимости, поднять уровень привилегий процесса?
>
function HSEnablePrivilege (const PrivilegeName: String): Boolean;
var
LUID: TLargeInteger;
Priv: TTokenPrivileges;
AccessToken: THandle;
ReturnLen: Cardinal;
begin
Result := OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES, AccessToken);
if not Result then
Exit;
Result := LookupPrivilegeValueA(nil, PChar(PrivilegeName), LUID);
if not Result then //Привилегия не нашлась
Exit;
Priv.PrivilegeCount := 1;
Priv.Privileges[0].Luid := LUID;
Priv.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
Result := AdjustTokenPrivileges(AccessToken, false, Priv,
SizeOf(TTokenPrivileges), nil, ReturnLen);
end;
> А также, каким образом запустить процесс/изменить параметры
> запущенного чтобы он выполнялся с правами конкретного пользователя
> (чаще всего, администратора)?
Запустить через Runas.
Изменить параметры запущенного - Windows вообще-то не дураки писали.