// Wenn man einige Zeilen Programmcode im Namen eines anderen Users ausführen
// lassen will, kann man das mit dem folgenden Code bewerkstelligen.
// Um Programme in anderem Namen auszuführen, schauen Sie bitte unter
//
Anwendungen mit Anmeldung starten


// Getestet mit D4 unter XP

function RunAs(const User, Domain, Password: string): byte; 
var 
  hToken: THandle; 
begin 
  result := 2; 
  if LogonUser(PAnsiChar(User), PAnsiChar(Domain), PAnsiChar(Password), 
    LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE, 
    LOGON32_PROVIDER_DEFAULT, hToken) 
    then begin 
    if ImpersonateLoggedOnUser(hToken) 
      then begin 
      // --- hier Programmcode z.B.: ----------------- 
      if not deletefile('c:\windows\capture.ini') 
        then result := 1 
      else result := 0; 
      // --------------------------------------------- 
      RevertToSelf; // User zurücksetzen 
    end; 
  end; 
end; 
 
 
// Beispielaufruf 
 
function Computer: string; 
var 
  p: PChar; 
  d: DWord; 
begin 
  d := MAX_COMPUTERNAME_LENGTH + 1; 
  getmem(p, d); 
  GetComputername(p, d); 
  result := p; 
  freemem(p); 
end; 
 
procedure TForm1.Button10Click(Sender: TObject); 
var 
  s: string; 
begin 
  case RunAs('DBR', Computer, 'x123ab') of 
    2: s := 'Fehler bei "User", "Domain" oder "Password"'; 
    1: s := 'Fehler bei Ausführung des Codes'; 
  else s := 'OK'; 
  end; 
  showmessage(s); 
end;



 

Zugriffe seit 6.9.2001 auf Delphi-Ecke