Código: Seleccionar todo
DWORD GetProcessID(String Module)
{
DWORD lista[1024];
HANDLE proceso;
char buffer[MAX_PATH + 1];
DWORD l;
int i;
String ProcessModule;
DWORD result = 0;
if (!EnumProcesses(lista, sizeof(lista), &l))
return 0;
l = l / sizeof(DWORD);
for (i = 0; i<int(l); i++)
{
proceso = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ ,FALSE,lista[i]);
if (proceso != NULL)
{
if (GetModuleFileNameEx(proceso,NULL,buffer,sizeof(buffer)-1))
{
ProcessModule = buffer;
if (ExtractFileName(AnsiString(ProcessModule).LowerCase()) == Module.LowerCase())
{
result = lista[i];
}
}
CloseHandle( proceso );
}
}
return result;
}
Les recomiendo hacer uso de esta función cuando estén con privilegios SYSTEM. Su único parámetro es el nombre del proceso (ej: "services.exe"). A esta altura, la mayoría debe pensar que le tengo mala voluntad al dichoso proceso services.exe, pero todo lo contrario, traten de detener el proceso y verán por qué lo prefiero.