// Wenn man einige
Zeilen Programmcode im Namen eines anderen Users ausführen 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