AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bin ich lokaler Admin?

Ein Thema von Phoenix · begonnen am 5. Mär 2003 · letzter Beitrag vom 9. Jul 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.608 Beiträge
 
#1

Bin ich lokaler Admin?

  Alt 5. Mär 2003, 12:56
Hi,

weiss nicht, ob API die richtige Sparte ist, hat aber auf jeden Fall was mit Win zu tun:

Wie kann ich geschickt abprüfen, ob ich lokale Adminrechte habe?

Ne Lösung wäre zwar etwas zu versuchen, daß nur ein Admin kann (z.B. bestimmte Registry-Einträge ändern) und dann gucken ob das geklappt hat, aber ich finde das wäre dann doch eine SEHR unsaubere Lösung

Viele Grüße,

Sebastian

<- immer noch im Karnevalsrausch *g*
Sebastian Gingter
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2
  Alt 5. Mär 2003, 12:59
Delphi-Quellcode:
function GetAdminSid: PSID;
const
  // bekannte SIDs ... (WinNT.h)
  SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5));
  // bekannte RIDs ... (WinNT.h)
  SECURITY_BUILTIN_DOMAIN_RID: DWORD = $00000020;
  DOMAIN_ALIAS_RID_ADMINS: DWORD = $00000220;
begin
  Result := nil;
  AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2,
    SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS,
    0, 0, 0, 0, 0, 0, Result);
end;

function IsAdmin: LongBool;
var
  TokenHandle: THandle;
  ReturnLength: DWORD;
  TokenInformation: PTokenGroups;
  AdminSid: PSID;
  Loop: Integer;
begin
  Result := False;
  TokenHandle := 0;
  if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then
  try
    ReturnLength := 0;
    GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength);
    TokenInformation := GetMemory(ReturnLength);
    if Assigned(TokenInformation) then
    try
      if GetTokenInformation(TokenHandle, TokenGroups, TokenInformation,
        ReturnLength, ReturnLength) then
      begin
        AdminSid := GetAdminSid;
        for Loop := 0 to TokenInformation^.GroupCount - 1 do
        begin
          if EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then
          begin
            Result := True;
            Break;
          end;
        end;
        FreeSid(AdminSid);
      end;
    finally
      FreeMemory(TokenInformation);
    end;
  finally
    CloseHandle(TokenHandle);
  end;
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TorstenS

Registriert seit: 25. Mär 2003
10 Beiträge
 
Delphi 2006 Enterprise
 
#3
  Alt 23. Apr 2003, 13:38
Hi,

es geht auch einfacher ( relativ, ich weiß )

Binde die Unit os_info2.pas mit ein und siehe

" Label1.Caption := SystemInfo.AdminInfo ; "

mfg

TorstenS
Angehängte Dateien
Dateityp: pas os_info2.pas (22,0 KB, 33x aufgerufen)
Dateityp: pas os_info2.pas (22,0 KB, 10x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 23. Apr 2003, 13:41
Und was macht deine os_info2 Klasse anders als mein Code?

Hm, ist ja nur eine Unit noch nicht mal eine Klasse. Wer hat denn das verbrochen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TorstenS

Registriert seit: 25. Mär 2003
10 Beiträge
 
Delphi 2006 Enterprise
 
#5
  Alt 23. Apr 2003, 13:45
Mann erspart sich das abtippen des Codes?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6
  Alt 23. Apr 2003, 13:48
Aber wenn man den Rest nicht brauch, hat man einen ziemlichen Overhead.

Weißt du von wem die Unit ist?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TorstenS

Registriert seit: 25. Mär 2003
10 Beiträge
 
Delphi 2006 Enterprise
 
#7
  Alt 23. Apr 2003, 15:05
Die Unit ist mir von einem Arbeitskollegen zugetragen worden. Normalerweise tut sich ja der programmierer in der Unit verewigen.

TorstenS
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8
  Alt 23. Apr 2003, 18:05
LOL. Da hat sie aber einen weiten Weg genommen. Die ist aus der SysInfo von Daniel (also unserem Admin) aus der Open-Source-Sparte.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
TorstenS

Registriert seit: 25. Mär 2003
10 Beiträge
 
Delphi 2006 Enterprise
 
#9
  Alt 24. Apr 2003, 07:09
Da muß ich Ihm ja danken, da sie mir schon bei einigen Problemen weitergeholfen.
  Mit Zitat antworten Zitat
Vader

Registriert seit: 6. Mai 2003
804 Beiträge
 
Delphi 6 Enterprise
 
#10

Re: Bin ich lokaler Admin?

  Alt 9. Jul 2004, 06:30
hallo thorstens

hab dein file runtergeladen aber es kommt bei mir eine fehlermeldung:

[Fehler] Unit1.pas(29): Undefinierter Bezeichner: 'SystemInfo'

was ist da falsch



mfg vader
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz