![]() |
Bin ich lokaler Admin?
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 :party: <- immer noch im Karnevalsrausch *g* |
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; |
Liste der Anhänge anzeigen (Anzahl: 2)
Hi,
es geht auch einfacher ( relativ, ich weiß ) Binde die Unit os_info2.pas mit ein und siehe " Label1.Caption := SystemInfo.AdminInfo ; " mfg TorstenS |
Und was macht deine os_info2 Klasse anders als mein Code? :roll:
Hm, ist ja nur eine Unit noch nicht mal eine Klasse. Wer hat denn das verbrochen? :mrgreen: |
Mann erspart sich das abtippen des Codes?
|
Aber wenn man den Rest nicht brauch, hat man einen ziemlichen Overhead.
Weißt du von wem die Unit ist? |
Die Unit ist mir von einem Arbeitskollegen zugetragen worden. Normalerweise tut sich ja der programmierer in der Unit verewigen.
TorstenS |
LOL. Da hat sie aber einen weiten Weg genommen. Die ist aus der SysInfo von Daniel (also unserem Admin) aus der Open-Source-Sparte. :mrgreen:
|
Da muß ich Ihm ja danken, da sie mir schon bei einigen Problemen weitergeholfen.
|
Re: Bin ich lokaler Admin?
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 |
Re: Bin ich lokaler Admin?
oh, boy :?
Ich frage mich, warum du nicht einfach den Code aus Luckies Beitrag nimmst? Das ist exakt die Funktion, von der ich rede. Und du brauchst IMHO lediglich die Windows-Unit (die standardmäßig in allen Programmen eingebunden ist). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz