Newsgroup: it.comp.programmare.win32
Titolo: Notifica creazione processo ...

Ciao a tutti,
volevo chiedere se c'è qualche messaggio (o altro) che notifica la creazione
di un nuovo processo nel sistema ... non mi sembra che ci sia uno hook con
apposita notifica.
Grazie.
--
- Carlo -
c.b...@libero.it

apposita notifica.
Credo che invece ci sia un qualche meccanismo di notifica.
Ricordo che qualcuno tempo fa risolse il problema.ù
Io non lo conoscevo e la soluzione che trovai era molto
brutta : scorrere con un timer la lista dei processi.
Non credo che neanche l'hook CBT riesca a darti informazioni
sui nuovi processi ma solo sulle nuove finestre.
--
CyberWalkie - walkietalkie(at)
libero.it

 sui nuovi processi ma solo sulle nuove finestre.
Sfogliando velocemente la doc prima di postare me ne sono accertato.
J. Richter mi saprebbe dire qualcosa? ;-)


J. Richter mi saprebbe dire qualcosa? ;-)
Forse si' (o forse no)...
--
CyberWalkie - walkietalkie(at)
libero.it

 Forse si' (o forse no)...
Scusa se rompo, mi scriveresti l'indirizzo che lo ho perso?


Scusa se rompo, mi scriveresti l'indirizzo che lo ho perso?
www.wintellect.com
Facci sapere che ti risponde...
--
CyberWalkie - walkietalkie(at)
libero.it

 Facci sapere che ti risponde...
Per ora questo ...
--
This is an automatically generated Delivery Status Notification.
Delivery to the following recipients failed.
 
je...@wintellect.com
--
Può essere un problema di mailbox full o che altro?


Per ora questo ...
A me hanno appena risposto con :
"We have received your question.  Depending on volume of
queries, we may not be able to answer your question by
e-mail.
Sincerely,
The Wintellect Team"
--
CyberWalkie - walkietalkie(at)
libero.it

 e-mail.
Mi sa di alibi per dire "non lo sappiamo" ...
In fondo mi può rispondere con un intero capitolo ma può essere sufficiente
un "Sorry, not possible under Win32" o con un "Take a look at XXX Win32 API
functions" ...
no?


Mi sa di alibi per dire "non lo sappiamo" ...
Quel messaggio ti arriva comunque come primo avviso che la
richiesta di informazioni gli e' arrivata (e' pressoche'
istantaneo), poi dopo un po' ti arriva la risposta vera e
propria.  A me e' sempre successo cosi' (un paio di volte mi ha
risposto Jeffrey Richter e una volta mi ha risposto Jeff
Prosise).  Richter e' abbastanza disponibile nel fornire
informazioni.
--
CyberWalkie - walkietalkie(at)
libero.it

 ha scritto nel messaggio
news:7Tl17.460$eB4....@news.infostrada.it...
: Ciao a tutti,
: volevo chiedere se c'č qualche messaggio (o altro) che notifica la
creazione
: di un nuovo processo nel sistema ... non mi sembra che ci sia uno hook con
: apposita notifica.
:
: Grazie.
:
: --
: - Carlo -
: 
c.b...@libero.it
Dovrebbe fare al caso tuo l'hook di shell (WH_SHELL).
Codificando all'interno di una dll, condividendo l'area dati opportuna,
funziona egregiamente.
Io, ad es.,  ho usato una hook procedure di questo tipo:
EXPORT_IMPORT LRESULT CALLBACK Dll_ShellProc (int nCode, WPARAM wParam,
LPARAM lParam)
{
  // In questo caso wParam č l'h. della finestra creata e lParam nulla di
significativo (cosě dice MSDN)
  if ((nCode == HSHELL_WINDOWCREATED) && (g_hWnd != NULL))
 {
    DWORD pid;
    GetWindowThreadProcessId((HWND)wParam, &pid); // Passo anche il Pid.
    // messaggio 'user' da inviare al chiamante con finestra di h. g_hWnd
    PostMessage (g_hWnd, WM_DLLSHELL_Notifica_Base + 1, wParam, (LPARAM)
pid);
  }
  // In questo caso wParam č l'h. della finestra distrutta e lParam nulla di
significativo (cosě dice MSDN)
  if ((nCode == HSHELL_WINDOWDESTROYED) && (g_hWnd != NULL))
 {
    DWORD pid;
    GetWindowThreadProcessId((HWND)wParam, &pid); // Passo anche il Pid.
    // come sopra: notifica al chiamante
    PostMessage(g_hWnd, WM_DLLSHELL_Notifica_Base + 2, wParam, (LPARAM)
pid);
  }
  return CallNextHookEx (g_hHookShell, nCode, wParam, lParam);
}
susanna

  if ((nCode == HSHELL_WINDOWCREATED) && (g_hWnd != NULL))
In questo modo puoi avere una notifica di tutti i processi
lanciati, ma che creano almeno una finestra, giusto ?
E per quelli senza finestre ?
--
CyberWalkie - walkietalkie(at)
libero.it

"CyberWalkie" <cyber...@cyberwalkie.cyb> ha scritto nel messaggio
news:3b47a6c2...@news.libero.it...
: In questo modo puoi avere una notifica di tutti i processi
: lanciati, ma che creano almeno una finestra, giusto ?
:
: E per quelli senza finestre ?
Non ci sono molte alternative: libreria ToolHelp per 95/98/ME e anche,
stranamente, 2000 ovvero le psapi per NT.
susanna

stranamente, 2000 ovvero le psapi per NT.
Si', su questo siamo d'accordo, difatti la mia soluzione
precedente era basata sullo scorrersi la lista dei processi a
istanti predeterminati.  Il problema e' capire se c'e' un modo
perche' la notifica di un nuovo processo arrivi alla nostra
applicazione (magari sotto forma di messaggio, broad-castato a
tutte le applicazioni dal sistema).
--
CyberWalkie - walkietalkie(at)
libero.it


Non ho provato, però se è vero, come affermato nel SDK
(vedi sotto), che una dll registrata come contenente una
global window class viene caricata ogni volta che un
processo parte, potresti registrarne una apposita,
inserire in questa il codice da eseguire ad ogni avvio
oppure registrare un messaggio e trasmetterlo dalla
DLLEntryPoint().
da WNDCLASSEX
<CUT>
...
<BLAH...BLAH...>
CS_GLOBALCLASS Allows an application to create a window of the class
regardless of the value of the hInstance parameter passed to the
CreateWindow or CreateWindowEx function. If you do not specify this style,
the hInstance parameter passed to the CreateWindow (or CreateWindowEx)
function must be the same as the hInstance parameter passed to the
RegisterClass function.
</BLAH>
<INTERESTING>
You can create a global class by creating the window class in a dynamic-link
library (DLL) and listing the name of the DLL in the registry under the
following keys:
HKEY_LOCAL_MACHINE\Software
\Microsoft\Windows NT\
CurrentVersion\Windows\APPINIT_DLLS
</INTERESTING>
<MORE INTERESTING>
Whenever a process starts, the operating system loads the specified DLLs in
the context of the newly started process before calling the main function in
that process. The DLL must register the class during its initialization
procedure and must specify the CS_GLOBALCLASS style.
</MORE INTERESTING>
...
</CUT>
Ciao Massimo
P.S. Sempre che qualche programma non abbia del codice
di start-up ad hoc per by-passare questa fase.

 </MORE INTERESTING>
Veramente una bella idea!  E potrebbe funzionare, penso.
Tuttavia mi pare di capire che non è supportata su Win95/98/Me, ma solo
nel mondo NT.
Beh.-.. sempre meglio di niente!! ^_^
Ciao! Davide DG.

 Dovrebbe fare al caso tuo l'hook di shell (WH_SHELL).
Ma questo non cattura soltanto la creazione di nuove finestre? Mi sembra un
metodo molto fallace per determinare la creazione di nuovi processi...
---
Bye! Lorenzo Lutti
http://antani.virtualave.net/

metodo molto fallace per determinare la creazione di nuovi processi...
infatti lo e'.. purtroppo m$ non ha formalizzato alcun meccanismo di
notifica x le applicazioni UM.. come ho avuto modo di dire
privatamente a Carlo non ci sono strategie valide/affidabili (solo
hacks basati su API hooking) x essere notificati  in UM della
creazione di un processo e/o thread.
M$ ha prefisto questi meccanismi solo per gli sviluppatori di drivers
(quindi parliano di codice in KM):
win9x :
a partire da win98 esiste un msg broadcast inviato alla control proc
di un VxD;
in win95 esiste solo relativamente ai VMM e vwin32 threads,
anche se un workaround e' ispezionare il THCB e quindi risalire a
process owner
win NT4/2k/XP:
PsSetCreateProcessNotifyRoutine che permette di registrare (fino a 4
IIRC) una callback..questa NCI presente sin da Nt 4 e' stata
ducumentata a partire dal DDK x win2k
Conclusioni, se esiste davvero la necessita' di monitorare (e
filtrare) la creazione di processi in ambiente win32 l'unica soluzione
IMHO  "legacy" e' scrivere un helper driver (VxD e .sys
rispettivamente) e una semplice interfaccia IPC via DeviceIOControl
(oppure via APC se non e' richiesta "interazione").
Saluti, 
Walker Boh

 notifica x le applicazioni UM..
E catturare la chiamata a CreateProcess()? Mi sembra di ricordare che
qualsiasi cosa crei un processo "normale" passa per quella API, e che sia
possibile intercettare la chiamata...


possibile intercettare la chiamata...
era quello che indicavo con "solo
hacks basati su API hooking"..
il prob e' che gli api hooks da UM e' che (o cmq gli altri moduli di
sistema) sono naturalmente system-wide solo under win9x dove i moduli
di sistema sono mappati nell'arena shared e quindi "automagicamente"
presenti in ogni address space anche se il processo x li mappa
esplicitamente.. under NT/2k come sai non esiste un'arena shared e
cio' implica che anche i moduli di sistema debbano essere
esplicitamente mappati dal loader o dal processo (caso a parte
ntoskrnl).. inoltre  anche superando questo problema la  separazione
degli address space complica non poco le cose visto che il code deve
essere necessariamente visibile in ogni address space.. diciamo che
puoi farlo iniettando codice nei processi di sistema f.e. csrss o smss
(sia ntdll e kernel32 sono cmq mappati a V.A. hardcoded) e tempo fa
avevo anche provato un hook interessante su CsrClientCallServer (
tutti i processi win32 si registrano via LPC con csrss).. la cosa in
effetti funziona.. ma il prob e' che si tratta di pratiche che vanno
bene per sperimentare ma davvero sconsigliabili x un applicazione
legacy.. diciamo black-magic =P
Saluti, 
 Walker Boh