// 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





