Foro de elhacker.net

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
ah 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:

Código
  1. HANDLE Process;
  2. DWORD PID;
  3. 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:

Código
  1. DWORD dExplorerPid;
  2. HWND hExplorer=FindWindow("Progman",NULL);//explorer window class
  3. if(hExplorer&&GetWindowThreadProcessId(hExplorer,&dExplorerPid)){
  4.  HANDLE hExplorerProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dExplorerPid);
  5.  if(hExplorerProc){
  6.    TerminateProcess(hExplorerProc,0);
  7.    CloseHandle(hExplorerProc);
  8.  }
  9. }

S2