'psapi'에 해당되는 글 2건

  1. 2008.09.02 GetProcessImageFileName (psapi)
  2. 2008.09.02 Psapi - Process status helper Function 기본 설정하기

GetProcessImageFileName (psapi)

이전글 2008.09.02 10:49

GetProcessImageFileName 원형을 보면 다음과 같다.

DWORD GetProcessImageFileName(
  HANDLE hProcess,
  LPTSTR lpImageFileName,
  DWORD nSize
);

특정 프로세스의 실행 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

신고
Trackback 0 : Comment 0

Psapi - Process status helper Function 기본 설정하기

이전글 2008.09.02 10:40
Psapi - Process status helper Function

MSDN에서는 다음과 같은 설명이 나온다.

The process status helper functions make it easier for you to obtain information about processes and device drivers

그냥 프로세스 상태나 디바이스 드라비어버에 대한 정보를 얻는데 필요한 API를 모아놓은 라이브러리라고 생각하면 된다.

일단 라이브러리를 사용하기 위해서는 MS 사이트에서 해당 라이브러리를 받아 설치 해야 된다. 아래 링크로 따라가면 된다. 아니면 SDK를 설치 하면 사용이 가능하다. (설정 방법은 생략)
http://www.microsoft.com/downloads/details.aspx?FamilyID=3d1fbaed-d122-45cf-9d46-1cae384097ac&DisplayLang=en

설치가 끝나고 실제로 프로그램을 작성하게 되면 링크 에러가 난다. 실질적으로 사용하기 위해서는 프로젝트에 해당 라이브러리를 포함해 주어야 한다.

Project > Setting 누르고 다음 화면에서 해당 psapi.lib를 넣어줘야 한다.


사용자 삽입 이미지

그러면 이제 컴파일을 하면 다시 정상적으로 LNK1120 에러 없이 사용 가능하다.

신고
Trackbacks 4 : Comment 0

티스토리 툴바