Ver Mensaje Individual
  #9  
Antiguo 31-10-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.211
Reputación: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Ese código devuelve el Path completo con nombre del ejecutable buscado por su ID, sin necesidad de ejecutar como administrador.

Si lo ejecutas como SYSTEM no tendrás problemas pero si no es así, puedes no tener permisos para abrir procesos. Es bueno tener en mente ambos sistemas que por otra parte hacen lo mismo.

Tu código puede tener un desbordamiento de buffer fácil al no pasar el tamaño del mismo y usar strcpy. Puedes pasar el tamaño y usar strncpy o resumirlo de esta otra forma pero siempre teniendo en cuenta ese importante detalle:

Código PHP:
typedef bool (__stdcall PGETMODULEFILENAMEEX)(void*, void*, char*, unsigned long);

bool GetPathFromPID(int PIDchar *FullPathint Size)
{
   
HANDLE hProcess;
   
bool retval false;
   
HINSTANCE hLib;
   
PGETMODULEFILENAMEEX pGetModuleFileNameEx;

   
hProcess OpenProcess(PROCESS_QUERY_INFORMATION PROCESS_VM_READfalsePID);
   if(
hProcess){
      try{
         
hLib LoadLibrary("psapi.dll");
         if(
hLib){
            
pGetModuleFileNameEx = (PGETMODULEFILENAMEEX)GetProcAddress(hLib,"GetModuleFileNameExA");
            if(
pGetModuleFileNameEx)
              
retval pGetModuleFileNameEx(hProcess0FullPathSize);
         }
      }catch(...){}
      
CloseHandle(hProcess);
   }else{
      
//raise Exception.Create('El Programa No Se Encuentra Activo en Memoria');
   
}
   return 
retval;

Otro detalle importante. Si usas WinXP tu código corriendo como SYSTEM va bien. En Win7 o Win8 no verás la ventana, tienen protegido el modo.

Saludos.
Responder Con Cita