GetProcessImageFileName 원형을 보면 다음과 같다.
특정 프로세스의 실행 exe 파일명을 얻어오는 함수이다. 하지만 이 함수를 사용하면 파일명만 얻어오는 것이 아니고 전체 절대 경로를 가지고 온다.
그래서 해당 파일명만 얻어 올수 있도록 문자열을 분리해야할 필요가 있다. 간단한 Sample 코드로 설명을 대신 한다.
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procInfo.dwProcessId);
if(hProc == NULL)
{
sprintf_s(pResult, max, "handle=%p PID=%u (exited)", procInfo.hProcess, procInfo.dwProcessId);
return S_OK;
}
// attempt to query the filename of the process
char exeName[MAX_PATH+1] = {0};
if(GetProcessImageFileName(hProc, exeName, MAX_PATH))
{
char *filePart = strrchr(exeName, '\\');
if(filePart) // strip off the leading device\path information
slen += sprintf_s(pResult+slen, max-slen, "\"%s\"", filePart+1);
else
slen += sprintf_s(pResult+slen, max-slen, "\"%s\"", exeName);
}
else
{
// couldn't get the filename, so display the handle value instead
slen += sprintf_s(pResult+slen, max-slen, "handle=%p", procInfo.hProcess);
}
추가로 3번째 인자로 2번째 인수의 길이를 넘겨주는데 가지고 올 파일명보다 적은 사이즈로 설정되면 파일명을 얻어오는데 실패한다. 그래서 해당 파일명을 저장할 곳을 충분히 크게 설정해 줘야 한다.
참조
http://blogs.msdn.com/joshpoley/archive/2008/01/24/custom-debugger-auto-expansion-tips.aspx