Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Админ / не админ? / 11 сообщений из 11, страница 1 из 1
31.05.2019, 17:23
    #39820907
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Как определить?
CheckTokenMembership() или чего ишо?
...
Рейтинг: 0 / 0
31.05.2019, 17:24
    #39820909
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
какова цель?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.05.2019, 17:30
    #39820914
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Мимопроходящий,

Узнать, есть ли смысл пробовать выполнить регистрацию COM - серверов и инсталлировать драйвера устройств.
...
Рейтинг: 0 / 0
31.05.2019, 17:42
    #39820927
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Это и PowerUser могут делать, IIRC.

P.S. Делай попытку и проверяй результат.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.05.2019, 17:52
    #39820937
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
31.05.2019 17:42, Гаджимурадов Рустам пишет:
> Делай попытку и проверяй результат.

+1
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.05.2019, 18:19
    #39820963
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Не, надо заранее.
...
Рейтинг: 0 / 0
31.05.2019, 18:23
    #39820967
makhaon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
ёёёёё,

шоб было (ц)?
...
Рейтинг: 0 / 0
31.05.2019, 18:26
    #39820973
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
31.05.2019 18:19, ёёёёё пишет:
> Не, надо заранее.

ты пытаешься к офисному туалету прицепить табличку «don't disturb»
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
31.05.2019, 18:41
    #39820982
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
ёёёёёУзнать, есть ли смысл пробовать выполнить регистрацию COM - серверов и инсталлировать
драйвера устройств.

1) Узнать какая именно привилегия для этого требуется.
2) Проверить её наличие через AccessCheck().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
04.06.2019, 14:16
    #39822307
ёёёёё
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Подсмотрел, как в инсталляторах делается.


Код: 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.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
function GetAccountType(aCheckTokenForGroupDeny: boolean): string;
type
  _TCTN = function(TokenHandle: THANDLE; SidToCheck: Pointer;
    var IsMember: BOOL): BOOL; stdcall;

  _TGroup = record
    auth_id: DWORD;
    name: string;
  end;
const
  DOMAIN_ALIAS_RID_ADMINS = $00000220;
  DOMAIN_ALIAS_RID_USERS = $00000221;
  DOMAIN_ALIAS_RID_GUESTS = $00000222;
  DOMAIN_ALIAS_RID_POWER_USERS = $00000223;

  SECURITY_BUILTIN_DOMAIN_RID = $00000020;
  SE_GROUP_USE_FOR_DENY_ONLY = $00000010;

  cGroups: array[0..3] of _TGroup = (
    (auth_id: DOMAIN_ALIAS_RID_USERS; name: 'User'),
    (auth_id: DOMAIN_ALIAS_RID_GUESTS; name: 'Guest'),
    (auth_id: DOMAIN_ALIAS_RID_POWER_USERS; name: 'Power'),
    (auth_id: DOMAIN_ALIAS_RID_ADMINS; name: 'Admin'));

var
  fCurrGroup: string;
  fpTG: PTokenGroups;
  fIsValidTokenGroups: Boolean;
  fIsMember: LongBool;
  fcbTokenGroups: DWORD;
  fHToken: DWORD;
  i, j: Integer;
  fCheckTokenMembershipFunc: _TCTN;
  fpSID: PSID;

const
  SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = (Value: (0, 0, 0, 0, 0, 5));
    // SECURITY_NT_AUTHORITY           {0,0,0,0,0,5}
begin
  fCurrGroup := '';
  fHToken := 0;

  fCheckTokenMembershipFunc := nil;
 // Открываем хэндл токена доступа к текущему треду
  if (OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, FALSE, fHToken)
    or OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, fHToken)) then begin
    fpTG := nil;
    fIsValidTokenGroups := False;

    if aCheckTokenForGroupDeny then
   // ...без Load/Freelibrary
      fCheckTokenMembershipFunc :=
        GetProcAddress(GetModuleHandle('ADVAPI32'), 'CheckTokenMembership');

  // "Олдскул"...
    if (not aCheckTokenForGroupDeny
      or not Assigned(fCheckTokenMembershipFunc)) then
   // Запрашиваем размер информации. Ожидаем от GetTokenInformation результата FALSE,
   // так передаем ему NULL - буфер. По завершению в cbTokenGroups будет размер
   // групповой информации.
      if (not GetTokenInformation(fHToken, TokenGroups, nil, 0, fcbTokenGroups)
        and (GetLastError() = ERROR_INSUFFICIENT_BUFFER)) then
      begin
    // Выделяем память и снова запрашиваем инфу.
    // ! Если админ добавит эту учетку к дополнительной группе между
    // вызовами GetTokenInformation  - возможен глюк
        fpTG := PTokenGroups(GlobalAlloc(GPTR, fcbTokenGroups));
        if (Assigned(fpTG) and
          GetTokenInformation(fHToken, TokenGroups, fpTG,
          fcbTokenGroups, fcbTokenGroups)) then
          fIsValidTokenGroups := True
      end;

    if (fIsValidTokenGroups
      or (aCheckTokenForGroupDeny
      and Assigned(fCheckTokenMembershipFunc))) then begin
      for i := 0 to High(cGroups) do begin
    // Создаем SID для локальной группы, потом проверяем, существует ли он в нашем токене
        if (AllocateAndInitializeSid(
          SystemSidAuthority, 2, SECURITY_BUILTIN_DOMAIN_RID,
          cGroups[i].auth_id, 0, 0, 0, 0, 0, 0, fpSID)) then begin
          fIsMember := False;
          if aCheckTokenForGroupDeny
            and Assigned(fCheckTokenMembershipFunc) then
            fCheckTokenMembershipFunc(0, fpSID, fIsMember)
          else if fIsValidTokenGroups then
            for j := 0 to fpTG.GroupCount - 1 do
// Временно отключаем проверку диапазонов, из-за Groups: array[0..0]
{$IFOPT R+}
{$R-}
{$DEFINE RANGE}
{$ENDIF}
              if (EqualSid(fpTG.Groups[j].Sid, fpSID)) then
{$IFDEF RANGE}
{$R+}
{$UNDEF RANGE}
{$ENDIF}
                fIsMember := True;

          if (fIsMember) then
            fCurrGroup := cGroups[i].name;
          FreeSid(fpSID);
        end
      end
    end;

    if Assigned(fpTG) then
      GlobalFree(HGLOBAL(fpTG));
    CloseHandle(fHToken);

    result := fCurrGroup;
    exit;
  end;

  result := '';
end;




Параметр - для учета текущего состояния UAC.
Если параметр == True, то в *Vista при "задранном" UAC вернет "User", а если == True - то "Admin".
Для WinXP - без разницы, естественно.
...
Рейтинг: 0 / 0
05.06.2019, 23:37
    #39823142
DmSer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Админ / не админ?
Простой способ: tregistry.openkey(hklm...) и проверять result.
Но некотовые разделы виртуализируются под юзером.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Админ / не админ? / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]