현재 프로세서의 상위 프로세서 알아내는 로직

현재 프로세서의 상위 프로세서 알아내는 로직...

 

PROCESSENTRY32를 이용하여 프로세서의 상위 프로세서의 정보를 알아낸후 다시한번

로직을 거쳐 프로세서의 이름을 알아내는 로직이다.

 

업무 중 현재 기동되는 Application의 부모 Process가 무엇인지 조사하여 처리할 내용이 있어 조사한 내용을 토대로

회사업무에 맞게 자체 수정한 내용임...

 

 

// 상위 프로세서의 PID를 알아내는 함수

BOOL GetParentProcessId(PROCESSENTRY32* pe32)
{
#ifdef SCMS_DEBUG_WEBDAV
 LogOut("scmsds02 GetParentProcessId Start\n");
#endif
 HANDLE hProcessSnap = NULL;
 //PROCESSENTRY32 pe32 = {0};
 DWORD pid = GetCurrentProcessId();

 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if(hProcessSnap == INVALID_HANDLE_VALUE)
 {
#ifdef SCMS_DEBUG_WEBDAV
  LogOut("scmsds02 GetParentProcessId CreateToolhelp32Snapshot INVALID_HANDLE_VALUE\n");
#endif
  return FALSE;
 }
#ifdef SCMS_DEBUG_WEBDAV
  LogOut("scmsds02 GetParentProcessId GetCurrentProcess [%d]\n", pid);
#endif

 //pe32.dwSize = sizeof(PROCESSENTRY32);

 if (Process32First(hProcessSnap, pe32))
 {
  DWORD Code = 0;
  do
  {
#ifdef SCMS_DEBUG_WEBDAV
   LogOut("scmsds02 GetParentProcessId GetParentProcessId [%d] name[%s]\n", pe32->th32ProcessID, pe32->szExeFile);
#endif
   if(pe32->th32ProcessID != pid)
   {
    continue;
   }
   CloseHandle(hProcessSnap);
 
   return TRUE;

  }while(Process32Next(hProcessSnap, pe32));
 }
 CloseHandle(hProcessSnap);

 return FALSE;
}

 

// 상위 프로세서의 이름을 조사하는 함수

BOOL GetParentProcessName(DWORD hPid, LPTSTR lpszProcessName)
{
#ifdef SCMS_DEBUG_WEBDAV
 LogOut("scmsds02 GetParentProcessName Start\n");
#endif
 HANDLE hProcessSnap = NULL;
 PROCESSENTRY32 pe32 = {0};

 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if(hProcessSnap == INVALID_HANDLE_VALUE)
 {
#ifdef SCMS_DEBUG_WEBDAV
  LogOut("scmsds02 GetParentProcessName CreateToolhelp32Snapshot INVALID_HANDLE_VALUE\n");
#endif
  return FALSE;
 }
#ifdef SCMS_DEBUG_WEBDAV
  LogOut("scmsds02 GetParentProcessName GetCurrentProcess [%d]\n", hPid);
#endif

 pe32.dwSize = sizeof(PROCESSENTRY32);

 if (Process32First(hProcessSnap, &pe32))
 {
  DWORD Code = 0;
  do
  {
#ifdef SCMS_DEBUG_WEBDAV
   LogOut("scmsds02 GetParentProcessName GetParentProcessId [%d] name[%s]\n", pe32.th32ProcessID, pe32.szExeFile);
#endif
   if(pe32.th32ProcessID != hPid)
   {
    continue;
   }
   strcpy(lpszProcessName, pe32.szExeFile);
   CloseHandle(hProcessSnap);
 
   return TRUE;

  }while(Process32Next(hProcessSnap, &pe32));
 }
 CloseHandle(hProcessSnap);

 return FALSE;
 
}

 

   //
   // 본 로직을 통하여 상위 부모 프로세서의 PID와 Name를 구할수 있다.
   //
   PROCESSENTRY32 pe32 = {0};
   pe32.dwSize = sizeof(PROCESSENTRY32);
   BOOL bRet = GetParentProcessId(&pe32);

#ifdef SCMS_DEBUG_WEBDAV
   LogOut("GetParentProcessHandle[%d] \n", pe32.th32ParentProcessID);
#endif
   TCHAR szParentName[MAX_PATH] = {0};
   bRet = GetParentProcessName(pe32.th32ParentProcessID, szParentName);
#ifdef SCMS_DEBUG_WEBDAV
   LogOut("GetParentProcessHandle[%d] name[%s]\n", pe32.th32ParentProcessID, szParentName);
#endif
/*
   char szParentModule[MAX_PATH]={0};

   GetModuleFileName(hParentProcess, szParentModule, sizeof(szParentModule));

#ifdef SCMS_DEBUG_WEBDAV
   LogOut("Start GetParentProcessHandle[%x] name[%s]\n", hParentProcess, szParentModule);
#endif
*/
   //
   //
   //

위로 스크롤