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

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

Определение учетной записи [D7, D2005, XP]


к2в2 ©   (2007-06-04 21:46:00) 

Доброго времени, подскажите как определить под какой учетной записью работает пользователь, под админом или юзером.


Lee_lm   (2007-06-17 22:39:00) [1]

And some more..
<a href=  ></a>  *


Eraser   (2007-06-04 22:05:00) [2]

> [0] к2в2   (04.06.07 21:46)

для 2K и выше IsUserAnAdmin, для NT
function IsAdmin: Boolean;
const
 SE_GROUP_ENABLED = $00000004;

 SECURITY_NT_AUTHORITY: Windows.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: Windows.PSID;
 x: Integer;
 bSuccess: BOOL;
begin
 Result   := False;
 if Win32Platform <> VER_PLATFORM_WIN32_NT then
 begin
   Result := true;
   Exit;
 end;
 bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True,
   hAccessToken);
 if not bSuccess then
 begin
   if GetLastError = ERROR_NO_TOKEN then
     bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY,
       hAccessToken);
 end;
 if bSuccess then
 begin
   GetMem(ptgGroups, 1024);
   bSuccess := Windows.GetTokenInformation(hAccessToken, Windows.TokenGroups,
     ptgGroups, 1024, dwInfoBufferSize);
   CloseHandle(hAccessToken);
   if bSuccess then
   begin
     Windows.AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
       SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
       0, 0, 0, 0, 0, 0, psidAdministrators);
     {$R-}
     for x := 0 to ptgGroups.GroupCount - 1 do
       if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) and
         ((ptgGroups.Groups[x].Attributes or SE_GROUP_ENABLED) = ptgGroups.Groups[x].Attributes) then
       begin
         Result := True;
         Break;
       end;
     {$R+}
     FreeSid(psidAdministrators);
   end;
   FreeMem(ptgGroups);
 end;
end;


Правильный Вася   (2007-06-04 22:00:00) [3]

NetUserGetInfo


к2в2   (2007-06-04 21:58:00) [4]

Прав будет достаточно )


Правильный Вася   (2007-06-04 21:55:00) [5]

тебе имя или права?


Наверх

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