Newsgroup: it.comp.lang.delphi
Titolo: delphi 7 Problema con Utente User

Ciao a tutti!!!Io ho un applicazione delphi che utilizza questo
componete TbtSvcListMan che fa la lista dei servizi attivi sul pc...se
entro come administrator della macchina il programma funziona
tranquillamente...mentre se invece sono user va in access
violation..molto probabilmente il motivo e che non ho accesso ai
servizi essendo user per non c'è un modo per saltare questo controllo
o apparire come administrator insomma un trucco per risolvere questo
problema..?
Grazie a tutti!!!
Billy

crea un servizio che fa 'sta cosa.
La tua app client chiede la lista al servizio e buonanotte.
I servizi girano sotto utente di sistema e quindi accedono a tutto
senza problemi.
Prima che lo chiedi:
1) i servizi sono descritti abbastanza bene nella guida
2) nel ng il tema è stato affrontato
3) a parte questo ng il web se ne cade di post su questo tema
Pax vobiscum
A.


Scusa ma non capisco..Puoi essere più chiaro?
La mia applicazione e un check di un servizio..nell'oncreate della
form lacio una procedura che mi crea la lista dei servizi...e li si
pianta SvcMan:=TbtSvcListMan.Create(nil); da access violation..non ce
uno modo prima che io faccia qst operazione di passare ad
administrator...per evitare che stecchi??
Grazie

> Scusa ma non capisco..Puoi essere più chiaro?
ti serve la lista dei servizi, giusto?
ma se non hai i grants di admin non puoi averla, giusto?
Quindi, LA TUA APP NON PUO' PRODURRE LA LISTA.
Quindi, ti serve un "qualcosa" che prepari la lista.
Il qualcosa è un SERVIZIO che girando sotto l'utente di sistema ha PER
FORZA i grants di admin.
A.


ok scusa la mia ignoranza...


Ma non estiste altro modo che creare un servizio...non si puo prima di
fare una determinata operazione cambiare l'utente da user ad
amministratore??

> Ma non estiste altro modo che creare un servizio...
perche'?
A.

 amministratore??
Si che c'e', puoi fare in modo che la tua applicazione impersoni un 
altro utente attraverso la funzione di windows ImpersonateLoggedUser().
Il problema di questo approccio e' che devi passare alla funzione la 
password di amministratore in chiaro, cosa non particolarmente piacevole 
dal punto di vista della sicurezza, perche' ti obbliga a tenere la 
password memorizzata da qualche parte, creando un possibile punto non 
sicuro sfruttabile per attaccare il pc.
A dire il vero, anche il servizio consigliato da Alberto deve 
memorizzare la password di amministratore, ma lo fa in modo piu' sicuro 
di quello che sapremmo fare tu o io! :)
Grosso modo il giro funziona cosi':
// codice non testato
var
   token : THANDLE;
   ...
begin
   ...
   LogonUser( 'Administrator', '.', password,
              LOGON32_LOGON_INTERACTIVE,
              LOGON32_PROVIDER_DEFAULT,
              token );
   try
     ImpersonateLoggedOnUser( token );
     ... qui puoi agire con i diritti di amministratore
   finally
     CloseHandle( token );
     RevertToSelf();
   end;
   ...
end;
So che con XP sp2 hanno irrigidito la sicurezza su alcune funzioni 
quindi non sono certo al 100% che funzioni. Nel caso, facci sapere! ;)
ciao
Giacomo

On 18 Ott, 19:48, Giacomo Degli Esposti

Funziona alla grande !!!!!!!

 password di amministratore in chiaro, cosa non particolarmente piacevole
infatti....
E poi, dove la scrivi?
Se la cabli e l'utente cambia la pw, ti tocca ricompialare.
Se non la cabli che fai, la scrivi in un file ini?
Se la propongo qua mi accompagnano alla porta in 2 secondi netti...
E io farei lo stesso se avessi una azienda e uno dei miei me la
proponesse.
Ma per favore.....
A.


si è vero...


Ognuno e' libero di fare come vuole...
Fosse per me, ad esempio, quella sorte sarebbe destinata a chi 
suggerisce di scrivere password in chiaro su .ini o peggio cablarle 
direttamente nei sorgenti!
Non c'e' nulla di male nella pratica di scrivere programmi che 
impersonano un utente diverso, e' piuttosto comune e a volte e' la 
soluzione piu' comoda se non l'unica realmente praticabile. Dipende 
tutto da che problema devi risolvere e in che ambito stai lavorando.
ciao
Giacomo

 tutto da che problema devi risolvere e in che ambito stai lavorando.
perdonami, ma non capisco come fai a conciliare cio che sostieni
riguardo le pw con il suggerimento di usare la impersonificazione. Per
farlo la tua app deve avere la pw e se non la cabli dovrai pur
scriverla da qualche parte...
Infine, continuo a non capire il PERCHE' di tanta avversione verso
l'utilizzo di un servizio...
Pax vobiscum.
A.

 l'utilizzo di un servizio...
Questo sarebbe da chiedere all'OP, lui ha solo chiesto se c'era un altro
modo ed io ho risposto. A me personalmente per il problema specifico 
l'idea del servizio mi e' parsa pure elegante perche' ti evita il 
grattacapo di gestire le password. Pensa un po'! :)
Tra l'altro, tornando alla domanda originaria... mi sembra strano che 
servissero i diritti di amministratore per veder l'elenco dei servizi: 
ho fatto una prova creandomi un utente semplice e da cmd riesco ad 
eseguire un "net start" che elenca i servizi senza problemi... mi sa ceh 
il componente usato dall'OP fa qualcosa di strano!
ciao
Giacomo

 servissero i diritti di amministratore per veder l'elenco dei servizi:
mi hai messo la pulce nell'orecchio e ho dato un rapido sguardo a
OpenSCManager...
Infatti, dovrebbe essere possibile ALMENO leggere l'elenco...
Siamo troppo abituati a credere che quello che troviamo sul web sia
meglio di cio che possiamo fare noi stessi, imho..
A.