void ParentProcess::init() { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot != INVALID_HANDLE_VALUE) { PROCESSENTRY32 selfPe; selfPe.dwSize = sizeof(PROCESSENTRY32); DWORD selfId = GetCurrentProcessId(); // Find the self process entry to get parent process id. if (getProcessEntry(&selfPe, selfId, hSnapshot)) { // Find the parent process entry DWORD parentId = selfPe.th32ParentProcessID; m_isInitialized = getProcessEntry(&m_parentPe, parentId, hSnapshot); } CloseHandle(hSnapshot); } }
BOOL WINAPI ArchMiscWindows::getParentProcessEntry(PROCESSENTRY32& entry) { // get the current process, so we can get parent PID PROCESSENTRY32 selfEntry; if (!getSelfProcessEntry(selfEntry)) { return FALSE; } // get entry from parent PID return getProcessEntry(entry, selfEntry.th32ParentProcessID); }
bool ParentProcess::isAlive() { bool result = false; if (m_isInitialized) { HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hSnapshot != INVALID_HANDLE_VALUE) { PROCESSENTRY32 currParentPe; DWORD parentId = m_parentPe.th32ProcessID; result = getProcessEntry(&currParentPe, parentId, hSnapshot); CloseHandle(hSnapshot); } } return result; }
BOOL WINAPI ArchMiscWindows::getSelfProcessEntry(PROCESSENTRY32& entry) { // get entry from current PID return getProcessEntry(entry, GetCurrentProcessId()); }