Вниз
Скачать: CL | DM;

Проверить права администратора   Найти похожие ветки 

 
suspeded   (2007-08-15 13:55) [0]

Везде в сети этот код размножили, а он не рабочий. Знаний подправить не хватает.

type
 PTOKEN_GROUPS = TOKEN_GROUPS^;

function RunningAsAdministrator(): Boolean;
var
 SystemSidAuthority: SID_IDENTIFIER_AUTHORITY = SECURITY_NT_AUTHORITY;
 psidAdmin: PSID;
 ptg: PTOKEN_GROUPS = nil;
 htkThread: Integer; { HANDLE }
 cbTokenGroups: Longint; { DWORD }
 iGroup: Longint; { DWORD }
 bAdmin: Boolean;
begin
 Result := false;
 if not OpenThreadToken(GetCurrentThread(), // get security token
   TOKEN_QUERY, FALSE, htkThread) then
   if GetLastError() = ERROR_NO_TOKEN then
   begin
     if not OpenProcessToken(GetCurrentProcess(),
       TOKEN_QUERY, htkThread) then
       Exit;
   end
   else
     Exit;

 if GetTokenInformation(htkThread, // get #of groups
   TokenGroups, nil, 0, cbTokenGroups) then
   Exit;

 if GetLastError() <> ERROR_INSUFFICIENT_BUFFER then
   Exit;

 ptg := PTOKEN_GROUPS(getmem(cbTokenGroups));
 if not Assigned(ptg) then
   Exit;

 if not GetTokenInformation(htkThread, // get groups
   TokenGroups, ptg, cbTokenGroups, cbTokenGroups) then
   Exit;

 if not AllocateAndInitializeSid(SystemSidAuthority,
   2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
   0, 0, 0, 0, 0, 0, psidAdmin) then
   Exit;

 iGroup := 0;
 while iGroup < ptg^.GroupCount do // check administrator group
 begin
   if EqualSid(ptg^.Groups[iGroup].Sid, psidAdmin) then
   begin
     Result := TRUE;
     break;
   end;
   Inc(iGroup);
 end;
 FreeSid(psidAdmin);
end;


Помогите, пжалста...


 
Lacmus ©   (2007-08-15 14:03) [1]

http://msdn2.microsoft.com/en-us/library/ms647418.aspx


 
suspeded   (2007-08-15 14:07) [2]

Спасибо!

implementation
function IsUserAnAdmin():boolean; external shell32 name "IsUserAnAdmin";

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsUserAnAdmin then Caption:="да" else Caption:="нет";
end;



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.45 MB
Время: 0.016 c
2-1206360606
kiberg
2008-03-24 15:10
2008.04.20
копирование записей


15-1204617442
Kolan
2008-03-04 10:57
2008.04.20
А можно ли на двух мониторах в паре поставить разное разрешение?


15-1205002553
2лекс
2008-03-08 21:55
2008.04.20
MD5Append


2-1206126773
smartleds
2008-03-21 22:12
2008.04.20
Как бы из Сендера индекс текущего компонента получить


2-1206272590
webSQLNeederr
2008-03-23 14:43
2008.04.20
Аналог php функции split в Делфи?




   Наверх