![]() |
Re: Abfragen ob Process Adminrechte hat?
Liste der Anhänge anzeigen (Anzahl: 1)
@Nico:
Dat is aus deiner (alten) Variante heraus entstanden ... was genau würdest du jetzt noch ändern wollen? kann's grad nich testen, aber dieses SE_GROUP_ENABLED hab'sch erstma reingemacht :roll:
Code:
For Loop := 0 to TokenInformation^.GroupCount - 1 do
If [color=#ff0000](TokenInformation^.Groups[Loop].Attributes and SE_GROUP_ENABLED <> 0)[/color] and EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) Then Begin
Delphi-Quellcode:
Aufrufen tu ich's einfach ma so:
//ganze Unit siehe Anhang
Function CheckForAdmin: Boolean; Const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)); SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; Var TokenHandle: THandle; ReturnLength: LongWord; TokenInformation: PTokenGroups; AdminSid: PSID; Loop: Integer; AdminCheckForm: TAdminCheckForm; Begin Result := False; TokenHandle := 0; TokenInformation := nil; If OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) Then Try GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength); TokenInformation := GetMemory(ReturnLength); If (TokenInformation <> nil) and GetTokenInformation(TokenHandle, TokenGroups, TokenInformation, ReturnLength, ReturnLength) Then Begin AdminSid := nil; AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminSid); For Loop := 0 to TokenInformation^.GroupCount - 1 do If ((TokenInformation^.Groups[Loop].Attributes and SE_GROUP_ENABLED) = SE_GROUP_ENABLED) and EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) Then Begin Result := True; Break; End; FreeSid(AdminSid); End; Finally FreeMemory(TokenInformation); CloseHandle(TokenHandle); End; If not Result Then Begin AdminCheckForm := TAdminCheckForm.Create(nil); AdminCheckForm.ShowModal; AdminCheckForm.Free; End; End;
Delphi-Quellcode:
Program ...;
Uses DataRescue_AdminCheck, ...; Begin ... If not CheckForAdmin Then Exit; ... End. |
Re: Abfragen ob Process Adminrechte hat?
Ich hätte die Funktion IsAdmin oder IsRunningUnderAdminPrivileges genannt.
|
Re: Abfragen ob Process Adminrechte hat?
Aber nur die "neue" Version (jetzt wo man och noch zwischen 'nem Benutzer und seinen Rechten unterscheiden muß -.-'' ).
Bei der "alten" Variante sollte daß IsAdmin doch noch stimmen? |
Re: Abfragen ob Process Adminrechte hat?
Zitat:
|
Re: Abfragen ob Process Adminrechte hat?
Och, laß dir Zeit ... bis XP läuft es anscheinend ja ganz gut und Vista gibt's "noch" nicht.
Wollt daß nur solange noch "beheben", wie ich wenigstens ä bissl in der Materie drin bin ... glaub nicht, daß ich sowas so schnell nochmal machen/gebrauchen werde ._. |
Re: Abfragen ob Process Adminrechte hat?
Liste der Anhänge anzeigen (Anzahl: 1)
Hab meine integrierte Version nochmal auf deine zurückgeführt, :angel:
sodaß jetzt erstma was (hoffentlich) "Funktionierendes" existiert.
Delphi-Quellcode:
Und da ich's grad bemerkt hatte ... in meiner Unit werden jetzt an CreateProcessWithLogon auch das Arbeitsverzeichnis und die Parameterliste mit übergeben (gut daß ich da jetzt doch nochmal reingesehen hab ._.)
////////////////////////////////////////////////////////////////////////////////
// Procedure : HasAdminPrivileges // Author : NBe // Comment : function HasAdminPrivileges: LongBool; 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; SE_GROUP_ENABLED: DWORD = $00000004; var TokenHandle : THandle; ReturnLength : DWORD; TokenInformation : PTokenGroups; AdminSid : PSID; Loop : Integer; begin Result := False; TokenHandle := 0; TokenInformation := nil; AdminSid := nil; if OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, TokenHandle) then try ReturnLength := 0; GetTokenInformation(TokenHandle, TokenGroups, nil, 0, ReturnLength); TokenInformation := GetMemory(ReturnLength); if Assigned(TokenInformation) and GetTokenInformation(TokenHandle, TokenGroups, TokenInformation, ReturnLength, ReturnLength) then begin AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, AdminSid); for Loop := 0 to TokenInformation^.GroupCount - 1 do begin if (SE_GROUP_ENABLED = (TokenInformation^.Groups[Loop].Attributes and SE_GROUP_ENABLED)) and EqualSid(TokenInformation^.Groups[Loop].Sid, AdminSid) then begin Result := True; Break; end; end; FreeSid(AdminSid); AdminSid := nil; end; finally FreeSid(AdminSid); FreeMemory(TokenInformation); CloseHandle(TokenHandle); end; end; CheckForAdminPrivileges sorgt also dafür, daß das Programm mit Admin-Rechten gestartet wird.
Delphi-Quellcode:
(ich glaub hier würde sich ein TriState-Result besser machen :oops: ... aber erstmal sehn was Nico draus macht)
If CheckForAdminPrivileges Then Begin
// Programm gestartet End Else Begin // konnte nicht mit Admin-Rechten gestartet werden, // // und/oder eine andere Instanz des Programms wurde // mit Admin-Rechten gestartet End; |
Re: Abfragen ob Process Adminrechte hat?
Ich stehe gerade vor dem gleichen Problem, rauszufinden, mit welchen Rechten der Prozess jetzt "tatsächlich" läuft. Alle hier vorgestellten Methoden funktionieren leider nicht, auch nicht die Win2K Variante. Der Rückgabewert von CheckTokenMembership ist dann true, wenn der Check funktioniert hat. NICHT, wenn die Bedingung zutrifft. Man muss dafür als 3. Parameter einen Bool Wert übergeben und diesen Auswerten. Mit der aktuellen Methode liefert bei mir der Check nämlich auch bei einem eingeschränkten Benutzerkonto "true" zurück, was aber falsch ist :(
|
Re: Abfragen ob Process Adminrechte hat?
Zitat:
|
Re: Abfragen ob Process Adminrechte hat?
Sorry, da hab ich mich verguckt, stimmt. Leider funktioniert das bei mir trotzdem nicht :(
|
Re: Abfragen ob Process Adminrechte hat?
Zitat:
Quelltext? Was genau geht nicht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:39 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