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 4 von 5   « Erste     234 5      
MathiasSimmack
(Gast)

n/a Beiträge
 
#31

Re: RunAs Dialog vor dem Programmstart???

  Alt 11. Mär 2006, 08:31
Zitat von TeronG:
Zitat von MathiasSimmack:
so dass man sie mit wenig Aufwand in eigene Programme einbinden kann.
[...]
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.
Das habe ich nicht gemeint. Ich dachte an eine Zusammenfassung der Funktionen, so dass der Entwickler letztlich in seinem Programm auch nur eine if-then-Abfrage einbaut. Allerdings sollte er/sie sich nicht darum kümmern müssen, welche Units oder API-DLLs ggf. einzubinden sind, auf welchem OS das ganze läuft, usw.

Ein an den Haaren herbeigezogenes Beispiel: Ich schreibe ein 08/15-Programm, das an einer bestimmten Stelle zwingend etwas in der Registry unter HKLM speichern muss. Ich rufe an dieser Stelle im Programm die (noch fiktive) Funktion "RunAsDialog" auf. Diese Funktion stellt fest, dass ich bereits Admin-Rechte habe und führt den gewünschten Programmcode aus.
Bei einem Einsatz als Benutzer würde an der gleichen Stelle ein Dialog angezeigt werden, der mich auffordert, ein Admin-Konto zu wählen und das Passwort anzugeben. War das korrekt, erlangt das Programm die notwendigen Rechte und kann den Code ebenfalls speichern.
Da es sich um ein 08/15-Programm handelt, könnte auch jemand auf die Idee kommen, es unter Windows 98 einzusetzen. Hier würden die NT-spezifischen Funktionen u.U. Fehler verursachen und im schlimmsten Fall das Programm sogar beenden oder am Programmlauf hindern, obwohl das Speichern in HKLM hier gar kein Problem ist.

Der Entwickler, der so eine Bibliothek verwenden möchte, muss sich im Normalfall also um nichts weiter kümmern. Er ruft nur die Funktionen auf, den Rest erledigt die DLL intern. Und unter Systemen wie Windows 98 kommt es zu keiner Störung im Programmlauf, weil die Funktionen dann generell immer true (oder was weiß ich) zurückgeben, bzw. die nicht vorhandenen NT-Funktionen gar nicht erst aufrufen.

Aber egal, es war eben nur so eine Idee, geboren aus Langeweile ...
  Mit Zitat antworten Zitat
CodeX

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 11. Mär 2006, 11:38
ich finde die idee sehr gut. sowas in der art gibt es für delphi nocht nicht. brauchen tuns aber viele.
wichtig wäre aber, dass sich das ganze aber trotzdem noch anpassen ließe. also dialog (ob nun VCL oder non-VCL) und wo und wie (verschlüsselt) die admin daten ev. gespeichert werden.
ganz nebenbei müsste erstmal das problem mit W2K geklärt werden. ob das an den privilegien am token oder sonstwo liegt...

stellt sich nur die frage, ob jemand die erforderlichen kenntnisse besitzt, sich die zeit nimmt und sich die arbeit und mühe macht.
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#33

Re: RunAs Dialog vor dem Programmstart???

  Alt 11. Mär 2006, 11:55
Über das Konzept muss man noch reden. Und für mich stellt sich nicht die Frage, ob jemand mit den Kenntnissen diese Arbeit übernimmt. Für mich stellt sich die Frage, ob die hier interessiert Schreibenden willens sind, daran mitzuwirken. Fehlende Kenntnisse von irgendwas hat mich noch nie davon abgehalten, es dennoch zu versuchen . Ich dachte sowieso an eine Art Gemeinschaftsprojekt, bei dem jeder etwas beisteuern kann.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 21. Mär 2006, 23:08
ja sowas wäre echt gut.
Das Programm nutzt immer nur dann höhere Rechte, wenn diese notwendig sind.

z.b.
Delphi-Quellcode:
unit SimpleRights

type
   TRightInfo = record
     noch ein paar Infos hier über die Rechte
   end;

   TOnPrivExecute = procedure (Sender: TObject; RightsInfo : TRightsInfo; UserData : Pointer) of object;

{Führt OnPrivExecute aus auf zwei Wegen aus:
1. Der Benutzer hat bereits die notwendigen Privilegien => OnPrivExecute wird einfach aufgerufen
2. Der Benutzer hat nicht die notwendigen Privilegien =>
    Ein LoginDialog wird angezeigt und im Erfolgsfall wird OnPrivExecute aufgerufen.
   
}


function ExecutePrivilegedUser(Sender: TObject; OnPrivExecute : TOnPrivExecute; UserData : Pointer; <*> ForceShowLoginDlg : Boolean = false) : Boolean;
...
<*>Hier sollten weitere Parameterstrukturen rein,
die es ermöglichen anzugeben, welche Privilegien (Administrator?) nötig sind, um OnPrivExecute auszuführen.
Sowie die Dialogeinstellungen.



function ExecutePrivilegedUser(Sender: TObject; OnPrivExecute : TOnPrivExecute; UserData : Pointer; <*> ForceShowLoginDlg : Boolean = false) : Boolean;
var
  AdminToken : Cardinal;
begin
  hier noch überprüfen ob Benutzer genug Rechte hat
  ---> aber wie? vermutlich dieser link:
  [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/secauthz/security/accesscheck.asp[/url]

und ggf. den RunAsDialog (selbstgemacht) anzeigen für die Eingaben (<USERNAME,<DOMAIN>,...)
  
   
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
              try
                OnPrivExecute(Sender,...,UserData);
              finally
                RevertToSelf; // zurückschalten zum angemeldeten Benutzer
              end;
              
            end;
     end;
end;






unit FormTest;
...

procedure TForm.OnMyPrivExecute (Sender : TObject; RightsInfo : TRightsInfo; UserData : Pointer);
begin
  //hier mit anderen Rechten arbeiten
end;

procedure TForm1.ButtonClick(...)
var MyData : Pointer;
begin
  MyData := nil;
  if ExecutePrivilegedUser(Self,OnMyPrivExecute,...[benötigte Rechte],MyData) then
    //ok
  else
    //abbruch
end;
Was haltet ihr von dieser Hülle?


Hier noch ein paar must see links:
http://msdn.microsoft.com/library/de..._reference.asp
http://msdn.microsoft.com/library/de..._functions.asp

Wie man Adminrechte erkennt:
http://www.delphi-fundgrube.de/faq13.htm#topic1315
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 24. Mär 2006, 14:12
gibts hier noch etwas zu sagen?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
CodeX

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 24. Mär 2006, 14:25
Die Rechte kann man zb mit IsAdmin prüfen. (Zumindest, ob Admin-Rechte vorhanden sind.)

Aber meiner Meinung nach ist das "Projekt" hier absolut uninteressant, solange es nur mit Win XP richtig funktioniert.
Es sollte noch mindestens Win2000 dazukommen, dann kann man weiter dran arbeiten. Aber das hat ja bisher noch keiner hinbekommen. (?)
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 24. Mär 2006, 22:17
Nanu?

Ich dachte unter den meisten Windows 2000er funktioniert es?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
CodeX

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 24. Mär 2006, 22:30
Außer kalmi01 und mir hat sich ja sonst niemand dazu geäußert. Bei ihm ging es bei ein paar wenigen Tests scheinbar.
Bei mir gings gar nicht. Microsoft meint auch, dass es unter Win2000 nicht gehen sollte. Siehe meinen Post hier. (Wenn ich das richtig verstanden habe, und wenn MS Recht hat, mit dem was da steht.)

Von Luckie meine ich irgendwo mal gelesen zu haben, dass bei W2K das Problem besteht, das Admin-Token zu holen und es deswegen nicht geht. Aber ich würde mich ja freuen, wenn ich mich irre und es doch irgendwie geht.
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 23. Apr 2006, 14:16
ich werd noch verrückt.

Sobald ich ImpersonateLoggedOnUser aufgerufen habe - was kann ich dann alles machen?

Sagen wir mit LogonUserW habe ich davor den Administrator eingeloggt.

Jetzt könnte ich doch mit CreateProcess usw die Verwaltung (über Explorer) als Administrator starten. Aber das funktioniert nicht.
Ich habe nicht genug Rechte, wenn ich z.b. Computername ändern will.

Delphi-Quellcode:
if LogonUserW(PWideChar(LoginData.UserName), // UserName
             PWideChar(LoginData.DomainName), // Domäne oder lokaler Rechner
             PWideChar(LoginData.Password), // Password
             {<LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE>}LoginData.LogonType,
             {<LOGON32_PROVIDER_DEFAULT>,} LoginData.LogonProvider,
             AdminToken)

then begin
if ImpersonateLoggedOnUser(AdminToken)
if not CreateProcessAsUser(
      AdminToken, // client's access token
      'c:\windows\system32\cmd.exe', // file to execute
      nil,nil,nil,true,0,nil,nil,lpStartupInfo,lpProcessInformation) then
  ShowMEssage(SysErrorMessage(GetLastError))
->> Der Client besitzt ein erforderliches Recht nicht.

Muss ich da irgendwas machen?

Ich dachte nach ImpersonateLoggedOnUser, hat der Prozess (MainThread) alle Rechte des Benutzers ( hier Admin) ???

was mache ich falsch?


ich hab das Beispiel verwendet:
http://msdn.microsoft.com/library/de...ess_in_c__.asp

[edit=SirThornberry]Delphi-Tags gesetzt. Mfg, SirThornberry[/edit]
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 23. Apr 2006, 14:59
Kann es sein, dass man höhere Rechte benötigt, um in die Rolle eines tiefergelegenen Users zu schlüpfen?

Also z.b. Systemrechte, um als Administrator sich einzuloggen?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 5   « Erste     234 5      


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 05:57 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