|
In questo articolo viene esaminato un importante utilizzo della procedura
RemoteCreateProcess descritta nell'articolo
Remote CreateProcess il cui obiettivo č
creare un processo come figlio di un processo remoto. Specificando come processo
remoto ad esempio winlogon.exe (processo che viene eseguito con l'utenza
SYSTEM) il processo figlio ottenuto verrā automaticamente eseguito con l'utenza
SYSTEM.
1. Implementazione
function RunAsSystem(ProgName: PAnsiChar;
DesktopName: PAnsiChar;
var outValue: Cardinal;
var codError: Cardinal): Boolean;
begin
//
Result := False;
if not RemoteCreateProcess(PidProcesso('winlogon.exe'),
ProgName,
DesktopName,
outValue,
codError,
True) then
Exit;
Result := True;
end;
e di seguito un breve esempio di utilizzo
procedure TfrmMain.btnCreateClick(Sender: TObject);
var
PIDProcesso, error: Cardinal;
begin
if not RunAsSystem(PAnsiChar(edtNomeEXE.Text),
'winsta0\default',
PIDProcesso,
error) then
begin
mmoLog.Lines.Add('errore nella procedura');
end
else
begin
if error <> 0 then
mmoLog.Lines.Add('Errore nella creazione del processo figlio; Cod errore: ' +
IntToStr(error))
else
mmoLog.Lines.Add('Creato proceso figlio con il seguente PID: ' +
IntToStr(PIDProcesso));
end;
end;
ProcessAsSystem
|