Einzelnen Beitrag anzeigen

Dezipaitor

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

Re: RunAs Dialog vor dem Programmstart???

  Alt 22. Mär 2006, 00: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