Newsgroup: it.comp.programmare.win32
Titolo: Informazioni dei processi

In un programma stavo mettendo su un piccolo "clone" del task manager, 
niente piů che una lista dei processi con relativo pid, nome, path e utente.
La lista completa dei processi la ottengo con una chiamata alla 
EnumProcesses, poi di ciascun processo reperisco l'handle con OpenProcess.
Tutto okay, tranne che su alcuni servizi locali perň OpenProcess 
fallisce con errore di accesso negato, i diritti di accesso richiesti 
sono (PROCESS_QUERY_INFORMATION | PROCESS_VM_READ). Possibile? Uno di 
questi processi č (ad esempio) alg.exe che dovrebbe essere il servizio 
di routing e condivisione connessioni di rete.
Sbaglio strada?

Vincent Vega wrote:

Ho avuto anch'io un problema analogo, in quanto ho scritto un piccolo task
manager anch'io. Credo che il problema possa essere legato al fatto che il
tuo task manager non stia girando con i privilegi necessari
(administrator). Quando poi ho dovuto convertire il mio task manager in un
Windows Service non ho piů avuto questo problema...
Ciao.
  Fabio

 di routing e condivisione connessioni di rete.
Il problema è che Windows normalmente non permette l'accesso a processi
vitali di sistema; ad esempio, il tuo task manager dovrebbe fallire anche
con csrss.exe, che implementa il subsystem win32: se infatti Windows ti
permettesse di accedere a quel processo e tu lo facessi crashare
erroneamente o volontariamente, il sistema andrebbe in crash.
Questa protezione funziona anche quando è loggato un administrator, e un
trucco per aggirarla è quello di ottenere i privilegi di un debugger; io
tempo fa con questo sistema realizzai un simpatico removal tool in MFC che
è in grado di terminare qualsiasi processo, anche quei virus che fanno
finta di essere processi di sistema e che TaskManager non può terminare.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Sbaglio strada?
da brava papabile MVP dovrei dirti di usare WMI, che è bello e pulito e 
lento. Da persona che in ReactOS ha lasciato un pezzo di cuore, rinnovo 
l'invito a dare un'occhiata alle directory taskmgr, psapi ed epsapi nei 
sorgenti di ReactOS, per sentire che gusto ha la marmellata proibita
-- 
  < 
http://www.reactos.com/
 >  Open source clone of Windows NT. Current
      Don't stand, REACT!      version 0.2.4. C, C++ and ASM developers
                               and beta testers are welcome!

 sorgenti di ReactOS, per sentire che gusto ha la marmellata proibita
Sempre la piů gustosa...

 GetTokenInformation mi rende il SID.
Task Manager ci riesce sempre, permessi o meno. Chiediti come. Lě entra 
in gioco lo "sporco", e "trucco" perchč assolutamente non documentato e 
non documentabile (risposte che chiamerebbero solo altre domande, ecc.)


 non documentabile (risposte che chiamerebbero solo altre domande, ecc.)
In effetti, riesce sempre e comunque a fare una query mentre (ad 
esempio) non uccide i processi anche se ha i permessi. TerminateProcess 
non č certo cosě schizzinoso come task manager vuole lasciar ad intendere.

 manager vuole lasciar ad intendere. 
da Windows 2000 in poi, i processi con uno di questi nomi:
services.exe
smss.exe
winlogon.exe
csrss.exe
non possono essere terminati da Task Manager, mai, indipendentemente da 
quali permessi abbia (nota il messaggio d'errore diverso). Inoltre, non 
attiva mai il privilegio Debug


 attiva mai il privilegio Debug
Però in Windows XP il mio removal tool (che ha i permessi da debugger) è
stato in grado di terminare csrss.exe, che dovrebbe essere il subsystem
che implementa le API Win32, giusto?


 che implementa le API Win32, giusto?
Però, ora che ci faccio caso, tu ci dici che TaskManager *non attiva* il
privilegio Debug; a proposito: in quali casi può essere rifiutato ad un
processo tale permesso?


 attiva mai il privilegio Debug
Ho notato. Come ho notato che non chiude gran parte dei servizi per i 
quali non è possibile ottenere un handle del processo con tutti gli 
accessi senza i privilegi di debug.
Però quel figlio di buona madre riesce ad ottenere sempre e comunque 
l'utente del processo... mentre al sottoscritto pur con tutti i 
privilegi possibili il sistema risponde picche per tutti i processi che 
non mi appartengono e che non sono di SYSTEM.
Hai ragione, deve fare qualcosa di sporco.

 processo tale permesso?
Quando la policy non assegna i diritti di debug al il ruolo di 
appartenenza. Su XP non mi sembra si possa "granulare" i diritti piů di 
tanto, per cui occorre semplicemente sia nel gruppo Administrators.

 Hai ragione, deve fare qualcosa di sporco.
Per curiosità: che sistema hai provato ad utilizzare tu per ottenere il
nome dell'utente del processo?


 nome dell'utente del processo?
OpenProcessToken e GetTokenInformation (con parametro TokenUser).

non è certo così schizzinoso come task manager vuole lasciar ad intendere.
ma cercando bene si trova qualcosa in rete?
-- 
Scritto da Gordon
E-mail: tbeqba@_EVZHBIVZV_avpu.vg