AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Programm mit eigenen Adminrechten neu starten
Thema durchsuchen
Ansicht
Themen-Optionen

Programm mit eigenen Adminrechten neu starten

Ein Thema von berens · begonnen am 18. Apr 2011 · letzter Beitrag vom 19. Apr 2011
Antwort Antwort
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Programm mit eigenen Adminrechten neu starten

  Alt 18. Apr 2011, 21:04
RunAs hört sich zwar einfach, aber durch den Dienst auch wieder sehr störungsanfällig an.

In http://www.delphipraxis.net/107066-v...-manifest.html meint himitsu, dass er das Ganze über CreateProcessWithLogonW gelöst hat. Wieder die Frage: Wie mache ich es, dass Windows und nicht mein Programm nach Benutzername/Kennwort fragt?

Kann alternativ bitte jemand einen Code-Schnippsel für ImpersonateLoggedOnUser mit einem Thread liefern? Wenn's geht bitte so, dass nicht Benutzername / Kennwort abgefragt werden, sondern dass Windows (Screenshots siehe oben) selbst danach fragt. Das Beispiel von Michael Puff ist leider hier nicht hilfreich...

Oder: Wie erstelle ich ein AdminToken?
Mein Codeschnippsel mit ImpersonateLoggedOnUser(AdminToken) hört sich zwar toll an, aber ich habe keine Idee, wie ich das Token erstelle. In den ganzen Threads war immer die Rede davon, dass man keine Token-Kopie etc machen soll, aber nicht, wie das Token überhaupt erstellt oder ausgelesen wird.

Es ist nicht so dass ich zu faul für die SuFu bin, sonder ich finde nur nichts zusammenhängendes.

PS: Kann es sein, dass die E-Mail Benachrichtigung bei neuen Beiträgen defekt ist?
Edit: In meinem Profil steht dieser Thread zwar bei Abonnements, aber bei "Benachrichtigung" stand nichts drinnen. Ist das neuerdings standardmäßig deaktiviert?

PS2: Die SuFu in der FireFox-Suchmaschinen-Liste kommt bei mir immer noch nicht mit den Sonderzeichen äöü zurecht. Gibt's da nen Update?



Edit: Das von shmia genannte ShellExecute Beispiel funktioniert bei mir genau wie es soll, sogar, auch und trotzdem dass der Dienst "Sekundäre Anmeldung" nicht gestartet ist! Für Alle, die sich mit dem Thema erst neu befassen: War für uns selbstverständlich ist, ist genauer betrachtet für die Entwicklung unseres Programms für eingeschränkte Benutzer (= nicht Admin) nicht förderlich: Delphi führt alle .exe Dateie mit F9 (scheinbar) immer als Administrator aus. Wenn Ihr also ein Programm mit (anfangs) eingeschränkten Rechten testen wollt, unbedingt die .exe direkt im Explorer doppelklicken. Stichwort SuFu: isAdmin
Dieser Ansatz von shmia würde mir generell erstmal genügen. Ich hoffe/erwarte dass in Domänen-Umgebungen statt des Ja/Nein Dialogs dann auch tatsächlich eine Abfrage nach Benutzername/Kennwort eines Domänen-Admins kommen.
Über einen Code-Schnippsel bzgl. kurzzeitiger Rechte-Erhöhung z.B. in einem Thread (ohne bekannte Benutzernamen/Passwort) würde ich mich dennoch sehr freuen! Gute Nacht einstweilen und vielen Dank!

Geändert von berens (18. Apr 2011 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Programm mit eigenen Adminrechten neu starten

  Alt 18. Apr 2011, 22:28
Delphi führt alle .exe Dateie mit F9 (scheinbar) immer als Administrator aus.
Unsinn. Das tut es nur, wenn es selbst auch als Administrator gestartet wurde. Denn wo sollten sonst die erhöhten Rechte herkommen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#3

AW: Programm mit eigenen Adminrechten neu starten

  Alt 18. Apr 2011, 23:10
CreateProcessWithLogonW benutzt den sekundären Anmeldedienst. ShellExecute und runas macht das über die Shell.

ImpersonateLoggedOnUser kann man eigentlich nur für Dienste nutzen, die damit als ein anderer Benutzer auftreten wollen. Das ist der eigentliche Zweck. Mehr als die eigenen Rechte kann man damit nicht bekommen.

Wenn man ab Vista kurz mal mehr Rechte benötigt, kann man seine Methoden in COM-DLL auslagern, ein Interface dazu setzen und dann über Windows diese DLL mit Adminrechten (über eine Exe von Windows) starten lassen. Nennt sich COM Rlevation. Gibt ne Menge Beispiele für Delphi dazu, z.B. meine:
http://blog.delphi-jedi.net/2008/03/...gram-elevated/
http://blog.delphi-jedi.net/2008/03/...ta-with-jwscl/
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Programm mit eigenen Adminrechten neu starten

  Alt 19. Apr 2011, 06:56
CreateProcessWithLogonW benutzt den sekundären Anmeldedienst. ShellExecute und runas macht das über die Shell.

Alle verschiedenen 3rd-Party RunAs()-Funktionen, die ich kenne, arbeiten intern mit dem Aufruf der API-Funktion CreateProcessWithLogonW() und sind abhängig vom Dienst "Sekundäre Anmeldung", wie ja leicht praktisch nachzuvollziehen ist.

Und zumindestens unter Delphi7 gibt es ja keine genuine Funktion RunAs(), und auch unter DelphiXE habe ich keine solche finden können.
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
441 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Programm mit eigenen Adminrechten neu starten

  Alt 19. Apr 2011, 08:32
Ah, ok, also kann man doch nicht "nativ" Thread-weise die Rechte erhöhen, da hatte ich den Beitrag von Asserbad falsch verstanden
Zitat:
ImpersonateLoggedOnUser funktioniert hingegen pro Thread
Luckie: Du hast natürlich Recht, dass Delphi die Programme wohl kaum mit höheren Rechten ausführen kann, als sich selbst. Da ich das Manifest mit "asInvoker" benutze, wird das Programm -wie Delphi auch- (auf meinem PC) als Administrator gestartet. Zumindest die 2007er Version fragt beim Programmstart nach erhöhten Rechten. Unabhängig davon, ob es sinnvoll ist, wollt ich nur nochmal klarstellen dass ich nicht so naiv bin zu glauben, dass sich -egal welches Programm- einfach "so" mehr Rechte verschaffen kann (ohne einen Exploit zu benutzen)

Ich denke, das Thema ist damit soweit erstmal erledigt. Danke auch nochmal für die Beispiele mit dem COM-Server.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:44 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