bool CheckVersionXP()
{
//Windows 8 6.2
//Windows 7 6.1
//Windows Server 2008 R2 6.1
//Windows Server 2008 6.0
//Windows Vista 6.0
//Windows Server 2003 R2 5.2
//Windows Server 2003 5.2
//Windows XP 5.1
//Windows 2000 5.0
OSVERSIONINFOEX osvi;
BOOL bOsVersionInfoEx;
ZeroMemory(&osvi, sizeof(OSVERSIONINFOEX));
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
bOsVersionInfoEx = GetVersionEx((OSVERSIONINFO*)&osvi);
// win7的系统版本为NT6.1
if (/*VER_PLATFORM_WIN32_NT == osvi.dwPlatformId && */osvi.dwMajorVersion == 5/* && osvi.dwMinorVersion == 1*/)
{
return true;
}
else
{
return false;
}
}
void GetProcessNameByPid(DWORD processID, TCHAR *outString)
{
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
TCHAR proname[MAX_PATH] = { 0 };
GetModuleFileNameEx(hProcess, NULL, proname, MAX_PATH);
if (GetLastError() == ERROR_SUCCESS)
{
StrCpyW(outString, proname);
return;
}
else
{
if (!CheckVersionXP())
{
GetProcessImageFileName(hProcess, proname, MAX_PATH); //xp can't use this func
StrCpyW(outString, proname);
return;
}
StrCpyW(outString, proname);
return;
}
}
有的程序对其中某个函数做了保护,所以导致我们的程序不能获取到进程的完整路径名称。