Manipulador de proceso en c++

Páginas: 5 (1025 palabras) Publicado: 23 de julio de 2010
#include <stdio.h>/*I/O*/
#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...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Manipular procesos de fabricacion
  • C Mo Se Hacen Los Procesadores
  • Proceso De C Lculo De Cuotas
  • Manipular Texto En C#
  • PROCESO DE MANTENIMIENTO DE EQUIPOS DE C MPUTO
  • Proceso salud enfermedad pl c
  • EL PROCESO DE CONVERTIRSTE EN PERSONA C Hellip
  • c mo se hace el proceso del mani

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS