Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как узнать права юзера? [D7, WinXP]


Dmitriy Volkov ©   (2004-05-06 23:47:00) 

Здравствуйте!

Подскажите, плз, где можно почитать о том, как узнать права юзера в WinXP. Ну или здесь напишите. А то чё-то роюсь по сайту, а найти не могу.

Спасибо!


Dmitriy Volkov   (2004-05-09 13:43:00) [1]

Ага, спасибо :)


xShadow   (2004-05-07 09:20:00) [2]

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;

Вот к примеру код проверяет текущего пользователя входит ли он в группу админов.


Dmitriy Volkov   (2004-05-07 08:35:00) [3]

Да, текущего. Спасибо! :)


Игорь Шевченко   (2004-05-07 00:22:00) [4]


> где можно почитать о том, как узнать права юзера в WinXP


Какого юзера ? Если текущего, то OpenProcessToken + GetTokenInformation


Наверх

Титульная страница Поиск, карта сайта Написать письмо