AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi RunAs Dialog vor dem Programmstart???
Thema durchsuchen
Ansicht
Themen-Optionen

RunAs Dialog vor dem Programmstart???

Ein Thema von Piro · begonnen am 8. Mär 2006 · letzter Beitrag vom 4. Mai 2006
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#11

Re: RunAs Dialog vor dem Programmstart???

  Alt 9. Mär 2006, 20:39
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?
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#12

Re: RunAs Dialog vor dem Programmstart???

  Alt 9. Mär 2006, 22:07
Zitat von kalmi01:
Oder Dein Prog macht selbst eine Abfrage á la

Benutzername:
Passwort:

und versucht sich dann die Berechtigungen zu holen:
Delphi-Quellcode:
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;
*weißt* du, ob das sicher (immer) funktioniert, oder ist das nur ein theoretischer ansatz?
ich kenne das wirklich nur so, dass man ein programm mit den richtigen rechten starten kann, nicht aber dessen rechte zur laufzeit ändern kann.
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#13

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 06:03
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 mitImpersonateLoggedOnUser(AdminToken) nur genau dann User-Rechte holt, wenn diese benötigt werden.
Ausserdem kann man in einem Prog mehrfach die User-Rechte wechseln !
Was m it RunAs nicht geht.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#14

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 11:03
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)
  Mit Zitat antworten Zitat
kalmi01
(Gast)

n/a Beiträge
 
#15

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 11:24
Zitat von CodeX:
......
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?
Nein !
NUR das Programm selbst erhält die neuen Benutzerrechte.

Zitat:
.....
oder irre ich mich jetzt gewaltig und die benutzerwechel betreffen nur das eigene programm? (was ich mir technisch nicht vorstellen könnte)
Betrifft nur das eine Prog (wie bei RunAs) !
Kannst aber halt als verschiedene Benutzer innerhalb einer Session agieren.
  Mit Zitat antworten Zitat
CodeX

Registriert seit: 30. Okt 2004
471 Beiträge
 
Delphi 12 Athens
 
#16

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 11:43
ich hab mal ein bisschen geforscht.
jetzt lass mich raten: du arbeitest dabei mit services, richtig?

denn ich habe folgendes gefunden:
Zitat von PSDK:
The process calling LogonUser requires the SE_TCB_NAME privilege. If the calling process does not have this privilege, LogonUser fails and GetLastError returns ERROR_PRIVILEGE_NOT_HELD.
und das SE_TCB_NAME kann man sich scheinbar nur als service holen.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#17

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 11:48
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: Hier im Forum suchenFormatMessage).

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:
if RunAsDialog(...) then
begin
end;
genügen.


@Codex: Hast du da nicht ein Zitat vergessen:
Zitat:
The SE_TCB_NAME privilege is not required for this function unless you are logging onto a Passport account.
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#18

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 12:28
Zitat von MathiasSimmack:
so dass man sie mit wenig Aufwand in eigene Programme einbinden kann.
Delphi-Quellcode:
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;
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.
Hätt ich dden Code nur eher gekannt ..
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#19

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 12:47
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.
  Mit Zitat antworten Zitat
Benutzerbild von TeronG
TeronG

Registriert seit: 19. Jul 2004
Ort: München
960 Beiträge
 
Delphi 2007 Professional
 
#20

Re: RunAs Dialog vor dem Programmstart???

  Alt 10. Mär 2006, 13:12
Zitat von daywalker299:
Schöner wäre ja nur wenn das ganze Tool mit Admimrechten laufen würde.
Und wenn du einfach den code in dein onCreate packst?
evtl./sicherheitshalber im OnClose noch das RevertToSelf rein ...
龍 Der Unterschied zwischen Theorie und Praxis ist in der Praxis größer als in der Theorie.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 5     12 34     Letzte »    


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 17:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz