Как проверить, имеем ли мы административные привилегии в системе
Интернетчика спросили:
- Что такое "Червона Рута"?
- Это женщина-админ на сервере Компартии.
type
PTOKEN_GROUPS = TOKEN_GROUPS^;
function RunningAsAdministrator (): Boolean;
var
SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY;
psidAdmin: PSID;
ptg: PTOKEN_GROUPS = nil;
htkThread: Integer; { HANDLE }
cbTokenGroups: Longint; { DWORD }
iGroup: Longint; { DWORD }
bAdmin: Boolean;
begin
Result := false;
ifnot OpenThreadToken(GetCurrentThread(), // get security token
TOKEN_QUERY, FALSE, htkThread) thenif GetLastError() = ERROR_NO_TOKEN thenbeginifnot OpenProcessToken(GetCurrentProcess(),
TOKEN_QUERY, htkThread) then
Exit;
endelse
Exit;
if GetTokenInformation(htkThread, // get #of groups
TokenGroups, nil, 0, cbTokenGroups) then
Exit;
if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then
Exit;
ptg := PTOKEN_GROUPS( getmem( cbTokenGroups ) );
ifnot Assigned(ptg) then
Exit;
ifnot GetTokenInformation(htkThread, // get groups
TokenGroups, ptg, cbTokenGroups, cbTokenGroups) then
Exit;
ifnot AllocateAndInitializeSid(SystemSidAuthority,
2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0, psidAdmin) then
Exit;
iGroup := 0;
while iGroup < ptg^.GroupCount do// check administrator groupbeginif EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) thenbegin
Result := TRUE;
break;
end;
Inc( iGroup );
end;
FreeSid(psidAdmin);
end;
Статья Как проверить, имеем ли мы административные привилегии в системе раздела ОС и Железо Windows может быть полезна для разработчиков на Delphi и FreePascal.
Комментарии и вопросы
:: 2011-06-07 12:28:17 :: re:Как проверить, имеем ли мы административные привилегии в системе
В примере проверяются права пользователя от имени которого запущена программа.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.