Вниз
Скачать: CL | DM;

Права администратора   Найти похожие ветки 

 
Oleg_   (2005-05-24 20:03) [0]

Подскажите, как проверить есть ли у текущего пользователя права администратора.


 
Kerk ©   (2005-05-24 20:39) [1]

В MSDN описано как минимум два метода. В первом открываем Token процесса и долго с ним мучаемся...

Второй метод прост. Вот пример функции на Delphi:

Uses WINSVC;
----------
Function IsUserAdmin(Const aHostName: String): Bool;

Var SCHndl: THandle;

Begin
SCHndl := OpenSCManager(PChar(aHostName), Nil, SC_MANAGER_ALL_ACCESS);
Result := SCHndl <> 0;
If Result Then
  CloseServiceHandle(SCHndl)
Else
  If GetLastError <> ERROR_ACCESS_DENIED Then
    RaiseLastWin32Error;
End;


Если указать aHostName (не пустой), то можно проверить свои силы на удалённой машине ;)


 
xShadow ©   (2005-05-25 09:25) [2]

пример 1-го способа
function IsAdmin: Boolean;
const
SECURITY_NT_AUTHORITY : TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
SECURITY_BUILTIN_DOMAIN_RID                     = $00000020;
DOMAIN_ALIAS_RID_ADMINS                         = $00000220;
var
hAccessToken       : THandle;
ptgGroups          : PTokenGroups;
dwInfoBufferSize   : DWORD;
psidAdministrators : PSID;
i                  : Integer;
bSuccess           : BOOL;
begin
if Win32Platform <> VER_PLATFORM_WIN32_NT then
begin
  Result := True;
  Exit;
end;

Result := False;
bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken);
if not bSuccess then
begin
  if GetLastError = ERROR_NO_TOKEN then
  begin
    bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken);
  end;
end;
if bSuccess then
begin
  GetMem(ptgGroups, 1024);
  bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize);
  CloseHandle(hAccessToken);
  if bSuccess then
  begin
    AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators);
    {$R-}
    for i := 0 to ptgGroups.GroupCount-1 do
    begin
      if EqualSid(psidAdministrators, ptgGroups.Groups[i].Sid) then
      begin
        Result := True;
        Break;
      end;
    end;
    {$R+}
    FreeSid(psidAdministrators);
  end;
  FreeMem(ptgGroups);
end;
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.023 c
9-1112933908
Marl
2005-04-08 08:18
2005.07.18
PowerDraw effect constants


1-1119890476
Ask
2005-06-27 20:41
2005.07.18
packed record


4-1115745713
andystavropol
2005-05-10 21:21
2005.07.18
Частота обновления экрана


14-1119951449
begin...end
2005-06-28 13:37
2005.07.18
Ищется компонент для выбора папок


6-1113234440
Vadajhava
2005-04-11 19:47
2005.07.18
как положить файл на FTP?




   Наверх