PDA

Ver la Versión Completa : Acceder a la lista de procesos


IZO
16-11-2006, 00:43:34
Hola, bueno soy nuevo en el foro y este es mi primer post, queria hacer una consulta he visto ciertos programas compilados en delphi que captan el funcionamiento (proceso) proceso de otro programa, quiera saber como puedo acceder a la lista de procesos que se estan llevando a cabo, y como puedo seguirlo desde mi programa(Form), gracias.

aeff
16-11-2006, 05:20:53
si a lo que te refieres es a lo que yo entendí, entonces te diré que puedes obtener los nombres de los procesos de la siguiente manera,

colocas primeramente un Listview con dos columnas, ID y Name del proceso:

implementas esta función para obtener los procesos, y sus dos descripciones anterior:


procedure GetMemoryProcess();
var
foto: Cardinal;
datos: tagPROCESSENTRY32;
r: Integer;
begin
r := 1;
datos.dwSize := sizeOF(tagPROCESSENTRY32);
foto := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
while Process32Next(foto, datos) do
begin
Form1.ListView1.Items.Add.Caption := IntToStr(datos.th32ProcessID);
Form1.ListView1.Items[r -1].SubItems.Add('EXE: ' + datos.szExeFile);
inc(r);
end;
CloseHandle(foto);
end;


ahora, para la parte de obtener los subprocesos o los modulos cargados por un proceso, puedes implementar esta otra función:


procedure GetModulesProcess(idProcess, tData: Integer);
var
foto: Cardinal;
datos: tagMODULEENTRY32;
r: Integer;
begin
foto := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, idProcess);
r := 1;
datos.dwSize := sizeOf(tagMODULEENTRY32);
while Module32Next(foto, datos) do
begin
case tData of
1: ShowMessage(IntToStr(datos.hModule));
2: ShowMessage(datos.szModule);
3: ShowMessage(datos.szExePath);
end;
inc(r);
end;
CloseHandle(foto);
end;


el primer parámetro de esta última funcion es para obtener los subprocesos del proceso que tenga el ID especificado, por ejemplo el 456, winlogon.exe...

y el segundo parámetro de esta función es para mostrar en un mensajito la descripción del subproceso:
1 => Handle
2 => Nombre
3 => Path + name

espero que te funcione...

IZO
17-11-2006, 02:02:21
Muchas gracias aeff me funciono muy bien, pero queria saber si no ahy forma de seguirlos,(alterarlos) u ocultarlos?.

aeff
17-11-2006, 02:18:58
yo agradecería enormemente que cuando logres hacer lo que pides en relación a los procesos, que me lo informes, yo también estoy por dar con ese truco...

seoane
17-11-2006, 02:25:34
:confused: Yo cuando alguien pregunta como se puede ocultar un proceso de la lista de procesos me hago siempre la misma pregunta: ¿por que?, y solo se me ocurre una respuesta, y no es nada bueno. Puedo entender que se quiera ocultar de la lista de aplicaciones, pero entenderéis que por motivos de seguridad no se pueda quitar de la de procesos.

;) Demostrarme que me equivoco y darme una razón legitima para ocultar un proceso.

IZO
17-11-2006, 16:46:12
Parece a mis 14 años me interese por la programacion soy muy new y hay algunas o muchas cosas de lemguaje pascal que no entiendo, pues estoy en el colegio y no tengo casi tiempo de leer los tutoriales que me descargo de internet, que dicho sea de paso entiendo el solo el 3% del tutorial que leo(no soy yo es el tutorial que no se explica bien),aprendi lo q se deberia saber lo basico de lo basico como declarar y crear hilos, etc,pero de hay hay tutos muy avanzados q no entiendo ( incluso no entiendo por que se pone^ y @en algunas cosantantes o variables) y busco un tutorial que compense el vacio (entre lo novato y lo experto), les contare que me interese por delhpi al ver un genial programa que captaba procesos y obtenia adress mediante escaneos y al cambiar los values de las adress alteraba su proceso y estaba compilado en delphi, por eso pedi una ayudita con la lista de procesos y a ocultarlos, para ir haciendome una idea de lo que en el fututo(quiza muy lejano) quiera crear un programa como el que les explique.

seoane
17-11-2006, 16:57:12
:D Pues a mi también me gustaría ver como hacia el programa para ocultar procesos. Hasta donde yo se, no hay ninguna forma de ocultar un proceso en WindowsXP, no así en windows95 que es algo trivial. La única forma sería, modificando el comportamiento del propio sistema operativo como lo haría un rootkit, pero delphi no es capaz de generar ese tipo de ejecutables.

De todas formas no te desanimes y empieza por aprender a andar antes de intentar correr ;)

yarielrs
25-04-2007, 18:48:51
Hola aeff tengo una duda en cuanto a la función GetModulesProcess que pusiste, el problema es que cuando le doy el ID del winlogon.exe o de cualquier otro proceso que se ejecuta como un proceso de sistema no me devuelve ningún resultado esto es en windows xp sp2 y mi cuenta es administrativa, entonces lo que quisiera que me dijeras es porque sucede esto porque a la verdad mira que me e ron pido tratando de averiguarlo pero no e podido dar con la respuesta.

Gracias de antemano y disculpa la molestia....

seoane
25-04-2007, 19:09:14
Yaeris, eso ocurre porque no tienes suficientes privilegios. Pero lo bueno de ser administrador es que tu mismo te los puedes conceder :D . La siguiente función permite elevar los privilegios de tu aplicación, de esta forma ya podrás usar la función.


function EnablePrivilege(PrivilegeName: PChar; Enable: Boolean): Boolean;
var
hToken: THandle;
Tp: TOKEN_PRIVILEGES;
Luid: TLargeInteger;
begin
Result:= FALSE;
if OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or
TOKEN_QUERY or TOKEN_READ, hToken) then
if LookupPrivilegeValue(nil,PrivilegeName,Luid) then
begin
Tp.PrivilegeCount:= 1;
Tp.Privileges[0].Luid:= Luid;
if Enable then
Tp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
else
Tp.Privileges[0].Attributes:= 0;
Result:= AdjustTokenPrivileges(hToken,FALSE,Tp,0,nil,PDWORD(nil)^);
CloseHandle(hToken);
end;
end;


Por ejemplo:

EnablePrivilege('SeDebugPrivilege', TRUE);
// Aqui usamos la funcion
GetModulesProcess(524,2);
EnablePrivilege('SeDebugPrivilege', FALSE);

yarielrs
25-04-2007, 20:31:44
Muchas gracias seoane por tu ayuda pues ahora la funcion si que me funciona a las mil maravillas.......