- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 

Kontrollera om du är inloggad som administratör Kategori: System
Inlagt: 2005-09-11
Läst: 1300
Inlagt av: Staffan Berg
Beskrivning
Detta exempel kontrollerar om administratörskontot är påloggat. Fungerar under NT, Win2000 och XP.
Kod
{$APPTYPE CONSOLE} 
program isAdmin; 
 
uses 
 SysUtils, Windows, Forms; 
 
{$R *.RES} 
 
const 
 SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = 
  (Value: (0, 0, 0, 0, 0, 5)); 
 SECURITY_BUILTIN_DOMAIN_RID = $00000020; 
 DOMAIN_ALIAS_RID_ADMINS   = $00000220; 
 
// return TRUE for Admins (or Win95/98/ME) 
function Is_Admin: Boolean; 
var 
 hAccessToken: THandle; 
 ptgGroups: PTokenGroups; 
 dwInfoBufferSize: DWORD; 
 psidAdministrators: PSID; 
 x: 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 
  bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, 
   hAccessToken); 
 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 x := 0 to ptgGroups.GroupCount - 1 do 
    if EqualSid(psidAdministrators, ptgGroups.Groups[x].Sid) then 
    begin 
     Result := True; 
     Break; 
    end; 
   {$R+} 
   FreeSid(psidAdministrators); 
  end; 
  FreeMem(ptgGroups); 
 end; 
end; 
 
 
begin 
 if Is_Admin then 
  Writeln(1) 
 else 
  Writeln(0); 
end. 
 

 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -