elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Obtener ruta y nombre de archivo por el PID
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Obtener ruta y nombre de archivo por el PID  (Leído 5,914 veces)
Distorsion

Desconectado Desconectado

Mensajes: 238


15Hz ~ 20Hz


Ver Perfil
Obtener ruta y nombre de archivo por el PID
« en: 12 Enero 2011, 15:26 pm »

Buenas,

estoy obteniendo unos PIDs de proceso y me gustaría obtener la ruta y el nombre del archivo en modo usuario. He estado buscando pero no he visto una API que lo haga directo, alguien conoce alguna? O tendré que recorrer la lista de procesos buscando el proceso que coincida con el PID y buscarme la vida?


Gracias ;-)


En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Obtener ruta y nombre de archivo por el PID
« Respuesta #1 en: 12 Enero 2011, 16:12 pm »

Código
  1.  ProcessHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pid);
  2.  if (ProcessHandle)
  3.    if (GetModuleFileNameEx(ProcessHandle, NULL, FileName, sizeof FileName))
  4.         cout << FileName << endl;


En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Distorsion

Desconectado Desconectado

Mensajes: 238


15Hz ~ 20Hz


Ver Perfil
Re: Obtener ruta y nombre de archivo por el PID
« Respuesta #2 en: 12 Enero 2011, 16:28 pm »

Código:
#include <windows.h>
#include <psapi.h>
#include <tchar.h>

#include <stdio.h>


int main()
{
  HANDLE processHandle = NULL;
  TCHAR filename[MAX_PATH];

  processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 3468);
  if (processHandle) {
    if (GetModuleFileName(processHandle, filename, sizeof(filename))) {
printf("Ruta: %s\n", filename);
    }
    CloseHandle(processHandle);
  } else {
    printf("error\n");
  }
  getchar();
  return 0;
}

Ya lo intente con este código, pero no me devuelve una ruta ni nada, me falla la función :(

Igualmente de esta manera hay que hacer un openproces con lo que no podre abrir cualquier proceso, por ejemplo el lsa.exe y no podre obtener su ruta.

Para solucionar esto ultimo estoy pensando en lanzar la aplicación en modo system, que nos e como, o directamente sacar la ruta desde el driver, ya que el pid lo saco desde el driver y lo comunico a una aplicación en modo usuario.

Gracias por la ayuda.
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Obtener ruta y nombre de archivo por el PID
« Respuesta #3 en: 12 Enero 2011, 17:09 pm »

Claro que va a fallar. Tenes que usar GetModuleFileNameEx, no GetModuleFileName. De hecho ni siquiera son los mismos parámetros, lee la documentación de la MSDN.

Código
  1. DWORD WINAPI GetModuleFileNameEx(
  2.  __in      HANDLE hProcess,
  3.  __in_opt  HMODULE hModule,
  4.  __out     LPTSTR lpFilename,
  5.  __in      DWORD nSize
  6. );


Citar
To locate the file for a module that was loaded by another process, use the GetModuleFileNameEx function.

hModule [in, optional]

    A handle to the module. If this parameter is NULL, GetModuleFileNameEx returns the path of the executable file of the process specified in hProcess.



Citar
Igualmente de esta manera hay que hacer un openproces con lo que no podre abrir cualquier proceso, por ejemplo el lsa.exe y no podre obtener su ruta.

En el ejemplo yo puse PROCESS_ALL_ACCESS para escribir menos pero lo correcto es utilizar solo lo necesario, lo cual en el caso de GetModuleFileNameEx es PROCESS_QUERY_INFORMATION y PROCESS_VM_READ por lo que no debería haber demasiado problema con la mayoría de los procesos y en caso de haberlo te basta con ajustar los privilegios correctamente.

Por otro lado, obviamente existe una limitación al querer hacerlo desde modo usuario, pero eso es un tema aparte. La limitación la instalas vos desde un principio al querer hacerlo desde modo usuario.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Distorsion

Desconectado Desconectado

Mensajes: 238


15Hz ~ 20Hz


Ver Perfil
Re: Obtener ruta y nombre de archivo por el PID
« Respuesta #4 en: 13 Enero 2011, 02:01 am »

Es verdad :-[ No era la misma función :-[ Ya lo he solucionado, aunque los procesos en modo system no puedo listar su ubicación, no puedo usar openproces correctamente y nose como ajustar los privilegios de mi aplicación a system :-[

Lo he querido hacer en modo usuario por que no he encontrado la manera de hacerlo en el driver, tengo un el major de un driver hookeado y no he sido capaz de sacar el path de las aplicaciones que lo usan, solo sacar el PID con PsGetCurrentProcessId().

Gracias por la ayuda ;-)
En línea

Distorsion

Desconectado Desconectado

Mensajes: 238


15Hz ~ 20Hz


Ver Perfil
Re: Obtener ruta y nombre de archivo por el PID
« Respuesta #5 en: 13 Enero 2011, 15:11 pm »

Solucionado! Ya se ponerle privilegios de depuración, el problema es que tengo que darle al botón derecho y ejecutar como administrador, alguna solución a eso? Sino es un engorro si quiero automatizar la ejecución.

Gracias ;-)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Batch] obtener nombre de archivo (solucionado)
Scripting
corax 2 10,993 Último mensaje 23 Junio 2009, 20:29 pm
por corax
[RETO] Obtener nombre de archivo « 1 2 3 4 »
Programación Visual Basic
Psyke1 37 17,215 Último mensaje 15 Febrero 2011, 16:08 pm
por Psyke1
Obtener Ruta de archivo arrastrado a un Form (Drag & Drop)
.NET (C#, VB.NET, ASP)
adan-2994 2 5,892 Último mensaje 7 Agosto 2011, 19:18 pm
por adan-2994
[Sockets] Obtener Nombre del archivo
.NET (C#, VB.NET, ASP)
kub0x 3 3,063 Último mensaje 14 Abril 2012, 20:06 pm
por kub0x
Ruta de archivo vbs para lanzar un archivo bat
Scripting
Tonino 2 2,924 Último mensaje 17 Junio 2024, 13:53 pm
por Tonino
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines