![]() |
Vista: Administratorkonto oder reelle elevated Adminrechte?
Hey,
gibt es eine einfache Möglichkeit unter Vista zu testen, ob meine Anwendung wirklich momentan mit Adminrechten läuft? Ich teste erst, ob der Benutzer ein Administrator ist. Ist dies der Fall ist ja aber noch nicht sichergestellt, dass er die Anwendung über die UAC mit wirklichen Adminrechten gestartet hat. Gruß Zacherl |
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Das müsste sich am Token ablesen lassen. Probiere mal IsTokenRestricted.
Oder besser: Hole dir mit GetTokenInformation die Gruppen und prüfe die Administratorengruppe auf das Flag SE_GROUP_USE_FOR_DENY_ONLY. |
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Hast du einen Beispielcode, der möglichst ohne die JEDIs auskommt?
|
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Warum denn ohne JEDIs?
|
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Wegen nonVCL ..
|
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Zitat:
|
Re: Vista: Administratorkonto oder reelle elevated Adminrech
@Zacherl:
1. Okay, wenn ohne alles, dann nimm ![]() 2. nonVCL, gutes Stichwort. JWSCL läuft jetzt ohne VCL. Nur RTL ist drin. Verfügbar ist es jedoch im Moment nur im SVN Trunk. @Luckie: Ich ziehe jederzeit Qualität der Quantität vor! Aber letzendlich geht man immer ein Risiko ein, wenn man fremden Code verwendet. Das mag jetzt zwar nicht auf den einfachen Code von CheckTokenMembership zutreffen, aber es trifft sehr wohl auf die ganzen Token und ACL Quelltexte zu. Wenn man gerade damit anfängt und nicht weiß, worum es geht, ist es sehr problematisch. |
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Hab mal das hier aus verschiedenen Funktionen, die ich hier im Forum gefunden habe gebastelt und mit Hilfe eurer Tips. Vielleicht hilft es ja jemandem:
Delphi-Quellcode:
Diese Funktion gibt unter XP entweder apLimited für eingeschränkte Rechte oder apFullAdmin für Administratorrechte zurück. Ab Vista wird apAdmin zurückgegeben, wenn es sich um einen Administrator handelt, das aktuelle Programm aber nicht per UAC elevated gestartet wurde. Läuft das Programm mit uneingeschränkten Adminrechten, so wird hier apFullAdmin zurückgegeben.
type
TAdminPrivileges = ( apLimited, apAdmin, apFullAdmin ); function HasAdminPrivileges: TAdminPrivileges; function GetAdminSid: PSID; const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); 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; const SE_GROUP_USE_FOR_DENY_ONLY = $00000010; var TokenHandle : THandle; ReturnLength : DWORD; TokenInformation : PTokenGroups; AdminSid : PSID; Loop : Integer; begin Result := apLimited; 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 if (TokenInformation^.Groups[Loop].Attributes and SE_GROUP_USE_FOR_DENY_ONLY) = SE_GROUP_USE_FOR_DENY_ONLY then begin Result := apAdmin; end else begin Result := apFullAdmin; end; Break; end; end; FreeSid(AdminSid); end; finally FreeMemory(TokenInformation); end; finally CloseHandle(TokenHandle); end; end; Gruß Zacherl |
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Nichts anderes macht die Funktion CheckTokenMembership!
|
Re: Vista: Administratorkonto oder reelle elevated Adminrech
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:48 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