|
Nell' articolo "eseguire un processo con l'utenza
system" abbiamo visto come eseguire un programma con l'utenza SYSTEM. Ora
costruiremo un applicativo che si comporti proprio come explorer.exe e proveremo
poi a lanciarlo con l' utenza SYSTEM: utilizzeremo l'esempio per sfogliare ed
analizzare i punti di ripristino che si trovano a partire dalla cartella "C:\system
volume information". Come costruire tale applicativo??? Semplicissimo, basta
usare i componenti ShellTreeView e ShellListView presenti nel tab
SAMPLES della
paletta dei componenti di Delphi 7. Li si collega impostando
ShellListView1.ShellTreeView = ShellTreeView1 ed ecco ottenuta l' applicazione.
Ora bisogna fare in modo che l' applicazione restituisca anche "cartelle e
file
nascosti" e "file protetti di sistema" quando viene eseguita come
SYSTEM.
Dunqueee .... dando un'occhiata alla saga sulla
personalizzazione della shell di Windows si può vedere che tali
impostazioni corrispondono alle seguenti impostazioni del registro di sistema:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
;Visualizza Cartelle e File nascosti
"Hidden"=dword:00000001
;Visualizza file protetti di sistema
"ShowSuperHidden"=dword:00000001
Bene, basta quindi impostare tali valori di registro se il programma viene
eseguito come SYSTEM. Direi di mettere il tutto nel sorgente del progetto
corrispondente alla form su cui abbiamo disposto i 2 componenti ShellTreeView e
ShellListView opportunamente collegati tra loro.
program ShellExp;
uses
Forms,
Windows,
Registry,
SysUtils,
Main in 'Main.pas' {Form1};
{$R *.res}
procedure VisualizzaNascosti;
var
Registry: TRegistry;
UserName: array[0..80] of char;
nSize: DWord;
begin
nSize := 80;
GetUserName(UserName, nSize);
if LowerCase(UserName) <> 'system' then
Exit;
Registry := TRegistry.Create;
Registry.RootKey := HKEY_CURRENT_USER;
Registry.OpenKey('\software\microsoft\windows\currentversion\explorer\advanced\', False);
//cartelle e file nascosti
Registry.WriteInteger('hidden', 1);
//file protetti di sistema
Registry.WriteInteger('showsuperhidden', 1);
Registry.CloseKey;
Registry.Free;
end;
begin
Application.Initialize;
VisualizzaNascosti;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Ok, a questo punto prendiamo il programma
SystemProcess.exe, lanciamolo 
Inseriamo il nome dell'eseguibile (comprensivo di percorso
completo) nella casella di testo, un click su "esegui come system" e via 
Behh abbiamo lanciato in pratica una shell come SYSTEM
e ci si può così divertire a sfogliare cartelle e file che solitamente non si ha
la possibilità di vedere. Shell_exp |