![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как узнать что превилигия включена или выключена? [D6]
NikNet © (2005-08-23 21:02:00)Как узнать что например DEBUG привилигия включена или выключена?
и ещё каку знать есть ли у пользователя эта привилигия или
надо добавить?
BiN (2005-08-24 09:21:00) [1]>>NikNet © (23.08.05 21:02)
Как узнать что например DEBUG привилигия включена или выключена?
и ещё каку знать есть ли у пользователя эта привилигия или
надо добавить?
Для получения списка привилегий, ассоциированных с учетной записью, используется LsaEnumerateAccountRights.
Для получения списка привилегий, ассоциированных с маркером процесса, - GetTokenInformation.
>>Zeqfreed © (23.08.05 21:34) [2]
...
Result := AdjustTokenPrivileges(...
Список привилегий "закрепляется" за маркером при его создании.
Так вот, если в маркере будет отсутствовать целевая привилегия, и мы попытаемся установить ее в состояние "enabled", то AdjustTokenPrivileges вернет True, а привилегия при этом не будет установлена. Для того, чтобы проверить установлена привилегия, нужно проверять еще GetLastError на равенство ERROR_SUCCESS.
Zeqfreed (2005-08-23 21:34:00) [2]NikNet © (23.08.05 21:02)
function SetPrivilege(const PrivilegeName : string; const Enable : boolean) : boolean;
var
tpOld, tp : TTokenPrivileges;
Token : Cardinal;
dwRetLen : DWORD;
begin
Result := False;
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token);
tp.PrivilegeCount := 1;
if LookupPrivilegeValue(nil, PChar(PrivilegeName), tp.Privileges[0].LUID) then begin
if Enable then
tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
else
tp.Privileges[0].Attributes:= 0;
dwRetLen := 0;
Result := AdjustTokenPrivileges(Token, False, tp, SizeOf(tpOld), tpOld, dwRetLen);
end;
CloseHandle(Token);
end;
Вот код из одного FAQ'а, почитай справку по ф-циям.
alpet (2005-08-23 21:08:00) [3]Может быть ПРИВИЛЕГИЯ?