Pfad eines belibigen Prozesses

SpoileD

Grünschnabel
Hallo,
ich habe folgende frage ist es möglich den Pfad eines beliebigen laufenden Prozesses mit hielfe von C aus zulesen?

Das einzige was ich gefunden habe ist GetModuleFindName() was aber meines wissens nur den Pfad des eigenen Programms zurück gibt.

Danke für eure Hilfe

SpoileD
 
hier mal 2 funktionen, die ich schon öfter verwendete. beim aufruf von List() werden alle aktiven prozesse und der pfad aus gegeben.

C++:
BOOL ListProcesses()
{
	HANDLE hProcessSnap = 0;
	HANDLE hToken;
	PROCESSENTRY32 pe32 = {0};
	DWORD dwPriorityClass;
	BOOL bGotModule = FALSE;
	HANDLE hProcess;
	MODULEENTRY32 me32 = {0};
	hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if(hProcessSnap == INVALID_HANDLE_VALUE)
		return FALSE;
	pe32.dwSize = sizeof(PROCESSENTRY32);
	if(Process32First(hProcessSnap,&pe32))
	{
		do
		{
			ZeroMemory(&me32,sizeof(MODULEENTRY32));
			hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,pe32.th32ProcessID);
			bGotModule = GetProcessModule(pe32.th32ProcessID, pe32.th32ModuleID, &me32, sizeof(MODULEENTRY32)); 
			dwPriorityClass = GetPriorityClass(hProcess);
			cout<<"File name: "<<pe32.szExeFile<<endl;
			cout<<"Path: "<<me32.szExePath<<endl;
			CloseHandle(hProcess);
		}while(Process32Next(hProcessSnap,&pe32));
	}
	return bGotModule;
}
BOOL GetProcessModule(DWORD dwPID, DWORD dwModuleID, LPMODULEENTRY32 lpMe32, DWORD cbMe32)
{
	BOOL bRet = FALSE;
	BOOL bFound = FALSE;
	HANDLE hModuleSnap = NULL;
	MODULEENTRY32 me32 = {0};
	ZeroMemory(&me32,sizeof(MODULEENTRY32));
	hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
	if (hModuleSnap == INVALID_HANDLE_VALUE)
		return (FALSE);
	me32.dwSize = sizeof(MODULEENTRY32);
	if (Module32First(hModuleSnap, &me32))
	{
		do
		{
			if (me32.th32ProcessID == dwPID)
			{
				CopyMemory (lpMe32, &me32, cbMe32);
				bFound = TRUE;
			}
		}
		while (!bFound && Module32Next(hModuleSnap, &me32));
		bRet = bFound;
	}
	else
		bRet = FALSE;
	CloseHandle(hModuleSnap);
	return bRet;
}
 
Zurück