Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Eseguire il processo corrente con l'utenza SYSTEM


In questo articolo viene applicata la procedura descritta nell'articolo ProcessAsSystem al processo corrente. Il trucco consiste nell'eseguire del codice all'inizio del sorgente del programma corrente (es. prima riga del sorgente del progetto). Il codice in questione manderÓ in esecuzione un'altra istanza del processo corrente stavolta per˛ con l'utenza SYSTEM (utilizzando la procedura RunAsSystem) e poi, in caso di successo, terminerÓ l'istanza corrente.

1. Implementazione

function RunSelfAsSystem: Boolean; var ProgName: array[0..260] of Char; DesktopName: string; atom: Integer; outValue, codError: Cardinal; begin // Result := False; atom := GlobalFindAtom('RunSelfAsSystem_ATOM'); if atom = 0 then //l'atom non esiste begin //creo l'atom atom := GlobalAddAtom('RunSelfAsSystem_ATOM'); //ricavo il nome dell'eseguibile corrente (il nome del mio programma in pratica) GetModuleFileName(0, ProgName, SizeOf(ProgName)); //ricavo il nome del Desktop DesktopName := 'winsta0\default'; //creo un'altra istanza del processo corrente come processo figlio di winlogon if RunAsSystem(ProgName, PAnsiChar(DesktopName), outValue, codError) then begin ExitProcess(1); end else begin GlobalDeleteAtom(atom); end; end else //l'atom esiste giÓ: vuol dire che il programma Ŕ in esecuzione come system begin GlobalDeleteAtom(atom); end; Result := True; end;

e di seguito un esempio di utilizzo

program SelfAsSystem; uses Forms, uMain in 'uMain.pas' {frmMain}, uUtils in 'uUtils.pas'; {$R *.res} begin //questa riga consente l'esecuzione del programma corrente come SYSTEM RunSelfAsSystem; // Application.Initialize; Application.CreateForm(TfrmMain, frmMain); Application.Run; end.

SelfAsSystem

 

 
 
Your Ad Here