![]() |
Re: RunAs Dialog vor dem Programmstart???
So ich habe jetzt ein einfaches Programm geschrieben wollte es mal probieren wie ihr es gesagt habt. Irgendwie verstehe ich das immer noch wie ich den Syntax setzen muss bzw. soll.
Kann mir mal einer ein komplettes beispiel geben? |
Re: RunAs Dialog vor dem Programmstart???
Zitat:
ich kenne das wirklich nur so, dass man ein programm mit den richtigen rechten starten kann, nicht aber dessen rechte zur laufzeit ändern kann. |
Re: RunAs Dialog vor dem Programmstart???
Moin, moin, CodeX,
Ich habe mehrere Programme bei über 300 Usern laufen, die sich auf diese Weise die notwendigen Berechtigungen holen. Bis dato gab es nur seeeehr selten Probs und wenn, dann hatte der DC ein Prob, soll heissen: auch RunAs lief dann nicht zuverlässig. Policies können einem IMMER die Suppe versalzen. Sicher funktioniert es ab XP/Server2003; bei NT-Maschinen gibt es manchmal Probs (Service-Pack), bei 2000 kann ich keine repräsentative Aussage machen, da nur eine handvoll PC damit liefen (aber ebenfalls OK). Vorteil ist, dass sich das Prog mit
Delphi-Quellcode:
nur genau dann User-Rechte holt, wenn diese benötigt werden.
ImpersonateLoggedOnUser(AdminToken)
Ausserdem kann man in einem Prog mehrfach die User-Rechte wechseln ! Was m it RunAs nicht geht. |
Re: RunAs Dialog vor dem Programmstart???
sehr gut zu wissen. danke.
aber dann nochmal zum verständnig: die benutzerrechte werden beim aufruf von LogonUser auf dem gesamten rechner geändern und nicht nur das programm betreffend, oder? mit RevertToSelf kehrt man ja dann erst zu den normalen rechten zurück. das würde ja dann bedeuten, dass wenn man beim starten des programmes LogonUser aufruft und beim beenden erst RevertToSelf, dass dann während der gesamten programmlaufdauer, der benutzer als admin angemeldet ist. das betrifft ja dann auch andere programme. somit müsste man statt dessen die programmfunktionen mit diesen funktionen umschließen, die adminrechte voraussetzen. das würde aber unter umständen doch dann zu ständigen benutzerwechseln führen. dann kann doch nicht gut sein. :? oder irre ich mich jetzt gewaltig und die benutzerwechel betreffen nur das eigene programm? (was ich mir technisch nicht vorstellen könnte) |
Re: RunAs Dialog vor dem Programmstart???
Zitat:
NUR das Programm selbst erhält die neuen Benutzerrechte. Zitat:
Kannst aber halt als verschiedene Benutzer innerhalb einer Session agieren. |
Re: RunAs Dialog vor dem Programmstart???
ich hab mal ein bisschen geforscht.
jetzt lass mich raten: du arbeitest dabei mit services, richtig? denn ich habe folgendes gefunden: Zitat:
|
Re: RunAs Dialog vor dem Programmstart???
Sagt mal, Jungs und Mädchen, wäre das nicht ein gutes Thema für eine kleine Delphi PRAXiS-DLL? Diese DLL könnte ihrerseits die hier gezeigten Funktionen kapseln, so dass man sie mit wenig Aufwand in eigene Programme einbinden kann.
Die Hauptfunktionen der DLL könnten dabei statisch in die eigenen Programme gelinkt werden, so dass die Anwendung ohne die DLL gar nicht startet. Im Gegensatz dazu sollten die benutzten API-Funktionen in der DLL natürlich dynamisch geladen werden, so dass bspw. ein Aufruf unter 9x/ME immer mit true (oder was weiß ich) beantwortet wird. Dazu vielleicht ein paar Typen und/oder Klassen bzw. Auflistungen, damit man nicht mit dem API-Zeug hantieren muss. Klappt das Erlangen der gewünschten Rechte nicht, könnte man sicher das API für sich arbeiten und die entsprechende Fehlermeldung direkt aus dem System ausgeben lassen (Stichwort: ![]() Und wer schlicht und einfach nur den "Ausführen als"-Dialog braucht, für den könnte man ja eine Dialogressource (nonVCL) integrieren, die dem Original nachempfunden ist, und mit der man das Konto auswählen und das Passwort eingeben kann. Selbstverständlich sollte sich der Anwender nicht mit der Nachrichtenschleife unter nonVCL herumschlagen müssen. Für ihn sollte ein simpler Aufruf à la
Delphi-Quellcode:
genügen.
if RunAsDialog(...) then
begin end; @Codex: Hast du da nicht ein Zitat vergessen: Zitat:
|
Re: RunAs Dialog vor dem Programmstart???
Zitat:
Delphi-Quellcode:
also ich würd ja sagen, daß der Code eh schon recht simpel/kurz/unaufwändig ist. Quasi nur eine if abfrage (mit einer if abfrage) und schon kannste deinen code reinschmeißen.
var
AdminToken : Cardinal; if LogonUser(PAnsiChar(USERNAME), // UserName PAnsiChar(DOMAIN), // Domäne oder lokaler Rechner PAnsiChar(PASSWORD), // Password LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, AdminToken) then begin if ImpersonateLoggedOnUser(AdminToken) then begin // hier kommt Dein Prog.-Code hin RevertToSelf; // zurückschalten zum angemeldeten Benutzer end; end; Hätt ich dden Code nur eher gekannt .. |
Re: RunAs Dialog vor dem Programmstart???
Das Thema ist ja richtig interessant geworden. Trotzdem bleibt meine Frage, da ich nicht wirklich fit bin in diesem Thema, wie ich diesen Code in meine vorhandene Applikation einbaue.
Ansonsten mache ich es mit CreateProcessAsUser halt für meine Unterprogramme in meinem Programm. Schöner wäre ja nur wenn das ganze Tool mit Admimrechten laufen würde. Danke. |
Re: RunAs Dialog vor dem Programmstart???
Zitat:
evtl./sicherheitshalber im OnClose noch das RevertToSelf rein ... :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:22 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