Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
kolay_ne
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
1

Узнать, является ли пользователь админом

31.07.2017, 08:57. Просмотров 885. Ответов 3
Метки нет (Все метки)

Не запущена ли программа от имени админа, а может ли пользователь запустить ее от имени админа, есть ли у него соответствующие права.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2017, 08:57
Ответы с готовыми решениями:

Узнать, является ли пользователь локальным администратором
Права пользователя Компьютера Не могу найти решение: необходимо узнать является ли пользователь...

Узнать кликнул ли пользователь по рекламе
Использую InterstitialAd Как узнать кликнул ли пользователь по рекламе? т.е. необходимо...

Узнать из какой страны пользователь
Я принялся локализировать свои проекты под английский язык и мне нужно узнать из какой страны...

Как узнать закрыл ли пользователь browser?
Я создаю сайт дистанционного образования. После регистрации пользователя создается сессия. Как мне...

Как узнать откуда пришёл пользователь?
Всем привет! Возник вопрос. Как узнать с какого сайта(домена) пришёл пользователь? Я знаю что это...

3
Joy
Эксперт Pascal/Delphi
2193 / 1216 / 1443
Регистрация: 29.08.2014
Сообщений: 4,437
31.07.2017, 09:31 2
т.е. входит или нет в группу администраторы?
0
kolay_ne
16 / 18 / 11
Регистрация: 07.03.2016
Сообщений: 362
03.08.2017, 12:35  [ТС] 3
Joy, Точно так
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
27062 / 18098 / 7155
Регистрация: 22.10.2011
Сообщений: 31,872
Записей в блоге: 6
03.08.2017, 14:03 4
Лучший ответ Сообщение было отмечено Joy как решение

Решение

kolay_ne, если UAC выключен - то все очень просто. Если включен - то очень сложно. Вот программа, которая обрабатывает оба эти варианта (источник) :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
uses System.Security.Principal, System.Runtime.InteropServices;
 
function IsAdministrator : boolean;
begin
    var identity := WindowsIdentity.GetCurrent();
    var principal := new WindowsPrincipal(identity);
    result := principal.IsInRole(WindowsBuiltInRole.Administrator);
end;
 
type
  TTokenInformationClass = 
  (
     zeroTIC,
     TokenUser,
     TokenGroups,
     TokenPrivileges,
     TokenOwner,
     TokenPrimaryGroup,
     TokenDefaultDacl,
     TokenSource,
     TokenType,
     TokenImpersonationLevel,
     TokenStatistics,
     TokenRestrictedSids,
     TokenSessionId,
     TokenGroupsAndPrivileges,
     TokenSessionReference,
     TokenSandBoxInert,
     TokenAuditPolicy,
     TokenOrigin,
     TokenElevationType,
     TokenLinkedToken,
     TokenElevation,
     TokenHasRestrictions,
     TokenAccessInformation,
     TokenVirtualizationAllowed,
     TokenVirtualizationEnabled,
     TokenIntegrityLevel,
     TokenUiAccess,
     TokenMandatoryPolicy,
     TokenLogonSid,
     MaxTokenInfoClass
  );
  TTokenElevationType =
  (
    zeroTET,
    TokenElevationTypeDefault,
    TokenElevationTypeFull,
    TokenElevationTypeLimited
  );
 
function GetTokenInformation(tokenHandle : System.IntPtr; tic : TTokenInformationClass; tokenInformation : System.IntPtr;
                             tokenInformationLength : integer; var returnLength : integer) : boolean; external 'advapi32.dll';
 
function IsUACAdmin : boolean;
begin
  var identity := WindowsIdentity.GetCurrent();
  var principal := new WindowsPrincipal(identity);
 
  result := true;
  // Check if this user has the Administrator role. If they do, return immediately.
  // If UAC is on, and the process is not elevated, then this will actually return false.
  if (principal.IsInRole(WindowsBuiltInRole.Administrator)) then exit;
  
  result := false;
  // If we're not running in Vista onwards, we don't have to worry about checking for UAC.
  if (System.Environment.OSVersion.Platform <> System.PlatformID.Win32NT) or (System.Environment.OSVersion.Version.Major < 6) then exit;
  // Operating system does not support UAC; skipping elevation check.
 
  var tokenInfLength := Marshal.SizeOf(typeof(integer));
  var tokenInformation := Marshal.AllocHGlobal(tokenInfLength);
  try
    var token := identity.Token;
    var gti_result := GetTokenInformation(token, TTokenInformationClass.TokenElevationType, tokenInformation, tokenInfLength, tokenInfLength);
 
    if not gti_result then
    begin
        var exception := Marshal.GetExceptionForHR( Marshal.GetHRForLastWin32Error() );
        raise new System.InvalidOperationException('Couldn"t get token information', exception);
    end;
 
    var elevationType := TTokenElevationType(Marshal.ReadInt32(tokenInformation));
    
    case elevationType of
        TTokenElevationType.TokenElevationTypeDefault:
            // TokenElevationTypeDefault - User is not using a split token, so they cannot elevate.
            result := false;
        TTokenElevationType.TokenElevationTypeFull:
            // TokenElevationTypeFull - User has a split token, and the process is running elevated. Assuming they're an administrator.
            result := true;
        TTokenElevationType.TokenElevationTypeLimited:
            // TokenElevationTypeLimited - User has a split token, but the process is not running elevated. Assuming they're an administrator.
            result := true;
        else
            // Unknown token elevation type.
            result := false;
     end;
  finally
    if (tokenInformation <> System.IntPtr.Zero) then Marshal.FreeHGlobal(tokenInformation);
  end;
end;
 
begin
  writeln(IsAdministrator); // эта функция дает правильный результат, если UAC выключен
  writeln(IsUACAdmin); // эта - если UAC включен
end.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2017, 14:03

Узнать что пользователь смотрит таблицу
Собственно подскажите, как лучше реализовать такой алгоритм: есть БД и TDBGrid на форме. В БД...

Узнать какой клон выбрал пользователь
При создании сцены,создаю клоны,записываю их в массив объектов,который висит на главной камеры ...

Как узнать, закрыл ли пользователь браузер?
Я создаю сайт дистанционного образования. У меня сессии хранятся в БД mysql. Мне необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru