Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Dark Invader en 10 Octubre 2011, 12:18 PM

Título: API TerminateProcess function
Publicado por: Dark Invader en 10 Octubre 2011, 12:18 PM
El problema es que no se obtener el handle del proceso y la verdad es que he estado investigando bastante sobre el asunto...Os dejo la pagina de msdn para que lo mireis:http://msdn.microsoft.com/en-us/library/ms686714%28v=vs.85%29.aspx

como obtengo el handle de un proceso?me podriais poner un ejemplo sobre como ejecutar esta API?

Gracias a quien pueda echarme un cable  :P

Un saludo
Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 14:08 PM
OpenProcess (http://msdn.microsoft.com/en-us/library/ms684320%28v=vs.85%29.aspx).
Título: Re: API TerminateProcess function
Publicado por: dewolo en 10 Octubre 2011, 16:58 PM
si el proceso lo abris con OpenProcess, haces lo que tengas que hacer con el proceso y despues cerras el handle con closehandle  ::)

ah y antes de llamar a terminateprocess tenes que haber llamado a createprocess  ::)

Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 17:03 PM
Cita de: dewolo en 10 Octubre 2011, 16:58 PMah y antes de llamar a terminateprocess tenes que haber llamado a createprocess  ::)

No necesariamente, podes matar procesos creados por otros procesos.
Título: Re: API TerminateProcess function
Publicado por: Dark Invader en 10 Octubre 2011, 17:37 PM
Gracias a ambos,pero me estoy haciendo un lio...xD

A ver con openprocess abro un proceso,pero si resulta que el proceso esta abierto y quiero terminarlo ¿como lo hago?¿No teneis por ahi un ejemplo sencillo de como terminar uno? :-\

Un saludo
Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 17:38 PM
Vos preguntaste como obtener el HANDLE al proceso, ya sabias que funcion usar para terminarlo  ;)
Título: Re: API TerminateProcess function
Publicado por: Dark Invader en 10 Octubre 2011, 17:49 PM
Sí,la función para terminarlo sé cual es,pero entonces,el handle sería la función openprocess? La verdad es que no me está quedando claro esto xD

Te pongo un ejemplo que estoy leyendo:

HANDLE Process;
DWORD PID;
process=OpenProcess(PROCESS_ALL_ACCESS,false,PID);


Pero no sé si estará bien,supuestamente asi tengo el handle llamado process,no?

Perdona si es una tonteria lo que estoy diciendo  :xD

Un saludo
Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 17:51 PM
Si, con OpenProcess abris un HANDLE a un proceso existente pero el PID (Process Identifier) es un parametro de entrada asi que tenes que darle valor, no puede estar indefinido como ahora.
Título: Re: API TerminateProcess function
Publicado por: Dark Invader en 10 Octubre 2011, 18:09 PM
Pero entonces,¿como termino un proceso,como por ejemplo el explorer?Si el pid lo se entonces estoy terminando un proceso el cual yo he creado o tengo constancia de ello,en cambio,si por ejemplo,quiero eliminar el PID del explorer...¿Se tendria que buscar otra API para encontrarlo?  :huh:

un saludo
Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 18:14 PM
No, saber el PID no implica que lo hayas creado ni mucho menos.

Taking a Snapshot and Viewing Processes (http://msdn.microsoft.com/en-us/library/ms686701%28v=VS.85%29.aspx).
Título: Re: API TerminateProcess function
Publicado por: Dark Invader en 10 Octubre 2011, 20:51 PM
Puff...Bueno ok

Entonces mirare codigos e intentare hacer unas cuantas,asi no alargo mas el tema  :xD

Gracias de todas maneras EI  ;)

Un saludo
Título: Re: API TerminateProcess function
Publicado por: Eternal Idol en 10 Octubre 2011, 21:44 PM
De nada, ahi te deje el ejemplo de como enumerar los procesos en ejecucion (con lo cual obtenes cualquier PID), usando OpenProcess obtenes el HANDLE y despues usas TerminateProcess.
Título: Re: API TerminateProcess function
Publicado por: Karman en 11 Octubre 2011, 05:51 AM
un ejemplo (no probado) pero que en cualquier caso con ligeras modificaciones debería funcionar:

DWORD dExplorerPid;
HWND hExplorer=FindWindow("Progman",NULL);//explorer window class
if(hExplorer&&GetWindowThreadProcessId(hExplorer,&dExplorerPid)){
 HANDLE hExplorerProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dExplorerPid);
 if(hExplorerProc){
   TerminateProcess(hExplorerProc,0);
   CloseHandle(hExplorerProc);
 }
}


S2