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

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

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

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

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

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

1) Узнать какая именно привилегия для этого требуется.
2) Проверить её наличие через AccessCheck().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Админ / не админ?
    #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
Админ / не админ?
    #39823142
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простой способ: tregistry.openkey(hklm...) и проверять result.
Но некотовые разделы виртуализируются под юзером.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Админ / не админ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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