Manipulador de proceso en c++
#include <windows.h>/*Para usar con Tlhelp32.h */
#include <Tlhelp32.h>/*CreateToolhelp32Snapshot, Process32First, Process32Next,PROCESSENTRY32*/
#include <string.h>/*/strlen */
/*CIERRA UN PROCESO MEDIANTE SU PID*/
int CierraPID(DWORD pid);
/*devuelde la descripción del error, a partir de su código*/
char *MensajeError(DWORDerror_num);
void main(int argc, char *argv[])
{
/*LISTA LOS PROCESOS ACTUALES*/
int ListarProcesos();
/*BUSCA EL PID DE UN PROCESO*/
int BuscaPid(char *nombre);
/*DA INFORMACION SOBRE UN PROCESO*/
int InfoProc(DWORD pid);
//para cojer la salida de algunas funciones
int datos;
printf("\n Process Administrator Tool 1.0 - Coded by Lympex");
printf("\nContact:lympex[at]gmail[dot]com & http://l-bytes.tk");
printf("\n----------------------------------------------------\n");
if(argc<=1)
{
printf("\n[!] Argumentos incorrectos");
printf("\n[+] Opciones:");
printf("\n + Listar procesos: -l");
printf("\n + Cerrar proceso mediante PID: -kpid pid");
printf("\n + Cerrar proceso mediante nombre: -kname nombre");
printf("\n+ Informacion sobre un proceso: -i pid");
printf("\n + Buscar PID: -pid nombre\n");
return;
}
//LISTAMOS LOS PROCESOS
if(!strcmp(argv[1],"-l"))
{
printf("\nPROCESO PID");printf("\n---------------------------------\n");ListarProcesos();
printf("\n");
return;
}
//CERRAR PROCESO MEDIANTE PID
if(!strcmp(argv[1],"-kpid")){
if(argc<2)
{
printf("\n[!] Debes indicar un PID\n");
}else{
CierraPID(atoi(argv[2]));
}
return;
}
//CERRAR PROCESO SEGÚN EL NOMBRE
if(!strcmp(argv[1],"-kname"))
{
if(argc<2)
{
printf("\n[!] Debes indicar un PID\n");
}else{
datos=BuscaPid(argv[2]);
if(datos!=-1)
{
CierraPID(datos);
}else{
printf("\n[!] No existe elproceso \x22%s\x22\n",argv[2]);
}
}
return;
}
//DA INFORMACIÓN SOBRE UN PROCESO
if(!strcmp(argv[1],"-i"))
{
if(argc<2)
{
printf("\n[!] Debes indicar un PID\n");
}else{
InfoProc(atoi(argv[2]));
}
return;
}
//CERRAR PROCESO SEGÚN EL NOMBRE
if(!strcmp(argv[1],"-pid"))
{
if(argc<2)
{
printf("\n[!] Debes indicar un PID\n");
}else{datos=BuscaPid(argv[2]);
if(datos!=-1)
{
printf("\n[+] PID de \x22%s\x22 --> %d\n",argv[2],datos);
}else{
printf("\n[!] No existe el proceso \x22%s\x22\n",argv[2]);
}
}
return;
}
printf("\n[!] Argumentos incorrectos\n");
}
/*LISTA LOS PROCESOS ACTUALES*/
int ListarProcesos()
{
char *mid(char *str1, unsigned int inicio, unsigned int fin);/*cargamos todos los procesos*/
HANDLE proc=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
/*para almacenar los datos de cada proceso*/
PROCESSENTRY32 datos;
/*para almacenar el código del error*/
int errorn;
/*para bucles*/
unsigned int i;
/*miramos si el handle se ha creado*/
if(proc==INVALID_HANDLE_VALUE)
{
printf("\n[!] Error al crear el handle\n");
return 1;
}Process32First(proc,&datos);
printf("\n%s",datos.szExeFile);
/*creamos un bucle cada vez que tenemos que mostrar un proceso, para saber cuántos espacios tenemos que colocar,
para mostrar los pid´s alineados*/
for(i=0;i<30-strlen(datos.szExeFile);i++)
{
printf("_");
}printf("%d",datos.th32ProcessID);
for(;;)
{
Process32Next(proc,&datos);
errorn=GetLastError();if(errorn>0)
{
if(errorn!=ERROR_NO_MORE_FILES)
{
printf("\n[!] Error %d - %s",errorn,MensajeError(errorn));
}
return 0;
}
if(strlen(datos.szExeFile)>=26)
{
printf("\n%s",mid(datos.szExeFile,0,26));
}else{
printf("\n%s",datos.szExeFile);
}
/*creamos un bucle cada vez que tenemos que mostrar un proceso, para saber cuántos espacios...
Regístrate para leer el documento completo.