Все дело в том что не для всех процессов такой подход работает,
например для smss.exe не работает. У этих процессов просто нет Module
так что и хендл не получить. Надо как-то иначе.
А через ToolHelp функции я делал тоже фактически (преимущество то что для 9x и NT совместимо).
bool GetFullPath(DWORD dwPID, TCHAR szFullPath[])
{
bool bRet;
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};
// Take a snapshot of all modules in the specified process.
hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == (HANDLE)-1)
return false;
me32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hModuleSnap, &me32))
{
strcpy(szFullPath,me32.szExePath);
bRet = true;
}
else
bRet = false;
// Do not forget to clean up the snapshot object.
CloseHandle (hModuleSnap);
return bRet;
} ---
|